in Sources/aliyun-log-c-sdk/log_ring_file.c [237:274]
int log_ring_file_clean(log_ring_file *file, uint64_t startOffset,
uint64_t endOffset)
{
if (endOffset > file->nowOffset)
{
aos_error_log("try to clean invalid ring file %s, start %lld, end %lld, now %lld",
file->filePath,
startOffset,
endOffset,
file->nowOffset);
return -1;
}
if ((file->nowOffset - endOffset) / file->maxFileSize >= file->maxFileCount - 1)
{
// no need to clean
return 0;
}
memset(file->fileUseFlags, 0, sizeof(int) * file->maxFileCount);
for (int64_t i = endOffset / file->maxFileSize; i <= file->nowOffset / file->maxFileSize; ++i)
{
file->fileUseFlags[i % file->maxFileCount] = 1;
}
aos_info_log("remove file %s , offset from %lld to %lld, file offset %lld, index from %d to %d",
file->filePath,
startOffset,
endOffset,
file->nowOffset,
endOffset / file->maxFileSize,
file->nowOffset / file->maxFileSize);
for (int i = 0; i < file->maxFileCount; ++i)
{
if (file->fileUseFlags[i] != 0)
continue;
log_ring_file_remove_file(file, i);
}
return 0;
}