meta_srv/service/
config.rs1use api::v1::meta::{PullConfigRequest, PullConfigResponse, ResponseHeader, config_server};
16use common_options::plugin_options::PluginOptionsSerializerRef;
17use common_telemetry::{info, warn};
18use snafu::ResultExt;
19use tonic::{Request, Response};
20
21use crate::error::SerializeConfigSnafu;
22use crate::metasrv::Metasrv;
23use crate::service::GrpcResult;
24
25#[async_trait::async_trait]
26impl config_server::Config for Metasrv {
27 async fn pull_config(&self, req: Request<PullConfigRequest>) -> GrpcResult<PullConfigResponse> {
28 let payload = match self.plugins().get::<PluginOptionsSerializerRef>() {
29 Some(p) => p
30 .serialize()
31 .inspect_err(|e| warn!(e; "Failed to serialize plugin options"))
32 .context(SerializeConfigSnafu)?,
33 None => String::new(),
34 };
35
36 let res = PullConfigResponse {
37 header: Some(ResponseHeader::success()),
38 payload,
39 };
40
41 let member_id = req.into_inner().header.as_ref().map(|h| h.member_id);
42 info!("Sending meta config to member: {member_id:?}");
43
44 Ok(Response::new(res))
45 }
46}