@@ -114,22 +114,38 @@ private function fetchResult(int|float|null $timeout = null): void
114114 (new \Temporal \Api \Update \V1 \WaitPolicy ())->setLifecycleStage (LifecycleStage::StageCompleted->value ),
115115 );
116116
117- try {
118- $ response = $ this ->client ->PollWorkflowExecutionUpdate (
119- $ request ,
120- $ timeout === null ? null : $ this ->client ->getContext ()->withTimeout ($ timeout ),
121- );
122- } catch (TimeoutException |CanceledException $ e ) {
123- throw WorkflowUpdateRPCTimeoutOrCanceledException::fromTimeoutOrCanceledException ($ e );
124- }
125117
126- // Workflow Uprate accepted
127- $ result = $ response ->getOutcome ();
128- \assert ($ result !== null );
118+ $ context = $ timeout === null
119+ ? $ this ->client ->getContext ()
120+ : $ this ->client ->getContext ()->withTimeout ($ timeout );
121+ $ deadline = $ context ->getDeadline ();
122+
123+ // Convert request timeout into deadline
124+ $ deadline === null or $ context = $ context ->withDeadline ($ deadline );
125+
126+ do {
127+ try {
128+ $ response = $ this ->client ->PollWorkflowExecutionUpdate ($ request , $ context );
129+ } catch (TimeoutException |CanceledException $ e ) {
130+ throw WorkflowUpdateRPCTimeoutOrCanceledException::fromTimeoutOrCanceledException ($ e );
131+ }
132+
133+ // Workflow Uprate accepted
134+ $ result = $ response ->getOutcome ();
135+
136+ /**
137+ * Retry the request.
138+ *
139+ * TimeoutException will be thrown in {@see \Temporal\Client\GRPC\BaseClient::call()} method
140+ * because the deadline is provided in the context.
141+ * That's why the deadline condition is not checked here.
142+ */
143+ } while ($ result === null );
129144
130145 // Accepted with result
131- if ($ result ->getSuccess () !== null ) {
132- $ this ->result = EncodedValues::fromPayloads ($ result ->getSuccess (), $ this ->converter );
146+ $ success = $ result ->getSuccess ();
147+ if ($ success !== null ) {
148+ $ this ->result = EncodedValues::fromPayloads ($ success , $ this ->converter );
133149 return ;
134150 }
135151
0 commit comments