Config.cpp 39.4 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

G
groot 已提交
20
#include <stdlib.h>
G
groot 已提交
21 22 23
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
Y
yudong.cai 已提交
24
#include <algorithm>
G
groot 已提交
25
#include <iostream>
G
groot 已提交
26
#include <string>
G
groot 已提交
27
#include <vector>
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

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

G
groot 已提交
45
Status
G
groot 已提交
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 {
G
groot 已提交
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
        }
G
groot 已提交
65
    } catch (YAML::Exception& e) {
Y
yudong.cai 已提交
66 67
        std::cerr << "Server failed to load config file: " << filename << std::endl;
        exit(1);
G
groot 已提交
68 69
    }

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

Y
yudong.cai 已提交
73 74 75 76 77 78 79
Status
Config::ValidateConfig() {
    Status s;

    /* server config */
    std::string server_addr;
    s = GetServerConfigAddress(server_addr);
G
groot 已提交
80 81 82
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
83 84 85

    std::string server_port;
    s = GetServerConfigPort(server_port);
G
groot 已提交
86 87 88
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
89 90

    std::string server_mode;
Y
yudong.cai 已提交
91
    s = GetServerConfigDeployMode(server_mode);
G
groot 已提交
92 93 94
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
95 96 97

    std::string server_time_zone;
    s = GetServerConfigTimeZone(server_time_zone);
G
groot 已提交
98 99 100
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
101 102 103 104

    /* db config */
    std::string db_primary_path;
    s = GetDBConfigPrimaryPath(db_primary_path);
G
groot 已提交
105 106 107
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
108 109 110

    std::string db_secondary_path;
    s = GetDBConfigSecondaryPath(db_secondary_path);
G
groot 已提交
111 112 113
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
114 115 116

    std::string db_backend_url;
    s = GetDBConfigBackendUrl(db_backend_url);
G
groot 已提交
117 118 119
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
120 121 122

    int32_t db_archive_disk_threshold;
    s = GetDBConfigArchiveDiskThreshold(db_archive_disk_threshold);
G
groot 已提交
123 124 125
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
126 127 128

    int32_t db_archive_days_threshold;
    s = GetDBConfigArchiveDaysThreshold(db_archive_days_threshold);
G
groot 已提交
129 130 131
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
132 133 134

    int32_t db_insert_buffer_size;
    s = GetDBConfigInsertBufferSize(db_insert_buffer_size);
G
groot 已提交
135 136 137
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
138 139 140

    int32_t db_build_index_gpu;
    s = GetDBConfigBuildIndexGPU(db_build_index_gpu);
G
groot 已提交
141 142 143
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
144 145 146 147

    /* metric config */
    bool metric_enable_monitor;
    s = GetMetricConfigEnableMonitor(metric_enable_monitor);
G
groot 已提交
148 149 150
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
151 152 153

    std::string metric_collector;
    s = GetMetricConfigCollector(metric_collector);
G
groot 已提交
154 155 156
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
157 158 159

    std::string metric_prometheus_port;
    s = GetMetricConfigPrometheusPort(metric_prometheus_port);
G
groot 已提交
160 161 162
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
163 164

    /* cache config */
Y
yudong.cai 已提交
165 166
    int32_t cache_cpu_cache_capacity;
    s = GetCacheConfigCpuCacheCapacity(cache_cpu_cache_capacity);
G
groot 已提交
167 168 169
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
170

Y
yudong.cai 已提交
171 172
    float cache_cpu_cache_threshold;
    s = GetCacheConfigCpuCacheThreshold(cache_cpu_cache_threshold);
G
groot 已提交
173 174 175
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
176

Y
yudong.cai 已提交
177 178
    int32_t cache_gpu_cache_capacity;
    s = GetCacheConfigGpuCacheCapacity(cache_gpu_cache_capacity);
G
groot 已提交
179 180 181
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
182

Y
yudong.cai 已提交
183 184
    float cache_gpu_cache_threshold;
    s = GetCacheConfigGpuCacheThreshold(cache_gpu_cache_threshold);
G
groot 已提交
185 186 187
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
188 189 190

    bool cache_insert_data;
    s = GetCacheConfigCacheInsertData(cache_insert_data);
G
groot 已提交
191 192 193
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
194 195

    /* engine config */
Y
yudong.cai 已提交
196 197
    int32_t engine_use_blas_threshold;
    s = GetEngineConfigUseBlasThreshold(engine_use_blas_threshold);
G
groot 已提交
198 199 200
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
201 202 203

    int32_t engine_omp_thread_num;
    s = GetEngineConfigOmpThreadNum(engine_omp_thread_num);
G
groot 已提交
204 205 206
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
207 208 209 210

    /* resource config */
    std::string resource_mode;
    s = GetResourceConfigMode(resource_mode);
G
groot 已提交
211 212 213
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
214 215 216

    std::vector<std::string> resource_pool;
    s = GetResourceConfigPool(resource_pool);
G
groot 已提交
217 218 219
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
220 221 222 223

    return Status::OK();
}

Y
yudong.cai 已提交
224 225 226 227 228 229
Status
Config::ResetDefaultConfig() {
    Status s;

    /* server config */
    s = SetServerConfigAddress(CONFIG_SERVER_ADDRESS_DEFAULT);
G
groot 已提交
230 231 232
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
233 234

    s = SetServerConfigPort(CONFIG_SERVER_PORT_DEFAULT);
G
groot 已提交
235 236 237
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
238 239

    s = SetServerConfigDeployMode(CONFIG_SERVER_DEPLOY_MODE_DEFAULT);
G
groot 已提交
240 241 242
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
243 244

    s = SetServerConfigTimeZone(CONFIG_SERVER_TIME_ZONE_DEFAULT);
G
groot 已提交
245 246 247
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
248 249 250

    /* db config */
    s = SetDBConfigPrimaryPath(CONFIG_DB_PRIMARY_PATH_DEFAULT);
G
groot 已提交
251 252 253
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
254 255

    s = SetDBConfigSecondaryPath(CONFIG_DB_SECONDARY_PATH_DEFAULT);
G
groot 已提交
256 257 258
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
259 260

    s = SetDBConfigBackendUrl(CONFIG_DB_BACKEND_URL_DEFAULT);
G
groot 已提交
261 262 263
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
264 265

    s = SetDBConfigArchiveDiskThreshold(CONFIG_DB_ARCHIVE_DISK_THRESHOLD_DEFAULT);
G
groot 已提交
266 267 268
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
269 270

    s = SetDBConfigArchiveDaysThreshold(CONFIG_DB_ARCHIVE_DAYS_THRESHOLD_DEFAULT);
G
groot 已提交
271 272 273
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
274 275

    s = SetDBConfigInsertBufferSize(CONFIG_DB_INSERT_BUFFER_SIZE_DEFAULT);
G
groot 已提交
276 277 278
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
279 280

    s = SetDBConfigBuildIndexGPU(CONFIG_DB_BUILD_INDEX_GPU_DEFAULT);
G
groot 已提交
281 282 283
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
284 285 286

    /* metric config */
    s = SetMetricConfigEnableMonitor(CONFIG_METRIC_ENABLE_MONITOR_DEFAULT);
G
groot 已提交
287 288 289
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
290 291

    s = SetMetricConfigCollector(CONFIG_METRIC_COLLECTOR_DEFAULT);
G
groot 已提交
292 293 294
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
295 296

    s = SetMetricConfigPrometheusPort(CONFIG_METRIC_PROMETHEUS_PORT_DEFAULT);
G
groot 已提交
297 298 299
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
300 301

    /* cache config */
Y
yudong.cai 已提交
302
    s = SetCacheConfigCpuCacheCapacity(CONFIG_CACHE_CPU_CACHE_CAPACITY_DEFAULT);
G
groot 已提交
303 304 305
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
306

Y
yudong.cai 已提交
307
    s = SetCacheConfigCpuCacheThreshold(CONFIG_CACHE_CPU_CACHE_THRESHOLD_DEFAULT);
G
groot 已提交
308 309 310
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
311

Y
yudong.cai 已提交
312
    s = SetCacheConfigGpuCacheCapacity(CONFIG_CACHE_GPU_CACHE_CAPACITY_DEFAULT);
G
groot 已提交
313 314 315
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
316

Y
yudong.cai 已提交
317
    s = SetCacheConfigGpuCacheThreshold(CONFIG_CACHE_GPU_CACHE_THRESHOLD_DEFAULT);
G
groot 已提交
318 319 320
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
321 322

    s = SetCacheConfigCacheInsertData(CONFIG_CACHE_CACHE_INSERT_DATA_DEFAULT);
G
groot 已提交
323 324 325
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
326 327

    /* engine config */
Y
yudong.cai 已提交
328
    s = SetEngineConfigUseBlasThreshold(CONFIG_ENGINE_USE_BLAS_THRESHOLD_DEFAULT);
G
groot 已提交
329 330 331
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
332 333

    s = SetEngineConfigOmpThreadNum(CONFIG_ENGINE_OMP_THREAD_NUM_DEFAULT);
G
groot 已提交
334 335 336
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
337 338 339

    /* resource config */
    s = SetResourceConfigMode(CONFIG_RESOURCE_MODE_DEFAULT);
G
groot 已提交
340 341 342
    if (!s.ok()) {
        return s;
    }
Y
yudong.cai 已提交
343 344 345 346

    return Status::OK();
}

