X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fbehaviors%2FLeaderInstallSnapshotState.java;h=758345214841ba62ab41af0827427a505562198f;hp=18881ecd4e69a85ebffc9394101310caac51f3b1;hb=refs%2Fchanges%2F25%2F82725%2F1;hpb=a7da626a1de6eaa413cb33211d6aaccaaf1d57ab diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderInstallSnapshotState.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderInstallSnapshotState.java index 18881ecd4e..7583452148 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderInstallSnapshotState.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderInstallSnapshotState.java @@ -74,8 +74,12 @@ public final class LeaderInstallSnapshotState implements AutoCloseable { } int incrementOffset() { + // if first chunk was retried, reset offset back to initial 0 + if (offset == -1) { + offset = 0; + } if (replyStatus) { - // if prev chunk failed, we would want to sent the same chunk again + // if prev chunk failed, we would want to send the same chunk again offset = offset + snapshotChunkSize; } return offset; @@ -83,7 +87,7 @@ public final class LeaderInstallSnapshotState implements AutoCloseable { int incrementChunkIndex() { if (replyStatus) { - // if prev chunk failed, we would want to sent the same chunk again + // if prev chunk failed, we would want to send the same chunk again chunkIndex = chunkIndex + 1; } return chunkIndex; @@ -126,15 +130,17 @@ public final class LeaderInstallSnapshotState implements AutoCloseable { replyStatus = true; lastChunkHashCode = nextChunkHashCode; } else { - // if the chunk sent was failure - replyReceivedForOffset = offset; + // if the chunk sent was failure, revert offset to previous so we can retry + offset = replyReceivedForOffset; replyStatus = false; } } byte[] getNextChunk() throws IOException { + // increment offset to indicate next chunk is in flight, canSendNextChunk() wont let us hit this again until, + // markSendStatus() is called with either success or failure + int start = incrementOffset(); if (replyStatus || currentChunk == null) { - int start = incrementOffset(); int size = snapshotChunkSize; if (snapshotChunkSize > snapshotSize) { size = (int) snapshotSize;