Config.cpp 33.2 KB
Newer Older
J
jinhai 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

G
groot 已提交
18
#include "server/Config.h"
G
groot 已提交
19 20 21 22 23 24

#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <iostream>
Y
yudong.cai 已提交
25
#include <algorithm>
G
groot 已提交
26 27
#include <vector>
#include <string>
G
groot 已提交
28

G
groot 已提交
29
#include "config/ConfigMgr.h"
G
groot 已提交
30 31
#include "utils/CommonUtil.h"
#include "utils/ValidationUtil.h"
G
groot 已提交
32 33

namespace zilliz {
J
jinhai 已提交
34
namespace milvus {
G
groot 已提交
35 36
namespace server {

Y
yudong.cai 已提交
37
constexpr uint64_t GB = 1UL << 30;
G
groot 已提交
38

39 40 41 42
Config &
Config::GetInstance() {
    static Config config_inst;
    return config_inst;
G
groot 已提交
43 44
}

G
groot 已提交
45
Status
46
Config::LoadConfigFile(const std::string &filename) {
47
    if (filename.empty()) {
Y
yudong.cai 已提交
48 49
        std::cerr << "ERROR: need specify config file" << std::endl;
        exit(1);
G
groot 已提交
50
    }
Y
yudong.cai 已提交
51 52
    struct stat dirStat;
    int statOK = stat(filename.c_str(), &dirStat);
G
groot 已提交
53
    if (statOK != 0) {
Y
yudong.cai 已提交
54 55
        std::cerr << "ERROR: Config file not exist: " << filename << std::endl;
        exit(1);
G
groot 已提交
56 57 58
    }

    try {
59
        ConfigMgr *mgr = const_cast<ConfigMgr *>(ConfigMgr::GetInstance());
G
groot 已提交
60
        ErrorCode err = mgr->LoadConfigFile(filename);
61
        if (err != 0) {
Y
yudong.cai 已提交
62 63
            std::cerr << "Server failed to load config file: " << filename << std::endl;
            exit(1);
G
groot 已提交
64 65
        }
    }
66
    catch (YAML::Exception &e) {
Y
yudong.cai 已提交
67 68
        std::cerr << "Server failed to load config file: " << filename << std::endl;
        exit(1);
G
groot 已提交
69 70
    }

G
groot 已提交
71
    return Status::OK();
G
groot 已提交
72 73
}

Y
yudong.cai 已提交
74
void
G
groot 已提交
75
Config::PrintConfigSection(const std::string &config_node_name) {
Y
yudong.cai 已提交
76 77 78
    std::cout << std::endl;
    std::cout << config_node_name << ":" << std::endl;
    if (config_map_.find(config_node_name) != config_map_.end()) {
G
groot 已提交
79
        for (auto item : config_map_[config_node_name]) {
Y
yudong.cai 已提交
80 81
            std::cout << item.first << ": " << item.second << std::endl;
        }
Z
zhiru 已提交
82 83 84
    }
}

Y
yudong.cai 已提交
85 86 87 88 89 90 91 92 93 94 95
void
Config::PrintAll() {
    PrintConfigSection(CONFIG_SERVER);
    PrintConfigSection(CONFIG_DB);
    PrintConfigSection(CONFIG_CACHE);
    PrintConfigSection(CONFIG_METRIC);
    PrintConfigSection(CONFIG_ENGINE);
    PrintConfigSection(CONFIG_RESOURCE);
}

////////////////////////////////////////////////////////////////////////////////
G
groot 已提交
96
Status
Y
yudong.cai 已提交
97
Config::CheckServerConfigAddress(const std::string &value) {
Y
yudong.cai 已提交
98 99
    if (!ValidationUtil::ValidateIpAddress(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid server config address: " + value);
Z
zhiru 已提交
100
    }
Y
yudong.cai 已提交
101 102
    return Status::OK();
}
Z
zhiru 已提交
103

Y
yudong.cai 已提交
104
Status
Y
yudong.cai 已提交
105
Config::CheckServerConfigPort(const std::string &value) {
Y
yudong.cai 已提交
106 107
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid server config port: " + value);
108
    } else {
Y
yudong.cai 已提交
109
        int32_t port = std::stoi(value);
110
        if (!(port > 1024 && port < 65535)) {
Y
yudong.cai 已提交
111
            return Status(SERVER_INVALID_ARGUMENT, "Server config port out of range (1024, 65535): " + value);
Z
zhiru 已提交
112 113
        }
    }
Y
yudong.cai 已提交
114 115
    return Status::OK();
}
Z
zhiru 已提交
116

Y
yudong.cai 已提交
117
Status
Y
yudong.cai 已提交
118
Config::CheckServerConfigMode(const std::string &value) {
Y
yudong.cai 已提交
119 120
    if (value != "single" && value != "cluster" && value != "read_only") {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid server config mode [single, cluster, read_only]: " + value);
G
groot 已提交
121
    }
Y
yudong.cai 已提交
122 123
    return Status::OK();
}
G
groot 已提交
124

Y
yudong.cai 已提交
125
Status
Y
yudong.cai 已提交
126
Config::CheckServerConfigTimeZone(const std::string &value) {
Y
yudong.cai 已提交
127 128
    if (value.length() <= 3) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid server config time_zone: " + value);
129
    } else {
Y
yudong.cai 已提交
130 131
        if (value.substr(0, 3) != "UTC") {
            return Status(SERVER_INVALID_ARGUMENT, "Invalid server config time_zone: " + value);
132 133
        } else {
            try {
Y
yudong.cai 已提交
134
                stoi(value.substr(3));
135
            } catch (...) {
Y
yudong.cai 已提交
136
                return Status(SERVER_INVALID_ARGUMENT, "Invalid server config time_zone: " + value);
137
            }
138 139
        }
    }
Y
yudong.cai 已提交
140
    return Status::OK();
Z
zhiru 已提交
141 142
}

G
groot 已提交
143
Status
Y
yudong.cai 已提交
144 145 146
Config::CheckDBConfigPath(const std::string &value) {
    if (value.empty()) {
        return Status(SERVER_INVALID_ARGUMENT, "DB config path empty");
Z
zhiru 已提交
147
    }
Y
yudong.cai 已提交
148 149
    return Status::OK();
}
Z
zhiru 已提交
150

Y
yudong.cai 已提交
151 152 153 154 155
Status
Config::CheckDBConfigSlavePath(const std::string &value) {
    return Status::OK();
}

Y
yudong.cai 已提交
156 157 158 159
Status
Config::CheckDBConfigBackendUrl(const std::string &value) {
    if (!ValidationUtil::ValidateDbURI(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config backend_url: " + value);
Z
zhiru 已提交
160
    }
Y
yudong.cai 已提交
161 162
    return Status::OK();
}
Z
zhiru 已提交
163

Y
yudong.cai 已提交
164 165 166 167
Status
Config::CheckDBConfigArchiveDiskThreshold(const std::string &value) {
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config archive_disk_threshold: " + value);
Z
zhiru 已提交
168
    }
Y
yudong.cai 已提交
169 170
    return Status::OK();
}
Z
zhiru 已提交
171

Y
yudong.cai 已提交
172 173 174 175
Status
Config::CheckDBConfigArchiveDaysThreshold(const std::string &value) {
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config archive_days_threshold: " + value);
Z
zhiru 已提交
176
    }
Y
yudong.cai 已提交
177 178
    return Status::OK();
}
Z
zhiru 已提交
179

Y
yudong.cai 已提交
180 181 182 183
Status
Config::CheckDBConfigBufferSize(const std::string &value) {
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config buffer_size: " + value);
184
    } else {
Y
yudong.cai 已提交
185
        int64_t buffer_size = std::stoi(value) * GB;
G
groot 已提交
186
        uint64_t total_mem = 0, free_mem = 0;
Z
zhiru 已提交
187
        CommonUtil::GetSystemMemInfo(total_mem, free_mem);
Y
yudong.cai 已提交
188
        if (buffer_size >= total_mem) {
Y
yudong.cai 已提交
189
            return Status(SERVER_INVALID_ARGUMENT, "DB config buffer_size exceed system memory: " + value);
Z
zhiru 已提交
190 191
        }
    }
Y
yudong.cai 已提交
192 193
    return Status::OK();
}
Z
zhiru 已提交
194

