Mercurial > prosody-hg
annotate util/smqueue.lua @ 14079:0ea2848d7771
prosodyctl: Only import "socket" in the root of the module
| author | Link Mauve <linkmauve@linkmauve.fr> |
|---|---|
| date | Fri, 30 Jan 2026 14:44:04 +0100 |
| parents | 1e01b91cf94d |
| children | 73903352de86 |
| 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 |
|
14001
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
34 local c = self._next_checkpoint; |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
35 if c and h >= c then |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
36 self:_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
|
37 end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 return acked |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
41 function smqueue:count_unacked() |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
42 return self._head - self._tail |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
43 end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
45 function smqueue:count_acked() |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
46 return self._tail |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
47 end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
49 function smqueue:resumable() |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
50 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
|
51 end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
53 function smqueue:resume() |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
54 return self._queue:items() |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
55 end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
57 function smqueue:consume() |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
58 return self._queue:consume() |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
59 end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 |
|
12058
4860da718e87
util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12055
diff
changeset
|
61 function smqueue:table() |
|
4860da718e87
util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12055
diff
changeset
|
62 local t = {}; |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
63 for i, v in self:resume() do |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
64 t[i] = v; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
65 end |
|
12058
4860da718e87
util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12055
diff
changeset
|
66 return t |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 |
|
14001
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
69 function smqueue:add_checkpoint(cb, ud) |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
70 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
|
71 if not self._next_checkpoint then |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
72 self._next_checkpoint = self._head; |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
73 end |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
74 end |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
75 |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
76 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
|
77 local checkpoints = self._checkpoints; |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
78 |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
79 local c = table.remove(checkpoints, 1); |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
80 self._next_checkpoint = checkpoints[1] and checkpoints[1][1] or nil; |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
81 |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
82 local cb, ud = c[2], c[3]; |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
83 cb(ud); |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
84 |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
85 if h >= self._next_checkpoint then |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
86 return self:_call_checkpoints(h) |
|
14001
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
87 end |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
88 end |
|
df970d2dac45
util.smqueue: Add "checkpoints" API to run code on successful stanza delivery
Matthew Wild <mwild1@gmail.com>
parents:
13994
diff
changeset
|
89 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
90 local function freeze(q) |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
91 return { head = q._head; tail = q._tail } |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
92 end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
94 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
|
95 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 function lib.new(size) |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 assert(size > 0); |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
14008
diff
changeset
|
98 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
|
99 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 return lib |
