X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FAbstractReplicatedLogImpl.java;h=0d125ed6e2cc992619151212f990e83c7e8abafe;hb=294db15b1d9f51d9e8b4a708856ade7e3d5f657f;hp=c245206f641f3a4ff31da8608076f1c3d68cb4f6;hpb=8274ae55bc9eba37035a62f49d992f85391524ed;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/AbstractReplicatedLogImpl.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/AbstractReplicatedLogImpl.java index c245206f64..0d125ed6e2 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/AbstractReplicatedLogImpl.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/AbstractReplicatedLogImpl.java @@ -12,12 +12,17 @@ import com.google.common.base.Preconditions; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Abstract class handling the mapping of * logical LogEntry Index and the physical list index. */ public abstract class AbstractReplicatedLogImpl implements ReplicatedLog { + private static final Logger LOG = LoggerFactory.getLogger(AbstractReplicatedLogImpl.class); + + private final String logContext; // We define this as ArrayList so we can use ensureCapacity. private ArrayList journal; @@ -32,18 +37,19 @@ public abstract class AbstractReplicatedLogImpl implements ReplicatedLog { private int dataSize = 0; public AbstractReplicatedLogImpl(long snapshotIndex, - long snapshotTerm, List unAppliedEntries) { + long snapshotTerm, List unAppliedEntries, String logContext) { this.snapshotIndex = snapshotIndex; this.snapshotTerm = snapshotTerm; - this.journal = new ArrayList<>(unAppliedEntries); + this.logContext = logContext; - for(ReplicatedLogEntry entry: journal) { - dataSize += entry.size(); + this.journal = new ArrayList<>(unAppliedEntries.size()); + for(ReplicatedLogEntry entry: unAppliedEntries) { + append(entry); } } public AbstractReplicatedLogImpl() { - this(-1L, -1L, Collections.emptyList()); + this(-1L, -1L, Collections.emptyList(), ""); } protected int adjustedIndex(long logEntryIndex) { @@ -112,9 +118,16 @@ public abstract class AbstractReplicatedLogImpl implements ReplicatedLog { } @Override - public void append(ReplicatedLogEntry replicatedLogEntry) { - journal.add(replicatedLogEntry); - dataSize += replicatedLogEntry.size(); + public boolean append(ReplicatedLogEntry replicatedLogEntry) { + if(replicatedLogEntry.getIndex() > lastIndex()) { + journal.add(replicatedLogEntry); + dataSize += replicatedLogEntry.size(); + return true; + } else { + LOG.warn("{}: Cannot append new entry - new index {} is not greater than the last index {}", + logContext, replicatedLogEntry.getIndex(), lastIndex(), new Exception("stack trace")); + return false; + } } @Override