set SF_G_CONTINUE_FLAG only once :)
parent
58e35f7457
commit
ceedb33e93
|
|
@ -101,23 +101,21 @@ static int open_writable_binlog(SFBinlogWriterInfo *writer)
|
||||||
writer->file.fd = open(writer->file.name,
|
writer->file.fd = open(writer->file.name,
|
||||||
O_WRONLY | O_CREAT | O_APPEND, 0644);
|
O_WRONLY | O_CREAT | O_APPEND, 0644);
|
||||||
if (writer->file.fd < 0) {
|
if (writer->file.fd < 0) {
|
||||||
logCrit("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"open file \"%s\" fail, "
|
"open file \"%s\" fail, "
|
||||||
"errno: %d, error info: %s, exiting ...",
|
"errno: %d, error info: %s",
|
||||||
__LINE__, writer->file.name,
|
__LINE__, writer->file.name,
|
||||||
errno, STRERROR(errno));
|
errno, STRERROR(errno));
|
||||||
SF_G_CONTINUE_FLAG = false;
|
|
||||||
return errno != 0 ? errno : EACCES;
|
return errno != 0 ? errno : EACCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
writer->file.size = lseek(writer->file.fd, 0, SEEK_END);
|
writer->file.size = lseek(writer->file.fd, 0, SEEK_END);
|
||||||
if (writer->file.size < 0) {
|
if (writer->file.size < 0) {
|
||||||
logCrit("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"lseek file \"%s\" fail, "
|
"lseek file \"%s\" fail, "
|
||||||
"errno: %d, error info: %s, exiting ...",
|
"errno: %d, error info: %s",
|
||||||
__LINE__, writer->file.name,
|
__LINE__, writer->file.name,
|
||||||
errno, STRERROR(errno));
|
errno, STRERROR(errno));
|
||||||
SF_G_CONTINUE_FLAG = false;
|
|
||||||
return errno != 0 ? errno : EIO;
|
return errno != 0 ? errno : EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,12 +137,11 @@ static int open_next_binlog(SFBinlogWriterInfo *writer)
|
||||||
"binlog file %s exist, rename to %s",
|
"binlog file %s exist, rename to %s",
|
||||||
__LINE__, writer->file.name, bak_filename);
|
__LINE__, writer->file.name, bak_filename);
|
||||||
} else {
|
} else {
|
||||||
logCrit("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"rename binlog %s to backup %s fail, "
|
"rename binlog %s to backup %s fail, "
|
||||||
"errno: %d, error info: %s, exiting ...",
|
"errno: %d, error info: %s",
|
||||||
__LINE__, writer->file.name, bak_filename,
|
__LINE__, writer->file.name, bak_filename,
|
||||||
errno, STRERROR(errno));
|
errno, STRERROR(errno));
|
||||||
SF_G_CONTINUE_FLAG = false;
|
|
||||||
return errno != 0 ? errno : EPERM;
|
return errno != 0 ? errno : EPERM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -159,23 +156,21 @@ static int do_write_to_file(SFBinlogWriterInfo *writer,
|
||||||
|
|
||||||
if (fc_safe_write(writer->file.fd, buff, len) != len) {
|
if (fc_safe_write(writer->file.fd, buff, len) != len) {
|
||||||
result = errno != 0 ? errno : EIO;
|
result = errno != 0 ? errno : EIO;
|
||||||
logCrit("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"write to binlog file \"%s\" fail, fd: %d, "
|
"write to binlog file \"%s\" fail, "
|
||||||
"errno: %d, error info: %s, exiting ...",
|
"errno: %d, error info: %s",
|
||||||
__LINE__, writer->file.name,
|
__LINE__, writer->file.name,
|
||||||
writer->file.fd, result, STRERROR(result));
|
result, STRERROR(result));
|
||||||
SF_G_CONTINUE_FLAG = false;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fsync(writer->file.fd) != 0) {
|
if (fsync(writer->file.fd) != 0) {
|
||||||
result = errno != 0 ? errno : EIO;
|
result = errno != 0 ? errno : EIO;
|
||||||
logCrit("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"fsync to binlog file \"%s\" fail, "
|
"fsync to binlog file \"%s\" fail, "
|
||||||
"errno: %d, error info: %s, exiting ...",
|
"errno: %d, error info: %s",
|
||||||
__LINE__, writer->file.name,
|
__LINE__, writer->file.name,
|
||||||
result, STRERROR(result));
|
result, STRERROR(result));
|
||||||
SF_G_CONTINUE_FLAG = false;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -321,17 +316,20 @@ static void repush_to_queue(SFBinlogWriterThread *thread, SFBinlogWriterBuffer *
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DEAL_CURRENT_VERSION_WBUFFER(writer, wb) \
|
#define DEAL_CURRENT_VERSION_WBUFFER(writer, wb) \
|
||||||
do { \
|
do { \
|
||||||
deal_binlog_one_record(wb); \
|
if ((result=deal_binlog_one_record(wb)) != 0) { \
|
||||||
|
return result; \
|
||||||
|
} \
|
||||||
fast_mblock_free_object(&writer->thread->mblock, wb); \
|
fast_mblock_free_object(&writer->thread->mblock, wb); \
|
||||||
++writer->version_ctx.next; \
|
++writer->version_ctx.next; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static void deal_record_by_version(SFBinlogWriterBuffer *wb)
|
static int deal_record_by_version(SFBinlogWriterBuffer *wb)
|
||||||
{
|
{
|
||||||
SFBinlogWriterInfo *writer;
|
SFBinlogWriterInfo *writer;
|
||||||
SFBinlogWriterBuffer **current;
|
SFBinlogWriterBuffer **current;
|
||||||
int64_t distance;
|
int64_t distance;
|
||||||
|
int result;
|
||||||
int index;
|
int index;
|
||||||
bool expand;
|
bool expand;
|
||||||
|
|
||||||
|
|
@ -344,7 +342,8 @@ static void deal_record_by_version(SFBinlogWriterBuffer *wb)
|
||||||
wb->version, writer->version_ctx.next,
|
wb->version, writer->version_ctx.next,
|
||||||
writer->version_ctx.ring.size - 1);
|
writer->version_ctx.ring.size - 1);
|
||||||
repush_to_queue(writer->thread, wb);
|
repush_to_queue(writer->thread, wb);
|
||||||
return;
|
fc_sleep_ms(10);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -363,7 +362,7 @@ static void deal_record_by_version(SFBinlogWriterBuffer *wb)
|
||||||
writer->version_ctx.ring.start = writer->version_ctx.ring.end =
|
writer->version_ctx.ring.start = writer->version_ctx.ring.end =
|
||||||
writer->version_ctx.ring.entries +
|
writer->version_ctx.ring.entries +
|
||||||
(++index) % writer->version_ctx.ring.size;
|
(++index) % writer->version_ctx.ring.size;
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
writer->version_ctx.ring.start = writer->version_ctx.ring.entries +
|
writer->version_ctx.ring.start = writer->version_ctx.ring.entries +
|
||||||
|
|
@ -378,7 +377,7 @@ static void deal_record_by_version(SFBinlogWriterBuffer *wb)
|
||||||
(++index) % writer->version_ctx.ring.size;
|
(++index) % writer->version_ctx.ring.size;
|
||||||
writer->version_ctx.ring.count--;
|
writer->version_ctx.ring.count--;
|
||||||
}
|
}
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
*current = wb;
|
*current = wb;
|
||||||
|
|
@ -404,6 +403,8 @@ static void deal_record_by_version(SFBinlogWriterBuffer *wb)
|
||||||
writer->version_ctx.ring.end = writer->version_ctx.ring.entries +
|
writer->version_ctx.ring.end = writer->version_ctx.ring.entries +
|
||||||
(wb->version + 1) % writer->version_ctx.ring.size;
|
(wb->version + 1) % writer->version_ctx.ring.size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void add_to_flush_writer_array(SFBinlogWriterThread *thread,
|
static inline void add_to_flush_writer_array(SFBinlogWriterThread *thread,
|
||||||
|
|
@ -495,7 +496,9 @@ static int deal_binlog_records(SFBinlogWriterThread *thread,
|
||||||
thread->mblock, current);
|
thread->mblock, current);
|
||||||
} else {
|
} else {
|
||||||
add_to_flush_writer_array(thread, current->writer);
|
add_to_flush_writer_array(thread, current->writer);
|
||||||
deal_record_by_version(current);
|
if ((result=deal_record_by_version(current)) != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while (wbuffer != NULL);
|
} while (wbuffer != NULL);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -566,7 +569,8 @@ static void *binlog_writer_func(void *arg)
|
||||||
|
|
||||||
if (deal_binlog_records(thread, wb_head) != 0) {
|
if (deal_binlog_records(thread, wb_head) != 0) {
|
||||||
logCrit("file: "__FILE__", line: %d, "
|
logCrit("file: "__FILE__", line: %d, "
|
||||||
"deal_binlog_records fail, program exit!", __LINE__);
|
"deal_binlog_records fail, "
|
||||||
|
"program exit!", __LINE__);
|
||||||
SF_G_CONTINUE_FLAG = false;
|
SF_G_CONTINUE_FLAG = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue