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