void on_log_persistent_manager_send_done_uuid()

in Sources/aliyun-log-c-sdk/log_persistent_manager.c [103:166]


void on_log_persistent_manager_send_done_uuid(const char * config_name,
                                              log_producer_result result,
                                              size_t log_bytes,
                                              size_t compressed_bytes,
                                              const char * req_id,
                                              const char * error_message,
                                              const unsigned char * raw_buffer,
                                              void *persistent_manager,
                                              int64_t startId,
                                              int64_t endId)
{
    if (result != LOG_PRODUCER_OK && result != LOG_PRODUCER_DROP_ERROR && result != LOG_PRODUCER_INVALID)
    {
        return;
    }
    log_persistent_manager * manager = (log_persistent_manager *)persistent_manager;
    if (manager == NULL)
    {
        return;
    }
    if (manager->is_invalid)
    {
        return;
    }
    if (startId < 0 || endId < 0 || startId > endId || endId - startId > 1024 * 1024)
    {
        aos_fatal_log("invalid id range %lld %lld", startId, endId);
        manager->is_invalid = 1;
        return;
    }

    // multi thread send is not allowed, and this should never happen
    if (startId > manager->checkpoint.start_log_uuid)
    {
        aos_fatal_log("project %s, logstore %s, invalid checkpoint start log uuid %lld %lld",
                      manager->config->project,
                      manager->config->logstore,
                      startId,
                      manager->checkpoint.start_log_uuid);
        manager->is_invalid = 1;
        return;
    }
    CS_ENTER(manager->lock);
    // cal log size
    uint64_t totalOffset = 0;
    for (int64_t id = startId; id <= endId; ++id)
    {
        totalOffset += manager->in_buffer_log_sizes[id % manager->config->maxPersistentLogCount];
    }

    manager->checkpoint.start_file_offset += totalOffset;
    manager->checkpoint.start_log_uuid = endId + 1;
    int rst = save_log_checkpoint(manager);
    if (rst != 0)
    {
        aos_error_log("project %s, logstore %s, save checkpoint failed, reason %d",
                      manager->config->project,
                      manager->config->logstore,
                      rst);
    }
    log_ring_file_clean(manager->ring_file, manager->checkpoint.start_file_offset - totalOffset, manager->checkpoint.start_file_offset);

    CS_LEAVE(manager->lock);
}