Y
yudong.cai 已提交
347
void
G
groot 已提交
348
Config::PrintConfigSection(const std::string& config_node_name) {
Y
yudong.cai 已提交
349 350 351
    std::cout << std::endl;
    std::cout << config_node_name << ":" << std::endl;
    if (config_map_.find(config_node_name) != config_map_.end()) {
G
groot 已提交
352
        for (auto item : config_map_[config_node_name]) {
Y
yudong.cai 已提交
353 354
            std::cout << item.first << ": " << item.second << std::endl;
        }
Z
zhiru 已提交
355 356 357
    }
}

Y
yudong.cai 已提交
358 359 360 361 362 363 364 365 366 367 368
void
Config::PrintAll() {
    PrintConfigSection(CONFIG_SERVER);
    PrintConfigSection(CONFIG_DB);
    PrintConfigSection(CONFIG_CACHE);
    PrintConfigSection(CONFIG_METRIC);
    PrintConfigSection(CONFIG_ENGINE);
    PrintConfigSection(CONFIG_RESOURCE);
}

////////////////////////////////////////////////////////////////////////////////
G
groot 已提交
369
Status
G
groot 已提交
370
Config::CheckServerConfigAddress(const std::string& value) {
Y
yudong.cai 已提交
371 372
    if (!ValidationUtil::ValidateIpAddress(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid server config address: " + value);
Z
zhiru 已提交
373
    }
Y
yudong.cai 已提交
374 375
    return Status::OK();
}
Z
zhiru 已提交
376

Y
yudong.cai 已提交
377
Status
G
groot 已提交
378
Config::CheckServerConfigPort(const std::string& value) {
Y
yudong.cai 已提交
379 380
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid server config port: " + value);
381
    } else {
Y
yudong.cai 已提交
382
        int32_t port = std::stoi(value);
383
        if (!(port > 1024 && port < 65535)) {
Y
yudong.cai 已提交
384
            return Status(SERVER_INVALID_ARGUMENT, "Server config port out of range (1024, 65535): " + value);
Z
zhiru 已提交
385 386
        }
    }
Y
yudong.cai 已提交
387 388
    return Status::OK();
}
Z
zhiru 已提交
389

Y
yudong.cai 已提交
390
Status
G
groot 已提交
391 392
Config::CheckServerConfigDeployMode(const std::string& value) {
    if (value != "single" && value != "cluster_readonly" && value != "cluster_writable") {
Y
yudong.cai 已提交
393 394
        return Status(SERVER_INVALID_ARGUMENT,
                      "Invalid server config mode [single, cluster_readonly, cluster_writable]: " + value);
G
groot 已提交
395
    }
Y
yudong.cai 已提交
396 397
    return Status::OK();
}
G
groot 已提交
398

Y
yudong.cai 已提交
399
Status
G
groot 已提交
400
Config::CheckServerConfigTimeZone(const std::string& value) {
Y
yudong.cai 已提交
401 402
    if (value.length() <= 3) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid server config time_zone: " + value);
403
    } else {
Y
yudong.cai 已提交
404 405
        if (value.substr(0, 3) != "UTC") {
            return Status(SERVER_INVALID_ARGUMENT, "Invalid server config time_zone: " + value);
406 407
        } else {
            try {
Y
yudong.cai 已提交
408
                stoi(value.substr(3));
409
            } catch (...) {
Y
yudong.cai 已提交
410
                return Status(SERVER_INVALID_ARGUMENT, "Invalid server config time_zone: " + value);
411
            }
412 413
        }
    }
Y
yudong.cai 已提交
414
    return Status::OK();
Z
zhiru 已提交
415 416
}

G
groot 已提交
417
Status
G
groot 已提交
418
Config::CheckDBConfigPrimaryPath(const std::string& value) {
Y
yudong.cai 已提交
419
    if (value.empty()) {
Y
yudong.cai 已提交
420
        return Status(SERVER_INVALID_ARGUMENT, "DB config primary_path empty");
Z
zhiru 已提交
421
    }
Y
yudong.cai 已提交
422 423
    return Status::OK();
}
Z
zhiru 已提交
424

Y
yudong.cai 已提交
425
Status
G
groot 已提交
426
Config::CheckDBConfigSecondaryPath(const std::string& value) {
Y
yudong.cai 已提交
427 428 429
    return Status::OK();
}

Y
yudong.cai 已提交
430
Status
G
groot 已提交
431
Config::CheckDBConfigBackendUrl(const std::string& value) {
Y
yudong.cai 已提交
432 433
    if (!ValidationUtil::ValidateDbURI(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config backend_url: " + value);
Z
zhiru 已提交
434
    }
Y
yudong.cai 已提交
435 436
    return Status::OK();
}
Z
zhiru 已提交
437

Y
yudong.cai 已提交
438
Status
G
groot 已提交
439
Config::CheckDBConfigArchiveDiskThreshold(const std::string& value) {
Y
yudong.cai 已提交
440 441
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config archive_disk_threshold: " + value);
Z
zhiru 已提交
442
    }
Y
yudong.cai 已提交
443 444
    return Status::OK();
}
Z
zhiru 已提交
445

Y
yudong.cai 已提交
446
Status
G
groot 已提交
447
Config::CheckDBConfigArchiveDaysThreshold(const std::string& value) {
Y
yudong.cai 已提交
448 449
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config archive_days_threshold: " + value);
Z
zhiru 已提交
450
    }
Y
yudong.cai 已提交
451 452
    return Status::OK();
}
Z
zhiru 已提交
453

