This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.1 by this push:
new b4309b72b0 use two params to distinguish fsync delay in the wal sync
mode and async mode (#9787)
b4309b72b0 is described below
commit b4309b72b0fe69c363d05e0f417b131d196a23d5
Author: Alan Choo <[email protected]>
AuthorDate: Mon May 8 22:34:28 2023 +0800
use two params to distinguish fsync delay in the wal sync mode and async
mode (#9787)
---
docs/UserGuide/Reference/Common-Config-Manual.md | 29 ++++++++++------
docs/UserGuide/Reference/DataNode-Config-Manual.md | 4 +--
.../zh/UserGuide/Reference/Common-Config-Manual.md | 29 ++++++++++------
.../UserGuide/Reference/DataNode-Config-Manual.md | 6 ++--
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 40 +++++++++++++---------
.../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 26 +++++++-------
.../org/apache/iotdb/db/wal/buffer/WALBuffer.java | 9 ++++-
7 files changed, 88 insertions(+), 55 deletions(-)
diff --git a/docs/UserGuide/Reference/Common-Config-Manual.md
b/docs/UserGuide/Reference/Common-Config-Manual.md
index 04e42e1757..4cd7e57edf 100644
--- a/docs/UserGuide/Reference/Common-Config-Manual.md
+++ b/docs/UserGuide/Reference/Common-Config-Manual.md
@@ -1073,14 +1073,23 @@ Different configuration parameters take effect in the
following three ways:
| Default | 0
|
| Effective | After restart system
|
-* fsync\_wal\_delay\_in\_ms
+* wal\_async\_mode\_fsync\_delay\_in\_ms
-| Name | fsync\_wal\_delay\_in\_ms |
-|:-----------:|:--------------------------------------------------------------|
-| Description | Duration a wal flush operation will wait before calling fsync |
-| Type | int32 |
-| Default | 3 |
-| Effective | hot-load |
+| Name | wal\_async\_mode\_fsync\_delay\_in\_ms
|
+|:-----------:|:--------------------------------------------------------------------------------|
+| Description | Duration a wal flush operation will wait before calling fsync
in the async mode |
+| Type | int32
|
+| Default | 1000
|
+| Effective | hot-load
|
+
+* wal\_sync\_mode\_fsync\_delay\_in\_ms
+
+| Name | wal\_sync\_mode\_fsync\_delay\_in\_ms
|
+|:-----------:|:-------------------------------------------------------------------------------|
+| Description | Duration a wal flush operation will wait before calling fsync
in the sync mode |
+| Type | int32
|
+| Default | 3
|
+| Effective | hot-load
|
* wal\_buffer\_size\_in\_byte
@@ -1088,7 +1097,7 @@ Different configuration parameters take effect in the
following three ways:
|:-----------:|:-----------------------------|
| Description | Buffer size of each wal node |
| Type | int32 |
-| Default | 16777216 |
+| Default | 33554432 |
| Effective | After restart system |
* wal\_buffer\_queue\_capacity
@@ -1097,7 +1106,7 @@ Different configuration parameters take effect in the
following three ways:
|:-----------:|:-------------------------------------------|
| Description | Blocking queue capacity of each wal buffer |
| Type | int32 |
-| Default | 50 |
+| Default | 500 |
| Effective | After restart system |
* wal\_file\_size\_threshold\_in\_byte
@@ -1106,7 +1115,7 @@ Different configuration parameters take effect in the
following three ways:
|:-----------:|:-------------------------------------|
| Description | Size threshold of each wal file |
| Type | int32 |
-| Default | 10485760 |
+| Default | 31457280 |
| Effective | hot-load |
* wal\_min\_effective\_info\_ratio
diff --git a/docs/UserGuide/Reference/DataNode-Config-Manual.md
b/docs/UserGuide/Reference/DataNode-Config-Manual.md
index e8a8770045..86f0d600a4 100644
--- a/docs/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/UserGuide/Reference/DataNode-Config-Manual.md
@@ -311,9 +311,9 @@ The permission definitions are in
${IOTDB\_CONF}/conf/jmx.access.
| Default | data/datanode/consensus
|
| Effective | After restarting system
|
-* dn\_wal\_dir
+* dn\_wal\_dirs
-| Name | dn\_wal\_dir
|
+| Name | dn\_wal\_dirs
|
|:-----------:|:-------------------------------------------------------------------------|
| Description | Write Ahead Log storage path. It is recommended to use an
absolute path. |
| Type | String
|
diff --git a/docs/zh/UserGuide/Reference/Common-Config-Manual.md
b/docs/zh/UserGuide/Reference/Common-Config-Manual.md
index 0ce361e921..7e64c14a40 100644
--- a/docs/zh/UserGuide/Reference/Common-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/Common-Config-Manual.md
@@ -1121,14 +1121,23 @@ IoTDB ConfigNode 和 DataNode 的公共配置参数位于 `conf` 目录下。
| 默认值 | 0 |
| 改后生效方式 | 重启服务生效 |
-* fsync\_wal\_delay\_in\_ms
+* wal\_async\_mode\_fsync\_delay\_in\_ms
-| 名字 | fsync\_wal\_delay\_in\_ms |
-|:------:|:--------------------------|
-| 描述 | 写前日志调用 fsync 前的等待时间 |
-| 类型 | int32 |
-| 默认值 | 3 |
-| 改后生效方式 | 热加载 |
+| 名字 | wal\_async\_mode\_fsync\_delay\_in\_ms |
+|:------:|:---------------------------------------|
+| 描述 | async 模式下写前日志调用 fsync 前的等待时间 |
+| 类型 | int32 |
+| 默认值 | 1000 |
+| 改后生效方式 | 热加载 |
+
+* wal\_sync\_mode\_fsync\_delay\_in\_ms
+
+| 名字 | wal\_sync\_mode\_fsync\_delay\_in\_ms |
+|:------:|:--------------------------------------|
+| 描述 | sync 模式下写前日志调用 fsync 前的等待时间 |
+| 类型 | int32 |
+| 默认值 | 3 |
+| 改后生效方式 | 热加载 |
* wal\_buffer\_size\_in\_byte
@@ -1136,7 +1145,7 @@ IoTDB ConfigNode 和 DataNode 的公共配置参数位于 `conf` 目录下。
|:------:|:----------------------------|
| 描述 | 写前日志的 buffer 大小 |
| 类型 | int32 |
-| 默认值 | 16777216 |
+| 默认值 | 33554432 |
| 改后生效方式 | 重启服务生效 |
* wal\_buffer\_queue\_capacity
@@ -1145,7 +1154,7 @@ IoTDB ConfigNode 和 DataNode 的公共配置参数位于 `conf` 目录下。
|:------:|:-----------------------------|
| 描述 | 写前日志阻塞队列大小上限 |
| 类型 | int32 |
-| 默认值 | 50 |
+| 默认值 | 500 |
| 改后生效方式 | 重启服务生效 |
* wal\_file\_size\_threshold\_in\_byte
@@ -1154,7 +1163,7 @@ IoTDB ConfigNode 和 DataNode 的公共配置参数位于 `conf` 目录下。
|:------:|:-------------------------------------|
| 描述 | 写前日志文件封口阈值 |
| 类型 | int32 |
-| 默认值 | 10485760 |
+| 默认值 | 31457280 |
| 改后生效方式 | 热加载 |
* wal\_min\_effective\_info\_ratio
diff --git a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
index 5ca0a4a1dc..21b268b7ac 100644
--- a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
@@ -294,14 +294,14 @@ IoTDB DataNode 与 Standalone 模式共用一套配置文件,均位于 IoTDB
| 默认值 | MaxDiskUsableSpaceFirstStrategy
[...]
| 改后生效方式 | 热加载
[...]
-* dn\_wal\_dir
+* dn\_wal\_dirs
-| 名字 | dn\_wal\_dir
|
+| 名字 | dn\_wal\_dirs
|
|:------:|:---------------------------------------------------------------------|
| 描述 | IoTDB 写前日志存储路径,默认存放在和 sbin 目录同级的 data
目录下。相对路径的起始目录与操作系统相关,建议使用绝对路径。 |
| 类型 | String
|
| 默认值 | data/datanode/wal(Windows:data\\datanode\\wal)
|
-| 改后生效方式 | 热加载
|
+| 改后生效方式 | 热加载
|
* dn\_tracing\_dir
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index a073cd69fb..467a767760 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -184,15 +184,21 @@ public class IoTDBConfig {
/** Max number of wal nodes, each node corresponds to one wal directory */
private int maxWalNodesNum = 0;
- /** Duration a wal flush operation will wait before calling fsync. Unit:
millisecond */
- private volatile long fsyncWalDelayInMs = 1000;
+ /**
+ * Duration a wal flush operation will wait before calling fsync in the
async mode. Unit:
+ * millisecond
+ */
+ private volatile long walAsyncModeFsyncDelayInMs = 1_000;
+
+ /**
+ * Duration a wal flush operation will wait before calling fsync in the sync
mode. Unit:
+ * millisecond
+ */
+ private volatile long walSyncModeFsyncDelayInMs = 3;
/** Buffer size of each wal node. Unit: byte */
private int walBufferSize = 32 * 1024 * 1024;
- /** Buffer entry size of each wal buffer. Unit: byte */
- private int walBufferEntrySize = 16 * 1024;
-
/** Blocking queue capacity of each wal buffer */
private int walBufferQueueCapacity = 500;
@@ -1673,28 +1679,28 @@ public class IoTDBConfig {
this.maxWalNodesNum = maxWalNodesNum;
}
- public long getFsyncWalDelayInMs() {
- return fsyncWalDelayInMs;
+ public long getWalAsyncModeFsyncDelayInMs() {
+ return walAsyncModeFsyncDelayInMs;
}
- void setFsyncWalDelayInMs(long fsyncWalDelayInMs) {
- this.fsyncWalDelayInMs = fsyncWalDelayInMs;
+ public void setWalAsyncModeFsyncDelayInMs(long walAsyncModeFsyncDelayInMs) {
+ this.walAsyncModeFsyncDelayInMs = walAsyncModeFsyncDelayInMs;
}
- public int getWalBufferSize() {
- return walBufferSize;
+ public long getWalSyncModeFsyncDelayInMs() {
+ return walSyncModeFsyncDelayInMs;
}
- public void setWalBufferSize(int walBufferSize) {
- this.walBufferSize = walBufferSize;
+ public void setWalSyncModeFsyncDelayInMs(long walSyncModeFsyncDelayInMs) {
+ this.walSyncModeFsyncDelayInMs = walSyncModeFsyncDelayInMs;
}
- public int getWalBufferEntrySize() {
- return walBufferEntrySize;
+ public int getWalBufferSize() {
+ return walBufferSize;
}
- void setWalBufferEntrySize(int walBufferEntrySize) {
- this.walBufferEntrySize = walBufferEntrySize;
+ public void setWalBufferSize(int walBufferSize) {
+ this.walBufferSize = walBufferSize;
}
public int getWalBufferQueueCapacity() {
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 3fa875187b..2bd5e00cc5 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -1072,14 +1072,6 @@ public class IoTDBDescriptor {
conf.setWalBufferSize(walBufferSize);
}
- int walBufferEntrySize =
- Integer.parseInt(
- properties.getProperty(
- "wal_buffer_entry_size_in_byte",
Integer.toString(conf.getWalBufferEntrySize())));
- if (walBufferEntrySize > 0) {
- conf.setWalBufferEntrySize(walBufferEntrySize);
- }
-
int walBufferQueueCapacity =
Integer.parseInt(
properties.getProperty(
@@ -1092,12 +1084,22 @@ public class IoTDBDescriptor {
}
private void loadWALHotModifiedProps(Properties properties) {
- long fsyncWalDelayInMs =
+ long walAsyncModeFsyncDelayInMs =
+ Long.parseLong(
+ properties.getProperty(
+ "wal_async_mode_fsync_delay_in_ms",
+ Long.toString(conf.getWalAsyncModeFsyncDelayInMs())));
+ if (walAsyncModeFsyncDelayInMs > 0) {
+ conf.setWalAsyncModeFsyncDelayInMs(walAsyncModeFsyncDelayInMs);
+ }
+
+ long walSyncModeFsyncDelayInMs =
Long.parseLong(
properties.getProperty(
- "fsync_wal_delay_in_ms",
Long.toString(conf.getFsyncWalDelayInMs())));
- if (fsyncWalDelayInMs > 0) {
- conf.setFsyncWalDelayInMs(fsyncWalDelayInMs);
+ "wal_sync_mode_fsync_delay_in_ms",
+ Long.toString(conf.getWalSyncModeFsyncDelayInMs())));
+ if (walSyncModeFsyncDelayInMs > 0) {
+ conf.setWalSyncModeFsyncDelayInMs(walSyncModeFsyncDelayInMs);
}
long walFileSizeThreshold =
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 db2d627ef5..3d7c5d5343 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
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.utils.MmapUtil;
import org.apache.iotdb.db.wal.exception.WALNodeClosedException;
import org.apache.iotdb.db.wal.io.WALMetaData;
import org.apache.iotdb.db.wal.utils.WALFileStatus;
+import org.apache.iotdb.db.wal.utils.WALMode;
import org.apache.iotdb.db.wal.utils.listener.WALFlushListener;
import org.slf4j.Logger;
@@ -178,7 +179,13 @@ public class WALBuffer extends AbstractWALBuffer {
WALEntry walEntry = null;
try {
// for better fsync performance, wait a while to enlarge write batch
- walEntry = walEntries.poll(config.getFsyncWalDelayInMs(),
TimeUnit.MILLISECONDS);
+ if (config.getWalMode().equals(WALMode.ASYNC)) {
+ walEntry =
+ walEntries.poll(config.getWalAsyncModeFsyncDelayInMs(),
TimeUnit.MILLISECONDS);
+ } else {
+ walEntry =
+ walEntries.poll(config.getWalSyncModeFsyncDelayInMs(),
TimeUnit.MILLISECONDS);
+ }
} catch (InterruptedException e) {
logger.warn(
"Interrupted when waiting for taking WALEntry from blocking
queue to serialize.");