Below is the code. Can anyone tell how to implement retry logic when the 2 minutes http request get timed out. public static void sendOptyInfo(Set &lt;Id&gt; oppIdSet) {     try{         for (Opportunity opp: [SELECT id ,StageName, Account.Name  from Opportunity where id in: oppIdSet]){                          String jsonBody = JSON.serialize(new Wrapper(opp));             HttpRequest request = new HttpRequest();             HttpResponse response = new HttpResponse();                          Http http = new Http();                          Api_Request__c apiReq = new Api_Request__c();             apiReq.Opportunity__c = opp.id;             apiReq.Stage_Name__c = opp.StageName;             apiReq.Account_Name__c = opp.Account.Name;                          insert apiReq;                          request.setEndpoint('');             request.setHeader('Content-Type','application/json');              request.setMethod('GET');             request.setBody(jsonBody);             request.setTimeout(120000);             system.debug('opp json' +jsonBody);                          response = http.send(request);             if (response.getStatusCode() == 200) {                 System.debug('Response-' + response);                 Object results = (Object) JSON.deserializeUntyped(response.getBody());                              }         }              }     catch(System.CalloutException e){         System.debug('Error-' + e.getMessage());        } }
Most of what I have read about retry operations is that they are vaguely complicated and indepth. I have written the code below which seems to accomplish this without too much confusion - I'm wondering if there are any pitfalls I am not seeing here.   The class uses a top-level schedulable class, which calls a queueable class to make the callout, and if the callout is unsuccessful, it just schedules the top level class again five minutes later. After testing it appears this works indefinitely.   A simple string token, assigned at the first invocation, is also passed between the classes, and I have tested and found that the token does persist, even when runs are scheduled for a later time.   Thanks for helpful thoughts!  public class SelfServe implements Schedulable {      public String Token = null;      public void execute(SchedulableContext ctx) {                  RetrieveMachineDetails Job = new RetrieveMachineDetails();             Job.Token = Token;             System.enqueueJob(Job);      }           public class RetrieveMachineDetails implements Queueable, Database.AllowsCallouts {          public String Token = null;          public void execute(QueueableContext context){                                            Http http = new Http();             HttpRequest request = new HttpRequest();                             request.setEndpoint('https://app.endpoint.com/api');                     request.setMethod('POST');                     request.setHeader('Content-Type', 'application/json;charset=UTF-8');                                      request.setBody('{"query":  "$message_=\'METRIC\' &amp;&amp; $tier=\'customer\' "}');                                                                                                                                                                                    HttpResponse response = http.send(request);                            if (response.getStatusCode() == 200) {                 //do stuff                  }              else { //retry                  DateTime Dt = system.now().addMinutes(5);                                String day = string.valueOf(Dt.day());                                        String month = string.valueOf(Dt.month());                                          String hour = string.valueOf(Dt.hour());                                       String minute = string.valueOf(Dt.minute());                                                       String year = string.valueOf(Dt.year());                                   String ScheduledTime = '0 ' + minute + ' ' + hour + ' ' + day + ' ' + month + ' ?' + ' ' + year;                  SelfServe Job = new SelfServe();                     Job.Token = Token;                 System.schedule('SelfServe Job'+Dt, ScheduledTime, Job);              }         }        }  }
Using indefinite articles before adjectives: "Let's have a good breakfast" Let's have breakfast    Let's have a good breakfast      I've learned that indefinite articles aren't used before uncountable nouns, so why is a used before the adjective "good" here?    Is there an exception to the rules or is it wrong? What is syntax highlighting and how does it work? Polynomial rings in infinitely indeterminants How can we prove that (the set of all polynomials in infinitely non commutative indeterminants over $k$) is a ring, where $k$ is a ring with unity?   Adding two polynomials is a polynomial, but for commutativity  How can we show the following: $ax_1+bx_2=bx_2+ax_1$ (commutativity of addition) If we have finite number of variable it is easy to prove it, (we take the $n-1$ variables...), but what about the infinite number of variables?  Can someone give me a hint? I asked this question at stackoverflow and have been kindly redirected here.  I'd like to align some equations in Latex using the AMS packages. Each equation has two equal signs that need to be aligned. So something in the line of  A = B = C D = E = F   I've tried using the align-environment like this  \begin{align} A &amp;= B &amp;= C \\ D &amp;= E &amp;= F \end{align}   This works in principle (it aligns), however it adds ridiculously large spaces before the second equal sign in each line. But I just want the line to runs as if there was no additional alignment tab. Only when I replace for example "B" by "BBB" I want the equal sign before "F" to shift to right the exact amount of space.  Could anyone help me out on that one? It's kind of driving me crazy since I don't get the idea of that strange behavior and I just can't find any solution. Maybe alignat could help, but I don't really get how that environment works.  Cheers, Oliver There is a type and search drodown which will appear after user type in the value. I need to click on the dropdown which contains the name of the drop down field.   The problem here is that there is no unique attribute present (No unique class, no unique name) &amp; the id keeps on changing after every login so cannot take id also. Why don't self-closing script elements work? can we have a parallel earth made of dark matter? Mechanics around a rail tank wagon Load R package from character string I have End Date column and I want to add 14 Days on it auto when created, can I do it by workflow? Can I do it via jQuery. If yes how? if no how I can do it? Are there any non-green, non-artifact mana ramp cards? I have looked and can't seem to find any.  I have seen many green cards and some artifacts that do this, but nothing in Red, Blue, Black or White.    Are there any?  Note: By "Mana Ramp" I mean a card that generates mana, or one that lets you play more than one land per turn.  The end result, for example, would be on turn 4, playing a white only deck, I could tap more than 4 mana.  (Normally you only get one land per turn so a max of 4 mana on turn 4.) Find the limit: $\lim_\limits{x\to 0}{\frac{\left(1+x\right)^{1/x}-e}{x}}$ Find the limit: $$\lim_\limits{x\to 0}{\frac{\left(1+x\right)^{1/x}-e}{x}}$$   I have no idea what to do, but I thought that this is the limit of the derivative of $f(x)=\left(1+x\right)^{1/x}$, as $x$ tends to 0. Any help? Read integers from external data file to document programming code in LaTeX I am attempting to document my MATLAB programming code in LaTeX. For  this, I use the mcode package, which defines the MATLAB lstlisting  environment. With the commands  \newcommand{\mfileMain}{main.m} \newcommand{\mfileMainFirstNumber}{\mfileMainFirstLine} \newcommand{\mfileMainFirstLine}{26} \newcommand{\mfileMainLastLine}{33} \lstinputlisting[firstnumber=\mfileMainFirstNumber,                  firstline=\mfileMainFirstLine,                  lastline=\mfileMainLastLine]{\mfileMain}   I set the firstnumber, firstline and lastline parameters and use  them to import a piece of MATLAB code into the LaTeX document with  \lstinputlisting. However, when I add some code before the  \mfileMainFirstLine, in this case 26, the code is shifted and the  documentation is ruined. To fix this, I would have to update the line  numbers.  I am trying to fix this issue by adding 'tracers' to my MATLAB  program. I use the commands  filename=['lstinputlisting_line_numbers_' mfilename '.txt']; fileID=fopen(filename,'w');   to create a text file in which I store the line numbers for which the  code is documented using the command  dbstack_eval=dbstack;fprintf(fileID,[num2str(dbstack_eval.line+1) '\n']);   . This results in a text file lstinputlisting_line_numbers_.txt with  content for instance like  53 62 75 91   in case I want to document four parts of the MATLAB program main.m.  What I want to do from here is simply use this line number data in the  \lstinputlisting commands. Perhaps it is possible to store the line  numbers in the \newcommands{}{}, or perhaps there is a better, more  elegant way of doing it. In this way, the line numbers would update  automatically in case I add new lines of code. Consequently, my LaTeX  document would still be okay, saving me a lot of time not having to  update the line numbers myself.  A minimum working example could look like the following. The LaTeX file  main.tex would have the content  \documentclass[a4paper]{article} \usepackage[framed,numbered]{mcode}  % Data for the 'lstinputlisting' environments. \newcommand{\mfileMain}{main.m} \newcommand{\mfileMainFirstNumberA}{\mfileMainFirstLineA} \newcommand{\mfileMainFirstLineA}{WHAT SHOULD I PUT HERE?} \newcommand{\mfileMainLastLineA}{WHAT SHOULD I PUT HERE?} \newcommand{\mfileMainFirstNumberB}{\mfileMainFirstLineB} \newcommand{\mfileMainFirstLineB}{WHAT SHOULD I PUT HERE?} \newcommand{\mfileMainLastLineB}{WHAT SHOULD I PUT HERE?}  \begin{document}     In the code     \lstinputlisting[firstnumber=\mfileMainFirstNumberA,                      firstline=\mfileMainFirstLineA,                      lastline=\mfileMainLastLineA]{\mfileMain}     we calculate the ....       And in the code     \lstinputlisting[firstnumber=\mfileMainFirstNumberB,                      firstline=\mfileMainFirstLineB,                      lastline=\mfileMainLastLineB]{\mfileMain}     we calculate the..... \end{document}   . The MATLAB file main.m would have the content  %% Line number output.  filename=['lstinputlisting_line_numbers_' mfilename '.txt']; fileID=fopen(filename,'w');  dbstack_eval=dbstack;fprintf(fileID,[num2str(dbstack_eval.line+1) '\n']);     %% Input to be specified by user.  alpha=10; % PDE parameter. x_s=0; % Starting coordinate. x_e=1; % End coordinate. N_n=1e2+1; % (N)umber of (n)odes. N_ip=2; % (N)umber of (i)ntegration (p)oints.  dbstack_eval=dbstack;fprintf(fileID,[num2str(dbstack_eval.line+1) '\n']);     fclose(fileID); % Close the file 'fileID'. Are $\mathbb{Z_p},\mathbb{Q},\mathbb{R},\mathbb{C}$ above themselves vector space? Is a field above anoother field a vector space?   As for 1. we know that $\Bbb R^n$ is a vector space so in particular it is true for $n=1$  For 2. by definition a vector space is $V$ with addition and multiplication over a field, therefore 2 is true. Pipe sound output to file? I understand what a decibel is, the spirit of the question is different: why do we still use decibels (and with at least two different, context-specific definitions), if we have the feat of scientific notation? I dare to claim that the change of 5e-1 (which is a half) is much more readable than 3dB (voltage? power?). 1e6 is more clear than 120dB, etc. Just for the joy of adding? 3dB + 7dB is 10dB, but 2e5+3e6 is errrm... I see many new datasheets from the top vendors (LTC, for example) use the V/V convention, which is closer to the scientific notation than to the decibels. An upcoming paradigm change? Your content must have a ListView whose id attribute is 'android.R.id.list' Why does Ubuntu keep asking for my gmail password? I'm reading through a proof in my lecture notes:     Every convergent sequence of a metric space has a unique limit.   Suppose $\lim_{n \to \infty} x_n = l$ and $\lim_{n \to \infty} x_n = m.$ Then for every $\epsilon &gt; 0,$ there exists $N$ such that for every $n \geqslant N,$  $$d(l,m) \leqslant d(l,x_n) + d(x_n,m) &lt; \epsilon + \epsilon = 2 \epsilon. $$  So $(\star) \hspace{1mm} 0 \leqslant \frac{d(l,m)}{2} &lt; \epsilon \Longrightarrow \hspace{1mm} (\star^\prime) \hspace{1mm} \frac{d(l,m)}{2} =0 \Longrightarrow l = m.$  I can follow the proof up until the jump from $(\star)$ to $(\star^\prime)$. Why does $\frac{d(l,m)}{2}=0$? Expected Value of Local Maxima and Local Minima Recently I came across this question:  Given a random permutation of integers 1, 2, 3, …, n with a discrete, uniform distribution, find the expected number of local maxima. (A number is a local maxima if it is greater than the number before and after it.) For example, if n=4 and our permutation was 1, 4, 2, 3, then the # of local maxima would be 2 (both 4 and 3 are maxima). I know the answer will be (n+1)/3 .I wanted to know what will be the answer when we have to consider the local maxima as well as the local minima i.e Finding out the expected number of local maxima and local minima.