Y
yudong.cai 已提交
454
Status
G
groot 已提交
455
Config::CheckDBConfigInsertBufferSize(const std::string& value) {
Y
yudong.cai 已提交
456
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
Y
yudong.cai 已提交
457
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config insert_buffer_size: " + value);
458
    } else {
Y
yudong.cai 已提交
459
        int64_t buffer_size = std::stoi(value) * GB;
G
groot 已提交
460
        uint64_t total_mem = 0, free_mem = 0;
Z
zhiru 已提交
461
        CommonUtil::GetSystemMemInfo(total_mem, free_mem);
Y
yudong.cai 已提交
462
        if (buffer_size >= total_mem) {
Y
yudong.cai 已提交
463
            return Status(SERVER_INVALID_ARGUMENT, "DB config insert_buffer_size exceed system memory: " + value);
Z
zhiru 已提交
464 465
        }
    }
Y
yudong.cai 已提交
466 467
    return Status::OK();
}
Z
zhiru 已提交
468

Y
yudong.cai 已提交
469
Status
G
groot 已提交
470
Config::CheckDBConfigBuildIndexGPU(const std::string& value) {
Y
yudong.cai 已提交
471 472
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config build_index_gpu: " + value);
G
groot 已提交
473
    } else {
Y
yudong.cai 已提交
474
        int32_t gpu_index = std::stoi(value);
G
groot 已提交
475
        if (!ValidationUtil::ValidateGpuIndex(gpu_index).ok()) {
Y
yudong.cai 已提交
476
            return Status(SERVER_INVALID_ARGUMENT, "Invalid DB config build_index_gpu: " + value);
G
groot 已提交
477 478
        }
    }
Y
yudong.cai 已提交
479
    return Status::OK();
Z
zhiru 已提交
480 481
}

G
groot 已提交
482
Status
G
groot 已提交
483
Config::CheckMetricConfigEnableMonitor(const std::string& value) {
Y
yudong.cai 已提交
484 485
    if (!ValidationUtil::ValidateStringIsBool(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid metric config auto_bootup: " + value);
Z
zhiru 已提交
486
    }
Y
yudong.cai 已提交
487 488
    return Status::OK();
}
Z
zhiru 已提交
489

Y
yudong.cai 已提交
490
Status
G
groot 已提交
491
Config::CheckMetricConfigCollector(const std::string& value) {
Y
yudong.cai 已提交
492 493 494 495 496 497
    if (value != "prometheus") {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid metric config collector: " + value);
    }
    return Status::OK();
}

Y
yudong.cai 已提交
498
Status
G
groot 已提交
499
Config::CheckMetricConfigPrometheusPort(const std::string& value) {
Y
yudong.cai 已提交
500 501
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid metric config prometheus_port: " + value);
Z
zhiru 已提交
502
    }
Y
yudong.cai 已提交
503
    return Status::OK();
Z
zhiru 已提交
504 505
}

G
groot 已提交
506
Status
G
groot 已提交
507
Config::CheckCacheConfigCpuCacheCapacity(const std::string& value) {
Y
yudong.cai 已提交
508
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
Y
yudong.cai 已提交
509
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cpu_cache_capacity: " + value);
510
    } else {
Y
yudong.cai 已提交
511
        uint64_t cpu_cache_capacity = std::stoi(value) * GB;
G
groot 已提交
512
        uint64_t total_mem = 0, free_mem = 0;
Z
zhiru 已提交
513 514
        CommonUtil::GetSystemMemInfo(total_mem, free_mem);
        if (cpu_cache_capacity >= total_mem) {
Y
yudong.cai 已提交
515
            return Status(SERVER_INVALID_ARGUMENT, "Cache config cpu_cache_capacity exceed system memory: " + value);
G
groot 已提交
516
        } else if (cpu_cache_capacity > static_cast<double>(total_mem * 0.9)) {
Y
yudong.cai 已提交
517
            std::cerr << "Warning: cpu_cache_capacity value is too big" << std::endl;
Z
zhiru 已提交
518
        }
G
groot 已提交
519

Y
yudong.cai 已提交
520 521
        int32_t buffer_value;
        Status s = GetDBConfigInsertBufferSize(buffer_value);
G
groot 已提交
522 523 524 525
        if (!s.ok()) {
            return s;
        }

Y
yudong.cai 已提交
526
        int64_t insert_buffer_size = buffer_value * GB;
Y
yudong.cai 已提交
527
        if (insert_buffer_size + cpu_cache_capacity >= total_mem) {
Y
yudong.cai 已提交
528
            return Status(SERVER_INVALID_ARGUMENT, "Sum of cpu_cache_capacity and buffer_size exceed system memory");
Z
zhiru 已提交
529 530
        }
    }
Y
yudong.cai 已提交
531 532
    return Status::OK();
}
Z
zhiru 已提交
533

Y
yudong.cai 已提交
534
Status
G
groot 已提交
535
Config::CheckCacheConfigCpuCacheThreshold(const std::string& value) {
Y
yudong.cai 已提交
536
    if (!ValidationUtil::ValidateStringIsFloat(value).ok()) {
Y
yudong.cai 已提交
537
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cpu_cache_threshold: " + value);
Y
yudong.cai 已提交
538
    } else {
Y
yudong.cai 已提交
539 540 541
        float cpu_cache_threshold = std::stof(value);
        if (cpu_cache_threshold <= 0.0 || cpu_cache_threshold >= 1.0) {
            return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cpu_cache_threshold: " + value);
Y
yudong.cai 已提交
542
        }
543
    }
Y
yudong.cai 已提交
544 545
    return Status::OK();
}
546

Y
yudong.cai 已提交
547
Status
G
groot 已提交
548
Config::CheckCacheConfigGpuCacheCapacity(const std::string& value) {
Y
yudong.cai 已提交
549
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
Y
yudong.cai 已提交
550
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config gpu_cache_capacity: " + value);
551
    } else {
Y
yudong.cai 已提交
552 553 554
        uint64_t gpu_cache_capacity = std::stoi(value) * GB;
        int gpu_index;
        Status s = GetDBConfigBuildIndexGPU(gpu_index);
G
groot 已提交
555 556 557 558
        if (!s.ok()) {
            return s;
        }

Z
zhiru 已提交
559
        size_t gpu_memory;
G
groot 已提交
560
        if (!ValidationUtil::GetGpuMemory(gpu_index, gpu_memory).ok()) {
Y
yudong.cai 已提交
561 562
            return Status(SERVER_UNEXPECTED_ERROR,
                          "Fail to get GPU memory for GPU device: " + std::to_string(gpu_index));
563
        } else if (gpu_cache_capacity >= gpu_memory) {
Y
yudong.cai 已提交
564
            return Status(SERVER_INVALID_ARGUMENT,
Y
yudong.cai 已提交
565
                          "Cache config gpu_cache_capacity exceed GPU memory: " + std::to_string(gpu_memory));
G
groot 已提交
566
        } else if (gpu_cache_capacity > (double)gpu_memory * 0.9) {
Y
yudong.cai 已提交
567
            std::cerr << "Warning: gpu_cache_capacity value is too big" << std::endl;
Z
zhiru 已提交
568 569
        }
    }
Y
yudong.cai 已提交
570 571
    return Status::OK();
}
Z
zhiru 已提交
572