Y
yudong.cai 已提交
195 196 197 198
Status
Config::CheckDBConfigBuildIndexGPU(const std::string &value) {
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config build_index_gpu: " + value);
G
groot 已提交
199
    } else {
Y
yudong.cai 已提交
200
        int32_t gpu_index = std::stoi(value);
G
groot 已提交
201
        if (!ValidationUtil::ValidateGpuIndex(gpu_index).ok()) {
Y
yudong.cai 已提交
202
            return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config build_index_gpu: " + value);
G
groot 已提交
203 204
        }
    }
Y
yudong.cai 已提交
205
    return Status::OK();
Z
zhiru 已提交
206 207
}

G
groot 已提交
208
Status
G
groot 已提交
209
Config::CheckMetricConfigAutoBootup(const std::string &value) {
Y
yudong.cai 已提交
210 211
    if (!ValidationUtil::ValidateStringIsBool(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid metric config auto_bootup: " + value);
Z
zhiru 已提交
212
    }
Y
yudong.cai 已提交
213 214
    return Status::OK();
}
Z
zhiru 已提交
215

Y
yudong.cai 已提交
216
Status
G
groot 已提交
217
Config::CheckMetricConfigCollector(const std::string &value) {
Y
yudong.cai 已提交
218 219 220 221 222 223
    if (value != "prometheus") {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid metric config collector: " + value);
    }
    return Status::OK();
}

Y
yudong.cai 已提交
224
Status
G
groot 已提交
225
Config::CheckMetricConfigPrometheusPort(const std::string &value) {
Y
yudong.cai 已提交
226 227
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid metric config prometheus_port: " + value);
Z
zhiru 已提交
228
    }
Y
yudong.cai 已提交
229
    return Status::OK();
Z
zhiru 已提交
230 231
}

G
groot 已提交
232
Status
G
groot 已提交
233
Config::CheckCacheConfigCpuMemCapacity(const std::string &value) {
Y
yudong.cai 已提交
234 235
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cpu_mem_capacity: " + value);
236
    } else {
Y
yudong.cai 已提交
237
        uint64_t cpu_cache_capacity = std::stoi(value) * GB;
G
groot 已提交
238
        uint64_t total_mem = 0, free_mem = 0;
Z
zhiru 已提交
239 240
        CommonUtil::GetSystemMemInfo(total_mem, free_mem);
        if (cpu_cache_capacity >= total_mem) {
Y
yudong.cai 已提交
241
            return Status(SERVER_INVALID_ARGUMENT, "Cache config cpu_mem_capacity exceed system memory: " + value);
242
        } else if (cpu_cache_capacity > (double) total_mem * 0.9) {
Y
yudong.cai 已提交
243
            std::cerr << "Warning: cpu_mem_capacity value is too big" << std::endl;
Z
zhiru 已提交
244
        }
G
groot 已提交
245

Y
yudong.cai 已提交
246 247 248 249 250 251
        int32_t buffer_size;
        Status s = GetDBConfigBufferSize(buffer_size);
        if (!s.ok()) return s;
        int64_t insert_buffer_size = buffer_size * GB;
        if (insert_buffer_size + cpu_cache_capacity >= total_mem) {
            return Status(SERVER_INVALID_ARGUMENT, "Sum of cpu_mem_capacity and buffer_size exceed system memory");
Z
zhiru 已提交
252 253
        }
    }
