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