MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / handle_request

Function handle_request

atomic-cli/src/commands/agent/owner.rs:944–1311  ·  view source on GitHub ↗
(store: &RedbChangeStore, frame: RequestFrame)

Source from the content-addressed store, hash-verified

942}
943
944fn handle_request(store: &RedbChangeStore, frame: RequestFrame) -> (ResponseFrame, bool) {
945 let request_id = frame.request_id;
946 if frame.version != PROTOCOL_VERSION {
947 return (
948 ResponseFrame {
949 version: PROTOCOL_VERSION,
950 request_id,
951 response: OwnerResponse::Error {
952 code: "unsupported-version".to_string(),
953 message: format!(
954 "client requested protocol {}, owner supports {}",
955 frame.version, PROTOCOL_VERSION
956 ),
957 },
958 },
959 false,
960 );
961 }
962
963 let (response, shutdown) = match frame.request {
964 OwnerRequest::Ping => (
965 OwnerResponse::Pong {
966 pid: std::process::id(),
967 frozen_envelope_paging: true,
968 },
969 false,
970 ),
971 OwnerRequest::ReserveProvenanceTurn {
972 session_id,
973 turn_number,
974 now,
975 } => match store.reserve_provenance_turn(&session_id, turn_number, now) {
976 Ok(turn) => (
977 OwnerResponse::ProvenanceTurn {
978 turn,
979 // reserve_provenance_turn returns only after txn.commit().
980 committed: true,
981 },
982 false,
983 ),
984 Err(error) => (
985 OwnerResponse::Error {
986 code: "provenance-store".to_string(),
987 message: error.to_string(),
988 },
989 false,
990 ),
991 },
992 OwnerRequest::AppendProvenanceEnvelopes {
993 provenance_id,
994 expected_generation,
995 envelopes,
996 now,
997 } => {
998 owner_failpoint("before-envelope-commit");
999 let batch: Vec<_> = envelopes
1000 .iter()
1001 .map(|envelope| (envelope.event_id.as_str(), envelope.bytes.as_slice()))