blob: 6dba0ccc6b9adfc7aae9b022ed4684476eb206d2 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.bookkeeper.client;
import java.util.List;
/**
* This interface determins how entries are distributed among bookies.
*
* Every entry gets replicated to some number of replicas. The first replica for
* an entry is given a replicaIndex of 0, and so on. To distribute write load,
* not all entries go to all bookies. Given an entry-id and replica index, an
* {@link DistributionSchedule} determines which bookie that replica should go
* to.
*/
interface DistributionSchedule {
/**
* return the set of bookie indices to send the message to
*/
public List<Integer> getWriteSet(long entryId);
/**
* An ack set represents the set of bookies from which
* a response must be received so that an entry can be
* considered to be replicated on a quorum.
*/
public interface AckSet {
/**
* Add a bookie response and check if quorum has been met
* @return true if quorum has been met, false otherwise
*/
public boolean addBookieAndCheck(int bookieIndexHeardFrom);
/**
* Invalidate a previous bookie response.
* Used for reissuing write requests.
*/
public void removeBookie(int bookie);
}
/**
* Returns an ackset object, responses should be checked against this
*/
public AckSet getAckSet();
/**
* Interface to keep track of which bookies in an ensemble, an action
* has been performed for.
*/
public interface QuorumCoverageSet {
/**
* Add a bookie to the set, and check if all quorum in the set
* have had the action performed for it.
* @param bookieIndexHeardFrom Bookie we've just heard from
* @return whether all quorums have been covered
*/
public boolean addBookieAndCheckCovered(int bookieIndexHeardFrom);
}
public QuorumCoverageSet getCoverageSet();
/**
* Whether entry presents on given bookie index
*
* @param entryId
* - entryId to check the presence on given bookie index
* @param bookieIndex
* - bookie index on which it need to check the possible presence
* of the entry
* @return true if it has entry otherwise false.
*/
public boolean hasEntry(long entryId, int bookieIndex);
}