Skip to content

Commit 2e26cb6

Browse files
committed
More changes.
1 parent 7d69742 commit 2e26cb6

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,31 @@ public function __construct(ClientInterface $client = null, array $options = [])
4949
*/
5050
public function registerSubscribers(EventDispatcherInterface $eventDispatcher)
5151
{
52-
// Retry 500 and 503 responses that were sent as GET and HEAD requests.
5352
$filter = RetrySubscriber::createChainFilter([
54-
// Does early filter to force non-idempotent methods to NOT be retried.
5553
RetrySubscriber::createIdempotentFilter(),
56-
// Performs the last check, returning ``true`` or ``false`` based on
57-
// if the response received a 500 or 503 status code.
58-
RetrySubscriber::createStatusFilter([500, 503])
54+
RetrySubscriber::createStatusFilter([427, 500, 503])
55+
]);
56+
57+
$retry = new RetrySubscriber([
58+
'filter' => $filter,
59+
'delay' => function ($number, $event) {
60+
/** @var \GuzzleHttp\Message\Response $response */
61+
if (null !== $response = $event->getResponse() && $event->getResponse()->getStatusCode() === 427) {
62+
$time = microtime(true);
63+
$resetAt = (int) $response->getHeader('X-RateLimit-Reset');
64+
65+
$sleep = $resetAt - $time;
66+
67+
if ($sleep >= 0) {
68+
return $sleep * 1000;
69+
}
70+
}
71+
72+
return 0;
73+
},
74+
'max' => 3
5975
]);
6076

61-
$retry = new RetrySubscriber(['filter' => $filter]);
6277
$this->client->getEmitter()->attach($retry);
6378
}
6479

0 commit comments

Comments
 (0)