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
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
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