Y
yudong.cai 已提交
573
Status
G
groot 已提交
574
Config::CheckCacheConfigGpuCacheThreshold(const std::string& value) {
Y
yudong.cai 已提交
575
    if (!ValidationUtil::ValidateStringIsFloat(value).ok()) {
Y
yudong.cai 已提交
576
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config gpu_cache_threshold: " + value);
Y
yudong.cai 已提交
577
    } else {
Y
yudong.cai 已提交
578 579 580
        float gpu_cache_threshold = std::stof(value);
        if (gpu_cache_threshold <= 0.0 || gpu_cache_threshold >= 1.0) {
            return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config gpu_cache_threshold: " + value);
Y
yudong.cai 已提交
581
        }
Z
zhiru 已提交
582
    }
Y
yudong.cai 已提交
583 584
    return Status::OK();
}
Z
zhiru 已提交
585

Y
yudong.cai 已提交
586
Status
G
groot 已提交
587
Config::CheckCacheConfigCacheInsertData(const std::string& value) {
Y
yudong.cai 已提交
588 589 590 591
    if (!ValidationUtil::ValidateStringIsBool(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid cache config cache_insert_data: " + value);
    }
    return Status::OK();
Z
zhiru 已提交
592 593
}

G
groot 已提交
594
Status
G
groot 已提交
595
Config::CheckEngineConfigUseBlasThreshold(const std::string& value) {
Y
yudong.cai 已提交
596
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
Y
yudong.cai 已提交
597
        return Status(SERVER_INVALID_ARGUMENT, "Invalid engine config use_blas_threshold: " + value);
Z
zhiru 已提交
598
    }
Y
yudong.cai 已提交
599 600
    return Status::OK();
}
Z
zhiru 已提交
601

Y
yudong.cai 已提交
602
Status
G
groot 已提交
603
Config::CheckEngineConfigOmpThreadNum(const std::string& value) {
Y
yudong.cai 已提交
604 605
    if (!ValidationUtil::ValidateStringIsNumber(value).ok()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid engine config omp_thread_num: " + value);
G
groot 已提交
606 607 608 609 610 611 612
    }

    int32_t omp_thread = std::stoi(value);
    uint32_t sys_thread_cnt = 8;
    CommonUtil::GetSystemAvailableThreads(sys_thread_cnt);
    if (omp_thread > static_cast<int32_t>(sys_thread_cnt)) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid engine config omp_thread_num: " + value);
Z
zhiru 已提交
613
    }
Y
yudong.cai 已提交
614
    return Status::OK();
Z
zhiru 已提交
615 616
}

G
groot 已提交
617
Status
G
groot 已提交
618
Config::CheckResourceConfigMode(const std::string& value) {
Y
yudong.cai 已提交
619 620
    if (value != "simple") {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid resource config mode: " + value);
W
wxyu 已提交
621
    }
Y
yudong.cai 已提交
622 623
    return Status::OK();
}
G
groot 已提交
624

Y
yudong.cai 已提交
625
Status
G
groot 已提交
626
Config::CheckResourceConfigPool(const std::vector<std::string>& value) {
Y
yudong.cai 已提交
627 628
    if (value.empty()) {
        return Status(SERVER_INVALID_ARGUMENT, "Invalid resource config pool");
G
groot 已提交
629
    }
Y
yudong.cai 已提交
630
    return Status::OK();
G
groot 已提交
631 632
}

Y
yudong.cai 已提交
633
////////////////////////////////////////////////////////////////////////////////
G
groot 已提交
634 635 636 637
ConfigNode&
Config::GetConfigNode(const std::string& name) {
    ConfigMgr* mgr = ConfigMgr::GetInstance();
    ConfigNode& root_node = mgr->GetRootNode();
G
groot 已提交
638
    return root_node.GetChild(name);
G
groot 已提交
639 640
}

Y
yudong.cai 已提交
641
Status
G
groot 已提交
642
Config::GetConfigValueInMem(const std::string& parent_key, const std::string& child_key, std::string& value) {
Y
yudong.cai 已提交
643
    std::lock_guard<std::mutex> lock(mutex_);
Y
yudong.cai 已提交
644 645 646 647 648
    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();
    }
G
groot 已提交
649
    return Status(SERVER_UNEXPECTED_ERROR, "key not exist");
Y
yudong.cai 已提交
650 651
}

Y
yudong.cai 已提交
652
void
G
groot 已提交
653
Config::SetConfigValueInMem(const std::string& parent_key, const std::string& child_key, const std::string& value) {
Y
yudong.cai 已提交
654 655 656 657 658
    std::lock_guard<std::mutex> lock(mutex_);
    config_map_[parent_key][child_key] = value;
}

////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
659
/* server config */
Y
yudong.cai 已提交
660 661 662 663
std::string
Config::GetServerConfigStrAddress() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_ADDRESS, value).ok()) {
G
groot 已提交
664
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_ADDRESS, CONFIG_SERVER_ADDRESS_DEFAULT);
Y
yudong.cai 已提交
665
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_ADDRESS, value);
Y
yudong.cai 已提交
666
    }
Y
yudong.cai 已提交
667
    return value;
Y
yudong.cai 已提交
668 669
}

Y
yudong.cai 已提交
670 671 672 673
std::string
Config::GetServerConfigStrPort() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_PORT, value).ok()) {
G
groot 已提交
674
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_PORT, CONFIG_SERVER_PORT_DEFAULT);
Y
yudong.cai 已提交
675
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_PORT, value);
Y
yudong.cai 已提交
676
    }
Y
yudong.cai 已提交
677
    return value;
Y
yudong.cai 已提交
678 679
}

Y
yudong.cai 已提交
680
std::string
Y
yudong.cai 已提交
681
Config::GetServerConfigStrDeployMode() {
Y
yudong.cai 已提交
682
    std::string value;
Y
yudong.cai 已提交
683
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_DEPLOY_MODE, value).ok()) {
G
groot 已提交
684
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_DEPLOY_MODE, CONFIG_SERVER_DEPLOY_MODE_DEFAULT);
Y
yudong.cai 已提交
685
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_DEPLOY_MODE, value);
Y
yudong.cai 已提交
686
    }
Y
yudong.cai 已提交
687
    return value;
Y
yudong.cai 已提交
688 689
}

Y
yudong.cai 已提交
690 691 692 693
std::string
Config::GetServerConfigStrTimeZone() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_TIME_ZONE, value).ok()) {
G
groot 已提交
694
        value = GetConfigNode(CONFIG_SERVER).GetValue(CONFIG_SERVER_TIME_ZONE, CONFIG_SERVER_TIME_ZONE_DEFAULT);
Y
yudong.cai 已提交
695
        SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_TIME_ZONE, value);
Y
yudong.cai 已提交
696
    }
Y
yudong.cai 已提交
697
    return value;
Y
yudong.cai 已提交
698 699
}

Y
yudong.cai 已提交
700
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
701
/* db config */
Y
yudong.cai 已提交
702
std::string
Y
yudong.cai 已提交
703
Config::GetDBConfigStrPrimaryPath() {
Y
yudong.cai 已提交
704
    std::string value;
Y
yudong.cai 已提交
705
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_PRIMARY_PATH, value).ok()) {
G
groot 已提交
706
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_PRIMARY_PATH, CONFIG_DB_PRIMARY_PATH_DEFAULT);
Y
yudong.cai 已提交
707
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_PRIMARY_PATH, value);
Y
yudong.cai 已提交
708
    }
Y
yudong.cai 已提交
709
    return value;
Y
yudong.cai 已提交
710 711
}

Y
yudong.cai 已提交
712
std::string
Y
yudong.cai 已提交
713
Config::GetDBConfigStrSecondaryPath() {
Y
yudong.cai 已提交
714
    std::string value;
Y
yudong.cai 已提交
715
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_SECONDARY_PATH, value).ok()) {
G
groot 已提交
716
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_SECONDARY_PATH, CONFIG_DB_SECONDARY_PATH_DEFAULT);
Y
yudong.cai 已提交
717
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_SECONDARY_PATH, value);
Y
yudong.cai 已提交
718
    }
