Skip to content

Commit 7fb80da

Browse files
author
Aleksandr Denisyuk
committed
Update sleeper to nanoseconds
1 parent 81b247e commit 7fb80da

File tree

8 files changed

+38
-48
lines changed

8 files changed

+38
-48
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ Configure BackOff and ExceptionClassifier to retry your business logic when an e
2626
<?php
2727

2828
use Orangesoft\BackOff\ExponentialBackOff;
29-
use Orangesoft\BackOff\Duration\Milliseconds;
29+
use Orangesoft\BackOff\Duration\Seconds;
3030
use Orangesoft\BackOff\Retry\ExceptionClassifier\ExceptionClassifier;
3131
use Orangesoft\BackOff\Retry\Retry;
3232

3333
$backOff = new ExponentialBackOff(
3434
maxAttempts: 3,
35-
baseTime: new Milliseconds(1_000),
36-
capTime: new Milliseconds(60_000),
35+
baseTime: new Seconds(1),
36+
capTime: new Seconds(60),
3737
);
3838

3939
$exceptionClassifier = new ExceptionClassifier([

docs/index.md

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ Configure base time, cap time, strategy and jitter. All options are required:
1515

1616
use Orangesoft\BackOff\Generator\Generator;
1717
use Orangesoft\BackOff\Duration\DurationInterface;
18-
use Orangesoft\BackOff\Duration\Milliseconds;
18+
use Orangesoft\BackOff\Duration\Seconds;
1919
use Orangesoft\BackOff\Strategy\ExponentialStrategy;
2020
use Orangesoft\BackOff\Jitter\NullJitter;
2121

2222
$generator = new Generator(
23-
baseTime: new Milliseconds(1_000),
24-
capTime: new Milliseconds(60_000),
23+
baseTime: new Seconds(1),
24+
capTime: new Seconds(60),
2525
strategy: new ExponentialStrategy(multiplier: 2),
2626
jitter: new NullJitter(),
2727
);
@@ -48,13 +48,13 @@ Enabled Jitter allows to add a noise for the back-off time. Turn on it is very s
4848

4949
use Orangesoft\BackOff\Generator\Generator;
5050
use Orangesoft\BackOff\Duration\DurationInterface;
51-
use Orangesoft\BackOff\Duration\Milliseconds;
51+
use Orangesoft\BackOff\Duration\Seconds;
5252
use Orangesoft\BackOff\Strategy\ExponentialStrategy;
5353
use Orangesoft\BackOff\Jitter\EqualJitter;
5454

5555
$generator = new Generator(
56-
baseTime: new Milliseconds(1_000),
57-
capTime: new Milliseconds(60_000),
56+
baseTime: new Seconds(1),
57+
capTime: new Seconds(60),
5858
strategy: new ExponentialStrategy(multiplier: 2),
5959
jitter: new EqualJitter(),
6060
);
@@ -71,14 +71,14 @@ Pass the duration time to Sleeper as below:
7171

7272
use Orangesoft\BackOff\Generator\Generator;
7373
use Orangesoft\BackOff\Duration\DurationInterface;
74-
use Orangesoft\BackOff\Duration\Milliseconds;
74+
use Orangesoft\BackOff\Duration\Seconds;
7575
use Orangesoft\BackOff\Strategy\ExponentialStrategy;
7676
use Orangesoft\BackOff\Jitter\NullJitter;
7777
use Orangesoft\BackOff\Sleeper\Sleeper;
7878

7979
$generator = new Generator(
80-
baseTime: new Milliseconds(1_000),
81-
capTime: new Milliseconds(60_000),
80+
baseTime: new Seconds(1),
81+
capTime: new Seconds(60),
8282
strategy: new ExponentialStrategy(multiplier: 2),
8383
jitter: new NullJitter(),
8484
);
@@ -88,21 +88,10 @@ $sleeper = new Sleeper();
8888
/** @var DurationInterface $duration */
8989
$duration = $generator->generate(attempt: 3);
9090

91-
// usleep(8000000)
91+
// time_nanosleep(8, 0)
9292
$sleeper->sleep($duration);
9393
```
9494

95-
Configure base time and cap time with microseconds precision because Sleeper converts the duration to integer before sleep and truncates numbers after point. For example 1 nanosecond is 0.001 microseconds, so it would to converted to 0:
96-
97-
```text
98-
+--------------+-------------+
99-
| Nanoseconds | 1 |
100-
| Microseconds | 0.001 |
101-
| Milliseconds | 0.000001 |
102-
| Seconds | 0.000000001 |
103-
+--------------+-------------+
104-
```
105-
10695
Use nanoseconds for high-precision calculations.
10796

10897
## Use BackOff
@@ -114,15 +103,15 @@ BackOff accepts Generator and Sleeper dependencies:
114103

115104
use Orangesoft\BackOff\Generator\Generator;
116105
use Orangesoft\BackOff\Duration\DurationInterface;
117-
use Orangesoft\BackOff\Duration\Milliseconds;
106+
use Orangesoft\BackOff\Duration\Seconds;
118107
use Orangesoft\BackOff\Strategy\ExponentialStrategy;
119108
use Orangesoft\BackOff\Jitter\NullJitter;
120109
use Orangesoft\BackOff\Sleeper\Sleeper;
121110
use Orangesoft\BackOff\BackOff;
122111

123112
$generator = new Generator(
124-
baseTime: new Milliseconds(1_000),
125-
capTime: new Milliseconds(60_000),
113+
baseTime: new Seconds(1),
114+
capTime: new Seconds(60),
126115
strategy: new ExponentialStrategy(multiplier: 2),
127116
jitter: new NullJitter(),
128117
);
@@ -146,14 +135,14 @@ Use back-off decorators to quick instance. For example [ExponentialBackOff](../s
146135
<?php
147136

148137
use Orangesoft\BackOff\ExponentialBackOff;
149-
use Orangesoft\BackOff\Duration\Milliseconds;
138+
use Orangesoft\BackOff\Duration\Seconds;
150139
use Orangesoft\BackOff\Jitter\NullJitter;
151140
use Orangesoft\BackOff\Sleeper\Sleeper;
152141

153142
$backOff = new ExponentialBackOff(
154143
maxAttempts: 3,
155-
baseTime: new Milliseconds(1_000),
156-
capTime: new Milliseconds(60_000),
144+
baseTime: new Seconds(1),
145+
capTime: new Seconds(60),
157146
multiplier: 2,
158147
jitter: new NullJitter(),
159148
sleeper: new Sleeper(),
@@ -176,13 +165,13 @@ Configure BackOff and ExceptionClassifier to retry your business logic when an e
176165
<?php
177166

178167
use Orangesoft\BackOff\ExponentialBackOff;
179-
use Orangesoft\BackOff\Duration\Milliseconds;
168+
use Orangesoft\BackOff\Duration\Seconds;
180169
use Orangesoft\BackOff\Retry\ExceptionClassifier\ExceptionClassifier;
181170
use Orangesoft\BackOff\Retry\Retry;
182171

183172
$backOff = new ExponentialBackOff(
184173
maxAttempts: 3,
185-
baseTime: new Milliseconds(1_000),
174+
baseTime: new Seconds(1),
186175
);
187176

188177
$exceptionClassifier = new ExceptionClassifier([

src/ConstantBackOff.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Orangesoft\BackOff;
66

77
use Orangesoft\BackOff\Duration\DurationInterface;
8-
use Orangesoft\BackOff\Duration\Milliseconds;
8+
use Orangesoft\BackOff\Duration\Seconds;
99
use Orangesoft\BackOff\Generator\Generator;
1010
use Orangesoft\BackOff\Jitter\JitterInterface;
1111
use Orangesoft\BackOff\Jitter\NullJitter;
@@ -19,8 +19,8 @@ final class ConstantBackOff implements BackOffInterface
1919

2020
public function __construct(
2121
int|float $maxAttempts = 3,
22-
DurationInterface $baseTime = new Milliseconds(1_000),
23-
DurationInterface $capTime = new Milliseconds(60_000),
22+
DurationInterface $baseTime = new Seconds(1),
23+
DurationInterface $capTime = new Seconds(60),
2424
JitterInterface $jitter = new NullJitter(),
2525
SleeperInterface $sleeper = new Sleeper(),
2626
) {

src/DecorrelatedBackOff.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Orangesoft\BackOff;
66

77
use Orangesoft\BackOff\Duration\DurationInterface;
8-
use Orangesoft\BackOff\Duration\Milliseconds;
8+
use Orangesoft\BackOff\Duration\Seconds;
99
use Orangesoft\BackOff\Generator\Generator;
1010
use Orangesoft\BackOff\Jitter\NullJitter;
1111
use Orangesoft\BackOff\Sleeper\Sleeper;
@@ -18,8 +18,8 @@ final class DecorrelatedBackOff implements BackOffInterface
1818

1919
public function __construct(
2020
int|float $maxAttempts = 3,
21-
DurationInterface $baseTime = new Milliseconds(1_000),
22-
DurationInterface $capTime = new Milliseconds(60_000),
21+
DurationInterface $baseTime = new Seconds(1),
22+
DurationInterface $capTime = new Seconds(60),
2323
int $multiplier = 3,
2424
SleeperInterface $sleeper = new Sleeper(),
2525
) {

src/ExponentialBackOff.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Orangesoft\BackOff;
66

77
use Orangesoft\BackOff\Duration\DurationInterface;
8-
use Orangesoft\BackOff\Duration\Milliseconds;
8+
use Orangesoft\BackOff\Duration\Seconds;
99
use Orangesoft\BackOff\Generator\Generator;
1010
use Orangesoft\BackOff\Jitter\JitterInterface;
1111
use Orangesoft\BackOff\Jitter\NullJitter;
@@ -19,8 +19,8 @@ final class ExponentialBackOff implements BackOffInterface
1919

2020
public function __construct(
2121
int|float $maxAttempts = 3,
22-
DurationInterface $baseTime = new Milliseconds(1_000),
23-
DurationInterface $capTime = new Milliseconds(60_000),
22+
DurationInterface $baseTime = new Seconds(1),
23+
DurationInterface $capTime = new Seconds(60),
2424
int $multiplier = 2,
2525
JitterInterface $jitter = new NullJitter(),
2626
SleeperInterface $sleeper = new Sleeper(),

src/LinearBackOff.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Orangesoft\BackOff;
66

77
use Orangesoft\BackOff\Duration\DurationInterface;
8-
use Orangesoft\BackOff\Duration\Milliseconds;
8+
use Orangesoft\BackOff\Duration\Seconds;
99
use Orangesoft\BackOff\Generator\Generator;
1010
use Orangesoft\BackOff\Jitter\JitterInterface;
1111
use Orangesoft\BackOff\Jitter\NullJitter;
@@ -19,8 +19,8 @@ final class LinearBackOff implements BackOffInterface
1919

2020
public function __construct(
2121
int|float $maxAttempts = 3,
22-
DurationInterface $baseTime = new Milliseconds(1_000),
23-
DurationInterface $capTime = new Milliseconds(60_000),
22+
DurationInterface $baseTime = new Seconds(1),
23+
DurationInterface $capTime = new Seconds(60),
2424
JitterInterface $jitter = new NullJitter(),
2525
SleeperInterface $sleeper = new Sleeper(),
2626
) {

src/Sleeper/Sleeper.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ final class Sleeper implements SleeperInterface
1010
{
1111
public function sleep(DurationInterface $duration): void
1212
{
13-
$microseconds = (int) $duration->asMicroseconds();
13+
$seconds = (int) $duration->asSeconds();
14+
$nanoseconds = (int) $duration->asNanoseconds() - $seconds * 1_000_000_000;
1415

15-
usleep($microseconds);
16+
time_nanosleep($seconds, $nanoseconds);
1617
}
1718
}

tests/Sleeper/SleeperTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ public function testSleep(): void
1717

1818
$timer = new Timer();
1919

20-
$milliseconds = new Nanoseconds(1_000);
20+
$nanoseconds = new Nanoseconds(1_000);
2121

2222
$timer->start();
2323

24-
$sleeper->sleep($milliseconds);
24+
$sleeper->sleep($nanoseconds);
2525

2626
$duration = $timer->stop();
2727

0 commit comments

Comments
 (0)