You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2022/07/26 02:53:13 UTC
[iotdb] branch master updated: [IOTDB-3938] Avoid performance decline caused by fsync twice (#6769)
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new f4d1323f11 [IOTDB-3938] Avoid performance decline caused by fsync twice (#6769)
f4d1323f11 is described below
commit f4d1323f115cbcb474ad288398a6bf1044c85e46
Author: Alan Choo <43...@users.noreply.github.com>
AuthorDate: Tue Jul 26 10:53:08 2022 +0800
[IOTDB-3938] Avoid performance decline caused by fsync twice (#6769)
---
.../org/apache/iotdb/db/wal/buffer/WALBuffer.java | 44 ++++++++++++----------
1 file changed, 24 insertions(+), 20 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
index 4d4d710eb2..df76bec878 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/buffer/WALBuffer.java
@@ -424,31 +424,13 @@ public class WALBuffer extends AbstractWALBuffer {
switchSyncingBufferToIdle();
}
- // force os cache to the storage device
- if (forceFlag) {
- try {
- currentWALFileWriter.force();
- } catch (IOException e) {
- logger.error(
- "Fail to fsync wal node-{}'s log writer, change system mode to read-only.",
- identifier,
- e);
- for (WALFlushListener fsyncListener : info.fsyncListeners) {
- fsyncListener.fail(e);
- }
- config.setReadOnly(true);
- }
- // notify all waiting listeners
- for (WALFlushListener fsyncListener : info.fsyncListeners) {
- fsyncListener.succeed();
- }
- }
-
+ boolean forceSuccess = false;
// try to roll log writer
if (info.rollWALFileWriterListener != null
|| (forceFlag && currentWALFileWriter.size() >= config.getWalFileSizeThresholdInByte())) {
try {
rollLogWriter(searchIndex, currentWALFileWriter.getWalFileStatus());
+ forceSuccess = true;
if (info.rollWALFileWriterListener != null) {
info.rollWALFileWriterListener.succeed();
}
@@ -462,6 +444,28 @@ public class WALBuffer extends AbstractWALBuffer {
}
config.setReadOnly(true);
}
+ } else if (forceFlag) { // force os cache to the storage device, avoid force twice by judging
+ // after rolling file
+ try {
+ currentWALFileWriter.force();
+ forceSuccess = true;
+ } catch (IOException e) {
+ logger.error(
+ "Fail to fsync wal node-{}'s log writer, change system mode to read-only.",
+ identifier,
+ e);
+ for (WALFlushListener fsyncListener : info.fsyncListeners) {
+ fsyncListener.fail(e);
+ }
+ config.setReadOnly(true);
+ }
+ }
+
+ // notify all waiting listeners
+ if (forceSuccess) {
+ for (WALFlushListener fsyncListener : info.fsyncListeners) {
+ fsyncListener.succeed();
+ }
}
}
}