-
Notifications
You must be signed in to change notification settings - Fork 952
Actually check, cleanup, notification schemas #8376
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
base: master
Are you sure you want to change the base?
Actually check, cleanup, notification schemas #8376
Conversation
Regarding the compile error with ConnectAddressType: Does the rpc method "connect" also have address type "websocket"? Right now the schema does not. The problem here is that both the rpc method and notification have the same path "connect" and so msggen is searching in the same path for the fields. Either the schemas have to match for "connect.address.type" or i have to submit a patch for mssgen. |
Ah. We can't connect out to a web socket, so |
Either that or https://github.com/daywalker90/lightning/tree/msggen-connect-notification-override |
Here's the diff:
And here's the result with your commit applied:
|
Did you run |
6603b1b
to
de61108
Compare
de61108
to
bf111ad
Compare
serde_json::Value::Object(map) => map.clone(), | ||
_ => return Err(anyhow::anyhow!("params must be a JSON object")), | ||
}; | ||
params.insert(method.clone(), json!(v)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the intended change here? Right now it constructs a json dict with the old style and the new style like this:
{ "foo":"bar", "method":{"foo":"bar"}}
Is that intended? The thing is it only works for params that are dict's (serde_json::Value::Object
doesn't mean json object in the sense that it is json but specifically a json dict)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, the intention is to do both the "raw" style, and the modern "wrapped" style, at least for now? I got ChatGPT to write this, so...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be fine under the assumption that params always is a json dict. If it's not, the conversion to such raw and wrapped style wouldn't be possible anyways without also wrapping the raw again.
Omg today i learned why noone reacts to my GitHub Reviews: i never finalize them and keep them in pending... |
I might know that feeling somehow 🤔 😅 |
bf111ad
to
10c2c70
Compare
@@ -4153,7 +4153,7 @@ message ChannelStateChangedNotification { | |||
} | |||
bytes peer_id = 1; | |||
bytes channel_id = 2; | |||
string short_channel_id = 3; | |||
optional string short_channel_id = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a semver breaking change. We need to roll the minor version of cln-grpc.
#[serde(skip_serializing_if = "Option::is_none")] | ||
pub short_channel_id: Option<ShortChannelId>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Semver breaking change for cln-rpc
.
This should fix the build error: rustyrussell#15 |
The problem is it's actually optional. So the current code is broken :( |
3052b4e
to
27c8397
Compare
1a80751
to
06dba37
Compare
06dba37
to
7588491
Compare
Trivial rebase... |
183e209
to
55db5c8
Compare
Particularly important since we're going to update the format: this makes sure we don't break them! Signed-off-by: Rusty Russell <[email protected]>
We haven't seen the "excessive queue length" backtrace since we fixed gossipd, so it's safe to drop excess messages without worrying about losing gossip. Signed-off-by: Rusty Russell <[email protected]>
… in channel_state_changed notification We always prefer to omit fields rather than use 'null' (or unknown!). Note that before this, the schema was broken, so we have to put a special exemption in for that case. Signed-off-by: Rusty Russell <[email protected]>
For older lightningd, we copy field into the raw dict, for newer we recreate the old "payload" member. We do fix up the custom_notification test which set params to a string instead of a dict: that's just weird! We also change the hacky parsing to proper dict extraction. Signed-off-by: Rusty Russell <[email protected]> Changelog-Changed: pyln-client: plugin notifications parameters now exposed directly, not wrapped in `params` object.
Rather than forcing them to wrap their parameters in a "payload" sub-object, copy in params directly. We include the "origin" field one level up, if they care. The next patch restores compatibility for the one place we currently use them, which is the pay plugin. Signed-off-by: Rusty Russell <[email protected]> Changelog-Deprecated: pyln-client: plugin custom notifications origins and payload (use parameters directly)
…ame. All the core notifications changed over to wrapping the notification fields in an object with the name of the notification, but notifications from plugins were missed. Changelog-Added: Plugins: `channel_hint_update`, `pay_failure` and `pay_success` notifications now have objects of the same name containing the expected fields. Changelog-Deprecated: Plugins: `channel_hint_update`, `pay_failure` and `pay_success` notification fields outside the same-named object. Signed-off-by: Rusty Russell <[email protected]>
Signed-off-by: Rusty Russell <[email protected]>
…ugins. Signed-off-by: Rusty Russell <[email protected]>
…ion schemas. Note that we need a workaround for deprecated APIs where "channel_state_changed" output "null" which violated the schema. Signed-off-by: Rusty Russell <[email protected]>
…ications. Modern style for notifications is to put everything inside an object of same name as the method. For now this means duplication for backward compatibility. ChatGPT helped me do that. Signed-off-by: Rusty Russell <[email protected]>
…t.json This is done by tests/test_connection.py::test_websocket: ``` { "jsonrpc": "2.0", "method": "connect", "params": { "connect": { "id": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f", "direction": "in", "address": { "type": "websocket", "subtype": "ipv4", "address": "127.0.0.1", "port": 59412 } } } } ``` Signed-off-by: Rusty Russell <[email protected]>
55db5c8
to
1c5e7cf
Compare
We have schemas for (some) notifications, which GRPC seems to rely on, but they were completely untested. And thus, of course, wrong.