lighthouse
lighthouse copied to clipboard
Endpoints that require the node to be synced respond with "Unsupported endpoint version" while syncing
Description
While a node is syncing (SyncState::SyncingFinalized), some endpoints are disabled. When trying to use an endpoint that expects a POST request and requires the node to be synced, the response is incorrect: BAD_REQUEST: Unsupported endpoint version: v1. As soon as the node is synced, the endpoints work properly again. Endoints expecting a GET request are seemingly unaffected.
Version
I was able to trigger this with a recent unstable version and with @eserilev's branch #4575:
- Lighthouse v4.6.0-0b6c898 (unstable)
- Lighthouse v4.5.0-afd06b7 (#4575)
Present Behaviour
- A node is syncing a finalized chain (e.g. after some downtime)
curl -X POST -H "Content-Type: application/json" --data '["1552654"]' "http://localhost:5052/eth/v1/validator/duties/sync/123"results in{"code":400,"message":"BAD_REQUEST: Unsupported endpoint version: v1","stacktraces":[]}, also if-H "Content-Type: application/json"is removed.- As soon as the node is synced, a proper response is sent again.
Expected Behaviour
Respond with {"code":503,"message":"SERVICE_UNAVAILABLE: beacon node is syncing: head slot is 825919, current slot is 864126","stacktraces":[]} until it is synced.
Steps to resolve
Adjust the warp filters (maybe not_while_syncing_filter)
Thanks for reporting!
I was able to trigger this with a recent unstable version and with @eserilev's branch https://github.com/sigp/lighthouse/pull/4575:
So the error happens only with #4575 or is fixed with #4575?
So the error happens only with #4575 or is fixed with #4575?
It happens both with and without #4575. I mentioned #4575 because @michaelsproul suggested that the error might be fixed with that branch, which is not the case, so I wanted to emphasize that this is a separate issue.
~~I believe the issue is that this endpoint doesn't conform to the beacon api spec in the case where the chain is still finalizing. I can pick this one up. Will also spend some time reviewing our other endpoints to ensure they are also conforming to spec for the relevant edge cases.~~
the not_while_syncing_filter should be rejecting with a not synced error message. For some reason thats not happening, will investigate why
Fixed in #5136 🎉