in flex/engines/http_server/graph_db_service.h [209:364]
static bool decode(const Node& config,
server::ServiceConfig& service_config) {
if (!config.IsMap()) {
LOG(ERROR) << "ServiceConfig should be a map";
return false;
}
// log level: INFO=0, WARNING=1, ERROR=2, FATAL=3
if (config["log_level"]) {
auto level_str = gs::toUpper(config["log_level"].as<std::string>());
if (level_str == "INFO") {
service_config.log_level = 0;
} else if (level_str == "WARNING") {
service_config.log_level = 1;
} else if (level_str == "ERROR") {
service_config.log_level = 2;
} else if (level_str == "FATAL") {
service_config.log_level = 3;
} else {
LOG(ERROR) << "Unsupported log level: " << level_str;
return false;
}
} else {
LOG(INFO) << "log_level not found, use default value "
<< service_config.log_level;
}
// verbose log level
if (config["verbose_level"]) {
service_config.verbose_level = config["verbose_level"].as<int>();
} else {
LOG(INFO) << "verbose_level not found, use default value "
<< service_config.verbose_level;
}
auto engine_node = config["compute_engine"];
if (engine_node) {
auto engine_type = engine_node["type"];
if (engine_type) {
auto engine_type_str = engine_type.as<std::string>();
if (engine_type_str != "hiactor" && engine_type_str != "Hiactor") {
LOG(ERROR) << "compute_engine type should be hiactor, found: "
<< engine_type_str;
return false;
}
}
auto shard_num_node = engine_node["thread_num_per_worker"];
if (shard_num_node) {
service_config.shard_num = shard_num_node.as<uint32_t>();
} else {
LOG(INFO) << "shard_num not found, use default value "
<< service_config.shard_num;
}
auto metadata_store_node = engine_node["metadata_store"];
if (metadata_store_node) {
auto metadata_store_type = metadata_store_node["type"];
if (metadata_store_type) {
auto metadata_store_type_str = metadata_store_type.as<std::string>();
if (metadata_store_type_str == "file") {
service_config.metadata_store_type_ =
gs::MetadataStoreType::kLocalFile;
} else {
LOG(ERROR) << "Unsupported metadata store type: "
<< metadata_store_type_str;
return false;
}
}
}
if (engine_node["wal_uri"]) {
service_config.wal_uri = engine_node["wal_uri"].as<std::string>();
}
} else {
LOG(ERROR) << "Fail to find compute_engine configuration";
return false;
}
auto http_service_node = config["http_service"];
if (http_service_node) {
auto query_port_node = http_service_node["query_port"];
if (query_port_node) {
service_config.query_port = query_port_node.as<uint32_t>();
} else {
LOG(INFO) << "query_port not found, use default value "
<< service_config.query_port;
}
auto admin_port_node = http_service_node["admin_port"];
if (admin_port_node) {
service_config.admin_port = admin_port_node.as<uint32_t>();
} else {
LOG(INFO) << "admin_port not found, use default value "
<< service_config.admin_port;
}
if (http_service_node["sharding_mode"]) {
auto sharding_mode =
http_service_node["sharding_mode"].as<std::string>();
if (sharding_mode != "exclusive" && sharding_mode != "cooperative") {
LOG(ERROR) << "Unsupported sharding mode: " << sharding_mode;
return false;
}
if (sharding_mode == "exclusive" && service_config.shard_num == 1) {
LOG(ERROR) << "exclusive sharding mode requires at least 2 shards";
return false;
}
service_config.set_sharding_mode(sharding_mode);
VLOG(1) << "sharding_mode: " << sharding_mode;
}
if (http_service_node["max_content_length"]) {
service_config.set_admin_svc_max_content_length(
http_service_node["max_content_length"].as<std::string>());
LOG(INFO) << "max_content_length: "
<< service_config.admin_svc_max_content_length;
}
} else {
LOG(ERROR) << "Fail to find http_service configuration";
return false;
}
auto compiler_node = config["compiler"];
if (compiler_node) {
auto endpoint_node = compiler_node["endpoint"];
if (endpoint_node) {
auto bolt_node = endpoint_node["bolt_connector"];
if (bolt_node && bolt_node["disabled"]) {
service_config.enable_bolt = !bolt_node["disabled"].as<bool>();
} else {
service_config.enable_bolt = true;
}
if (bolt_node && bolt_node["port"]) {
service_config.bolt_port = bolt_node["port"].as<uint32_t>();
} else {
LOG(INFO) << "bolt_port not found, or disabled";
}
auto gremlin_node = endpoint_node["gremlin_connector"];
if (gremlin_node && gremlin_node["disabled"]) {
service_config.enable_gremlin = !gremlin_node["disabled"].as<bool>();
} else {
service_config.enable_gremlin = true;
}
if (gremlin_node && gremlin_node["port"]) {
service_config.gremlin_port = gremlin_node["port"].as<uint32_t>();
} else {
LOG(INFO) << "gremlin_port not found, use default value "
<< service_config.gremlin_port;
}
}
}
auto default_graph_node = config["default_graph"];
std::string default_graph;
if (default_graph_node) {
service_config.default_graph = default_graph_node.as<std::string>();
} else {
LOG(WARNING) << "Fail to find default_graph configuration";
}
return true;
}