Y
yudong.cai 已提交
719
    return value;
Y
yudong.cai 已提交
720 721
}

Y
yudong.cai 已提交
722 723 724 725
std::string
Config::GetDBConfigStrBackendUrl() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_BACKEND_URL, value).ok()) {
G
groot 已提交
726
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_BACKEND_URL, CONFIG_DB_BACKEND_URL_DEFAULT);
Y
yudong.cai 已提交
727
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BACKEND_URL, value);
Y
yudong.cai 已提交
728
    }
Y
yudong.cai 已提交
729
    return value;
Y
yudong.cai 已提交
730 731
}

Y
yudong.cai 已提交
732 733 734 735
std::string
Config::GetDBConfigStrArchiveDiskThreshold() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DISK_THRESHOLD, value).ok()) {
736 737
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_ARCHIVE_DISK_THRESHOLD,
                                                  CONFIG_DB_ARCHIVE_DISK_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
738
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DISK_THRESHOLD, value);
Y
yudong.cai 已提交
739
    }
Y
yudong.cai 已提交
740
    return value;
Y
yudong.cai 已提交
741 742
}

Y
yudong.cai 已提交
743 744 745 746
std::string
Config::GetDBConfigStrArchiveDaysThreshold() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DAYS_THRESHOLD, value).ok()) {
747 748
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_ARCHIVE_DAYS_THRESHOLD,
                                                  CONFIG_DB_ARCHIVE_DAYS_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
749
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DAYS_THRESHOLD, value);
Y
yudong.cai 已提交
750
    }
Y
yudong.cai 已提交
751
    return value;
Y
yudong.cai 已提交
752 753
}

Y
yudong.cai 已提交
754
std::string
Y
yudong.cai 已提交
755
Config::GetDBConfigStrInsertBufferSize() {
Y
yudong.cai 已提交
756
    std::string value;
Y
yudong.cai 已提交
757
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_INSERT_BUFFER_SIZE, value).ok()) {
G
groot 已提交
758
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_INSERT_BUFFER_SIZE, CONFIG_DB_INSERT_BUFFER_SIZE_DEFAULT);
Y
yudong.cai 已提交
759
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_INSERT_BUFFER_SIZE, value);
Y
yudong.cai 已提交
760
    }
Y
yudong.cai 已提交
761
    return value;
Y
yudong.cai 已提交
762 763
}

Y
yudong.cai 已提交
764 765 766 767
std::string
Config::GetDBConfigStrBuildIndexGPU() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUILD_INDEX_GPU, value).ok()) {
G
groot 已提交
768
        value = GetConfigNode(CONFIG_DB).GetValue(CONFIG_DB_BUILD_INDEX_GPU, CONFIG_DB_BUILD_INDEX_GPU_DEFAULT);
Y
yudong.cai 已提交
769
        SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUILD_INDEX_GPU, value);
Y
yudong.cai 已提交
770
    }
Y
yudong.cai 已提交
771
    return value;
Y
yudong.cai 已提交
772 773
}

Y
yudong.cai 已提交
774
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
775
/* metric config */
Y
yudong.cai 已提交
776
std::string
Y
yudong.cai 已提交
777
Config::GetMetricConfigStrEnableMonitor() {
Y
yudong.cai 已提交
778
    std::string value;
Y
yudong.cai 已提交
779
    if (!GetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_ENABLE_MONITOR, value).ok()) {
G
groot 已提交
780 781
        value =
            GetConfigNode(CONFIG_METRIC).GetValue(CONFIG_METRIC_ENABLE_MONITOR, CONFIG_METRIC_ENABLE_MONITOR_DEFAULT);
Y
yudong.cai 已提交
782
        SetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_ENABLE_MONITOR, value);
Y
yudong.cai 已提交
783
    }
Y
yudong.cai 已提交
784
    return value;
Y
yudong.cai 已提交
785 786
}

Y
yudong.cai 已提交
787 788 789 790
std::string
Config::GetMetricConfigStrCollector() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_COLLECTOR, value).ok()) {
G
groot 已提交
791
        value = GetConfigNode(CONFIG_METRIC).GetValue(CONFIG_METRIC_COLLECTOR, CONFIG_METRIC_COLLECTOR_DEFAULT);
Y
yudong.cai 已提交
792
        SetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_COLLECTOR, value);
Y
yudong.cai 已提交
793
    }
Y
yudong.cai 已提交
794
    return value;
Y
yudong.cai 已提交
795 796
}

Y
yudong.cai 已提交
797 798 799 800
std::string
Config::GetMetricConfigStrPrometheusPort() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_PROMETHEUS_PORT, value).ok()) {
G
groot 已提交
801 802
        value =
            GetConfigNode(CONFIG_METRIC).GetValue(CONFIG_METRIC_PROMETHEUS_PORT, CONFIG_METRIC_PROMETHEUS_PORT_DEFAULT);
Y
yudong.cai 已提交
803
        SetConfigValueInMem(CONFIG_METRIC, CONFIG_METRIC_PROMETHEUS_PORT, value);
Y
yudong.cai 已提交
804
    }
Y
yudong.cai 已提交
805
    return value;
Y
yudong.cai 已提交
806 807
}

Y
yudong.cai 已提交
808
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
809
/* cache config */
Y
yudong.cai 已提交
810
std::string
Y
yudong.cai 已提交
811
Config::GetCacheConfigStrCpuCacheCapacity() {
Y
yudong.cai 已提交
812
    std::string value;
Y
yudong.cai 已提交
813
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_CACHE_CAPACITY, value).ok()) {
G
groot 已提交
814 815
        value = GetConfigNode(CONFIG_CACHE)
                    .GetValue(CONFIG_CACHE_CPU_CACHE_CAPACITY, CONFIG_CACHE_CPU_CACHE_CAPACITY_DEFAULT);
Y
yudong.cai 已提交
816
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_CACHE_CAPACITY, value);
Y
yudong.cai 已提交
817
    }
Y
yudong.cai 已提交
818
    return value;
Y
yudong.cai 已提交
819 820
}

Y
yudong.cai 已提交
821
std::string
Y
yudong.cai 已提交
822
Config::GetCacheConfigStrCpuCacheThreshold() {
Y
yudong.cai 已提交
823
    std::string value;
Y
yudong.cai 已提交
824
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_CACHE_THRESHOLD, value).ok()) {
G
groot 已提交
825 826
        value = GetConfigNode(CONFIG_CACHE)
                    .GetValue(CONFIG_CACHE_CPU_CACHE_THRESHOLD, CONFIG_CACHE_CPU_CACHE_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
827
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CPU_CACHE_THRESHOLD, value);
Y
yudong.cai 已提交
828
    }
Y
yudong.cai 已提交
829
    return value;
Y
yudong.cai 已提交
830 831
}

Y
yudong.cai 已提交
832
std::string
Y
yudong.cai 已提交
833
Config::GetCacheConfigStrGpuCacheCapacity() {
Y
yudong.cai 已提交
834
    std::string value;
Y
yudong.cai 已提交
835
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_CACHE_CAPACITY, value).ok()) {
G
groot 已提交
836 837
        value = GetConfigNode(CONFIG_CACHE)
                    .GetValue(CONFIG_CACHE_GPU_CACHE_CAPACITY, CONFIG_CACHE_GPU_CACHE_CAPACITY_DEFAULT);
Y
yudong.cai 已提交
838
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_CACHE_CAPACITY, value);
Y
yudong.cai 已提交
839
    }
