bool SwiftWriterConfig::parseFromString()

in aios/apps/facility/swift/client/SwiftWriterConfig.cpp [143:276]


bool SwiftWriterConfig::parseFromString(const string &configStr) {
    try {
        autil::legacy::FromJsonString(*this, configStr);
        return true;
    } catch (const autil::legacy::ExceptionBase &e) {}

#define PARSE_SWIFT_WRITER_CONFIG(keyName, valueName, valueType, parseFunc)                                            \
    else if (key == keyName) {                                                                                         \
        valueType value;                                                                                               \
        if (!parseFunc(valueStr.c_str(), value)) {                                                                     \
            AUTIL_LOG(ERROR,                                                                                           \
                      "Invalid swift writer config [%s], needed type[%s], actually[%s].",                              \
                      keyName,                                                                                         \
                      #valueType,                                                                                      \
                      valueStr.c_str());                                                                               \
            return false;                                                                                              \
        }                                                                                                              \
        valueName = value;                                                                                             \
    }

    StringTokenizer st(
        configStr, WRITER_CONFIG_SEPERATOR, StringTokenizer::TOKEN_IGNORE_EMPTY | StringTokenizer::TOKEN_TRIM);
    for (StringTokenizer::Iterator it = st.begin(); it != st.end(); it++) {
        StringTokenizer st2(*it, WRITER_CONFIG_KV_SEPERATOR, StringTokenizer::TOKEN_TRIM | StringTokenizer::TOKEN_TRIM);
        if (st2.getNumTokens() != 2) {
            AUTIL_LOG(ERROR, "Invalid config item: [%s]", (*it).c_str());
            return false;
        }
        string key = st2[0];
        string valueStr = st2[1];
        if (key == WRITER_TOPIC_NAME) {
            topicName = valueStr;
        } else if (key == WRITER_CONFIG_MODE) {
            if (!parseMode(valueStr)) {
                return false;
            }
        } else if (key == WRITER_CONFIG_REQUEST_COMPRESS) {
            if (valueStr == "true") {
                compress = true;
            } else {
                compress = false;
            }
        } else if (key == WRITER_CONFIG_MESSAGE_COMPRESS) {
            if (valueStr == "true") {
                compressMsg = true;
            } else {
                compressMsg = false;
            }
        } else if (key == WRITER_CONFIG_MESSAGE_COMPRESS_IN_BROKER) {
            if (valueStr == "true") {
                compressMsgInBroker = true;
            } else {
                compressMsgInBroker = false;
            }
        } else if (key == WRITER_CONFIG_MERGE_MESSAGE) {
            if (valueStr == "true") {
                mergeMsg = true;
            } else {
                mergeMsg = false;
            }
        } else if (key == WRITER_CONFIG_NEED_TIMESTAMP) {
            if (valueStr == "true") {
                needTimestamp = true;
            } else {
                needTimestamp = false;
            }
        } else if (key == WRITER_CONFIG_WRITER_NAME) {
            writerName = valueStr;
        }
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_RETRY_TIMES, retryTimes, uint32_t, StringUtil::strToUInt32)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_RETRY_TIME_INTERVAL, retryTimeInterval, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_REQUEST_SEND_BYTE, oneRequestSendByteCount, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_MAX_BUFFER_BYTE, maxBufferSize, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_MAX_KEEP_IN_BUFFER_TIME, maxKeepInBufferTime, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_SEND_REQUEST_LOOP_INTERVAL, sendRequestLoopInterval, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_WAIT_LOOP_INTERVAL, waitLoopInterval, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_BROKER_BUSY_WAIT_INTERVAL_MIN, brokerBusyWaitIntervalMin, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_BROKER_BUSY_WAIT_INTERVAL_MAX, brokerBusyWaitIntervalMax, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_WAIT_FINISHED_WRITER_TIME, waitFinishedWriterTime, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_COMPRESS_THRESHOLD_IN_BYTES, compressThresholdInBytes, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_BROKER_COMMIT_PROGRESS_DETECTION_INTERVAL,
                                  commitDetectionInterval,
                                  uint64_t,
                                  StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_SYNC_SEND_TIMEOUT, syncSendTimeout, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_ASYNC_SEND_TIMEOUT, asyncSendTimeout, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_MESSAGE_FORMAT, messageFormat, uint32_t, StringUtil::strToUInt32)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_MERGE_THRESHOLD_IN_COUNT, mergeThresholdInCount, uint16_t, StringUtil::strToUInt16)
        PARSE_SWIFT_WRITER_CONFIG(
            WRITER_CONFIG_MERGE_THRESHOLD_IN_SIZE, mergeThresholdInSize, uint64_t, StringUtil::strToUInt64)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_SCHEMA_VERSION, schemaVersion, int32_t, StringUtil::strToInt32)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_MAJOR_VERSION, majorVersion, uint32_t, StringUtil::strToUInt32)
        PARSE_SWIFT_WRITER_CONFIG(WRITER_CONFIG_MINOR_VERSION, minorVersion, uint32_t, StringUtil::strToUInt32)
        else if (key == WRITER_CONFIG_FUNCTION_CHAIN) {
            functionChain = valueStr;
        }
        else if (key == WRITER_CONFIG_ZK_PATH) {
            zkPath = valueStr;
        }
        else if (key == WRITER_CONFIG_IDENTITY) {
            writerIdentity = valueStr;
        }
        else if (key == WRITER_CONFIG_ACCESS_ID) {
            accessId = valueStr;
        }
        else if (key == WRITER_CONFIG_ACCESS_KEY) {
            accessKey = valueStr;
        }
        else {
            AUTIL_LOG(WARN, "Unknown config key : [%s]", key.c_str());
        }
    }
#undef PARSE_SWIFT_WRITER_CONFIG
    if (compressThresholdInBytes == DEFAULT_COMPRESS_THRESHOLD_IN_BYTES && compressMsg) {
        compressThresholdInBytes = 0; // compress all
    }
    if (mergeThresholdInCount > MAX_MERGE_THRESHOLD_IN_COUNT) {
        mergeThresholdInCount = MAX_MERGE_THRESHOLD_IN_COUNT;
    }
    if (writerIdentity.empty()) {
        writerIdentity = StringUtil::toString(TimeUtility::currentTime());
    }

    return true;
}