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);
}