Y
yudong.cai 已提交
840
    return value;
Y
yudong.cai 已提交
841 842
}

Y
yudong.cai 已提交
843
std::string
Y
yudong.cai 已提交
844
Config::GetCacheConfigStrGpuCacheThreshold() {
Y
yudong.cai 已提交
845
    std::string value;
Y
yudong.cai 已提交
846
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_CACHE_THRESHOLD, value).ok()) {
G
groot 已提交
847 848
        value = GetConfigNode(CONFIG_CACHE)
                    .GetValue(CONFIG_CACHE_GPU_CACHE_THRESHOLD, CONFIG_CACHE_GPU_CACHE_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
849
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_GPU_CACHE_THRESHOLD, value);
Y
yudong.cai 已提交
850
    }
Y
yudong.cai 已提交
851
    return value;
Y
yudong.cai 已提交
852 853
}

Y
yudong.cai 已提交
854 855 856 857
std::string
Config::GetCacheConfigStrCacheInsertData() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CACHE_INSERT_DATA, value).ok()) {
G
groot 已提交
858 859
        value = GetConfigNode(CONFIG_CACHE)
                    .GetValue(CONFIG_CACHE_CACHE_INSERT_DATA, CONFIG_CACHE_CACHE_INSERT_DATA_DEFAULT);
Y
yudong.cai 已提交
860
        SetConfigValueInMem(CONFIG_CACHE, CONFIG_CACHE_CACHE_INSERT_DATA, value);
Y
yudong.cai 已提交
861
    }
Y
yudong.cai 已提交
862
    return value;
Y
yudong.cai 已提交
863 864
}

Y
yudong.cai 已提交
865
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
866
/* engine config */
Y
yudong.cai 已提交
867
std::string
Y
yudong.cai 已提交
868
Config::GetEngineConfigStrUseBlasThreshold() {
Y
yudong.cai 已提交
869
    std::string value;
Y
yudong.cai 已提交
870
    if (!GetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_USE_BLAS_THRESHOLD, value).ok()) {
G
groot 已提交
871 872
        value = GetConfigNode(CONFIG_ENGINE)
                    .GetValue(CONFIG_ENGINE_USE_BLAS_THRESHOLD, CONFIG_ENGINE_USE_BLAS_THRESHOLD_DEFAULT);
Y
yudong.cai 已提交
873
        SetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_USE_BLAS_THRESHOLD, value);
Y
yudong.cai 已提交
874
    }
Y
yudong.cai 已提交
875
    return value;
Y
yudong.cai 已提交
876 877
}

Y
yudong.cai 已提交
878 879 880 881
std::string
Config::GetEngineConfigStrOmpThreadNum() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_OMP_THREAD_NUM, value).ok()) {
G
groot 已提交
882 883
        value =
            GetConfigNode(CONFIG_ENGINE).GetValue(CONFIG_ENGINE_OMP_THREAD_NUM, CONFIG_ENGINE_OMP_THREAD_NUM_DEFAULT);
Y
yudong.cai 已提交
884
        SetConfigValueInMem(CONFIG_ENGINE, CONFIG_ENGINE_OMP_THREAD_NUM, value);
Y
yudong.cai 已提交
885
    }
Y
yudong.cai 已提交
886
    return value;
Y
yudong.cai 已提交
887 888
}

Y
yudong.cai 已提交
889
////////////////////////////////////////////////////////////////////////////////
Y
yudong.cai 已提交
890
/* resource config */
Y
yudong.cai 已提交
891 892 893 894
std::string
Config::GetResourceConfigStrMode() {
    std::string value;
    if (!GetConfigValueInMem(CONFIG_RESOURCE, CONFIG_RESOURCE_MODE, value).ok()) {
G
groot 已提交
895
        value = GetConfigNode(CONFIG_RESOURCE).GetValue(CONFIG_RESOURCE_MODE, CONFIG_RESOURCE_MODE_DEFAULT);
Y
yudong.cai 已提交
896
        SetConfigValueInMem(CONFIG_RESOURCE, CONFIG_RESOURCE_MODE, value);
Y
yudong.cai 已提交
897
    }
Y
yudong.cai 已提交
898
    return value;
Y
yudong.cai 已提交
899 900
}

901 902
////////////////////////////////////////////////////////////////////////////////
Status
G
groot 已提交
903
Config::GetServerConfigAddress(std::string& value) {
Y
yudong.cai 已提交
904 905
    value = GetServerConfigStrAddress();
    return CheckServerConfigAddress(value);
906 907 908
}

Status
G
groot 已提交
909
Config::GetServerConfigPort(std::string& value) {
Y
yudong.cai 已提交
910 911
    value = GetServerConfigStrPort();
    return CheckServerConfigPort(value);
912 913 914
}

Status
G
groot 已提交
915
Config::GetServerConfigDeployMode(std::string& value) {
Y
yudong.cai 已提交
916 917
    value = GetServerConfigStrDeployMode();
    return CheckServerConfigDeployMode(value);
918 919 920
}

Status
G
groot 已提交
921
Config::GetServerConfigTimeZone(std::string& value) {
Y
yudong.cai 已提交
922 923
    value = GetServerConfigStrTimeZone();
    return CheckServerConfigTimeZone(value);
924 925 926
}

Status
G
groot 已提交
927
Config::GetDBConfigPrimaryPath(std::string& value) {
Y
yudong.cai 已提交
928 929
    value = GetDBConfigStrPrimaryPath();
    return CheckDBConfigPrimaryPath(value);
930 931 932
}

Status
G
groot 已提交
933
Config::GetDBConfigSecondaryPath(std::string& value) {
Y
yudong.cai 已提交
934
    value = GetDBConfigStrSecondaryPath();
Y
yudong.cai 已提交
935
    return Status::OK();
936 937 938
}

Status
G
groot 已提交
939
Config::GetDBConfigBackendUrl(std::string& value) {
Y
yudong.cai 已提交
940 941
    value = GetDBConfigStrBackendUrl();
    return CheckDBConfigBackendUrl(value);
942 943 944
}

