Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI: more flake fixes #6802

Merged
merged 2 commits into from
Oct 23, 2023
Merged

Commits on Oct 23, 2023

  1. pytest: fix flake in test_excluded_adjacent_routehint

    Make sure l1 can see l2's channel and it's in the gossip_store.
    
    ```
        def test_excluded_adjacent_routehint(node_factory, bitcoind):
            """Test case where we try have a routehint which leads to an adjacent
            node, but the result exceeds our maxfee; we crashed trying to find
            what part of the path was most expensive in that case
        
            """
            l1, l2, l3 = node_factory.line_graph(3)
        
            # We'll be forced to use routehint, since we don't know about l3.
            wait_for(lambda: len(l3.rpc.listchannels(source=l2.info['id'])['channels']) == 1)
            inv = l3.rpc.invoice(10**3, "lbl", "desc", exposeprivatechannels=l2.get_channel_scid(l3))
        
            # This will make it reject the routehint.
            err = r'Fee exceeds our fee budget: 1msat > 0msat, discarding route'
            with pytest.raises(RpcError, match=err):
    >           l1.rpc.pay(bolt11=inv['bolt11'], maxfeepercent=0, exemptfee=0)
    
    tests/test_pay.py:3420: 
    ...
    >           raise RpcError(method, payload, resp['error'])
    E           pyln.client.lightning.RpcError: RPC call failed: method: pay, payload: {'bolt11': 'lnbcrt10n1pjjm8hesp5kp4nfgrj2ev6dz6xuqgxg29hz7263ltlafylhw7nglhtjxeqpn7spp5w92tjq8a354psfhdzmeuytfc6eye4f5egl7tj7s0f5ftz0k4pmcqdq8v3jhxccxqyjw5qcqp9rzjqgkjyd3q5dv6gllh77kygly9c3kfy0d9xwyjyxsq2nq3c83u5vw4jqqqvuqqqqgqqqqqqqqpqqqqqzsqqc9qxpqysgqetjwr6ql24jrz02qhj7pdw3kqynw6j3sgj2h32ufeyzasjyp2j6yc5durewjjpjy5yqtfgdxmdj52n7jk0ylzk5wudk4ffmjyyw6jmsqkvjex9', 'maxfeepercent': 0, 'exemptfee': 0}, error: {'code': 210, 'message': 'Destination 035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d is not reachable directly and all routehints were unusable.', 'attempts': [{'status': 'failed', 'failreason': 'Destination 035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d is not reachable directly and all routehints were unusable.', 'partid': 0, 'amount_msat': 1000msat}]}
    ```
    
    Signed-off-by: Rusty Russell <[email protected]>
    rustyrussell committed Oct 23, 2023
    Configuration menu
    Copy the full SHA
    1e9f645 View commit details
    Browse the repository at this point in the history
  2. connectd: fix forwarding after tx_abort.

    If we get a WIRE_TX_ABORT then another message, we send the other message to the same
    subd (even though the tx abort causes it to shutdown).  This means we effectively
    lose the next message, and timeout (see below from CI, reproduced locally).
    
    So, have connectd ignore the subd after it forwards the WIRE_TX_ABORT.  The next
    message will, correctly, cause a fresh subdaemon to be spawned.
    
    ```
        @unittest.skipIf(TEST_NETWORK != 'regtest', 'elementsd doesnt yet support PSBT features we need')
        @pytest.mark.openchannel('v2')
        def test_v2_rbf_multi(node_factory, bitcoind, chainparams):
            l1, l2 = node_factory.get_nodes(2,
                                            opts={'may_reconnect': True,
                                                  'dev-no-reconnect': None,
                                                  'allow_warning': True})
        
            l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
            amount = 2**24
            chan_amount = 100000
            bitcoind.rpc.sendtoaddress(l1.rpc.newaddr()['bech32'], amount / 10**8 + 0.01)
            bitcoind.generate_block(1)
            # Wait for it to arrive.
            wait_for(lambda: len(l1.rpc.listfunds()['outputs']) > 0)
        
            res = l1.rpc.fundchannel(l2.info['id'], chan_amount)
            chan_id = res['channel_id']
            vins = bitcoind.rpc.decoderawtransaction(res['tx'])['vin']
            assert(only_one(vins))
            prev_utxos = ["{}:{}".format(vins[0]['txid'], vins[0]['vout'])]
        
            # Check that we're waiting for lockin
            l1.daemon.wait_for_log(' to DUALOPEND_AWAITING_LOCKIN')
        
            # Attempt to do abort, should fail since we've
            # already gotten an inflight
            with pytest.raises(RpcError):
                l1.rpc.openchannel_abort(chan_id)
        
            rate = int(find_next_feerate(l1, l2)[:-5])
            # We 4x the feerate to beat the min-relay fee
            next_feerate = '{}perkw'.format(rate * 4)
        
            # Initiate an RBF
            startweight = 42 + 172  # base weight, funding output
            initpsbt = l1.rpc.utxopsbt(chan_amount, next_feerate, startweight,
                                       prev_utxos, reservedok=True,
                                       min_witness_weight=110,
                                       excess_as_change=True)
        
            # Do the bump
            bump = l1.rpc.openchannel_bump(chan_id, chan_amount,
                                           initpsbt['psbt'],
                                           funding_feerate=next_feerate)
        
            # Abort this open attempt! We will re-try
            aborted = l1.rpc.openchannel_abort(chan_id)
            assert not aborted['channel_canceled']
            # We no longer disconnect on aborts, because magic!
            assert only_one(l1.rpc.listpeers()['peers'])['connected']
        
            # Do the bump, again, same feerate
    >       bump = l1.rpc.openchannel_bump(chan_id, chan_amount,
                                           initpsbt['psbt'],
                                           funding_feerate=next_feerate)
    
    tests/test_opening.py:668: 
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    contrib/pyln-client/pyln/client/lightning.py:1206: in openchannel_bump
        return self.call("openchannel_bump", payload)
    contrib/pyln-testing/pyln/testing/utils.py:718: in call
        res = LightningRpc.call(self, method, payload, cmdprefix, filter)
    contrib/pyln-client/pyln/client/lightning.py:398: in call
        resp, buf = self._readobj(sock, buf)
    contrib/pyln-client/pyln/client/lightning.py:315: in _readobj
        b = sock.recv(max(1024, len(buff)))
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    
    self = <pyln.client.lightning.UnixSocket object at 0x7f34675aae80>
    length = 1024
    
        def recv(self, length: int) -> bytes:
            if self.sock is None:
                raise socket.error("not connected")
        
    >       return self.sock.recv(length)
    E       Failed: Timeout >1200.0s
    ```
    rustyrussell committed Oct 23, 2023
    Configuration menu
    Copy the full SHA
    8079b60 View commit details
    Browse the repository at this point in the history