/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.cluster.raft; import akka.japi.Procedure; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; /** * Represents the ReplicatedLog that needs to be kept in sync by the RaftActor */ public interface ReplicatedLog { long NO_MAX_SIZE = -1; /** * Return the replicated log entry at the specified index. * * @param index the index of the log entry * @return the ReplicatedLogEntry if found, otherwise null if the adjusted index less than 0 or * greater than the size of the in-memory journal. */ @Nullable ReplicatedLogEntry get(long index); /** * Return the last replicated log entry in the log or null of not found. */ @Nullable ReplicatedLogEntry last(); /** * Return the index of the last entry in the log or -1 if the log is empty. */ long lastIndex(); /** * Return the term of the last entry in the log or -1 if the log is empty. */ long lastTerm(); /** * Removes entries from the in-memory log starting at the given index. * * @param index the index of the first log entry to remove * @return the adjusted index of the first log entry removed or -1 if the log entry is not found. */ long removeFrom(long index); /** * Removes entries from the in-memory log a nd the persisted log starting at the given index. *
* The persisted information would then be used during recovery to properly
* reconstruct the state of the in-memory replicated log
*
* @param the index of the first log entry to remove
*/
void removeFromAndPersist(long index);
/**
* Appends an entry to the log.
*
* @param replicatedLogEntry the entry to append
*/
void append(ReplicatedLogEntry replicatedLogEntry);
/**
* Optimization method to increase the capacity of the journal log prior to appending entries.
*
* @param amount the amount to increase by
*/
void increaseJournalLogCapacity(int amount);
/**
* Appends an entry to the in-memory log and persists it as well.
*
* @param replicatedLogEntry the entry to append
*/
void appendAndPersist(final ReplicatedLogEntry replicatedLogEntry);
void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure