oxidecomputer / omicron

Omicron: Oxide control plane
Mozilla Public License 2.0
250 stars 39 forks source link

Code reuse between switch port settings apply/clear sagas results in serialization error #4509

Closed rcgoodfellow closed 11 months ago

rcgoodfellow commented 11 months ago

When we call this code from the port settings clear saga

https://github.com/oxidecomputer/omicron/blob/ca9d90a79c2a7a9ffdca12a705d007d7f28ce61f/nexus/src/app/sagas/switch_port_settings_clear.rs#L154

We land here in the apply saga code

https://github.com/oxidecomputer/omicron/blob/ca9d90a79c2a7a9ffdca12a705d007d7f28ce61f/nexus/src/app/sagas/switch_port_settings_apply.rs#L728-L737

Line 732 is problematic there as the Params type is different in the clear and apply sagas and we wind up with this puddle of disappointment.

02:51:25.959Z INFO 65a11c18-7f59-41ac-b9e7-680627f996e7 (dropshot_external): request completed
    error_message_external = Internal Server Error
    error_message_internal = saga ACTION error at node "switch_port_settings": deserialize failed: saga params ({"port_name":"qsfp0","serialized_authn":{"kind":{"Authenticated":[{"actor":{"SiloUser":{"silo_id":"bb5700e7-c5f7-4c45-a1bc-bd610c03c55b","silo_user_id":"5d3758e4-2360-4386-99cc-d22bef03e827"}}},{"mapped_fleet_roles":{"admin":["admin"]}}]}},"switch_port_id":"348b7e16-d806-4edc-b4ac-ba48014c14b5"}): missing field `switch_port_settings_id`
    file = /home/build/.cargo/git/checkouts/dropshot-a4a923d29dccc492/ff87a01/dropshot/src/server.rs:841
    latency_us = 189133
    local_addr = 172.30.2.5:443
    method = DELETE
    remote_addr = 172.20.16.254:62131
    req_id = d86a8413-78aa-4ad1-b5fa-263386b7dbf7
    response_code = 500
    uri = //v1/system/hardware/switch-port/qsfp0/settings?rack_id=de608e01-b8e4-4d93-b972-a7dbed36dd22&switch_location=switch1
rcgoodfellow commented 11 months ago

This is not actually fixed. The test that I thought covered this is set to be ignored. We tried the port clear on rack 2 today, and the operation failed for the same reason in the OP.