Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/database/engine/datafile.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "rrdengine.h"

#ifdef OS_WINDOWS
void sync_uv_file_data(uv_file file)
{
uv_fs_t req;
(void) uv_fs_fsync(NULL, &req, file, NULL);
uv_fs_req_cleanup(&req);
}
#endif

void datafile_list_insert(struct rrdengine_instance *ctx, struct rrdengine_datafile *datafile)
{
netdata_rwlock_wrlock(&ctx->datafiles.rwlock);
Expand All @@ -9,6 +18,13 @@ void datafile_list_insert(struct rrdengine_instance *ctx, struct rrdengine_dataf
fatal("DBENGINE: cannot insert datafile %u of tier %d into the datafiles list",
datafile->fileno, ctx->config.tier);
*Pvalue = datafile;

#ifdef OS_WINDOWS
sync_uv_file_data(datafile->file);
sync_uv_file_data(datafile->journalfile->file);
datafile->writers.last_sync_time = now_realtime_sec();
#endif

netdata_rwlock_wrunlock(&ctx->datafiles.rwlock);
}

Expand Down
7 changes: 7 additions & 0 deletions src/database/engine/datafile.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ struct rrdengine_datafile {
SPINLOCK spinlock;
size_t running;
size_t flushed_to_open_running;
#ifdef OS_WINDOWS
time_t last_sync_time;
#endif
} writers;

struct {
Expand Down Expand Up @@ -115,4 +118,8 @@ static struct rrdengine_instance *datafile_ctx(struct rrdengine_datafile *datafi
return datafile->ctx;
}

#ifdef OS_WINDOWS
void sync_uv_file_data(uv_file file);
#endif

#endif /* NETDATA_DATAFILE_H */
17 changes: 17 additions & 0 deletions src/database/engine/rrdengine.c
Original file line number Diff line number Diff line change
Expand Up @@ -726,8 +726,19 @@ extent_flush_to_open(struct rrdengine_instance *ctx, struct extent_io_descriptor

static bool datafile_is_full(struct rrdengine_instance *ctx, struct rrdengine_datafile *datafile) {
bool ret = false;

spinlock_lock(&datafile->writers.spinlock);

#ifdef OS_WINDOWS
time_t now = now_realtime_sec();
if (now - datafile->writers.last_sync_time > 60) {
nd_log_daemon(NDLP_INFO, "DBENGINE: datafile %d, last sync time: %ld, now: %ld", datafile->fileno, datafile->writers.last_sync_time, now);
sync_uv_file_data(datafile->file);
sync_uv_file_data(datafile->journalfile->file);
datafile->writers.last_sync_time = now_realtime_sec();
}
#endif

if(datafile->pos > rrdeng_target_data_file_size(ctx))
ret = true;

Expand Down Expand Up @@ -862,6 +873,12 @@ static struct rrdengine_datafile *get_datafile_to_write_extent(struct rrdengine_
// release the writers on the old datafile
spinlock_lock(&old_datafile->writers.spinlock);
old_datafile->writers.running--;
#ifdef OS_WINDOWS
sync_uv_file_data(old_datafile->file);
sync_uv_file_data(old_datafile->journalfile->file);
datafile->writers.last_sync_time = now_realtime_sec();
old_datafile->writers.last_sync_time = now_realtime_sec();
#endif
spinlock_unlock(&old_datafile->writers.spinlock);
}

Expand Down
Loading