int log_persistent_manager_save_log()

in Sources/aliyun-log-c-sdk/log_persistent_manager.c [219:261]


int log_persistent_manager_save_log(log_persistent_manager *manager,
                                    const char *logBuf, size_t logSize)
{
    // save binlog
    const void * buffer[2];
    size_t bufferSize[2];

    log_persistent_item_header header;
    header.magic_code = LOG_PERSISTENT_HEADER_MAGIC;
    header.log_uuid = manager->checkpoint.now_log_uuid;
    header.log_size = logSize;
    header.preserved = 0;

    buffer[0] = &header;
    buffer[1] = logBuf;
    bufferSize[0] = sizeof(log_persistent_item_header);
    bufferSize[1] = logSize;
    int rst = log_ring_file_write(manager->ring_file, manager->checkpoint.now_file_offset, 2, buffer, bufferSize);
    if (rst != bufferSize[0] + bufferSize[1])
    {
        aos_error_log("project %s, logstoe %s, write bin log failed, rst %d",
                      manager->config->project,
                      manager->config->logstore,
                      rst);
        return LOG_PRODUCER_PERSISTENT_ERROR;
    }
    // update in memory checkpoint
    manager->in_buffer_log_sizes[manager->checkpoint.now_log_uuid % manager->config->maxPersistentLogCount] = rst;
    manager->checkpoint.now_file_offset += rst;
    ++manager->checkpoint.now_log_uuid;
    aos_debug_log("project %s, logstore %s, write bin log success, offset %lld, uuid %lld, log size %d",
                  manager->config->project,
                  manager->config->logstore,
                  manager->checkpoint.now_file_offset,
                  manager->checkpoint.now_log_uuid,
                  rst);
    if (manager->first_checkpoint_saved == 0)
    {
        save_log_checkpoint(manager);
        manager->first_checkpoint_saved = 1;
    }
    return 0;
}