Repository navigation
Commit 1f47239
committed
serve/serve -daemon: add -exec, a per-call computed reply
-reply/-echo both answer from something already known at registration
time -- a fixed payload, or the caller's own payload bounced back.
Neither this control protocol nor the daemon itself had any way to
hand a registration a live answer. -exec closes that gap: the given
shell command runs once per inbound CALL, gets the call's payload as
one JSON document on stdin, and whatever it writes to stdout becomes
the reply (empty stdout replies null).
Shared between serve's direct path and serve -daemon via a new
BuildReplyHandler in internal/daemon/exec_handler.go, so both compute
a handler identically rather than two copies drifting apart. A
non-zero exit, a timeout (-exec-timeout, 10s default), or invalid JSON
on stdout all become a normal BOLT#4 ERROR reply to the caller --
connection.CallHandler's own contract already guarantees a handler
error (or even a panic) never crashes the shared serve loop, confirmed
by reading macula-go's own ServeForever/buildCallReply before relying
on it. That guarantee matters more here than for -reply/-echo: every
procedure a daemon serves shares one serveSession, so a hung exec
would otherwise block every OTHER registered procedure too.
Verified live against the real demo fleet, not just typechecked: a
Node script doubling its input, called three times with three
different values, each producing a genuinely per-call-computed reply;
three sibling registrations deliberately made to fail three different
ways (non-zero exit, invalid JSON on stdout, a timeout) each correctly
answered their own caller with an ERROR while the working procedure
kept computing correctly throughout, and the daemon's own status
afterward showed all four still registered and healthy; the one-shot
(non-daemon) serve -exec path separately confirmed too. Also verified
the -exec/-reply/-echo mutual-exclusion check rejects at parse time,
before ever registering anything.1 parent a9bdcda commit 1f47239
6 files changed
Lines changed: 297 additions & 34 deletions
File tree
- cmd/macula-cli
- guides
- internal/daemon
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
56 | | - | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
57 | 59 | | |
58 | 60 | | |
59 | 61 | | |
| |||
213 | 215 | | |
214 | 216 | | |
215 | 217 | | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
216 | 225 | | |
217 | 226 | | |
218 | 227 | | |
| |||
260 | 269 | | |
261 | 270 | | |
262 | 271 | | |
263 | | - | |
264 | | - | |
265 | | - | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
266 | 295 | | |
267 | 296 | | |
268 | 297 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
44 | 51 | | |
45 | 52 | | |
46 | 53 | | |
| |||
50 | 57 | | |
51 | 58 | | |
52 | 59 | | |
| 60 | + | |
| 61 | + | |
53 | 62 | | |
54 | 63 | | |
55 | 64 | | |
| |||
76 | 85 | | |
77 | 86 | | |
78 | 87 | | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
79 | 95 | | |
80 | 96 | | |
81 | 97 | | |
| |||
89 | 105 | | |
90 | 106 | | |
91 | 107 | | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
92 | 111 | | |
93 | 112 | | |
94 | 113 | | |
| |||
116 | 135 | | |
117 | 136 | | |
118 | 137 | | |
| 138 | + | |
| 139 | + | |
119 | 140 | | |
120 | 141 | | |
121 | 142 | | |
| |||
133 | 154 | | |
134 | 155 | | |
135 | 156 | | |
136 | | - | |
| 157 | + | |
137 | 158 | | |
138 | 159 | | |
139 | 160 | | |
| |||
183 | 204 | | |
184 | 205 | | |
185 | 206 | | |
186 | | - | |
| 207 | + | |
| 208 | + | |
187 | 209 | | |
188 | 210 | | |
189 | 211 | | |
| |||
192 | 214 | | |
193 | 215 | | |
194 | 216 | | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
199 | 221 | | |
200 | 222 | | |
201 | 223 | | |
| |||
227 | 249 | | |
228 | 250 | | |
229 | 251 | | |
230 | | - | |
231 | | - | |
232 | | - | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
233 | 270 | | |
| 271 | + | |
234 | 272 | | |
235 | 273 | | |
236 | 274 | | |
237 | | - | |
| 275 | + | |
238 | 276 | | |
239 | 277 | | |
240 | 278 | | |
| |||
262 | 300 | | |
263 | 301 | | |
264 | 302 | | |
| 303 | + | |
| 304 | + | |
265 | 305 | | |
266 | 306 | | |
267 | 307 | | |
| |||
299 | 339 | | |
300 | 340 | | |
301 | 341 | | |
| 342 | + | |
| 343 | + | |
302 | 344 | | |
303 | 345 | | |
304 | 346 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
239 | 239 | | |
240 | 240 | | |
241 | 241 | | |
242 | | - | |
243 | | - | |
| 242 | + | |
| 243 | + | |
244 | 244 | | |
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | 248 | | |
249 | 249 | | |
250 | 250 | | |
| 251 | + | |
| 252 | + | |
251 | 253 | | |
252 | 254 | | |
253 | 255 | | |
| |||
666 | 668 | | |
667 | 669 | | |
668 | 670 | | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
669 | 743 | | |
670 | 744 | | |
671 | 745 | | |
| |||
0 commit comments