Status
G
groot 已提交
945
Config::GetDBConfigArchiveDiskThreshold(int32_t& value) {
Y
yudong.cai 已提交
946 947
    std::string str = GetDBConfigStrArchiveDiskThreshold();
    Status s = CheckDBConfigArchiveDiskThreshold(str);
G
groot 已提交
948 949 950 951
    if (!s.ok()) {
        return s;
    }

952 953 954 955 956
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
957
Config::GetDBConfigArchiveDaysThreshold(int32_t& value) {
Y
yudong.cai 已提交
958 959
    std::string str = GetDBConfigStrArchiveDaysThreshold();
    Status s = CheckDBConfigArchiveDaysThreshold(str);
G
groot 已提交
960 961 962 963
    if (!s.ok()) {
        return s;
    }

964 965 966 967 968
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
969
Config::GetDBConfigInsertBufferSize(int32_t& value) {
Y
yudong.cai 已提交
970 971
    std::string str = GetDBConfigStrInsertBufferSize();
    Status s = CheckDBConfigInsertBufferSize(str);
G
groot 已提交
972 973 974 975
    if (!s.ok()) {
        return s;
    }

976 977 978 979 980
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
981
Config::GetDBConfigBuildIndexGPU(int32_t& value) {
Y
yudong.cai 已提交
982 983
    std::string str = GetDBConfigStrBuildIndexGPU();
    Status s = CheckDBConfigBuildIndexGPU(str);
G
groot 已提交
984 985 986 987
    if (!s.ok()) {
        return s;
    }

988 989 990 991 992
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
993
Config::GetMetricConfigEnableMonitor(bool& value) {
Y
yudong.cai 已提交
994 995
    std::string str = GetMetricConfigStrEnableMonitor();
    Status s = CheckMetricConfigEnableMonitor(str);
G
groot 已提交
996 997 998 999
    if (!s.ok()) {
        return s;
    }

1000 1001 1002 1003 1004 1005
    std::transform(str.begin(), str.end(), str.begin(), ::tolower);
    value = (str == "true" || str == "on" || str == "yes" || str == "1");
    return Status::OK();
}

Status
G
groot 已提交
1006
Config::GetMetricConfigCollector(std::string& value) {
Y
yudong.cai 已提交
1007 1008
    value = GetMetricConfigStrCollector();
    return Status::OK();
1009 1010 1011
}

Status
G
groot 已提交
1012
Config::GetMetricConfigPrometheusPort(std::string& value) {
Y
yudong.cai 已提交
1013 1014
    value = GetMetricConfigStrPrometheusPort();
    return CheckMetricConfigPrometheusPort(value);
1015 1016 1017
}

Status
G
groot 已提交
1018
Config::GetCacheConfigCpuCacheCapacity(int32_t& value) {
Y
yudong.cai 已提交
1019 1020
    std::string str = GetCacheConfigStrCpuCacheCapacity();
    Status s = CheckCacheConfigCpuCacheCapacity(str);
G
groot 已提交
1021 1022 1023 1024
    if (!s.ok()) {
        return s;
    }

1025 1026 1027 1028 1029
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
1030
Config::GetCacheConfigCpuCacheThreshold(float& value) {
Y
yudong.cai 已提交
1031 1032
    std::string str = GetCacheConfigStrCpuCacheThreshold();
    Status s = CheckCacheConfigCpuCacheThreshold(str);
G
groot 已提交
1033 1034 1035 1036
    if (!s.ok()) {
        return s;
    }

1037 1038 1039 1040 1041
    value = std::stof(str);
    return Status::OK();
}

Status
G
groot 已提交
1042
Config::GetCacheConfigGpuCacheCapacity(int32_t& value) {
Y
yudong.cai 已提交
1043 1044
    std::string str = GetCacheConfigStrGpuCacheCapacity();
    Status s = CheckCacheConfigGpuCacheCapacity(str);
G
groot 已提交
1045 1046 1047 1048
    if (!s.ok()) {
        return s;
    }

1049 1050 1051 1052 1053
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
1054
Config::GetCacheConfigGpuCacheThreshold(float& value) {
Y
yudong.cai 已提交
1055 1056
    std::string str = GetCacheConfigStrGpuCacheThreshold();
    Status s = CheckCacheConfigGpuCacheThreshold(str);
G
groot 已提交
1057 1058 1059 1060
    if (!s.ok()) {
        return s;
    }

1061 1062 1063 1064 1065
    value = std::stof(str);
    return Status::OK();
}

Status
G
groot 已提交
1066
Config::GetCacheConfigCacheInsertData(bool& value) {
Y
yudong.cai 已提交
1067 1068
    std::string str = GetCacheConfigStrCacheInsertData();
    Status s = CheckCacheConfigCacheInsertData(str);
G
groot 已提交
1069 1070 1071 1072
    if (!s.ok()) {
        return s;
    }

1073 1074 1075 1076 1077 1078
    std::transform(str.begin(), str.end(), str.begin(), ::tolower);
    value = (str == "true" || str == "on" || str == "yes" || str == "1");
    return Status::OK();
}

Status
G
groot 已提交
1079
Config::GetEngineConfigUseBlasThreshold(int32_t& value) {
Y
yudong.cai 已提交
1080 1081
    std::string str = GetEngineConfigStrUseBlasThreshold();
    Status s = CheckEngineConfigUseBlasThreshold(str);
G
groot 已提交
1082 1083 1084 1085
    if (!s.ok()) {
        return s;
    }

1086 1087 1088 1089 1090
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
1091
Config::GetEngineConfigOmpThreadNum(int32_t& value) {
Y
yudong.cai 已提交
1092 1093
    std::string str = GetEngineConfigStrOmpThreadNum();
    Status s = CheckEngineConfigOmpThreadNum(str);
G
groot 已提交
1094 1095 1096 1097
    if (!s.ok()) {
        return s;
    }

1098 1099 1100 1101 1102
    value = std::stoi(str);
    return Status::OK();
}

Status
G
groot 已提交
1103
Config::GetResourceConfigMode(std::string& value) {
Y
yudong.cai 已提交
1104 1105
    value = GetResourceConfigStrMode();
    return CheckResourceConfigMode(value);
1106 1107 1108
}

Status
G
groot 已提交
1109
Config::GetResourceConfigPool(std::vector<std::string>& value) {
1110 1111
    ConfigNode resource_config = GetConfigNode(CONFIG_RESOURCE);
    value = resource_config.GetSequence(CONFIG_RESOURCE_POOL);
Y
yudong.cai 已提交
1112
    return CheckResourceConfigPool(value);
Y
yudong.cai 已提交
1113
}
G
groot 已提交
1114

Y
yudong.cai 已提交
1115 1116 1117
///////////////////////////////////////////////////////////////////////////////
/* server config */
Status
G
groot 已提交
1118
Config::SetServerConfigAddress(const std::string& value) {
Y
yudong.cai 已提交
1119
    Status s = CheckServerConfigAddress(value);
G
groot 已提交
1120 1121 1122 1123
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1124 1125 1126 1127 1128
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_ADDRESS, value);
    return Status::OK();
}

Status
G
groot 已提交
1129
Config::SetServerConfigPort(const std::string& value) {
Y
yudong.cai 已提交
1130
    Status s = CheckServerConfigPort(value);
G
groot 已提交
1131 1132 1133 1134
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1135 1136 1137 1138 1139
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_PORT, value);
    return Status::OK();
}

Status
G
groot 已提交
1140
Config::SetServerConfigDeployMode(const std::string& value) {
Y
yudong.cai 已提交
1141
    Status s = CheckServerConfigDeployMode(value);
G
groot 已提交
1142 1143 1144 1145
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1146
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_DEPLOY_MODE, value);
Y
yudong.cai 已提交
1147 1148 1149 1150
    return Status::OK();
}

Status
G
groot 已提交
1151
Config::SetServerConfigTimeZone(const std::string& value) {
Y
yudong.cai 已提交
1152
    Status s = CheckServerConfigTimeZone(value);
G
groot 已提交
1153 1154 1155 1156
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1157 1158 1159 1160 1161 1162
    SetConfigValueInMem(CONFIG_SERVER, CONFIG_SERVER_TIME_ZONE, value);
    return Status::OK();
}

/* db config */
Status
G
groot 已提交
1163
Config::SetDBConfigPrimaryPath(const std::string& value) {
Y
yudong.cai 已提交
1164
    Status s = CheckDBConfigPrimaryPath(value);
G
groot 已提交
1165 1166 1167 1168
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1169
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_PRIMARY_PATH, value);
Y
yudong.cai 已提交
1170 1171 1172 1173
    return Status::OK();
}

Status
G
groot 已提交
1174
Config::SetDBConfigSecondaryPath(const std::string& value) {
Y
yudong.cai 已提交
1175
    Status s = CheckDBConfigSecondaryPath(value);
G
groot 已提交
1176 1177 1178 1179
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1180
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_SECONDARY_PATH, value);
Y
yudong.cai 已提交
1181 1182 1183 1184
    return Status::OK();
}

Status
G
groot 已提交
1185
Config::SetDBConfigBackendUrl(const std::string& value) {
Y
yudong.cai 已提交
1186
    Status s = CheckDBConfigBackendUrl(value);
G
groot 已提交
1187 1188 1189 1190
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1191 1192 1193 1194 1195
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BACKEND_URL, value);
    return Status::OK();
}

Status
G
groot 已提交
1196
Config::SetDBConfigArchiveDiskThreshold(const std::string& value) {
Y
yudong.cai 已提交
1197
    Status s = CheckDBConfigArchiveDiskThreshold(value);
G
groot 已提交
1198 1199 1200 1201
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1202 1203 1204 1205 1206
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DISK_THRESHOLD, value);
    return Status::OK();
}