Y
yudong.cai 已提交
254 255
    return Status::OK();
}
Z
zhiru 已提交
256

Y
yudong.cai 已提交
257
Status
G
groot 已提交
258
Config::CheckCacheConfigCpuMemThreshold(const std::string &value) {
Y
yudong.cai 已提交
259 260 261 262 263 264 265
    if (!ValidationUtil::ValidateStringIsFloat(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cpu_mem_threshold: " + value);
    } else {
        float cpu_mem_threshold = std::stof(value);
        if (cpu_mem_threshold <= 0.0 || cpu_mem_threshold >= 1.0) {
            return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cpu_mem_threshold: " + value);
        }
266
    }
Y
yudong.cai 已提交
267 268
    return Status::OK();
}
269

Y
yudong.cai 已提交
270
Status
G
groot 已提交
271
Config::CheckCacheConfigGpuMemCapacity(const std::string &value) {
Y
yudong.cai 已提交
272 273
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        std::cerr << "ERROR: gpu_cache_capacity " << value << " is not a number" << std::endl;
274
    } else {
Y
yudong.cai 已提交
275 276 277 278
        uint64_t gpu_cache_capacity = std::stoi(value) * GB;
        int gpu_index;
        Status s = GetDBConfigBuildIndexGPU(gpu_index);
        if (!s.ok()) return s;
Z
zhiru 已提交
279
        size_t gpu_memory;
G
groot 已提交
280
        if (!ValidationUtil::GetGpuMemory(gpu_index, gpu_memory).ok()) {
Y
yudong.cai 已提交
281 282
            return Status(SERVER_UNEXPECTED_ERROR,
                          "Fail to get GPU memory for GPU device: " + std::to_string(gpu_index));
283
        } else if (gpu_cache_capacity >= gpu_memory) {
Y
yudong.cai 已提交
284 285
            return Status(SERVER_INVALID_ARGUMENT,
                          "Cache config gpu_mem_capacity exceed GPU memory: " + std::to_string(gpu_memory));
286
        } else if (gpu_cache_capacity > (double) gpu_memory * 0.9) {
Y
yudong.cai 已提交
287
            std::cerr << "Warning: gpu_mem_capacity value is too big" << std::endl;
Z
zhiru 已提交
288 289
        }
    }
Y
yudong.cai 已提交
290 291
    return Status::OK();
}
Z
zhiru 已提交
292

Y
yudong.cai 已提交
293
Status
G
groot 已提交
294
Config::CheckCacheConfigGpuMemThreshold(const std::string &value) {
Y
yudong.cai 已提交
295 296 297 298 299 300 301
    if (!ValidationUtil::ValidateStringIsFloat(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config gpu_mem_threshold: " + value);
    } else {
        float gpu_mem_threshold = std::stof(value);
        if (gpu_mem_threshold <= 0.0 || gpu_mem_threshold >= 1.0) {
            return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config gpu_mem_threshold: " + value);
        }
Z
zhiru 已提交
302
    }
Y
yudong.cai 已提交
303 304
    return Status::OK();
}
Z
zhiru 已提交
305

Y
yudong.cai 已提交
306
Status
G
groot 已提交
307
Config::CheckCacheConfigCacheInsertData(const std::string &value) {
Y
yudong.cai 已提交
308 309 310 311
    if (!ValidationUtil::ValidateStringIsBool(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cache_insert_data: " + value);
    }
    return Status::OK();
Z
zhiru 已提交
312 313
}

G
groot 已提交
314
Status
G
groot 已提交
315
Config::CheckEngineConfigBlasThreshold(const std::string &value) {
Y
yudong.cai 已提交
316 317
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid engine config blas threshold: " + value);
Z
zhiru 已提交
318
    }
Y
yudong.cai 已提交
319 320
    return Status::OK();
}
Z
zhiru 已提交
321

Y
yudong.cai 已提交
322
Status
G
groot 已提交
323
Config::CheckEngineConfigOmpThreadNum(const std::string &value) {
Y
yudong.cai 已提交
324 325
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid engine config omp_thread_num: " + value);
326
    } else {
Y
yudong.cai 已提交
327
        int32_t omp_thread = std::stoi(value);
Z
zhiru 已提交
328
        uint32_t sys_thread_cnt = 8;
329
        if (omp_thread > CommonUtil::GetSystemAvailableThreads(sys_thread_cnt)) {
Y
yudong.cai 已提交
330
            return Status(SERVER_INVALID_ARGUMENT, "Invalid engine config omp_thread_num: " + value);
Z
zhiru 已提交
331 332
        }
    }
Y
yudong.cai 已提交
333
    return Status::OK();
Z
zhiru 已提交
334 335
}

G
groot 已提交
336
Status
G
groot 已提交
337
Config::CheckResourceConfigMode(const std::string &value) {
Y
yudong.cai 已提交
338 339
    if (value != "simple") {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid resource config mode: " + value);
W
wxyu 已提交
340
    }
Y
yudong.cai 已提交
341 342
    return Status::OK();
}
G
groot 已提交
343

Y
yudong.cai 已提交
344
Status
G
groot 已提交
345
Config::CheckResourceConfigPool(const std::vector<std::string> &value) {
Y
yudong.cai 已提交
346 347
    if (value.empty()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid resource config pool");
G
groot 已提交
348
    }
Y
yudong.cai 已提交
349
    return Status::OK();
G
groot 已提交
350 351
}

