Skip to content

Commit 8b7b575

Browse files
committed
Fixed bug in exponential retry intervals
1 parent 958b91a commit 8b7b575

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ jobs:
2828
- name: Run tests
2929
run: |
3030
lua -v
31-
./tsc -f test/test_socket.lua test/test_nakama.lua test/test_satori.lua test/test_session.lua
31+
./tsc -f test/test_socket.lua test/test_nakama.lua test/test_satori.lua test/test_session.lua test/test_retries.lua

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
77

88
## [Unreleased]
99

10+
### Fixed
11+
- Creating an exponentially increasing retry interval caused a Lua error
12+
1013
## [3.3.0] - 2024-06-14
1114
### Fixed
1215
- Fixed issue with wrong argument name for `nakama.rpc_func`

nakama/util/retries.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ local M = {}
99
function M.exponential(attempts, interval)
1010
local delays = {}
1111
for i=1,attempts do
12-
delays[i] = (i > 1) and delays[i] * 2 or interval
12+
delays[i] = (i > 1) and delays[i - 1] * 2 or interval
1313
end
1414
return delays
1515
end

test/test_retries.lua

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
local retries = require "nakama.util.retries"
2+
local log = require "nakama.util.log"
3+
log.print()
4+
5+
context("Retries", function()
6+
7+
before(function() end)
8+
after(function() end)
9+
10+
test("create exponentially increasing intervals", function()
11+
local intervals = retries.exponential(5, 0.5)
12+
assert(#intervals == 5)
13+
assert(intervals[1] == 0.5)
14+
assert(intervals[2] == 1.0)
15+
assert(intervals[3] == 2.0)
16+
assert(intervals[4] == 4.0)
17+
assert(intervals[5] == 8.0)
18+
end)
19+
20+
test("create incrementally increasing intervals", function()
21+
local intervals = retries.incremental(5, 0.5)
22+
assert(#intervals == 5)
23+
assert(intervals[1] == 0.5)
24+
assert(intervals[2] == 1.0)
25+
assert(intervals[3] == 1.5)
26+
assert(intervals[4] == 2.0)
27+
assert(intervals[5] == 2.5)
28+
end)
29+
30+
test("create fixed intervals", function()
31+
local intervals = retries.fixed(5, 0.5)
32+
assert(#intervals == 5)
33+
assert(intervals[1] == 0.5)
34+
assert(intervals[2] == 0.5)
35+
assert(intervals[3] == 0.5)
36+
assert(intervals[4] == 0.5)
37+
assert(intervals[5] == 0.5)
38+
end)
39+
40+
test("create no intervals", function()
41+
local intervals = retries.none()
42+
assert(#intervals == 0)
43+
intervals = retries.exponential(0, 0)
44+
assert(#intervals == 0)
45+
intervals = retries.incremental(0, 0)
46+
assert(#intervals == 0)
47+
intervals = retries.fixed(0, 0)
48+
assert(#intervals == 0)
49+
end)
50+
end)
51+
52+

0 commit comments

Comments
 (0)