Skip to content

Commit 35eab64

Browse files
committed
gracefull stop + features tag commented
1 parent 04f17bd commit 35eab64

File tree

6 files changed

+59
-21
lines changed

6 files changed

+59
-21
lines changed

cdk-mintd.sqlite

-76 KB
Binary file not shown.

src/core/mint/lightning/lnbits.zig

+5-1
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,11 @@ pub const LNBitsClient = struct {
355355

356356
std.log.debug("create invoice, response : {s}", .{res});
357357

358-
const parsed = std.json.parseFromSlice(std.json.Value, allocator, res, .{ .allocate = .alloc_always }) catch return error.WrongJson;
358+
const parsed = std.json.parseFromSlice(std.json.Value, allocator, res, .{ .allocate = .alloc_always }) catch |err| {
359+
errdefer std.log.debug("{any}", .{err});
360+
361+
return error.WrongJson;
362+
};
359363

360364
const payment_request = parsed.value.object.get("payment_request") orelse unreachable;
361365
const payment_hash = parsed.value.object.get("payment_hash") orelse unreachable;

src/lightning_invoices/features.zig

+20-15
Original file line numberDiff line numberDiff line change
@@ -347,26 +347,31 @@ pub fn deinit(self: *Features) void {
347347
}
348348

349349
pub fn fromBase32(gpa: std.mem.Allocator, data: []const u5) !Features {
350-
const field_data = try bech32.arrayListFromBase32(gpa, data);
351-
defer field_data.deinit();
350+
_ = data; // autofix
351+
// const field_data = try bech32.arrayListFromBase32(gpa, data);
352+
// defer field_data.deinit();
352353

353-
const width: usize = 5;
354+
// const width: usize = 5;
354355

355-
var flags = std.AutoHashMap(FeatureBit, void).init(gpa);
356-
errdefer flags.deinit();
356+
// var flags = std.AutoHashMap(FeatureBit, void).init(gpa);
357+
// errdefer flags.deinit();
357358

358-
// Set feature bits from parsed data.
359-
const bits_number = data.len * width;
360-
for (0..bits_number) |i| {
361-
const byte_index = i / width;
362-
const bit_index = i % width;
359+
// // Set feature bits from parsed data.
360+
// const bits_number = data.len * width;
361+
// for (0..bits_number) |i| {
362+
// const byte_index = i / width;
363+
// const bit_index = i % width;
363364

364-
if ((std.math.shl(u8, data[data.len - byte_index - 1], bit_index)) & 1 == 1) {
365-
try flags.put(@truncate(i), {});
366-
}
367-
}
365+
// if ((std.math.shl(u8, data[data.len - byte_index - 1], bit_index)) & 1 == 1) {
366+
// try flags.put(@truncate(i), {});
367+
// }
368+
// }
369+
370+
// return .{
371+
// .flags = flags,
372+
// };
368373

369374
return .{
370-
.flags = flags,
375+
.flags = std.AutoHashMap(FeatureBit, void).init(gpa),
371376
};
372377
}

src/lightning_invoices/invoice.zig

+9
Original file line numberDiff line numberDiff line change
@@ -1299,6 +1299,15 @@ test "full serialize" {
12991299
}
13001300
}
13011301

1302+
test "ln invoice" {
1303+
const str =
1304+
\\lnbc550n1pn04xe4sp53aqjsrd2wg58e7ve4erj8kklssaqg929uzzsdc6tzxg04jcvpa3qpp59sd92rxj89he4uzqg2d4xjcr3lvwa2pfhq3e2xxcwny6wkm024fqdpqf38xy6t5wvszs3z9f48jq5692fty253fxqrpcgcqpjrzjqdm9ng9v36em3598yqg5alyxr5afgquzmnapgqm5dd8c76ew3qgt5rpgrgqq3hcqqqqqqqlgqqqqqqqqvs9qxpqysgqjumakl745mg5djjxvtjz5n3upkz4gtsedd0vyf3a359crdcwvm7rlzkvpe87tnhphjjfp8mly79j0wz4hrrst68mfaz96lhj385q2dgpr42g8l
1305+
;
1306+
1307+
var inv = try Bolt11Invoice.fromStr(std.testing.allocator, str);
1308+
defer inv.deinit();
1309+
}
1310+
13021311
test {
13031312
_ = @import("builder.zig");
13041313
}

src/mint.zig

+23-5
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ pub fn main() !void {
381381
var wg = std.Thread.WaitGroup{};
382382
// Spawn task to wait for invoces to be paid and update mint quotes
383383
// handle invoices
384-
{
384+
const channels: std.ArrayList(ref.Arc(mpmc.UnboundedChannel(std.ArrayList(u8)))) = v: {
385385
const thread_fn = (struct {
386386
fn handleLnInvoice(m: *Mint, wait_ch: ref.Arc(mpmc.UnboundedChannel(std.ArrayList(u8)))) void {
387387
defer wait_ch.releaseWithFn((struct {
@@ -393,7 +393,8 @@ pub fn main() !void {
393393
var receiver = wait_ch.value.receiver() catch return;
394394

395395
while (true) {
396-
var request_lookup_id = receiver.recv() orelse unreachable;
396+
// receive lookup id, otherwise channel is closed (application is terminated)
397+
var request_lookup_id = receiver.recv() orelse return;
397398
defer request_lookup_id.releaseWithFn((struct {
398399
fn deinit(_self: std.ArrayList(u8)) void {
399400
_self.deinit();
@@ -409,21 +410,38 @@ pub fn main() !void {
409410
}).handleLnInvoice;
410411

411412
var it = ln_backends.iterator();
413+
414+
var channels = try std.ArrayList(ref.Arc(mpmc.UnboundedChannel(std.ArrayList(u8)))).initCapacity(gpa.allocator(), ln_backends.count());
415+
errdefer channels.deinit();
416+
412417
while (it.next()) |ln_entry| {
418+
// hack to stop channels
419+
const ch =
420+
ln_entry.value_ptr.waitAnyInvoice();
421+
channels.appendAssumeCapacity(ch);
422+
413423
wg.spawnManager(thread_fn, .{
414424
&mint,
415-
ln_entry.value_ptr.waitAnyInvoice(),
425+
ch,
416426
});
417427
}
418-
}
428+
429+
break :v channels;
430+
};
431+
defer channels.deinit();
419432

420433
std.log.info("Listening server on {s}:{d}", .{
421434
parsed_settings.value.info.listen_host, parsed_settings.value.info.listen_port,
422435
});
423436
try srv.listen();
424437

438+
// hack to stop channels (and threads with handle invoice)
439+
for (channels.items) |ch| {
440+
ch.value.close();
441+
}
442+
425443
std.log.warn("Stopped server", .{});
426-
wg.wait();
444+
// defer wg.wait();
427445
}
428446

429447
pub fn handleInterrupt(srv: *httpz.Server(*http_router.GlobalRouter)) !void {

src/router/router_handlers.zig

+2
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ pub fn getMintBolt11Quote(
9494
req: *httpz.Request,
9595
res: *httpz.Response,
9696
) !void {
97+
errdefer std.log.debug("{any}", .{@errorReturnTrace()});
98+
9799
std.log.debug("get mint bolt11 quote req", .{});
98100

99101
const payload = (try req.json(core.nuts.nut04.MintQuoteBolt11Request)) orelse return error.WrongRequest;

0 commit comments

Comments
 (0)