Y
yudong.cai 已提交
352
////////////////////////////////////////////////////////////////////////////////
353
ConfigNode &
354
Config::GetConfigNode(const std::string &name) {
355 356
    ConfigMgr *mgr = ConfigMgr::GetInstance();
    ConfigNode &root_node = mgr->GetRootNode();
G
groot 已提交
357
    return root_node.GetChild(name);
G
groot 已提交
358 359
}

Y
yudong.cai 已提交
360 361 362 363
Status
Config::GetConfigValueInMem(const std::string &parent_key,
                            const std::string &child_key,
                            std::string &value) {
Y
yudong.cai 已提交
364
    std::lock_guard<std::mutex> lock(mutex_);
Y
yudong.cai 已提交
365 366 367 368 369 370 371 372 373
    if (config_map_.find(parent_key) != config_map_.end() &&
        config_map_[parent_key].find(child_key) != config_map_[parent_key].end()) {
        value = config_map_[parent_key][child_key];
        return Status::OK();
    } else {
        return Status(SERVER_UNEXPECTED_ERROR, "key not exist");
    }
}

Y
yudong.cai 已提交
374
void
Y
yudong.cai 已提交
375 376
Config::SetConfigValueInMem(const std::string &parent_key,
                            const std::string &child_key,
Y
yudong.cai 已提交
377
                            const std::string &value) {
Y
yudong.cai 已提交
378 379 380 381 382
    std::lock_guard<std::mutex> lock(mutex_);
    config_map_[parent_key][child_key] = value;
}

////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
383
/* server config */
Y
yudong.cai 已提交
384 385 386 387
std::string
Config::GetServerConfigStrAddress() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_ADDRESS, value).ok()) {
388 389
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_ADDRESS,
                                                      CONFIG_SERVER_ADDRESS_DEFAULT);
Y
yudong.cai 已提交
390
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_ADDRESS, value);
Y
yudong.cai 已提交
391
    }
Y
yudong.cai 已提交
392
    return value;
Y
yudong.cai 已提交
393 394
}

Y
yudong.cai 已提交
395 396 397 398
std::string
Config::GetServerConfigStrPort() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_PORT, value).ok()) {
399 400
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_PORT,
                                                      CONFIG_SERVER_PORT_DEFAULT);
Y
yudong.cai 已提交
401
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_PORT, value);
Y
yudong.cai 已提交
402
    }
Y
yudong.cai 已提交
403
    return value;
Y
yudong.cai 已提交
404 405
}

Y
yudong.cai 已提交
406 407 408 409
std::string
Config::GetServerConfigStrMode() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_MODE, value).ok()) {
410 411
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_MODE,
                                                      CONFIG_SERVER_MODE_DEFAULT);
Y
yudong.cai 已提交
412
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_MODE, value);
Y
yudong.cai 已提交
413
    }
Y
yudong.cai 已提交
414
    return value;
Y
yudong.cai 已提交
415 416
}

Y
yudong.cai 已提交
417 418 419 420
std::string
Config::GetServerConfigStrTimeZone() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_TIME_ZONE, value).ok()) {
421 422
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_TIME_ZONE,
                                                      CONFIG_SERVER_TIME_ZONE_DEFAULT);
Y
yudong.cai 已提交
423
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_TIME_ZONE, value);
Y
yudong.cai 已提交
424
    }
Y
yudong.cai 已提交
425
    return value;
Y
yudong.cai 已提交
426 427
}

Y
yudong.cai 已提交
428
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
429
/* db config */
Y
yudong.cai 已提交
430 431 432 433
std::string
Config::GetDBConfigStrPath() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_PATH, value).ok()) {
434 435
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_PATH,
                                                  CONFIG_DB_PATH_DEFAULT);
Y
yudong.cai 已提交
436
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_PATH, value);
Y
yudong.cai 已提交
437
    }
Y
yudong.cai 已提交
438
    return value;
Y
yudong.cai 已提交
439 440
}

Y
yudong.cai 已提交
441 442 443 444
std::string
Config::GetDBConfigStrSlavePath() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_SLAVE_PATH, value).ok()) {
445 446
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_SLAVE_PATH,
                                                  CONFIG_DB_SLAVE_PATH_DEFAULT);
Y
yudong.cai 已提交
447
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_SLAVE_PATH, value);
Y
yudong.cai 已提交
448
    }
Y
yudong.cai 已提交
449
    return value;
Y
yudong.cai 已提交
450 451
}

Y
yudong.cai 已提交
452 453 454 455
std::string
Config::GetDBConfigStrBackendUrl() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_BACKEND_URL, value).ok()) {
456 457
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_BACKEND_URL,
                                                  CONFIG_DB_BACKEND_URL_DEFAULT);
Y
yudong.cai 已提交
458
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BACKEND_URL, value);
Y
yudong.cai 已提交
459
    }
Y
yudong.cai 已提交
460
    return value;
Y
yudong.cai 已提交
461 462
}

Y
yudong.cai 已提交
463 464 465 466
std::string
Config::GetDBConfigStrArchiveDiskThreshold() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DISK_THRESHOLD, value).ok()) {
467 468
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_ARCHIVE_DISK_THRESHOLD,
                                                  CONFIG_DB_ARCHIVE_DISK_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
469
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DISK_THRESHOLD, value);
Y
yudong.cai 已提交
470
    }
Y
yudong.cai 已提交
471
    return value;
Y
yudong.cai 已提交
472 473
}

