From 8458ced11e5b6690a41593c247c1190bf3f31c0b Mon Sep 17 00:00:00 2001 From: Mukul Kumar Singh Date: Sat, 9 Mar 2019 22:46:20 +0530 Subject: [PATCH] HDDS-1238. Fix Ratis Snapshot creation error if the snapshot file already exists in ContainerStateMachine. Contributed by Shashikant Banerjee. --- .../server/ratis/ContainerStateMachine.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) 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 0fc2d0d99b..7caf0c2190 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,20 +249,13 @@ public void persistContainerSet(OutputStream out) throws IOException { public long takeSnapshot() throws IOException { TermIndex ti = getLastAppliedTermIndex(); LOG.info("Taking snapshot at termIndex:" + ti); - if (ti != null) { + if (ti != null && ti.getIndex() != RaftServerConstants.INVALID_LOG_INDEX) { final File snapshotFile = storage.getSnapshotFile(ti.getTerm(), ti.getIndex()); LOG.info("Taking a snapshot to file {}", snapshotFile); - try { - //TODO: For now, just create the file to save the term index, - boolean created = snapshotFile.createNewFile(); - if (!created) { - throw new IOException("Failed to create ratis snapshot file"); - } - try (FileOutputStream fos = new FileOutputStream(snapshotFile)) { - persistContainerSet(fos); - } - } catch(IOException ioe) { + try (FileOutputStream fos = new FileOutputStream(snapshotFile)) { + persistContainerSet(fos); + } catch (IOException ioe) { LOG.warn("Failed to write snapshot file \"" + snapshotFile + "\", last applied index=" + ti); throw ioe;