This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch Fsync-2
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 59ce7f50ae9ac06a30f6d85489243fce9d2fc0be
Author: JackieTien97 <[email protected]>
AuthorDate: Wed Oct 25 16:11:23 2023 +0800

    add fsync for AuthorInfo
---
 .../commons/auth/role/LocalFileRoleAccessor.java   | 47 ++++++++--------
 .../commons/auth/user/LocalFileUserAccessor.java   | 65 +++++++++++-----------
 2 files changed, 59 insertions(+), 53 deletions(-)

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();
     }
 

Reply via email to