Y
yudong.cai 已提交
474 475 476 477
std::string
Config::GetDBConfigStrArchiveDaysThreshold() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DAYS_THRESHOLD, value).ok()) {
478 479
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_ARCHIVE_DAYS_THRESHOLD,
                                                  CONFIG_DB_ARCHIVE_DAYS_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
480
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DAYS_THRESHOLD, value);
Y
yudong.cai 已提交
481
    }
Y
yudong.cai 已提交
482
    return value;
Y
yudong.cai 已提交
483 484
}

Y
yudong.cai 已提交
485 486 487 488
std::string
Config::GetDBConfigStrBufferSize() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUFFER_SIZE, value).ok()) {
489 490
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_BUFFER_SIZE,
                                                  CONFIG_DB_BUFFER_SIZE_DEFAULT);
Y
yudong.cai 已提交
491
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUFFER_SIZE, value);
Y
yudong.cai 已提交
492
    }
Y
yudong.cai 已提交
493
    return value;
Y
yudong.cai 已提交
494 495
}

Y
yudong.cai 已提交
496 497 498 499
std::string
Config::GetDBConfigStrBuildIndexGPU() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUILD_INDEX_GPU, value).ok()) {
500 501
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_BUILD_INDEX_GPU,
                                                  CONFIG_DB_BUILD_INDEX_GPU_DEFAULT);
Y
yudong.cai 已提交
502
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUILD_INDEX_GPU, value);
Y
yudong.cai 已提交
503
    }
Y
yudong.cai 已提交
504
    return value;
Y
yudong.cai 已提交
505 506
}

Y
yudong.cai 已提交
507
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
508
/* metric config */
Y
yudong.cai 已提交
509 510 511 512
std::string
Config::GetMetricConfigStrAutoBootup() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_AUTO_BOOTUP, value).ok()) {
513 514
        value = GetConfigNode(CONFIG_METRIC).GetValue(CONFIG_METRIC_AUTO_BOOTUP,
                                                      CONFIG_METRIC_AUTO_BOOTUP_DEFAULT);
Y
yudong.cai 已提交
515
        SetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_AUTO_BOOTUP, value);
Y
yudong.cai 已提交
516
    }
Y
yudong.cai 已提交
517
    return value;
Y
yudong.cai 已提交
518 519
}

Y
yudong.cai 已提交
520 521 522 523
std::string
Config::GetMetricConfigStrCollector() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_COLLECTOR, value).ok()) {
524 525
        value = GetConfigNode(CONFIG_METRIC).GetValue(CONFIG_METRIC_COLLECTOR,
                                                      CONFIG_METRIC_COLLECTOR_DEFAULT);
Y
yudong.cai 已提交
526
        SetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_COLLECTOR, value);
Y
yudong.cai 已提交
527
    }
Y
yudong.cai 已提交
528
    return value;
Y
yudong.cai 已提交
529 530
}

Y
yudong.cai 已提交
531 532 533 534
std::string
Config::GetMetricConfigStrPrometheusPort() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_PROMETHEUS_PORT, value).ok()) {
535 536
        value = GetConfigNode(CONFIG_METRIC).GetValue(CONFIG_METRIC_PROMETHEUS_PORT,
                                                      CONFIG_METRIC_PROMETHEUS_PORT_DEFAULT);
Y
yudong.cai 已提交
537
        SetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_PROMETHEUS_PORT, value);
Y
yudong.cai 已提交
538
    }
Y
yudong.cai 已提交
539
    return value;
Y
yudong.cai 已提交
540 541
}

Y
yudong.cai 已提交
542
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
543
/* cache config */
Y
yudong.cai 已提交
544 545 546 547
std::string
Config::GetCacheConfigStrCpuMemCapacity() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_MEM_CAPACITY, value).ok()) {
548 549
        value = GetConfigNode(CONFIG_CACHE).GetValue(CONFIG_CACHE_CPU_MEM_CAPACITY,
                                                     CONFIG_CACHE_CPU_MEM_CAPACITY_DEFAULT);
Y
yudong.cai 已提交
550
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_MEM_CAPACITY, value);
Y
yudong.cai 已提交
551
    }
Y
yudong.cai 已提交
552
    return value;
Y
yudong.cai 已提交
553 554
}

Y
yudong.cai 已提交
555 556 557 558
std::string
Config::GetCacheConfigStrCpuMemThreshold() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_MEM_THRESHOLD, value).ok()) {
559 560
        value = GetConfigNode(CONFIG_CACHE).GetValue(CONFIG_CACHE_CPU_MEM_THRESHOLD,
                                                     CONFIG_CACHE_CPU_MEM_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
561
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_MEM_THRESHOLD, value);
Y
yudong.cai 已提交
562
    }
Y
yudong.cai 已提交
563
    return value;
Y
yudong.cai 已提交
564 565
}

Y
yudong.cai 已提交
566 567 568 569
std::string
Config::GetCacheConfigStrGpuMemCapacity() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_MEM_CAPACITY, value).ok()) {
570 571
        value = GetConfigNode(CONFIG_CACHE).GetValue(CONFIG_CACHE_GPU_MEM_CAPACITY,
                                                     CONFIG_CACHE_GPU_MEM_CAPACITY_DEFAULT);
Y
yudong.cai 已提交
572
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_MEM_CAPACITY, value);
Y
yudong.cai 已提交
573
    }
Y
yudong.cai 已提交
574
    return value;
Y
yudong.cai 已提交
575 576
}

Y
yudong.cai 已提交
577 578 579 580
std::string
Config::GetCacheConfigStrGpuMemThreshold() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_MEM_THRESHOLD, value).ok()) {
581 582
        value = GetConfigNode(CONFIG_CACHE).GetValue(CONFIG_CACHE_GPU_MEM_THRESHOLD,
                                                     CONFIG_CACHE_GPU_MEM_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
583
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_MEM_THRESHOLD, value);
Y
yudong.cai 已提交
584
    }
