This is an automated email from the ASF dual-hosted git repository.
jackietien 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 655ed78c9b0 Add fsync for AuthorInfo, ClusterSchemaInfo, TriggerInfo
and UDFInfo
655ed78c9b0 is described below
commit 655ed78c9b0d0aef3c058ee1e23c65c193ec22cd
Author: Jackie Tien <[email protected]>
AuthorDate: Thu Oct 26 21:39:30 2023 +0800
Add fsync for AuthorInfo, ClusterSchemaInfo, TriggerInfo and UDFInfo
---
.../iotdb/confignode/persistence/TriggerInfo.java | 2 +
.../iotdb/confignode/persistence/UDFInfo.java | 3 +
.../persistence/schema/ClusterSchemaInfo.java | 9 ++-
.../persistence/schema/TemplatePreSetTable.java | 18 +++---
.../persistence/schema/TemplateTable.java | 19 ++++---
.../commons/auth/role/LocalFileRoleAccessor.java | 47 ++++++++--------
.../commons/auth/user/LocalFileUserAccessor.java | 65 +++++++++++-----------
7 files changed, 94 insertions(+), 69 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/TriggerInfo.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/TriggerInfo.java
index 4ad86745de7..85014ba3f16 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/TriggerInfo.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/TriggerInfo.java
@@ -254,6 +254,8 @@ public class TriggerInfo implements SnapshotProcessor {
triggerTable.serializeTriggerTable(fileOutputStream);
+ // fsync
+ fileOutputStream.getFD().sync();
return true;
} finally {
releaseTriggerTableLock();
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
index bb121e71df1..5ab8172d742 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
@@ -201,6 +201,9 @@ public class UDFInfo implements SnapshotProcessor {
udfTable.serializeUDFTable(fileOutputStream);
+ // fsync
+ fileOutputStream.getFD().sync();
+
return true;
} finally {
releaseUDFTableLock();
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
index caff28f250a..83998bf78b0 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
@@ -609,11 +609,16 @@ public class ClusterSchemaInfo implements
SnapshotProcessor {
databaseReadWriteLock.readLock().lock();
try {
- try (FileOutputStream fileOutputStream = new FileOutputStream(tmpFile);
- BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream)) {
+ FileOutputStream fileOutputStream = new FileOutputStream(tmpFile);
+ BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream);
+ try {
// Take snapshot for MTree
mTree.serialize(outputStream);
outputStream.flush();
+ } finally {
+ outputStream.flush();
+ fileOutputStream.getFD().sync();
+ outputStream.close();
}
return tmpFile.renameTo(snapshotFile);
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplatePreSetTable.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplatePreSetTable.java
index 2c0a3754efa..ed1e0310572 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplatePreSetTable.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplatePreSetTable.java
@@ -114,13 +114,17 @@ public class TemplatePreSetTable {
}
File tmpFile = new File(snapshotFile.getAbsolutePath() + "-" +
UUID.randomUUID());
- try (FileOutputStream fileOutputStream = new FileOutputStream(tmpFile);
- BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream)) {
- serialize(outputStream);
- outputStream.flush();
- fileOutputStream.flush();
- outputStream.close();
- fileOutputStream.close();
+ try {
+ FileOutputStream fileOutputStream = new FileOutputStream(tmpFile);
+ BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream);
+ try {
+ serialize(outputStream);
+ } finally {
+ outputStream.flush();
+ fileOutputStream.getFD().sync();
+ outputStream.close();
+ }
+
return tmpFile.renameTo(snapshotFile);
} finally {
for (int retry = 0; retry < 5; retry++) {
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
index ce6586eca17..0eb00fa3382 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
@@ -221,13 +221,18 @@ public class TemplateTable {
}
File tmpFile = new File(snapshotFile.getAbsolutePath() + "-" +
UUID.randomUUID());
templateReadWriteLock.writeLock().lock();
- try (FileOutputStream fileOutputStream = new FileOutputStream(tmpFile);
- BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream)) {
- serialize(outputStream);
- outputStream.flush();
- fileOutputStream.flush();
- outputStream.close();
- fileOutputStream.close();
+
+ try {
+ FileOutputStream fileOutputStream = new FileOutputStream(tmpFile);
+ BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream);
+ try {
+ serialize(outputStream);
+ } finally {
+ outputStream.flush();
+ fileOutputStream.getFD().sync();
+ outputStream.close();
+ }
+
return tmpFile.renameTo(snapshotFile);
} finally {
for (int retry = 0; retry < 5; retry++) {
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
index 930b8ef48e2..8f84e80ba78 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/role/LocalFileRoleAccessor.java
@@ -36,6 +36,7 @@ import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
@@ -149,29 +150,29 @@ public class LocalFileRoleAccessor implements
IRoleAccessor {
+ IoTDBConstant.PROFILE_SUFFIX
+ TEMP_SUFFIX);
File roleDir = new File(roleDirPath);
- if (!roleDir.exists()) {
- if (!roleDir.mkdirs()) {
- LOGGER.error("Failed to create role dir {}", roleDirPath);
- }
+ if (!roleDir.exists() && !roleDir.mkdirs()) {
+ LOGGER.error("Failed to create role dir {}", roleDirPath);
}
- try (BufferedOutputStream outputStream =
- new BufferedOutputStream(Files.newOutputStream(roleProfile.toPath())))
{
- try {
- byte[] strBuffer = role.getName().getBytes(STRING_ENCODING);
- IOUtils.writeInt(outputStream, -1 * strBuffer.length,
encodingBufferLocal);
- outputStream.write(strBuffer);
- IOUtils.writeInt(outputStream, role.getAllSysPrivileges(),
encodingBufferLocal);
- int privilegeNum = role.getPathPrivilegeList().size();
- for (int i = 0; i < privilegeNum; i++) {
- PathPrivilege pathPrivilege = role.getPathPrivilegeList().get(i);
- IOUtils.writePathPrivilege(
- outputStream, pathPrivilege, STRING_ENCODING,
encodingBufferLocal);
- }
- outputStream.flush();
- } catch (Exception e) {
- throw new IOException(e);
+
+ FileOutputStream fileOutputStream = new FileOutputStream(roleProfile);
+ BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream);
+ try {
+ byte[] strBuffer = role.getName().getBytes(STRING_ENCODING);
+ IOUtils.writeInt(outputStream, -1 * strBuffer.length,
encodingBufferLocal);
+ outputStream.write(strBuffer);
+ IOUtils.writeInt(outputStream, role.getAllSysPrivileges(),
encodingBufferLocal);
+ int privilegeNum = role.getPathPrivilegeList().size();
+ for (int i = 0; i < privilegeNum; i++) {
+ PathPrivilege pathPrivilege = role.getPathPrivilegeList().get(i);
+ IOUtils.writePathPrivilege(
+ outputStream, pathPrivilege, STRING_ENCODING, encodingBufferLocal);
}
+ } catch (Exception e) {
+ throw new IOException(e);
} finally {
+ outputStream.flush();
+ fileOutputStream.getFD().sync();
+ outputStream.close();
encodingBufferLocal.remove();
}
@@ -275,8 +276,10 @@ public class LocalFileRoleAccessor implements
IRoleAccessor {
@Override
public void cleanRoleFolder() {
File[] files = SystemFileFactory.INSTANCE.getFile(roleDirPath).listFiles();
- for (File file : files) {
- FileUtils.deleteFileIfExist(file);
+ if (files != null) {
+ for (File file : files) {
+ FileUtils.deleteFileIfExist(file);
+ }
}
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
index 3c4f1ee0a4b..acee3beeeb1 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/LocalFileUserAccessor.java
@@ -37,6 +37,7 @@ import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
@@ -215,28 +216,29 @@ public class LocalFileUserAccessor implements
IUserAccessor {
+ IoTDBConstant.PROFILE_SUFFIX
+ TEMP_SUFFIX);
- try (BufferedOutputStream outputStream =
- new BufferedOutputStream(Files.newOutputStream(userProfile.toPath())))
{
- try {
- // for IOTDB 1.2, the username's length will be stored as a negative
number.
- byte[] strBuffer = user.getName().getBytes(STRING_ENCODING);
- IOUtils.writeInt(outputStream, -1 * strBuffer.length,
encodingBufferLocal);
- outputStream.write(strBuffer);
- IOUtils.writeString(outputStream, user.getPassword(), STRING_ENCODING,
encodingBufferLocal);
- IOUtils.writeInt(outputStream, user.getAllSysPrivileges(),
encodingBufferLocal);
-
- int privilegeNum = user.getPathPrivilegeList().size();
- for (int i = 0; i < privilegeNum; i++) {
- PathPrivilege pathPrivilege = user.getPathPrivilegeList().get(i);
- IOUtils.writePathPrivilege(
- outputStream, pathPrivilege, STRING_ENCODING,
encodingBufferLocal);
- }
-
- outputStream.flush();
- } catch (Exception e) {
- throw new IOException(e);
+ FileOutputStream fileOutputStream = new FileOutputStream(userProfile);
+ BufferedOutputStream outputStream = new
BufferedOutputStream(fileOutputStream);
+ try {
+ // for IOTDB 1.2, the username's length will be stored as a negative
number.
+ byte[] strBuffer = user.getName().getBytes(STRING_ENCODING);
+ IOUtils.writeInt(outputStream, -1 * strBuffer.length,
encodingBufferLocal);
+ outputStream.write(strBuffer);
+ IOUtils.writeString(outputStream, user.getPassword(), STRING_ENCODING,
encodingBufferLocal);
+ IOUtils.writeInt(outputStream, user.getAllSysPrivileges(),
encodingBufferLocal);
+
+ int privilegeNum = user.getPathPrivilegeList().size();
+ for (int i = 0; i < privilegeNum; i++) {
+ PathPrivilege pathPrivilege = user.getPathPrivilegeList().get(i);
+ IOUtils.writePathPrivilege(
+ outputStream, pathPrivilege, STRING_ENCODING, encodingBufferLocal);
}
+
+ } catch (Exception e) {
+ throw new IOException(e);
} finally {
+ outputStream.flush();
+ fileOutputStream.getFD().sync();
+ outputStream.close();
encodingBufferLocal.remove();
}
@@ -248,19 +250,20 @@ public class LocalFileUserAccessor implements
IUserAccessor {
+ ROLE_SUFFIX
+ IoTDBConstant.PROFILE_SUFFIX
+ TEMP_SUFFIX);
- try (BufferedOutputStream roleOutputStream =
- new BufferedOutputStream(Files.newOutputStream(roleProfile.toPath())))
{
- try {
- int userNum = user.getRoleList().size();
- for (int i = 0; i < userNum; i++) {
- IOUtils.writeString(
- roleOutputStream, user.getRoleList().get(i), STRING_ENCODING,
encodingBufferLocal);
- }
- roleOutputStream.flush();
- } catch (Exception e) {
- throw new IOException(e);
+ fileOutputStream = new FileOutputStream(roleProfile);
+ outputStream = new BufferedOutputStream(fileOutputStream);
+ try {
+ int userNum = user.getRoleList().size();
+ for (int i = 0; i < userNum; i++) {
+ IOUtils.writeString(
+ outputStream, user.getRoleList().get(i), STRING_ENCODING,
encodingBufferLocal);
}
+ } catch (Exception e) {
+ throw new IOException(e);
} finally {
+ outputStream.flush();
+ fileOutputStream.getFD().sync();
+ outputStream.close();
encodingBufferLocal.remove();
}