Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lightningd: fix incorrect reuse of dualopend, leading to dev_queryfee…
…rates race CI hit this issue where it would get a tx_abort in fundchannel. This happens when the dualopend we use to query the feerates has not exited yet (it waits for the tx_abort reply), and we mistakenly reuse it. With multi-channel support, this is wrong: just run another one and it all Just Works. This means we need to rework our dual_open_control.c logic, since it would previously create an unsaved channel then not clean up if something went wrong. Most people will never try to negotiate opening multiple channels to the same peer at the same time (vs. having an established channel and opening a new one), so this case is a bit weird. ``` rates = l1.rpc.dev_queryrates(l2.info['id'], amount, amount) # l1 leases a channel from l2 l1.rpc.fundchannel(l2.info['id'], amount, request_amt=amount, feerate='{}perkw'.format(feerate), > compact_lease=rates['compact_lease']) tests/test_opening.py:1611: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ contrib/pyln-client/pyln/client/lightning.py:833: in fundchannel return self.call("fundchannel", payload) contrib/pyln-testing/pyln/testing/utils.py:721: in call res = LightningRpc.call(self, method, payload, cmdprefix, filter) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pyln.testing.utils.PrettyPrintingLightningRpc object at 0x7f6cbcd97950> method = 'fundchannel' payload = {'amount': 500000, 'announce': True, 'compact_lease': '029a00640064000000644c4b40', 'feerate': '2000perkw', ...} cmdprefix = None, filter = None def call(self, method, payload=None, cmdprefix=None, filter=None): """Generic call API: you can set cmdprefix here, or set self.cmdprefix ... if not isinstance(resp, dict): raise ValueError("Malformed response, response is not a dictionary %s." % resp) elif "error" in resp: > raise RpcError(method, payload, resp['error']) E pyln.client.lightning.RpcError: RPC call failed: method: fundchannel, payload: {'id': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59', 'amount': 500000, 'feerate': '2000perkw', 'announce': True, 'request_amt': 500000, 'compact_lease': '029a00640064000000644c4b40'}, error: {'code': -1, 'message': 'Abort requested', 'data': {'id': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59', 'method': 'openchannel_init'}} ``` Signed-off-by: Rusty Russell <[email protected]>
- Loading branch information