annotate util/smqueue.lua @ 14202:fa492a9d1a20

Merge 13.0->trunk
author Matthew Wild <mwild1@gmail.com>
date Wed, 27 May 2026 14:57:41 +0100
parents 73903352de86
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
1 -- This file is generated from teal-src/prosody/util/smqueue.tl
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12058
diff changeset
2 local queue = require("prosody.util.queue");
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
4 local lib = { smqueue = {} }
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
5
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
6 local smqueue = lib.smqueue;
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 function smqueue:push(v)
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 self._head = self._head + 1;
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 assert(self._queue:push(v));
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 end
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 function smqueue:ack(h)
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 if h < self._tail then
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
16
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 return nil, "tail"
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 elseif h > self._head then
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
19
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 return nil, "head"
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 end
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 local acked = {};
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 self._tail = h;
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local expect = self._head - self._tail;
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 while expect < self._queue:count() do
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 local v = self._queue:pop();
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
28 if not v then
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
29 return nil, "pop"
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
30 end
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 table.insert(acked, v);
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 end
13994
8baaefc4db79 util.smqueue: Minor reformatting for code style, add some comments
Matthew Wild <mwild1@gmail.com>
parents: 12975
diff changeset
33
14198
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
34 self:_call_checkpoints(h);
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
35
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 return acked
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
39 function smqueue:count_unacked()
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
40 return self._head - self._tail
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
41 end
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
43 function smqueue:count_acked()
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
44 return self._tail
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
45 end
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
47 function smqueue:resumable()
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
48 return self._queue:count() >= (self._head - self._tail)
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
49 end
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
51 function smqueue:resume()
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
52 return self._queue:items()
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
53 end
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
55 function smqueue:consume()
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
56 return self._queue:consume()
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
57 end
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58
12058
4860da718e87 util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 12055
diff changeset
59 function smqueue:table()
4860da718e87 util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 12055
diff changeset
60 local t = {};
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
61 for i, v in self:resume() do
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
62 t[i] = v;
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
63 end
12058
4860da718e87 util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 12055
diff changeset
64 return t
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 end
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66
14001
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
67 function smqueue:add_checkpoint(cb, ud)
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
68 table.insert(self._checkpoints, { self._head; cb; ud });
14001
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
69 end
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
70
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
71 function smqueue:_call_checkpoints(h)
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
72 local checkpoints = self._checkpoints;
14198
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
73 local c = checkpoints[1];
14001
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
74
14198
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
75 while c and h >= c[1] do
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
76 table.remove(checkpoints, 1);
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
77 local cb, ud = c[2], c[3];
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
78 cb(ud);
73903352de86 util.smqueue: Refactor checkpoint logic and add tests
Matthew Wild <mwild1@gmail.com>
parents: 14017
diff changeset
79 c = checkpoints[1];
14001
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
80 end
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
81 end
df970d2dac45 util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents: 13994
diff changeset
82
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
83 local function freeze(q)
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
84 return { head = q._head; tail = q._tail }
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
85 end
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
87 local smqueue_mt = { __name = "smqueue"; __index = smqueue; __len = smqueue.count_unacked; __freeze = freeze }
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 function lib.new(size)
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 assert(size > 0);
14017
1e01b91cf94d util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents: 14008
diff changeset
91 return setmetatable({ _head = 0; _tail = 0; _queue = queue.new(size, true); _checkpoints = {} }, smqueue_mt)
12055
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 end
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93
daced16154fa util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 return lib