From d006954ceb95fdf8384d4c7617b7d514441b187f Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Tue, 27 Jun 2023 18:19:36 +0800 Subject: [PATCH] sf_binlog_writer_init support call_fsync parameter --- src/sf_binlog_writer.c | 8 ++++---- src/sf_binlog_writer.h | 19 +++++++++++-------- src/sf_file_writer.c | 5 +++-- src/sf_file_writer.h | 3 ++- src/sf_ordered_writer.c | 9 +++++---- src/sf_ordered_writer.h | 5 +++-- 6 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/sf_binlog_writer.c b/src/sf_binlog_writer.c index 2ad7397..83714db 100644 --- a/src/sf_binlog_writer.c +++ b/src/sf_binlog_writer.c @@ -443,19 +443,19 @@ static void binlog_wbuffer_destroy_func(void *element, void *args) int sf_binlog_writer_init_normal_ex(SFBinlogWriterInfo *writer, const char *data_path, const char *subdir_name, const char *file_prefix, const int buffer_size, - const int64_t file_rotate_size) + const int64_t file_rotate_size, const bool call_fsync) { memset(writer, 0, sizeof(*writer)); writer->order_by = SF_BINLOG_WRITER_TYPE_ORDER_BY_NONE; return sf_file_writer_init(&writer->fw, data_path, subdir_name, - file_prefix, buffer_size, file_rotate_size); + file_prefix, buffer_size, file_rotate_size, call_fsync); } int sf_binlog_writer_init_by_version_ex(SFBinlogWriterInfo *writer, const char *data_path, const char *subdir_name, const char *file_prefix, const uint64_t next_version, const int buffer_size, const int ring_size, - const int64_t file_rotate_size) + const int64_t file_rotate_size, const bool call_fsync) { int bytes; @@ -474,7 +474,7 @@ int sf_binlog_writer_init_by_version_ex(SFBinlogWriterInfo *writer, binlog_writer_set_next_version(writer, next_version); writer->flush.in_queue = false; return sf_file_writer_init(&writer->fw, data_path, subdir_name, - file_prefix, buffer_size, file_rotate_size); + file_prefix, buffer_size, file_rotate_size, call_fsync); } int sf_binlog_writer_init_thread_ex(SFBinlogWriterThread *thread, diff --git a/src/sf_binlog_writer.h b/src/sf_binlog_writer.h index c0b7928..7bdf239 100644 --- a/src/sf_binlog_writer.h +++ b/src/sf_binlog_writer.h @@ -113,13 +113,13 @@ extern "C" { int sf_binlog_writer_init_normal_ex(SFBinlogWriterInfo *writer, const char *data_path, const char *subdir_name, const char *file_prefix, const int buffer_size, - const int64_t file_rotate_size); + const int64_t file_rotate_size, const bool call_fsync); int sf_binlog_writer_init_by_version_ex(SFBinlogWriterInfo *writer, const char *data_path, const char *subdir_name, const char *file_prefix, const uint64_t next_version, const int buffer_size, const int ring_size, - const int64_t file_rotate_size); + const int64_t file_rotate_size, const bool call_fsync); int sf_binlog_writer_init_thread_ex(SFBinlogWriterThread *thread, const char *name, SFBinlogWriterInfo *writer, const short order_mode, @@ -129,13 +129,14 @@ int sf_binlog_writer_init_thread_ex(SFBinlogWriterThread *thread, #define sf_binlog_writer_init_normal(writer, \ data_path, subdir_name, buffer_size) \ sf_binlog_writer_init_normal_ex(writer, data_path, subdir_name, \ - SF_BINLOG_FILE_PREFIX, buffer_size, SF_BINLOG_DEFAULT_ROTATE_SIZE) + SF_BINLOG_FILE_PREFIX, buffer_size, \ + SF_BINLOG_DEFAULT_ROTATE_SIZE, true) #define sf_binlog_writer_init_by_version(writer, data_path, \ subdir_name, next_version, buffer_size, ring_size) \ sf_binlog_writer_init_by_version_ex(writer, data_path, subdir_name, \ SF_BINLOG_FILE_PREFIX, next_version, buffer_size, \ - ring_size, SF_BINLOG_DEFAULT_ROTATE_SIZE) + ring_size, SF_BINLOG_DEFAULT_ROTATE_SIZE, true) #define sf_binlog_writer_init_thread(thread, name, \ writer, max_delay, max_record_size) \ @@ -146,12 +147,13 @@ int sf_binlog_writer_init_thread_ex(SFBinlogWriterThread *thread, static inline int sf_binlog_writer_init_ex(SFBinlogWriterContext *context, const char *data_path, const char *subdir_name, const char *file_prefix, const int buffer_size, - const int max_delay, const int max_record_size) + const int max_delay, const int max_record_size, + const bool call_fsync) { int result; if ((result=sf_binlog_writer_init_normal_ex(&context->writer, data_path, subdir_name, file_prefix, buffer_size, - SF_BINLOG_DEFAULT_ROTATE_SIZE)) != 0) + SF_BINLOG_DEFAULT_ROTATE_SIZE, call_fsync)) != 0) { return result; } @@ -162,8 +164,9 @@ static inline int sf_binlog_writer_init_ex(SFBinlogWriterContext *context, #define sf_binlog_writer_init(context, data_path, subdir_name, \ buffer_size, max_delay, max_record_size) \ - sf_binlog_writer_init_ex(context, data_path, subdir_name, \ - SF_BINLOG_FILE_PREFIX, buffer_size, max_delay, max_record_size) + sf_binlog_writer_init_ex(context, data_path, subdir_name, \ + SF_BINLOG_FILE_PREFIX, buffer_size, max_delay, \ + max_record_size, true) void sf_binlog_writer_finish(SFBinlogWriterInfo *writer); diff --git a/src/sf_file_writer.c b/src/sf_file_writer.c index 01272c3..517c1e1 100644 --- a/src/sf_file_writer.c +++ b/src/sf_file_writer.c @@ -367,7 +367,8 @@ int sf_file_writer_deal_versioned_buffer(SFFileWriterInfo *writer, int sf_file_writer_init(SFFileWriterInfo *writer, const char *data_path, const char *subdir_name, const char *file_prefix, - const int buffer_size, const int64_t file_rotate_size) + const int buffer_size, const int64_t file_rotate_size, + const bool call_fsync) { int result; int path_len; @@ -384,7 +385,7 @@ int sf_file_writer_init(SFFileWriterInfo *writer, const char *data_path, return result; } - writer->cfg.call_fsync = true; + writer->cfg.call_fsync = call_fsync; writer->cfg.file_rotate_size = file_rotate_size; writer->cfg.data_path = data_path; path_len = snprintf(filepath, sizeof(filepath), diff --git a/src/sf_file_writer.h b/src/sf_file_writer.h index 07950c7..6a13f4d 100644 --- a/src/sf_file_writer.h +++ b/src/sf_file_writer.h @@ -71,7 +71,8 @@ extern "C" { int sf_file_writer_init(SFFileWriterInfo *writer, const char *data_path, const char *subdir_name, const char *file_prefix, - const int buffer_size, const int64_t file_rotate_size); + const int buffer_size, const int64_t file_rotate_size, + const bool call_fsync); void sf_file_writer_destroy(SFFileWriterInfo *writer); diff --git a/src/sf_ordered_writer.c b/src/sf_ordered_writer.c index 8ce72d3..eadfed1 100644 --- a/src/sf_ordered_writer.c +++ b/src/sf_ordered_writer.c @@ -237,12 +237,13 @@ static int sf_ordered_writer_init_thread(SFOrderedWriterContext *context, int sf_ordered_writer_init_ex(SFOrderedWriterContext *context, const char *data_path, const char *subdir_name, const char *file_prefix, const int buffer_size, - const int max_record_size, const int64_t file_rotate_size) + const int max_record_size, const int64_t file_rotate_size, + const bool call_fsync) { int result; - if ((result=sf_file_writer_init(&context->writer.fw, - data_path, subdir_name, file_prefix, - buffer_size, file_rotate_size)) != 0) + if ((result=sf_file_writer_init(&context->writer.fw, data_path, + subdir_name, file_prefix, buffer_size, + file_rotate_size, call_fsync)) != 0) { return result; } diff --git a/src/sf_ordered_writer.h b/src/sf_ordered_writer.h index f3b2f80..9d61b51 100644 --- a/src/sf_ordered_writer.h +++ b/src/sf_ordered_writer.h @@ -65,13 +65,14 @@ extern "C" { int sf_ordered_writer_init_ex(SFOrderedWriterContext *context, const char *data_path, const char *subdir_name, const char *file_prefix, const int buffer_size, - const int max_record_size, const int64_t file_rotate_size); + const int max_record_size, const int64_t file_rotate_size, + const bool call_fsync); #define sf_ordered_writer_init(context, data_path, \ subdir_name, buffer_size, max_record_size) \ sf_ordered_writer_init_ex(context, data_path, subdir_name, \ SF_BINLOG_FILE_PREFIX, buffer_size, max_record_size, \ - SF_BINLOG_DEFAULT_ROTATE_SIZE) + SF_BINLOG_DEFAULT_ROTATE_SIZE, true) #define sf_ordered_writer_set_flags(ctx, flags) \ sf_file_writer_set_flags(&(ctx)->writer.fw, flags)