Y
yudong.cai 已提交
585
    return value;
Y
yudong.cai 已提交
586 587
}

Y
yudong.cai 已提交
588 589 590 591
std::string
Config::GetCacheConfigStrCacheInsertData() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CACHE_INSERT_DATA, value).ok()) {
592 593
        value = GetConfigNode(CONFIG_CACHE).GetValue(CONFIG_CACHE_CACHE_INSERT_DATA,
                                                     CONFIG_CACHE_CACHE_INSERT_DATA_DEFAULT);
Y
yudong.cai 已提交
594
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CACHE_INSERT_DATA, value);
Y
yudong.cai 已提交
595
    }
Y
yudong.cai 已提交
596
    return value;
Y
yudong.cai 已提交
597 598
}

Y
yudong.cai 已提交
599
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
600
/* engine config */
Y
yudong.cai 已提交
601 602 603 604
std::string
Config::GetEngineConfigStrBlasThreshold() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_BLAS_THRESHOLD, value).ok()) {
605 606
        value = GetConfigNode(CONFIG_ENGINE).GetValue(CONFIG_ENGINE_BLAS_THRESHOLD,
                                                      CONFIG_ENGINE_BLAS_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
607
        SetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_BLAS_THRESHOLD, value);
Y
yudong.cai 已提交
608
    }
Y
yudong.cai 已提交
609
    return value;
Y
yudong.cai 已提交
610 611
}

Y
yudong.cai 已提交
612 613 614 615
std::string
Config::GetEngineConfigStrOmpThreadNum() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_OMP_THREAD_NUM, value).ok()) {
616 617
        value = GetConfigNode(CONFIG_ENGINE).GetValue(CONFIG_ENGINE_OMP_THREAD_NUM,
                                                      CONFIG_ENGINE_OMP_THREAD_NUM_DEFAULT);
Y
yudong.cai 已提交
618
        SetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_OMP_THREAD_NUM, value);
Y
yudong.cai 已提交
619
    }
Y
yudong.cai 已提交
620
    return value;
Y
yudong.cai 已提交
621 622
}

Y
yudong.cai 已提交
623
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
624
/* resource config */
Y
yudong.cai 已提交
625 626 627 628
std::string
Config::GetResourceConfigStrMode() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_RESOURCE, CONFIG_RESOURCE_MODE, value).ok()) {
629 630
        value = GetConfigNode(CONFIG_RESOURCE).GetValue(CONFIG_RESOURCE_MODE,
                                                        CONFIG_RESOURCE_MODE_DEFAULT);
Y
yudong.cai 已提交
631
        SetConfigValueInMem(CONFIG_RESOURCE, CONFIG_RESOURCE_MODE, value);
Y
yudong.cai 已提交
632
    }
Y
yudong.cai 已提交
633
    return value;
Y
yudong.cai 已提交
634 635
}

636 637
////////////////////////////////////////////////////////////////////////////////
Status
G
groot 已提交
638
Config::GetServerConfigAddress(std::string &value) {
Y
yudong.cai 已提交
639 640
    value = GetServerConfigStrAddress();
    return CheckServerConfigAddress(value);
641 642 643
}

Status
G
groot 已提交
644
Config::GetServerConfigPort(std::string &value) {
Y
yudong.cai 已提交
645 646
    value = GetServerConfigStrPort();
    return CheckServerConfigPort(value);
647 648 649
}

Status
G
groot 已提交
650
Config::GetServerConfigMode(std::string &value) {
Y
yudong.cai 已提交
651 652
    value = GetServerConfigStrMode();
    return CheckServerConfigMode(value);
653 654 655
}

Status
G
groot 已提交
656
Config::GetServerConfigTimeZone(std::string &value) {
Y
yudong.cai 已提交
657 658
    value = GetServerConfigStrTimeZone();
    return CheckServerConfigTimeZone(value);
659 660 661
}

Status
G
groot 已提交
662
Config::GetDBConfigPath(std::string &value) {
Y
yudong.cai 已提交
663 664
    value = GetDBConfigStrPath();
    return CheckDBConfigPath(value);
665 666 667
}

Status
G
groot 已提交
668
Config::GetDBConfigSlavePath(std::string &value) {
Y
yudong.cai 已提交
669 670
    value = GetDBConfigStrSlavePath();
    return Status::OK();
671 672 673
}

Status
G
groot 已提交
674
Config::GetDBConfigBackendUrl(std::string &value) {
Y
yudong.cai 已提交
675 676
    value = GetDBConfigStrBackendUrl();
    return CheckDBConfigBackendUrl(value);
677 678 679
}

