xref: /aosp_15_r20/external/federated-compute/fcp/client/event_publisher.h (revision 14675a029014e728ec732f129a32e299b2da0601)
1*14675a02SAndroid Build Coastguard Worker /*
2*14675a02SAndroid Build Coastguard Worker  * Copyright 2019 Google LLC
3*14675a02SAndroid Build Coastguard Worker  *
4*14675a02SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*14675a02SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*14675a02SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*14675a02SAndroid Build Coastguard Worker  *
8*14675a02SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*14675a02SAndroid Build Coastguard Worker  *
10*14675a02SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*14675a02SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*14675a02SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*14675a02SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*14675a02SAndroid Build Coastguard Worker  * limitations under the License.
15*14675a02SAndroid Build Coastguard Worker  */
16*14675a02SAndroid Build Coastguard Worker #ifndef FCP_CLIENT_EVENT_PUBLISHER_H_
17*14675a02SAndroid Build Coastguard Worker #define FCP_CLIENT_EVENT_PUBLISHER_H_
18*14675a02SAndroid Build Coastguard Worker 
19*14675a02SAndroid Build Coastguard Worker #include <cstdint>
20*14675a02SAndroid Build Coastguard Worker #include <string>
21*14675a02SAndroid Build Coastguard Worker 
22*14675a02SAndroid Build Coastguard Worker #include "absl/container/flat_hash_map.h"
23*14675a02SAndroid Build Coastguard Worker #include "absl/status/status.h"
24*14675a02SAndroid Build Coastguard Worker #include "absl/strings/string_view.h"
25*14675a02SAndroid Build Coastguard Worker #include "absl/time/time.h"
26*14675a02SAndroid Build Coastguard Worker #include "fcp/client/stats.h"
27*14675a02SAndroid Build Coastguard Worker 
28*14675a02SAndroid Build Coastguard Worker namespace fcp {
29*14675a02SAndroid Build Coastguard Worker namespace client {
30*14675a02SAndroid Build Coastguard Worker 
31*14675a02SAndroid Build Coastguard Worker class SecAggEventPublisher;
32*14675a02SAndroid Build Coastguard Worker 
33*14675a02SAndroid Build Coastguard Worker // An interface for publishing events that occur during training. This is a
34*14675a02SAndroid Build Coastguard Worker // separate interface from LogManager because the reported events will typically
35*14675a02SAndroid Build Coastguard Worker // be both reported to a cloud monitoring backend and to the Federated server as
36*14675a02SAndroid Build Coastguard Worker // part of publishing results.
37*14675a02SAndroid Build Coastguard Worker // All methods in here either succeed with OK, or fail with INVALID_ARGUMENT.
38*14675a02SAndroid Build Coastguard Worker class EventPublisher {
39*14675a02SAndroid Build Coastguard Worker  public:
40*14675a02SAndroid Build Coastguard Worker   virtual ~EventPublisher() = default;
41*14675a02SAndroid Build Coastguard Worker 
42*14675a02SAndroid Build Coastguard Worker   // Publishes that the device is about to issue an eligibility eval check in
43*14675a02SAndroid Build Coastguard Worker   // with the server.
44*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalCheckin() = 0;
45*14675a02SAndroid Build Coastguard Worker 
46*14675a02SAndroid Build Coastguard Worker   // Publishes that the device has finished its eligibility eval checkin with
47*14675a02SAndroid Build Coastguard Worker   // the server, and received the URIs to download the eligibility eval plan
48*14675a02SAndroid Build Coastguard Worker   // with, but hasn't actually downloaded them yet, along with information
49*14675a02SAndroid Build Coastguard Worker   // how much data was transferred up to this point and how long that took.
50*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalPlanUriReceived(
51*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Duration phase_duration) = 0;
52*14675a02SAndroid Build Coastguard Worker 
53*14675a02SAndroid Build Coastguard Worker   // Publishes that the device has finished its eligibility eval checkin with
54*14675a02SAndroid Build Coastguard Worker   // the server, and received an eligibility eval plan, along with information
55*14675a02SAndroid Build Coastguard Worker   // how much data was transferred and how long that took.
56*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalPlanReceived(
57*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Duration phase_duration) = 0;
58*14675a02SAndroid Build Coastguard Worker 
59*14675a02SAndroid Build Coastguard Worker   // Publishes that the server did not return an eligibility eval task to the
60*14675a02SAndroid Build Coastguard Worker   // client, along with information how much data was transferred and how long
61*14675a02SAndroid Build Coastguard Worker   // that took.
62*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalNotConfigured(
63*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Duration phase_duration) = 0;
64*14675a02SAndroid Build Coastguard Worker 
65*14675a02SAndroid Build Coastguard Worker   // Publishes that the server rejected the device's eligibility eval checkin,
66*14675a02SAndroid Build Coastguard Worker   // along with information how much data was downloaded and how long that took.
67*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalRejected(
68*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Duration phase_duration) = 0;
69*14675a02SAndroid Build Coastguard Worker 
70*14675a02SAndroid Build Coastguard Worker   // Publishes that the device is about to check in with the server.
71*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckin() = 0;
72*14675a02SAndroid Build Coastguard Worker 
73*14675a02SAndroid Build Coastguard Worker   // Publishes that the device has finished checking in with the server, along
74*14675a02SAndroid Build Coastguard Worker   // with information how much data was downloaded and how long that took.
75*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckinFinished(const NetworkStats& network_stats,
76*14675a02SAndroid Build Coastguard Worker                                       absl::Duration phase_duration) = 0;
77*14675a02SAndroid Build Coastguard Worker 
78*14675a02SAndroid Build Coastguard Worker   // Publishes that the server rejected the device.
79*14675a02SAndroid Build Coastguard Worker   virtual void PublishRejected() = 0;
80*14675a02SAndroid Build Coastguard Worker 
81*14675a02SAndroid Build Coastguard Worker   // Publishes that the device is about to report the results of a federated
82*14675a02SAndroid Build Coastguard Worker   // computation to the server.
83*14675a02SAndroid Build Coastguard Worker   virtual void PublishReportStarted(int64_t report_size_bytes) = 0;
84*14675a02SAndroid Build Coastguard Worker 
85*14675a02SAndroid Build Coastguard Worker   // Publishes that the device has successfully reported its results to the
86*14675a02SAndroid Build Coastguard Worker   // server and received instructions on when to reconnect.
87*14675a02SAndroid Build Coastguard Worker   virtual void PublishReportFinished(const NetworkStats& network_stats,
88*14675a02SAndroid Build Coastguard Worker                                      absl::Duration report_duration) = 0;
89*14675a02SAndroid Build Coastguard Worker 
90*14675a02SAndroid Build Coastguard Worker   // Publishes that plan execution has started.
91*14675a02SAndroid Build Coastguard Worker   virtual void PublishPlanExecutionStarted() = 0;
92*14675a02SAndroid Build Coastguard Worker 
93*14675a02SAndroid Build Coastguard Worker   // Publishes a TensorFlow error that happened in the given ClientExecution.
94*14675a02SAndroid Build Coastguard Worker   virtual void PublishTensorFlowError(int example_count,
95*14675a02SAndroid Build Coastguard Worker                                       absl::string_view error_message) = 0;
96*14675a02SAndroid Build Coastguard Worker 
97*14675a02SAndroid Build Coastguard Worker   // Publishes an I/O error (e.g. disk, network) that happened in the given
98*14675a02SAndroid Build Coastguard Worker   // ClientExecution.
99*14675a02SAndroid Build Coastguard Worker   virtual void PublishIoError(absl::string_view error_message) = 0;
100*14675a02SAndroid Build Coastguard Worker 
101*14675a02SAndroid Build Coastguard Worker   // Publishes an ExampleSelector error from the given ClientExecution.
102*14675a02SAndroid Build Coastguard Worker   virtual void PublishExampleSelectorError(int example_count,
103*14675a02SAndroid Build Coastguard Worker                                            absl::string_view error_message) = 0;
104*14675a02SAndroid Build Coastguard Worker 
105*14675a02SAndroid Build Coastguard Worker   // Publishes an interruption event for the given client execution.
106*14675a02SAndroid Build Coastguard Worker   virtual void PublishInterruption(const ExampleStats& example_stats,
107*14675a02SAndroid Build Coastguard Worker                                    absl::Time start_time) = 0;
108*14675a02SAndroid Build Coastguard Worker 
109*14675a02SAndroid Build Coastguard Worker   // Publishes an event that plan execution is complete.
110*14675a02SAndroid Build Coastguard Worker   virtual void PublishPlanCompleted(const ExampleStats& example_stats,
111*14675a02SAndroid Build Coastguard Worker                                     absl::Time start_time) = 0;
112*14675a02SAndroid Build Coastguard Worker   // Publishes that the task didn't start.
113*14675a02SAndroid Build Coastguard Worker   virtual void PublishTaskNotStarted(absl::string_view error_message) = 0;
114*14675a02SAndroid Build Coastguard Worker 
115*14675a02SAndroid Build Coastguard Worker   // Publishes that the federated compute runtime failed to initialize a
116*14675a02SAndroid Build Coastguard Worker   // noncritical component, but execution continued.
117*14675a02SAndroid Build Coastguard Worker   virtual void PublishNonfatalInitializationError(
118*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message) = 0;
119*14675a02SAndroid Build Coastguard Worker   // Publishes that the federated compute runtime failed to initialize a
120*14675a02SAndroid Build Coastguard Worker   // component, and execution was halted.
121*14675a02SAndroid Build Coastguard Worker   virtual void PublishFatalInitializationError(
122*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message) = 0;
123*14675a02SAndroid Build Coastguard Worker 
124*14675a02SAndroid Build Coastguard Worker   // Publish that an IO error was encountered during eligibility eval check-in.
125*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalCheckinIoError(
126*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
127*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
128*14675a02SAndroid Build Coastguard Worker   // Publish that the eligibility eval check-in is interrupted by the client.
129*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalCheckinClientInterrupted(
130*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
131*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
132*14675a02SAndroid Build Coastguard Worker   // Publish that the eligibility eval check-in is aborted by the server.
133*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalCheckinServerAborted(
134*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
135*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
136*14675a02SAndroid Build Coastguard Worker   // Publish that the eligibility eval check-in returned an invalid payload.
137*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalCheckinErrorInvalidPayload(
138*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
139*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
140*14675a02SAndroid Build Coastguard Worker   // Publish an eligibility eval task starts computation.
141*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalComputationStarted() = 0;
142*14675a02SAndroid Build Coastguard Worker   // Publish that the eligibility eval task is invalid.
143*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalComputationInvalidArgument(
144*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const ExampleStats& example_stats,
145*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
146*14675a02SAndroid Build Coastguard Worker   // Publish an example iterator error occurred during eligibility eval task.
147*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalComputationExampleIteratorError(
148*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const ExampleStats& example_stats,
149*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
150*14675a02SAndroid Build Coastguard Worker   // Publish that a tensorflow error occurred during eligibility eval task.
151*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalComputationTensorflowError(
152*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const ExampleStats& example_stats,
153*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
154*14675a02SAndroid Build Coastguard Worker   // Publish that the client has interrupted the eligibility eval task.
155*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalComputationInterrupted(
156*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const ExampleStats& example_stats,
157*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
158*14675a02SAndroid Build Coastguard Worker   // Publish an eligibility eval task finished.
159*14675a02SAndroid Build Coastguard Worker   virtual void PublishEligibilityEvalComputationCompleted(
160*14675a02SAndroid Build Coastguard Worker       const ExampleStats& example_stats, absl::Duration phase_duration) = 0;
161*14675a02SAndroid Build Coastguard Worker   // Publish an IO error occurred during regular check-in.
162*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckinIoError(absl::string_view error_message,
163*14675a02SAndroid Build Coastguard Worker                                      const NetworkStats& network_stats,
164*14675a02SAndroid Build Coastguard Worker                                      absl::Duration phase_duration) = 0;
165*14675a02SAndroid Build Coastguard Worker   // Publish that the client interrupted the regular check-in.
166*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckinClientInterrupted(
167*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
168*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
169*14675a02SAndroid Build Coastguard Worker   // Publish that the server aborted the regular check-in.
170*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckinServerAborted(absl::string_view error_message,
171*14675a02SAndroid Build Coastguard Worker                                            const NetworkStats& network_stats,
172*14675a02SAndroid Build Coastguard Worker                                            absl::Duration phase_duration) = 0;
173*14675a02SAndroid Build Coastguard Worker   // Publish that an invalid payload was downloaded from the regular check-in.
174*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckinInvalidPayload(absl::string_view error_message,
175*14675a02SAndroid Build Coastguard Worker                                             const NetworkStats& network_stats,
176*14675a02SAndroid Build Coastguard Worker                                             absl::Duration phase_duration) = 0;
177*14675a02SAndroid Build Coastguard Worker   // Publishes that the server rejected the device, also logs network stats and
178*14675a02SAndroid Build Coastguard Worker   // duration.
179*14675a02SAndroid Build Coastguard Worker   virtual void PublishRejected(const NetworkStats& network_stats,
180*14675a02SAndroid Build Coastguard Worker                                absl::Duration phase_duration) = 0;
181*14675a02SAndroid Build Coastguard Worker 
182*14675a02SAndroid Build Coastguard Worker   // Publishes that the device has finished checking in with the server and
183*14675a02SAndroid Build Coastguard Worker   // received URIs to download the plan and checkpoint with, but hasn't yet
184*14675a02SAndroid Build Coastguard Worker   // downloaded those, along with information how much data was transferred up
185*14675a02SAndroid Build Coastguard Worker   // to this point and how long that took.
186*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckinPlanUriReceived(const NetworkStats& network_stats,
187*14675a02SAndroid Build Coastguard Worker                                              absl::Duration phase_duration) = 0;
188*14675a02SAndroid Build Coastguard Worker   // Publishes that the device has finished checking in with the server, along
189*14675a02SAndroid Build Coastguard Worker   // with information how much data was transferred and how long that took.
190*14675a02SAndroid Build Coastguard Worker   virtual void PublishCheckinFinishedV2(const NetworkStats& network_stats,
191*14675a02SAndroid Build Coastguard Worker                                         absl::Duration phase_duration) = 0;
192*14675a02SAndroid Build Coastguard Worker   // Publishes that plan execution has started.
193*14675a02SAndroid Build Coastguard Worker   virtual void PublishComputationStarted() = 0;
194*14675a02SAndroid Build Coastguard Worker   // Publish that the task is invalid.
195*14675a02SAndroid Build Coastguard Worker   virtual void PublishComputationInvalidArgument(
196*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const ExampleStats& example_stats,
197*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Duration phase_duration) = 0;
198*14675a02SAndroid Build Coastguard Worker   // Publish that an IO error occurred during computation.
199*14675a02SAndroid Build Coastguard Worker   virtual void PublishComputationIOError(absl::string_view error_message,
200*14675a02SAndroid Build Coastguard Worker                                          const ExampleStats& example_stats,
201*14675a02SAndroid Build Coastguard Worker                                          const NetworkStats& network_stats,
202*14675a02SAndroid Build Coastguard Worker                                          absl::Duration phase_duration) = 0;
203*14675a02SAndroid Build Coastguard Worker   // Publish that an example iterator error occurred during computation.
204*14675a02SAndroid Build Coastguard Worker   virtual void PublishComputationExampleIteratorError(
205*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const ExampleStats& example_stats,
206*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Duration phase_duration) = 0;
207*14675a02SAndroid Build Coastguard Worker   // Publish that an tensorflow error occurred during computation.
208*14675a02SAndroid Build Coastguard Worker   virtual void PublishComputationTensorflowError(
209*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const ExampleStats& example_stats,
210*14675a02SAndroid Build Coastguard Worker       const NetworkStats& network_stats, absl::Duration phase_duration) = 0;
211*14675a02SAndroid Build Coastguard Worker   // Publish that the task computation is interrupted.
212*14675a02SAndroid Build Coastguard Worker   virtual void PublishComputationInterrupted(absl::string_view error_message,
213*14675a02SAndroid Build Coastguard Worker                                              const ExampleStats& example_stats,
214*14675a02SAndroid Build Coastguard Worker                                              const NetworkStats& network_stats,
215*14675a02SAndroid Build Coastguard Worker                                              absl::Duration phase_duration) = 0;
216*14675a02SAndroid Build Coastguard Worker   // Publishes an event that plan execution is complete.
217*14675a02SAndroid Build Coastguard Worker   virtual void PublishComputationCompleted(const ExampleStats& example_stats,
218*14675a02SAndroid Build Coastguard Worker                                            const NetworkStats& network_stats,
219*14675a02SAndroid Build Coastguard Worker                                            absl::Duration phase_duration) = 0;
220*14675a02SAndroid Build Coastguard Worker   // Publish that the client starts to upload result.
221*14675a02SAndroid Build Coastguard Worker   virtual void PublishResultUploadStarted() = 0;
222*14675a02SAndroid Build Coastguard Worker   // Publish that an IO error occurred during result upload.
223*14675a02SAndroid Build Coastguard Worker   virtual void PublishResultUploadIOError(absl::string_view error_message,
224*14675a02SAndroid Build Coastguard Worker                                           const NetworkStats& network_stats,
225*14675a02SAndroid Build Coastguard Worker                                           absl::Duration phase_duration) = 0;
226*14675a02SAndroid Build Coastguard Worker   // Publish that the client has interrupted the result upload.
227*14675a02SAndroid Build Coastguard Worker   virtual void PublishResultUploadClientInterrupted(
228*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
229*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
230*14675a02SAndroid Build Coastguard Worker   // Publish hat the server has aborted the result upload.
231*14675a02SAndroid Build Coastguard Worker   virtual void PublishResultUploadServerAborted(
232*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
233*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
234*14675a02SAndroid Build Coastguard Worker   // Publish that the result upload is completed.
235*14675a02SAndroid Build Coastguard Worker   virtual void PublishResultUploadCompleted(const NetworkStats& network_stats,
236*14675a02SAndroid Build Coastguard Worker                                             absl::Duration phase_duration) = 0;
237*14675a02SAndroid Build Coastguard Worker   // Publish that the task computation has failed, and the client starts to
238*14675a02SAndroid Build Coastguard Worker   // upload the failure to the server.
239*14675a02SAndroid Build Coastguard Worker   virtual void PublishFailureUploadStarted() = 0;
240*14675a02SAndroid Build Coastguard Worker   // Publish that an IO error occurred during failure upload.
241*14675a02SAndroid Build Coastguard Worker   virtual void PublishFailureUploadIOError(absl::string_view error_message,
242*14675a02SAndroid Build Coastguard Worker                                            const NetworkStats& network_stats,
243*14675a02SAndroid Build Coastguard Worker                                            absl::Duration phase_duration) = 0;
244*14675a02SAndroid Build Coastguard Worker   // Publish that the client has interrupted the failure upload.
245*14675a02SAndroid Build Coastguard Worker   virtual void PublishFailureUploadClientInterrupted(
246*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
247*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
248*14675a02SAndroid Build Coastguard Worker   // Publish that the server has aborted the failure upload.
249*14675a02SAndroid Build Coastguard Worker   virtual void PublishFailureUploadServerAborted(
250*14675a02SAndroid Build Coastguard Worker       absl::string_view error_message, const NetworkStats& network_stats,
251*14675a02SAndroid Build Coastguard Worker       absl::Duration phase_duration) = 0;
252*14675a02SAndroid Build Coastguard Worker   // Publish that the failure upload completed.
253*14675a02SAndroid Build Coastguard Worker   virtual void PublishFailureUploadCompleted(const NetworkStats& network_stats,
254*14675a02SAndroid Build Coastguard Worker                                              absl::Duration phase_duration) = 0;
255*14675a02SAndroid Build Coastguard Worker 
256*14675a02SAndroid Build Coastguard Worker   // After calling this function, all subsequently published events will be
257*14675a02SAndroid Build Coastguard Worker   // annotated with the specified model_identifier. This value is typically
258*14675a02SAndroid Build Coastguard Worker   // provided by the federated server and used on events resulting from
259*14675a02SAndroid Build Coastguard Worker   // PublishEligibilityEvalCheckinFinished(), PublishCheckinFinished() and
260*14675a02SAndroid Build Coastguard Worker   // later.
261*14675a02SAndroid Build Coastguard Worker   //
262*14675a02SAndroid Build Coastguard Worker   // Note that this method may be called multiple times with different values,
263*14675a02SAndroid Build Coastguard Worker   // if over the course of a training session multiple models are executed.
264*14675a02SAndroid Build Coastguard Worker   virtual void SetModelIdentifier(const std::string& model_identifier) = 0;
265*14675a02SAndroid Build Coastguard Worker 
266*14675a02SAndroid Build Coastguard Worker   // Returns a pointer to a publisher which records secure aggregation protocol
267*14675a02SAndroid Build Coastguard Worker   // events.  The returned value must not be nullptr.
268*14675a02SAndroid Build Coastguard Worker   virtual SecAggEventPublisher* secagg_event_publisher() = 0;
269*14675a02SAndroid Build Coastguard Worker };
270*14675a02SAndroid Build Coastguard Worker 
271*14675a02SAndroid Build Coastguard Worker }  // namespace client
272*14675a02SAndroid Build Coastguard Worker }  // namespace fcp
273*14675a02SAndroid Build Coastguard Worker 
274*14675a02SAndroid Build Coastguard Worker #endif  // FCP_CLIENT_EVENT_PUBLISHER_H_
275