#s4_v2 - Add API to update global system state on local agent

PiperOrigin-RevId: 803205564
Change-Id: I7724c3f27b077f56ceedf04bca15ca69c3048452
diff --git a/proto/safepower_agent.proto b/proto/safepower_agent.proto
index 39c6f25..1df4849 100644
--- a/proto/safepower_agent.proto
+++ b/proto/safepower_agent.proto
@@ -19,6 +19,11 @@
 
   // Monitor state.
   rpc MonitorState(MonitorStateRequest) returns (stream SystemState) {}
+
+  // Update the global system state. This is used by the safepower service to
+  // update the state of the system as a whole, so that nodes that don't have a
+  // complete picture can synhronize with other nodes.
+  rpc SystemStateUpdate(SystemState) returns (SystemStateUpdateResponse) {}
 }
 
 message GetSupportedActionsRequest {}
@@ -198,6 +203,8 @@
 
 message MonitorStateRequest {}
 
+message SystemStateUpdateResponse {}
+
 // LINT.IfChange(SystemState)
 message SystemState {
   // Included in all updates. This is a timestamp that is set at service start.
diff --git a/safepower_agent.cc b/safepower_agent.cc
index 3f64854..ef0053f 100644
--- a/safepower_agent.cc
+++ b/safepower_agent.cc
@@ -96,6 +96,17 @@
   return DetachReactor(std::move(reactor));
 }
 
+grpc::ServerUnaryReactor* SafepowerLocalAgentImpl::SystemStateUpdate(
+    grpc::CallbackServerContext* context,
+    const safepower_agent_proto::SystemState* /*request*/,
+    safepower_agent_proto::SystemStateUpdateResponse* /*response*/) {
+  grpc::ServerUnaryReactor* reactor = context->DefaultReactor();
+  if (AbortWhileDisruptionExpected(reactor)) return reactor;
+  reactor->Finish(grpc::Status(grpc::StatusCode::UNIMPLEMENTED,
+                               "TODO: b/441385304 - Implementation pending"));
+  return reactor;
+}
+
 grpc::ServerUnaryReactor* SafepowerLocalAgentImpl::GetSupportedActions(
     grpc::CallbackServerContext* context,
     const safepower_agent_proto::GetSupportedActionsRequest* /*request*/,
diff --git a/safepower_agent.h b/safepower_agent.h
index dc4b81c..d05c370 100644
--- a/safepower_agent.h
+++ b/safepower_agent.h
@@ -43,6 +43,11 @@
       const safepower_agent_proto::GetSupportedActionsRequest* request,
       safepower_agent_proto::GetSupportedActionsResponse* response) override;
 
+  grpc::ServerUnaryReactor* SystemStateUpdate(
+      grpc::CallbackServerContext* context,
+      const safepower_agent_proto::SystemState* request,
+      safepower_agent_proto::SystemStateUpdateResponse* response) override;
+
  private:
    std::shared_ptr<StateUpdater<safepower_agent_proto::SystemState>>
       system_state_updater_;