From a7da626a1de6eaa413cb33211d6aaccaaf1d57ab Mon Sep 17 00:00:00 2001 From: Tomas Cere Date: Tue, 4 Jun 2019 11:17:10 +0200 Subject: [PATCH] Reset snapshot progress on IOExceptions Also log the whole LeaderInstallSnapshotState of failures. Change-Id: I33b1c38f2277f08acbe77bcb0c16d2dfe41d8851 Signed-off-by: Tomas Cere --- .../cluster/raft/behaviors/AbstractLeader.java | 11 +++++++---- .../behaviors/LeaderInstallSnapshotState.java | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java index 4ce84bd11f..035821006d 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java @@ -944,12 +944,15 @@ public abstract class AbstractLeader extends AbstractRaftActorBehavior { sendSnapshotChunk(followerActor, followerLogInfo, nextSnapshotChunk, nextChunkIndex, serverConfig); + log.debug("{}: InstallSnapshot sent to follower {}, Chunk: {}/{}", logName(), followerActor.path(), + installSnapshotState.getChunkIndex(), installSnapshotState.getTotalChunks()); + } catch (IOException e) { - throw new RuntimeException(e); + log.warn("{}: Unable to send chunk: {}/{}. Reseting snapshot progress. Snapshot state: {}", logName(), + installSnapshotState.getChunkIndex(), installSnapshotState.getTotalChunks(), + installSnapshotState); + installSnapshotState.reset(); } - - log.debug("{}: InstallSnapshot sent to follower {}, Chunk: {}/{}", logName(), followerActor.path(), - installSnapshotState.getChunkIndex(), installSnapshotState.getTotalChunks()); } } 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 23a0f6d027..18881ecd4e 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 @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.cluster.raft.behaviors; +import com.google.common.base.MoreObjects; import com.google.common.base.Stopwatch; import com.google.common.io.ByteSource; import java.io.IOException; @@ -200,4 +201,20 @@ public final class LeaderInstallSnapshotState implements AutoCloseable { int getLastChunkHashCode() { return lastChunkHashCode; } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("snapshotChunkSize", snapshotChunkSize) + .add("offset", offset) + .add("replyReceivedForOffset", replyReceivedForOffset) + .add("replyStatus", replyStatus) + .add("chunkIndex", chunkIndex) + .add("totalChunks", totalChunks) + .add("lastChunkHashCode", lastChunkHashCode) + .add("nextChunkHashCode", nextChunkHashCode) + .add("snapshotSize", snapshotSize) + .add("chunkTimer", chunkTimer) + .toString(); + } } -- 2.36.6