bool SwiftClientConfig::parseFromString()

in aios/apps/facility/swift/client/SwiftClientConfig.cpp [76:179]


bool SwiftClientConfig::parseFromString(const std::string &configStr) {
    try {
        autil::legacy::FromJsonString(*this, configStr);
        return !zkPath.empty();
    } catch (const autil::legacy::ExceptionBase &e) {}
    StringTokenizer st(
        configStr, CLIENT_CONFIG_SEPERATOR, StringTokenizer::TOKEN_IGNORE_EMPTY | StringTokenizer::TOKEN_TRIM);
    for (StringTokenizer::Iterator it = st.begin(); it != st.end(); it++) {
        size_t pos = it->find(CLIENT_CONFIG_KV_SEPERATOR);
        if (pos == string::npos) {
            AUTIL_LOG(ERROR, "Invalid config item: [%s]", (*it).c_str());
            return false;
        }
        string key = it->substr(0, pos);
        string valueStr = it->substr(pos + 1);
        if (key == CLIENT_CONFIG_RETRY_TIME) {
            if (!StringUtil::strToUInt32(valueStr.c_str(), retryTimes)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_RETRY_TIME_INTERVAL) {
            if (!StringUtil::strToInt64(valueStr.c_str(), retryTimeInterval)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_MAX_WRITE_BUFFER_SIZE_MB) {
            if (!StringUtil::strToInt64(valueStr.c_str(), maxWriteBufferSizeMb)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_TEMP_WRITE_BUFFER_PERCENT) {
            if (!StringUtil::strToDouble(valueStr.c_str(), tempWriteBufferPercent)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_BUFFER_BLOCK_SIZE_KB) {
            if (!StringUtil::strToInt64(valueStr.c_str(), bufferBlockSizeKb)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_LATELY_ERROR_TIME_MIN_INTERVAL_US) {
            if (!StringUtil::strToInt64(valueStr.c_str(), latelyErrorTimeMinIntervalUs)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_LATELY_ERROR_TIME_MAX_INTERVAL_US) {
            if (!StringUtil::strToInt64(valueStr.c_str(), latelyErrorTimeMaxIntervalUs)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_FB_BUFFER_RECYCLE_SIZE_KB) {
            if (!StringUtil::strToInt64(valueStr.c_str(), fbWriterRecycleSizeKb)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_MERGE_MESSAGE_THREAD_NUM) {
            if (!StringUtil::strToUInt32(valueStr.c_str(), mergeMessageThreadNum)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_IO_THREAD_NUM) {
            if (!StringUtil::strToUInt32(valueStr.c_str(), ioThreadNum)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_RPC_SEND_QUEUE_SIZE) {
            if (!StringUtil::strToUInt32(valueStr.c_str(), rpcSendQueueSize)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_RPC_TIMEOUT) {
            if (!StringUtil::strToUInt32(valueStr.c_str(), rpcTimeout)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_ZK_PATH) {
            zkPath = valueStr;
        } else if (key == CLIENT_CONFIG_LOG_CONFIG_FILE) {
            logConfigFile = valueStr;
        } else if (key == CLIENT_CONFIG_USE_FOLLOWER_ADMIN) {
            bool ret = true;
            if (StringUtil::parseTrueFalse(valueStr, ret)) {
                useFollowerAdmin = ret;
            }
        } else if (key == CLIENT_CONFIG_TRACING_MSG_LEVEL) {
            if (!StringUtil::strToUInt32(valueStr.c_str(), tracingMsgLevel)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_CLIENT_IDENTITY) {
            clientIdentity = valueStr;
        } else if (key == CLIENT_CONFIG_ADMIN_TIMEOUT) {
            if (!StringUtil::strToInt64(valueStr.c_str(), adminTimeout)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_ADMIN_REFRESH_TIME) {
            if (!StringUtil::strToInt64(valueStr.c_str(), refreshTime)) {
                return false;
            }
        } else if (key == CLIENT_CONFIG_AUTHENTICATION_USERNAME) {
            username = valueStr;
        } else if (key == CLIENT_CONFIG_AUTHENTICATION_PASSWD) {
            passwd = valueStr;
        } else {
            AUTIL_LOG(ERROR, "Unknown config key : [%s]", key.c_str());
            return false;
        }
    }
    if (latelyErrorTimeMaxIntervalUs < latelyErrorTimeMinIntervalUs) {
        AUTIL_LOG(ERROR,
                  "error max [%ld] interval small than min [%ld]",
                  latelyErrorTimeMaxIntervalUs,
                  latelyErrorTimeMinIntervalUs);
        return false;
    }
    return !zkPath.empty();
}