mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-20 02:27:51 +01:00
59e75f1b2c
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 |