diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerDataYaml.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerDataYaml.java index 15719440f39ef..1f9966c1a76c4 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerDataYaml.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerDataYaml.java @@ -80,6 +80,7 @@ private ContainerDataYaml() { public static void createContainerFile(ContainerType containerType, ContainerData containerData, File containerFile) throws IOException { Writer writer = null; + FileOutputStream out = null; try { // Create Yaml for given container type Yaml yaml = getYamlForContainerType(containerType); @@ -87,13 +88,17 @@ public static void createContainerFile(ContainerType containerType, containerData.computeAndSetChecksum(yaml); // Write the ContainerData with checksum to Yaml file. - writer = new OutputStreamWriter(new FileOutputStream( - containerFile), "UTF-8"); + out = new FileOutputStream( + containerFile); + writer = new OutputStreamWriter(out, "UTF-8"); yaml.dump(containerData, writer); } finally { try { if (writer != null) { + writer.flush(); + // make sure the container metadata is synced to disk. + out.getFD().sync(); writer.close(); } } catch (IOException ex) { diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java index 7a7baec3001b2..3a503ca0e2bce 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java @@ -249,6 +249,9 @@ public long takeSnapshot() throws IOException { LOG.info("Taking a snapshot to file {}", snapshotFile); try (FileOutputStream fos = new FileOutputStream(snapshotFile)) { persistContainerSet(fos); + fos.flush(); + // make sure the snapshot file is synced + fos.getFD().sync(); } catch (IOException ioe) { LOG.warn("Failed to write snapshot file \"" + snapshotFile + "\", last applied index=" + ti);