meta_srv/service/
config.rs

1// Copyright 2023 Greptime Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use 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}