mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-30 12:24:26 +01:00
This has two effects: most importantly, it avoids the problem where lightningd creates a 800MB JSON blob in response to listchannels, which causes OOM on the Raspberry Pi (our previous max allocation was 832MB). This is because lightning-cli can start draining the JSON while we're filling the buffer, so we end up with a max allocation of 68MB. But despite being less efficient (multiple queries to gossipd), it actually speeds things up due to the parallelism: MCP with -O3 -flto before vs after: -listchannels_sec:8.980000-9.330000(9.206+/-0.14) +listchannels_sec:7.500000-7.830000(7.656+/-0.11) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
5.4 KiB
5.4 KiB
| 1 | #include <common/cryptomsg.h> |
|---|---|
| 2 | #include <common/wireaddr.h> |
| 3 | #include <wire/gen_onion_wire.h> |
| 4 | # Initialize the gossip daemon. |
| 5 | gossipctl_init,3000 |
| 6 | gossipctl_init,,broadcast_interval_msec,u32 |
| 7 | gossipctl_init,,chain_hash,struct bitcoin_blkid |
| 8 | gossipctl_init,,id,struct node_id |
| 9 | gossipctl_init,,gflen,u16 |
| 10 | gossipctl_init,,globalfeatures,gflen*u8 |
| 11 | gossipctl_init,,rgb,3*u8 |
| 12 | gossipctl_init,,alias,32*u8 |
| 13 | gossipctl_init,,update_channel_interval,u32 |
| 14 | gossipctl_init,,num_announcable,u16 |
| 15 | gossipctl_init,,announcable,num_announcable*struct wireaddr |
| 16 | gossipctl_init,,dev_gossip_time,?u32 |
| 17 | # Pass JSON-RPC getnodes call through |
| 18 | gossip_getnodes_request,3005 |
| 19 | gossip_getnodes_request,,id,?struct node_id |
| 20 | #include <lightningd/gossip_msg.h> |
| 21 | gossip_getnodes_reply,3105 |
| 22 | gossip_getnodes_reply,,num_nodes,u32 |
| 23 | gossip_getnodes_reply,,nodes,num_nodes*struct gossip_getnodes_entry |
| 24 | # Pass JSON-RPC getroute call through |
| 25 | gossip_getroute_request,3006 |
| 26 | gossip_getroute_request,,source,struct node_id |
| 27 | gossip_getroute_request,,destination,struct node_id |
| 28 | gossip_getroute_request,,msatoshi,struct amount_msat |
| 29 | # We don't pass doubles, so pass riskfactor * 1000000. |
| 30 | gossip_getroute_request,,riskfactor_by_million,u64 |
| 31 | gossip_getroute_request,,final_cltv,u32 |
| 32 | gossip_getroute_request,,fuzz,double |
| 33 | gossip_getroute_request,,num_excluded,u16 |
| 34 | gossip_getroute_request,,excluded,num_excluded*struct short_channel_id_dir |
| 35 | gossip_getroute_request,,max_hops,u32 |
| 36 | gossip_getroute_reply,3106 |
| 37 | gossip_getroute_reply,,num_hops,u16 |
| 38 | gossip_getroute_reply,,hops,num_hops*struct route_hop |
| 39 | gossip_getchannels_request,3007 |
| 40 | gossip_getchannels_request,,short_channel_id,?struct short_channel_id |
| 41 | gossip_getchannels_request,,source,?struct node_id |
| 42 | gossip_getchannels_request,,prev,?struct short_channel_id |
| 43 | gossip_getchannels_reply,3107 |
| 44 | gossip_getchannels_reply,,complete,bool |
| 45 | gossip_getchannels_reply,,num_channels,u32 |
| 46 | gossip_getchannels_reply,,nodes,num_channels*struct gossip_getchannels_entry |
| 47 | # Ping/pong test. Waits for a reply if it expects one. |
| 48 | gossip_ping,3008 |
| 49 | gossip_ping,,id,struct node_id |
| 50 | gossip_ping,,num_pong_bytes,u16 |
| 51 | gossip_ping,,len,u16 |
| 52 | gossip_ping_reply,3108 |
| 53 | gossip_ping_reply,,id,struct node_id |
| 54 | # False if id in gossip_ping was unknown. |
| 55 | gossip_ping_reply,,sent,bool |
| 56 | # 0 == no pong expected |
| 57 | gossip_ping_reply,,totlen,u16 |
| 58 | # Test of query_short_channel_ids. Master->gossipd |
| 59 | gossip_query_scids,3031 |
| 60 | gossip_query_scids,,id,struct node_id |
| 61 | gossip_query_scids,,num_ids,u16 |
| 62 | gossip_query_scids,,ids,num_ids*struct short_channel_id |
| 63 | # Gossipd -> master |
| 64 | gossip_scids_reply,3131 |
| 65 | gossip_scids_reply,,ok,bool |
| 66 | gossip_scids_reply,,complete,bool |
| 67 | # Test gossip timestamp filtering. |
| 68 | gossip_send_timestamp_filter,3028 |
| 69 | gossip_send_timestamp_filter,,id,struct node_id |
| 70 | gossip_send_timestamp_filter,,first_timestamp,u32 |
| 71 | gossip_send_timestamp_filter,,timestamp_range,u32 |
| 72 | # Test of query_channel_range. Master->gossipd |
| 73 | gossip_query_channel_range,3029 |
| 74 | gossip_query_channel_range,,id,struct node_id |
| 75 | gossip_query_channel_range,,first_blocknum,u32 |
| 76 | gossip_query_channel_range,,number_of_blocks,u32 |
| 77 | # Gossipd -> master |
| 78 | gossip_query_channel_range_reply,3129 |
| 79 | gossip_query_channel_range_reply,,final_first_block,u32 |
| 80 | gossip_query_channel_range_reply,,final_num_blocks,u32 |
| 81 | gossip_query_channel_range_reply,,final_complete,bool |
| 82 | gossip_query_channel_range_reply,,num,u16 |
| 83 | gossip_query_channel_range_reply,,scids,num*struct short_channel_id |
| 84 | # Set artificial maximum reply_channel_range size. Master->gossipd |
| 85 | gossip_dev_set_max_scids_encode_size,3030 |
| 86 | gossip_dev_set_max_scids_encode_size,,max,u32 |
| 87 | # Given a short_channel_id, return the other endpoint (or none if DNE) |
| 88 | gossip_get_channel_peer,3009 |
| 89 | gossip_get_channel_peer,,channel_id,struct short_channel_id |
| 90 | gossip_get_channel_peer_reply,3109 |
| 91 | gossip_get_channel_peer_reply,,peer_id,?struct node_id |
| 92 | # gossipd->master: we're closing this channel. |
| 93 | gossip_local_channel_close,3027 |
| 94 | gossip_local_channel_close,,short_channel_id,struct short_channel_id |
| 95 | # Gossipd->master get this tx output please. |
| 96 | gossip_get_txout,3018 |
| 97 | gossip_get_txout,,short_channel_id,struct short_channel_id |
| 98 | # master->gossipd here is the output, or empty if none. |
| 99 | gossip_get_txout_reply,3118 |
| 100 | gossip_get_txout_reply,,short_channel_id,struct short_channel_id |
| 101 | gossip_get_txout_reply,,satoshis,struct amount_sat |
| 102 | gossip_get_txout_reply,,len,u16 |
| 103 | gossip_get_txout_reply,,outscript,len*u8 |
| 104 | # master->gossipd an htlc failed with this onion error. |
| 105 | gossip_payment_failure,3021 |
| 106 | gossip_payment_failure,,erring_node,struct node_id |
| 107 | gossip_payment_failure,,erring_channel,struct short_channel_id |
| 108 | gossip_payment_failure,,erring_channel_direction,u8 |
| 109 | gossip_payment_failure,,len,u16 |
| 110 | gossip_payment_failure,,error,len*u8 |
| 111 | # master -> gossipd: a potential funding outpoint was spent, please forget the eventual channel |
| 112 | gossip_outpoint_spent,3024 |
| 113 | gossip_outpoint_spent,,short_channel_id,struct short_channel_id |
| 114 | # master -> gossipd: stop gossip timers. |
| 115 | gossip_dev_suppress,3032 |
| 116 | # master -> gossipd: do you have a memleak? |
| 117 | gossip_dev_memleak,3033 |
| 118 | gossip_dev_memleak_reply,3133 |
| 119 | gossip_dev_memleak_reply,,leak,bool |
| 120 | # master -> gossipd: please rewrite the gossip_store |
| 121 | gossip_dev_compact_store,3034 |
| 122 | # gossipd -> master: ok |
| 123 | gossip_dev_compact_store_reply,3134 |
| 124 | gossip_dev_compact_store_reply,,success,bool |
| 125 | #include <common/bolt11.h> |
| 126 | # master -> gossipd: get route_info for our incoming channels |
| 127 | gossip_get_incoming_channels,3025 |
| 128 | gossip_get_incoming_channels,,private_too,?bool |
| 129 | # gossipd -> master: here they are. |
| 130 | gossip_get_incoming_channels_reply,3125 |
| 131 | gossip_get_incoming_channels_reply,,num,u16 |
| 132 | gossip_get_incoming_channels_reply,,route_info,num*struct route_info |