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 <[email protected]>
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();
+ }
}
}
}