use of com.hazelcast.cp.internal.raft.impl.RaftNodeImpl in project hazelcast by hazelcast.
the class LocalRaftIntegration method send.
@Override
public boolean send(PreVoteRequest request, RaftEndpoint target) {
assertNotEquals(localEndpoint, target);
RaftNodeImpl node = nodes.get(target);
if (node == null) {
return false;
}
if (shouldDrop(request, target)) {
return true;
}
node.handlePreVoteRequest(alterMessageIfNeeded(request, target));
return true;
}
use of com.hazelcast.cp.internal.raft.impl.RaftNodeImpl in project hazelcast by hazelcast.
the class RaftService method completeFutures.
/**
* Completes all futures registered with {@code indices}
* in the CP group associated with {@code groupId}.
*
* @return {@code true} if the CP group exists, {@code false} otherwise.
*/
public boolean completeFutures(CPGroupId groupId, Collection<Entry<Long, Object>> results) {
if (cpSubsystemEnabled) {
RaftNodeImpl raftNode = (RaftNodeImpl) getRaftNode(groupId);
if (raftNode == null) {
return false;
}
for (Entry<Long, Object> result : results) {
raftNode.completeFuture(result.getKey(), result.getValue());
}
} else {
int partitionId = getCPGroupPartitionId(groupId);
UnsafeModePartitionState unsafeModeState = unsafeModeStates[partitionId];
for (Entry<Long, Object> result : results) {
Operation op = unsafeModeState.removeWaitingOp(result.getKey());
sendOperationResponse(op, result.getValue());
}
}
return true;
}
use of com.hazelcast.cp.internal.raft.impl.RaftNodeImpl in project hazelcast by hazelcast.
the class RaftService method restoreRaftNode.
public RaftNodeImpl restoreRaftNode(RaftGroupId groupId, RestoredRaftState restoredState, LogFileStructure logFileStructure) {
int partitionId = getCPGroupPartitionId(groupId);
RaftIntegration integration = new NodeEngineRaftIntegration(nodeEngine, groupId, restoredState.localEndpoint(), partitionId);
RaftAlgorithmConfig raftAlgorithmConfig = config.getRaftAlgorithmConfig();
RaftStateStore stateStore = getCPPersistenceService().createRaftStateStore(groupId, logFileStructure);
RaftNodeImpl node = RaftNodeImpl.restoreRaftNode(groupId, restoredState, raftAlgorithmConfig, integration, stateStore);
// no need to lock here...
RaftNode prev = nodes.putIfAbsent(groupId, node);
checkState(prev == null, "Could not restore " + groupId + " because its Raft node already exists!");
node.start();
logger.info("RaftNode[" + groupId + "] is restored.");
return node;
}
use of com.hazelcast.cp.internal.raft.impl.RaftNodeImpl in project hazelcast by hazelcast.
the class RaftService method completeFutures.
/**
* Completes all futures registered with {@code indices}
* in the CP group associated with {@code groupId}.
*
* @return {@code true} if the CP group exists, {@code false} otherwise.
*/
public boolean completeFutures(CPGroupId groupId, Collection<Long> indices, Object result) {
if (cpSubsystemEnabled) {
RaftNodeImpl raftNode = (RaftNodeImpl) getRaftNode(groupId);
if (raftNode == null) {
return false;
}
for (Long index : indices) {
raftNode.completeFuture(index, result);
}
} else {
int partitionId = getCPGroupPartitionId(groupId);
UnsafeModePartitionState unsafeModeState = unsafeModeStates[partitionId];
for (Long index : indices) {
Operation op = unsafeModeState.removeWaitingOp(index);
sendOperationResponse(op, result);
}
}
return true;
}
use of com.hazelcast.cp.internal.raft.impl.RaftNodeImpl in project hazelcast by hazelcast.
the class RaftService method createRaftNode.
void createRaftNode(CPGroupId groupId, Collection<RaftEndpoint> members, RaftEndpoint localCPMember) {
assert !(Thread.currentThread() instanceof PartitionOperationThread) : "Cannot create RaftNode of " + groupId + " in a partition thread!";
if (nodes.containsKey(groupId) || !isStartCompleted() || !hasSameSeed(groupId)) {
return;
}
if (getLocalCPMember() == null) {
logger.warning("Not creating Raft node for " + groupId + " because local CP member is not initialized yet.");
return;
}
nodeLock.readLock().lock();
try {
if (destroyedGroupIds.contains(groupId)) {
logger.warning("Not creating RaftNode[" + groupId + "] since the CP group is already destroyed.");
return;
} else if (terminatedRaftNodeGroupIds.contains(groupId)) {
if (!nodeEngine.isRunning()) {
logger.fine("Not creating RaftNode[" + groupId + "] since the local CP member is already terminated.");
return;
}
}
int partitionId = getCPGroupPartitionId(groupId);
RaftIntegration integration = new NodeEngineRaftIntegration(nodeEngine, groupId, localCPMember, partitionId);
RaftAlgorithmConfig raftAlgorithmConfig = config.getRaftAlgorithmConfig();
CPPersistenceService persistenceService = getCPPersistenceService();
RaftStateStore stateStore = persistenceService.createRaftStateStore((RaftGroupId) groupId, null);
RaftNodeImpl node = newRaftNode(groupId, localCPMember, members, raftAlgorithmConfig, integration, stateStore);
if (nodes.putIfAbsent(groupId, node) == null) {
if (destroyedGroupIds.contains(groupId)) {
nodes.remove(groupId, node);
removeNodeMetrics(groupId);
logger.warning("Not creating RaftNode[" + groupId + "] since the CP group is already destroyed.");
return;
}
node.start();
logger.info("RaftNode[" + groupId + "] is created with " + members);
}
} finally {
nodeLock.readLock().unlock();
}
}
Aggregations