rgb-cln/plugins
niftynei 79a76a96f7 v2open: dont rely on ordering of interprocess messages
Originally I (incorrectly?) assumed that since TX_COMMITMENT_SIGNED
always came before TX_SIGNATURES, we would always receive a response
from openchannel_update (w/ commitment_secured = true) before getting
notification of receipt of the peer's signatures.

But it's observable in the logs of hung tests that this in fact is a
wrong assumption -- the notification for the tx_sigs arrives at our
spender plugin before the callback from our openchannel_update RPC.

This mis-ordering causes a hang.

Luckily we're pretty much setup to handle this race already w/ states
etc, minus actually calling the method advance the plot in case we're
ready.

2022-07-26T05:37:59.4529095Z lightningd-1 2022-07-26T05:10:07.395Z DEBUG   035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d-dualopend-chan#2: peer_in WIRE_COMMITMENT_SIGNED
2022-07-26T05:37:59.4530452Z lightningd-1 2022-07-26T05:10:07.396Z DEBUG   035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d-hsmd: Got WIRE_HSMD_VALIDATE_COMMITMENT_TX
2022-07-26T05:37:59.4530719Z lightningd-1 2022-07-26T05:10:07.396Z DEBUG   hsmd: Client: Received message 35 from client
2022-07-26T05:37:59.4531386Z lightningd-1 2022-07-26T05:10:07.396Z DEBUG   035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d-dualopend-chan#2: billboard: channel open: commitment received, sending to lightningd to save
2022-07-26T05:37:59.4531856Z lightningd-1 2022-07-26T05:10:07.398Z DEBUG   035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d-dualopend-chan#2: peer_in WIRE_TX_SIGNATURES
>>> 2022-07-26T05:37:59.4532553Z lightningd-1 2022-07-26T05:10:07.400Z DEBUG   plugin-spenderp: mfc 60:`openchannel_peer_sigs` notice received for channel 9d145e763f08ee6f715ba7677f869cbb9580c7406f4d0b0ff3a0987efe501e13 <<<< THIS ONE WAS ASSUMED TO COME AFTER openchannel_update (next line)
2022-07-26T05:37:59.4533048Z lightningd-1 2022-07-26T05:10:07.400Z DEBUG   plugin-spenderp: mfc 60, dest 0: openchannel_update 035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d returned.
2022-07-26T05:37:59.4554292Z lightningd-1 2022-07-26T05:10:07.400Z DEBUG   plugin-spenderp: mfc 60: parallel `openchannel_update`.
2022-07-26T05:37:59.4555485Z lightningd-1 2022-07-26T05:10:07.400Z DEBUG   plugin-spenderp: mfc 60: funding tx 50425e20dbf0ca6fe112a8811b8048edb5bfa8d2922079668c5f353b859b45cb
2022-07-26T05:37:59.4557934Z lightningd-1 2022-07-26T05:10:07.508Z DEBUG   0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518-hsmd: Got WIRE_HSMD_CUPDATE_SIG_REQ
2022-07-26T05:37:59.4558244Z lightningd-1 2022-07-26T05:10:07.508Z DEBUG   hsmd: Client: Received message 3 from client
2022-07-26T05:37:59.4558738Z lightningd-3 2022-07-26T05:11:03.234Z DEBUG   0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518-gossipd: seeker: startup peer finished
2022-07-26T05:37:59.4559209Z lightningd-3 2022-07-26T05:11:03.234Z DEBUG   0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518-gossipd: seeker: state = PROBING_SCIDS Seeking scids 1 - 105

(The last 2 log messages (from a different node) are >1min after the last
log line from lightning-1, because lightning-1 hung)

Hacked lightningd up to test this (such that notification always sent
before the RPC response, works as intended w/ patch)
2022-07-27 19:31:04 +09:30
..
examples cln-plugin: Handle --help invocations better 2022-04-11 15:20:32 +09:30
grpc-plugin cln-plugin: Notify waiting tasks if the lightningd connection closes 2022-07-21 14:19:06 +09:30
spender v2open: dont rely on ordering of interprocess messages 2022-07-27 19:31:04 +09:30
src cln-plugin: Notify waiting tasks if the lightningd connection closes 2022-07-21 14:19:06 +09:30
test lightningd: don't explicitly tell connectd to disconnect, have it do it on sending error/warning. 2022-07-18 20:50:04 -05:00
.gitignore Add rune and commando to gitignore. 2022-07-19 15:29:26 +09:30
Cargo.toml cln-plugin: Fix plugin dependencies 2022-07-21 14:19:06 +09:30
Makefile plugins/commando: basic commando plugin (no runes yet). 2022-07-17 08:51:02 +09:30
README.md doc: fix wording in plugins/README.md 2020-01-06 12:57:59 +01:00
autoclean.c plugin: autoclean fix double free when re-enable, remove xfail mark from test_ 2022-07-16 14:19:05 +09:30
bcli.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
chanbackup.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
commando.c commando: free incmd as soon as we use it. 2022-07-26 09:33:40 -07:00
fetchinvoice.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
funder.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
funder_policy.c daemons: remove unused functions or make static. 2021-12-06 10:05:39 +10:30
funder_policy.h daemons: remove unused functions or make static. 2021-12-06 10:05:39 +10:30
keysend.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
libplugin-pay.c pay: Populate the channel hints with either the scid or the alias 2022-07-04 22:14:06 +02:00
libplugin-pay.h pay: Populate the channel hints with either the scid or the alias 2022-07-04 22:14:06 +02:00
libplugin.c valgrind: rm ref to cmd when cmd is free'd 2022-07-26 15:11:30 -07:00
libplugin.h libplugin: datastore helpers. 2022-07-17 08:51:02 +09:30
offers.c decode: fix crash when decoding invalid rune. 2022-07-25 15:14:01 -07:00
offers.h common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
offers_inv_hook.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
offers_inv_hook.h connectd: restore obs2 onion support. 2022-03-29 10:55:12 +10:30
offers_invreq_hook.c common/json_stream.c: provide explicit json_add_primitive_fmt and json_add_str_fmt routines. 2022-07-15 12:24:00 -05:00
offers_invreq_hook.h connectd: restore obs2 onion support. 2022-03-29 10:55:12 +10:30
offers_offer.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
offers_offer.h BOLT12: use point32 instead of pubkey32. 2021-10-08 13:47:30 +02:00
pay.c msat: cleanup msat outputs for apis 2022-07-23 16:22:38 +09:30
topology.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
txprepare.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00

README.md

Plugin Directory

Any file in this directory which is executable and whose name only consists of alphanumeric characters, space, '.', '-' or '_' will be automatically loaded when lightningd starts (unless suppressed with commandline options).