diff --git a/src/sf_binlog_writer.c b/src/sf_binlog_writer.c index b19463d..7ba74b0 100644 --- a/src/sf_binlog_writer.c +++ b/src/sf_binlog_writer.c @@ -767,3 +767,46 @@ int sf_binlog_writer_set_binlog_index(SFBinlogWriterInfo *writer, return open_writable_binlog(writer); } + +int sf_binlog_writer_get_last_lines(const char *subdir_name, + const int current_write_index, char *buff, + const int buff_size, int *count, int *length) +{ + int result; + int remain_count; + int current_count; + int current_index; + int i; + char filename[PATH_MAX]; + string_t lines; + + current_index = current_write_index; + *length = 0; + remain_count = *count; + for (i=0; i<2; i++) { + current_count = remain_count; + sf_binlog_writer_get_filename(subdir_name, + current_index, filename, sizeof(filename)); + result = fc_get_last_lines(filename, buff + *length, + buff_size - *length, &lines, ¤t_count); + if (result == 0) { + memmove(buff + *length, lines.str, lines.len); + *length += lines.len; + remain_count -= current_count; + if (remain_count == 0) { + break; + } + } else if (result != ENOENT) { + *count = 0; + return result; + } + if (current_index == 0) { + break; + } + + --current_index; //try previous binlog file + } + + *count -= remain_count; + return 0; +} diff --git a/src/sf_binlog_writer.h b/src/sf_binlog_writer.h index 5bb1189..adfd324 100644 --- a/src/sf_binlog_writer.h +++ b/src/sf_binlog_writer.h @@ -193,6 +193,10 @@ static inline void sf_push_to_binlog_write_queue(SFBinlogWriterInfo *writer, fc_queue_push(&writer->thread->queue, buffer); } +int sf_binlog_writer_get_last_lines(const char *subdir_name, + const int current_write_index, char *buff, + const int buff_size, int *count, int *length); + #ifdef __cplusplus } #endif