log_producer_result log_producer_client_add_log_with_len()

in Sources/aliyun-log-c-sdk/log_producer_client.c [172:206]


log_producer_result log_producer_client_add_log_with_len(log_producer_client * client, int32_t pair_count, char ** keys, size_t * key_lens, char ** values, size_t * val_lens, int flush)
{
    if (client == NULL || !client->valid_flag)
    {
        return LOG_PRODUCER_INVALID;
    }

    log_producer_manager * manager = ((producer_client_private *)client->private_data)->producer_manager;
    log_persistent_manager * persistent_manager = ((producer_client_private *)client->private_data)->persistent_manager;
    if (persistent_manager != NULL && persistent_manager->is_invalid == 0)
    {
        CS_ENTER(persistent_manager->lock);
        add_log_full(persistent_manager->builder, LOG_GET_TIME(), pair_count, keys, key_lens, values, val_lens);
        char * logBuf = persistent_manager->builder->grp->logs.buffer;
        size_t logSize = persistent_manager->builder->grp->logs.now_buffer_len;
        clear_log_tag(&(persistent_manager->builder->grp->logs));
        if (!log_persistent_manager_is_buffer_enough(persistent_manager, logSize) ||
            manager->totalBufferSize > manager->producer_config->maxBufferBytes)
        {
            CS_LEAVE(persistent_manager->lock);
            return LOG_PRODUCER_DROP_ERROR;
        }
        int rst = log_persistent_manager_save_log(persistent_manager, logBuf, logSize);
        if (rst != LOG_PRODUCER_OK)
        {
            CS_LEAVE(persistent_manager->lock);
            return LOG_PRODUCER_DROP_ERROR;
        }
        rst = log_producer_manager_add_log_raw(manager, logBuf, logSize, flush, persistent_manager->checkpoint.now_log_uuid - 1);
        CS_LEAVE(persistent_manager->lock);
        return rst;
    }

    return log_producer_manager_add_log(manager, pair_count, keys, key_lens, values, val_lens, flush, -1);
}