Status
G
groot 已提交
1207
Config::SetDBConfigArchiveDaysThreshold(const std::string& value) {
Y
yudong.cai 已提交
1208
    Status s = CheckDBConfigArchiveDaysThreshold(value);
G
groot 已提交
1209 1210 1211 1212
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1213 1214 1215 1216 1217
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_ARCHIVE_DAYS_THRESHOLD, value);
    return Status::OK();
}

Status
G
groot 已提交
1218
Config::SetDBConfigInsertBufferSize(const std::string& value) {
Y
yudong.cai 已提交
1219
    Status s = CheckDBConfigInsertBufferSize(value);
G
groot 已提交
1220 1221 1222 1223
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1224
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_INSERT_BUFFER_SIZE, value);
Y
yudong.cai 已提交
1225 1226 1227 1228
    return Status::OK();
}

Status
G
groot 已提交
1229
Config::SetDBConfigBuildIndexGPU(const std::string& value) {
Y
yudong.cai 已提交
1230
    Status s = CheckDBConfigBuildIndexGPU(value);
G
groot 已提交
1231 1232 1233 1234
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1235 1236 1237 1238 1239 1240
    SetConfigValueInMem(CONFIG_DB, CONFIG_DB_BUILD_INDEX_GPU, value);
    return Status::OK();
}

/* metric config */
Status
G
groot 已提交
1241
Config::SetMetricConfigEnableMonitor(const std::string& value) {
Y
yudong.cai 已提交
1242
    Status s = CheckMetricConfigEnableMonitor(value);
G
groot 已提交
1243 1244 1245 1246
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1247
    SetConfigValueInMem(CONFIG_DB, CONFIG_METRIC_ENABLE_MONITOR, value);
Y
yudong.cai 已提交
1248 1249 1250 1251
    return Status::OK();
}

Status
G
groot 已提交
1252
Config::SetMetricConfigCollector(const std::string& value) {
Y
yudong.cai 已提交
1253
    Status s = CheckMetricConfigCollector(value);
G
groot 已提交
1254 1255 1256 1257
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1258 1259 1260 1261 1262
    SetConfigValueInMem(CONFIG_DB, CONFIG_METRIC_COLLECTOR, value);
    return Status::OK();
}

Status
G
groot 已提交
1263
Config::SetMetricConfigPrometheusPort(const std::string& value) {
Y
yudong.cai 已提交
1264
    Status s = CheckMetricConfigPrometheusPort(value);
G
groot 已提交
1265 1266 1267 1268
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1269 1270 1271 1272 1273 1274
    SetConfigValueInMem(CONFIG_DB, CONFIG_METRIC_PROMETHEUS_PORT, value);
    return Status::OK();
}

/* cache config */
Status
G
groot 已提交
1275
Config::SetCacheConfigCpuCacheCapacity(const std::string& value) {
Y
yudong.cai 已提交
1276
    Status s = CheckCacheConfigCpuCacheCapacity(value);
G
groot 已提交
1277 1278 1279 1280
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1281
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_CPU_CACHE_CAPACITY, value);
Y
yudong.cai 已提交
1282 1283 1284 1285
    return Status::OK();
}

Status
G
groot 已提交
1286
Config::SetCacheConfigCpuCacheThreshold(const std::string& value) {
Y
yudong.cai 已提交
1287
    Status s = CheckCacheConfigCpuCacheThreshold(value);
G
groot 已提交
1288 1289 1290 1291
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1292
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_CPU_CACHE_THRESHOLD, value);
Y
yudong.cai 已提交
1293 1294 1295 1296
    return Status::OK();
}

Status
G
groot 已提交
1297
Config::SetCacheConfigGpuCacheCapacity(const std::string& value) {
Y
yudong.cai 已提交
1298
    Status s = CheckCacheConfigGpuCacheCapacity(value);
G
groot 已提交
1299 1300 1301 1302
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1303
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_GPU_CACHE_CAPACITY, value);
Y
yudong.cai 已提交
1304 1305 1306 1307
    return Status::OK();
}

Status
G
groot 已提交
1308
Config::SetCacheConfigGpuCacheThreshold(const std::string& value) {
Y
yudong.cai 已提交
1309
    Status s = CheckCacheConfigGpuCacheThreshold(value);
G
groot 已提交
1310 1311 1312 1313
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1314
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_GPU_CACHE_THRESHOLD, value);
Y
yudong.cai 已提交
1315 1316 1317 1318
    return Status::OK();
}

Status
G
groot 已提交
1319
Config::SetCacheConfigCacheInsertData(const std::string& value) {
Y
yudong.cai 已提交
1320
    Status s = CheckCacheConfigCacheInsertData(value);
G
groot 已提交
1321 1322 1323 1324
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1325 1326 1327 1328 1329 1330
    SetConfigValueInMem(CONFIG_DB, CONFIG_CACHE_CACHE_INSERT_DATA, value);
    return Status::OK();
}

/* engine config */
Status
G
groot 已提交
1331
Config::SetEngineConfigUseBlasThreshold(const std::string& value) {
Y
yudong.cai 已提交
1332
    Status s = CheckEngineConfigUseBlasThreshold(value);
G
groot 已提交
1333 1334 1335 1336
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1337
    SetConfigValueInMem(CONFIG_DB, CONFIG_ENGINE_USE_BLAS_THRESHOLD, value);
Y
yudong.cai 已提交
1338 1339 1340 1341
    return Status::OK();
}

Status
G
groot 已提交
1342
Config::SetEngineConfigOmpThreadNum(const std::string& value) {
Y
yudong.cai 已提交
1343
    Status s = CheckEngineConfigOmpThreadNum(value);
G
groot 已提交
1344 1345 1346 1347
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1348 1349 1350 1351 1352 1353
    SetConfigValueInMem(CONFIG_DB, CONFIG_ENGINE_OMP_THREAD_NUM, value);
    return Status::OK();
}

/* resource config */
Status
G
groot 已提交
1354
Config::SetResourceConfigMode(const std::string& value) {
Y
yudong.cai 已提交
1355
    Status s = CheckResourceConfigMode(value);
G
groot 已提交
1356 1357 1358 1359
    if (!s.ok()) {
        return s;
    }

Y
yudong.cai 已提交
1360 1361 1362 1363
    SetConfigValueInMem(CONFIG_DB, CONFIG_RESOURCE_MODE, value);
    return Status::OK();
}

G
groot 已提交
1364 1365 1366
}  // namespace server
}  // namespace milvus
}  // namespace zilliz