Status
G
groot 已提交
680
Config::GetDBConfigArchiveDiskThreshold(int32_t &value) {
Y
yudong.cai 已提交
681 682
    std::string str = GetDBConfigStrArchiveDiskThreshold();
    Status s = CheckDBConfigArchiveDiskThreshold(str);
683 684 685 686 687 688
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
689
Config::GetDBConfigArchiveDaysThreshold(int32_t &value) {
Y
yudong.cai 已提交
690 691
    std::string str = GetDBConfigStrArchiveDaysThreshold();
    Status s = CheckDBConfigArchiveDaysThreshold(str);
692 693 694 695 696 697
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
698
Config::GetDBConfigBufferSize(int32_t &value) {
Y
yudong.cai 已提交
699 700
    std::string str = GetDBConfigStrBufferSize();
    Status s = CheckDBConfigBufferSize(str);
701 702 703 704 705 706
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
707
Config::GetDBConfigBuildIndexGPU(int32_t &value) {
Y
yudong.cai 已提交
708 709
    std::string str = GetDBConfigStrBuildIndexGPU();
    Status s = CheckDBConfigBuildIndexGPU(str);
710 711 712 713 714 715
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
716
Config::GetMetricConfigAutoBootup(bool &value) {
Y
yudong.cai 已提交
717 718
    std::string str = GetMetricConfigStrAutoBootup();
    Status s = CheckMetricConfigPrometheusPort(str);
719 720 721 722 723 724 725
    if (!s.ok()) return s;
    std::transform(str.begin(), str.end(), str.begin(), ::tolower);
    value = (str == "true" || str == "on" || str == "yes" || str == "1");
    return Status::OK();
}

Status
G
groot 已提交
726
Config::GetMetricConfigCollector(std::string &value) {
Y
yudong.cai 已提交
727 728
    value = GetMetricConfigStrCollector();
    return Status::OK();
729 730 731
}

Status
G
groot 已提交
732
Config::GetMetricConfigPrometheusPort(std::string &value) {
Y
yudong.cai 已提交
733 734
    value = GetMetricConfigStrPrometheusPort();
    return CheckMetricConfigPrometheusPort(value);
735 736 737
}

Status
G
groot 已提交
738
Config::GetCacheConfigCpuMemCapacity(int32_t &value) {
Y
yudong.cai 已提交
739 740
    std::string str = GetCacheConfigStrCpuMemCapacity();
    Status s = CheckCacheConfigCpuMemCapacity(str);
741 742 743 744 745 746
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
747
Config::GetCacheConfigCpuMemThreshold(float &value) {
Y
yudong.cai 已提交
748 749
    std::string str = GetCacheConfigStrCpuMemThreshold();
    Status s = CheckCacheConfigCpuMemThreshold(str);
750 751 752 753 754 755
    if (!s.ok()) return s;
    value = std::stof(str);
    return Status::OK();
}

Status
G
groot 已提交
756
Config::GetCacheConfigGpuMemCapacity(int32_t &value) {
Y
yudong.cai 已提交
757 758
    std::string str = GetCacheConfigStrGpuMemCapacity();
    Status s = CheckCacheConfigGpuMemCapacity(str);
759 760 761 762 763 764
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
765
Config::GetCacheConfigGpuMemThreshold(float &value) {
Y
yudong.cai 已提交
766 767
    std::string str = GetCacheConfigStrGpuMemThreshold();
    Status s = CheckCacheConfigGpuMemThreshold(str);
768 769 770 771 772 773
    if (!s.ok()) return s;
    value = std::stof(str);
    return Status::OK();
}

Status
G
groot 已提交
774
Config::GetCacheConfigCacheInsertData(bool &value) {
Y
yudong.cai 已提交
775 776
    std::string str = GetCacheConfigStrCacheInsertData();
    Status s = CheckCacheConfigCacheInsertData(str);
777 778 779 780 781 782 783
    if (!s.ok()) return s;
    std::transform(str.begin(), str.end(), str.begin(), ::tolower);
    value = (str == "true" || str == "on" || str == "yes" || str == "1");
    return Status::OK();
}

Status
G
groot 已提交
784
Config::GetEngineConfigBlasThreshold(int32_t &value) {
Y
yudong.cai 已提交
785 786
    std::string str = GetEngineConfigStrBlasThreshold();
    Status s = CheckEngineConfigBlasThreshold(str);
787 788 789 790 791 792
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
793
Config::GetEngineConfigOmpThreadNum(int32_t &value) {
Y
yudong.cai 已提交
794 795
    std::string str = GetEngineConfigStrOmpThreadNum();
    Status s = CheckEngineConfigOmpThreadNum(str);
796 797 798 799 800 801
    if (!s.ok()) return s;
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
802
Config::GetResourceConfigMode(std::string &value) {
Y
yudong.cai 已提交
803 804
    value = GetResourceConfigStrMode();
    return CheckResourceConfigMode(value);
805 806 807
}

Status
G
groot 已提交
808
Config::GetResourceConfigPool(std::vector<std::string> &value) {
809 810
    ConfigNode resource_config = GetConfigNode(CONFIG_RESOURCE);
    value = resource_config.GetSequence(CONFIG_RESOURCE_POOL);
Y
yudong.cai 已提交
811
    return CheckResourceConfigPool(value);
Y
yudong.cai 已提交
812
}
G
groot 已提交
813

Y
yudong.cai 已提交
814 815 816
///////////////////////////////////////////////////////////////////////////////
/* server config */
Status
G
groot 已提交
817
Config::SetServerConfigAddress(const std::string &value) {
Y
yudong.cai 已提交
818 819 820 821 822 823 824
    Status s = CheckServerConfigAddress(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_ADDRESS, value);
    return Status::OK();
}

Status
G
groot 已提交
825
Config::SetServerConfigPort(const std::string &value) {
Y
yudong.cai 已提交
826 827 828 829 830 831 832
    Status s = CheckServerConfigPort(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_PORT, value);
    return Status::OK();
}

Status
G
groot 已提交
833
Config::SetServerConfigMode(const std::string &value) {
Y
yudong.cai 已提交
834 835 836 837 838 839 840
    Status s = CheckServerConfigMode(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_MODE, value);
    return Status::OK();
}

Status
G
groot 已提交
841
Config::SetServerConfigTimeZone(const std::string &value) {
Y
yudong.cai 已提交
842 843 844 845 846 847 848 849
    Status s = CheckServerConfigTimeZone(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_TIME_ZONE, value);
    return Status::OK();
}

/* db config */
Status
G
groot 已提交
850
Config::SetDBConfigPath(const std::string &value) {
Y
yudong.cai 已提交
851 852 853 854 855 856 857
    Status s = CheckDBConfigPath(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_PATH, value);
    return Status::OK();
}

Status
G
groot 已提交
858
Config::SetDBConfigSlavePath(const std::string &value) {
Y
yudong.cai 已提交
859 860 861 862 863 864 865
    Status s = CheckDBConfigSlavePath(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_SLAVE_PATH, value);
    return Status::OK();
}

Status
G
groot 已提交
866
Config::SetDBConfigBackendUrl(const std::string &value) {
Y
yudong.cai 已提交
867 868 869 870 871 872 873
    Status s = CheckDBConfigBackendUrl(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BACKEND_URL, value);
    return Status::OK();
}

Status
G
groot 已提交
874
Config::SetDBConfigArchiveDiskThreshold(const std::string &value) {
Y
yudong.cai 已提交
875 876 877 878 879 880 881
    Status s = CheckDBConfigArchiveDiskThreshold(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DISK_THRESHOLD, value);
    return Status::OK();
}

Status
G
groot 已提交
882
Config::SetDBConfigArchiveDaysThreshold(const std::string &value) {
Y
yudong.cai 已提交
883 884 885 886 887 888 889
    Status s = CheckDBConfigArchiveDaysThreshold(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DAYS_THRESHOLD, value);
    return Status::OK();
}

Status
G
groot 已提交
890
Config::SetDBConfigBufferSize(const std::string &value) {
Y
yudong.cai 已提交
891 892 893 894 895 896 897
    Status s = CheckDBConfigBufferSize(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUFFER_SIZE, value);
    return Status::OK();
}

Status
G
groot 已提交
898
Config::SetDBConfigBuildIndexGPU(const std::string &value) {
Y
yudong.cai 已提交
899 900 901 902 903 904 905 906
    Status s = CheckDBConfigBuildIndexGPU(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUILD_INDEX_GPU, value);
    return Status::OK();
}

/* metric config */
Status
G
groot 已提交
907
Config::SetMetricConfigAutoBootup(const std::string &value) {
Y
yudong.cai 已提交
908 909 910 911 912 913 914
    Status s = CheckMetricConfigAutoBootup(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_METRIC_AUTO_BOOTUP, value);
    return Status::OK();
}

Status
G
groot 已提交
915
Config::SetMetricConfigCollector(const std::string &value) {
Y
yudong.cai 已提交
916 917 918 919 920 921 922
    Status s = CheckMetricConfigCollector(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_METRIC_COLLECTOR, value);
    return Status::OK();
}

Status
G
groot 已提交
923
Config::SetMetricConfigPrometheusPort(const std::string &value) {
Y
yudong.cai 已提交
924 925 926 927 928 929 930 931
    Status s = CheckMetricConfigPrometheusPort(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_METRIC_PROMETHEUS_PORT, value);
    return Status::OK();
}

/* cache config */
Status
G
groot 已提交
932
Config::SetCacheConfigCpuMemCapacity(const std::string &value) {
Y
yudong.cai 已提交
933 934 935 936 937 938 939
    Status s = CheckCacheConfigCpuMemCapacity(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_CPU_MEM_CAPACITY, value);
    return Status::OK();
}

Status
G
groot 已提交
940
Config::SetCacheConfigCpuMemThreshold(const std::string &value) {
Y
yudong.cai 已提交
941 942 943 944 945 946 947
    Status s = CheckCacheConfigCpuMemThreshold(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_CPU_MEM_THRESHOLD, value);
    return Status::OK();
}

Status
G
groot 已提交
948
Config::SetCacheConfigGpuMemCapacity(const std::string &value) {
Y
yudong.cai 已提交
949 950 951 952 953 954 955
    Status s = CheckCacheConfigGpuMemCapacity(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_GPU_MEM_CAPACITY, value);
    return Status::OK();
}

Status
G
groot 已提交
956
Config::SetCacheConfigGpuMemThreshold(const std::string &value) {
Y
yudong.cai 已提交
957 958 959 960 961 962 963
    Status s = CheckCacheConfigGpuMemThreshold(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_GPU_MEM_THRESHOLD, value);
    return Status::OK();
}

Status
G
groot 已提交
964
Config::SetCacheConfigCacheInsertData(const std::string &value) {
Y
yudong.cai 已提交
965 966 967 968 969 970 971 972
    Status s = CheckCacheConfigCacheInsertData(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_CACHE_INSERT_DATA, value);
    return Status::OK();
}

/* engine config */
Status
G
groot 已提交
973
Config::SetEngineConfigBlasThreshold(const std::string &value) {
Y
yudong.cai 已提交
974 975 976 977 978 979 980
    Status s = CheckEngineConfigBlasThreshold(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_ENGINE_BLAS_THRESHOLD, value);
    return Status::OK();
}

Status
G
groot 已提交
981
Config::SetEngineConfigOmpThreadNum(const std::string &value) {
Y
yudong.cai 已提交
982 983 984 985 986 987 988 989
    Status s = CheckEngineConfigOmpThreadNum(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_ENGINE_OMP_THREAD_NUM, value);
    return Status::OK();
}

/* resource config */
Status
G
groot 已提交
990
Config::SetResourceConfigMode(const std::string &value) {
Y
yudong.cai 已提交
991 992 993 994 995 996
    Status s = CheckResourceConfigMode(value);
    if (!s.ok()) return s;
    SetConfigValueInMem(CONFIG_DB, CONFIG_RESOURCE_MODE, value);
    return Status::OK();
}

G
groot 已提交
997 998 999
} // namespace server
} // namespace milvus
} // namespace zilliz