bool GetLimitlessInstance()

in src/limitless/limitless_monitor_service.cc [181:204]


bool GetLimitlessInstance(const SQLTCHAR *connection_string_c_str, int host_port, char *service_id_c_str, size_t service_id_size, const LimitlessInstance *db_instance) {
    std::string service_id(service_id_c_str);

    if (service_id.empty() || !limitless_monitor_service.CheckService(service_id)) {
        bool service_id_was_empty = service_id.empty();
        if (!limitless_monitor_service.NewService(service_id, connection_string_c_str, host_port, std::make_shared<LimitlessRouterMonitor>())) {
            return false;
        }
        // overwrite the provided service ID if it was overwritten
        if (service_id_was_empty) {
            strncpy(service_id_c_str, service_id.c_str(), service_id_size);
        }
    } else {
        limitless_monitor_service.IncrementReferenceCounter(service_id);
    }

    std::shared_ptr<HostInfo> host = limitless_monitor_service.GetHostInfo(service_id);
    if (host == nullptr) {
        return false;
    }

    strncpy(db_instance->server, host->GetHost().c_str(), db_instance->server_size);
    return true;
}