private void forwardToSessionActor(final String connectionCorrelationId, final Object object) { if (object instanceof WithDittoHeaders) { LogUtil.enhanceLogWithCorrelationId(logger, (WithDittoHeaders<?>) object); } else { LogUtil.enhanceLogWithCorrelationId(logger, (String) null); } logger.debug("Forwarding to session actor '{}': {}", connectionCorrelationId, object); getContext().actorSelection(connectionCorrelationId).forward(object, getContext()); } }
private void handleCanCommitTransaction(final CanCommitTransaction canCommit) { LOG.debug("{}: Can committing transaction {}", persistenceId(), canCommit.getTransactionID()); if (isLeader()) { commitCoordinator.handleCanCommit(canCommit.getTransactionID(), getSender(), this); } else { ActorSelection leader = getLeader(); if (leader == null) { messageRetrySupport.addMessageToRetry(canCommit, getSender(), "Could not canCommit transaction " + canCommit.getTransactionID()); } else { LOG.debug("{}: Forwarding CanCommitTransaction to leader {}", persistenceId(), leader); leader.forward(canCommit, getContext()); } } }
private void handleCommitTransaction(final CommitTransaction commit) { if (isLeader()) { commitCoordinator.handleCommit(commit.getTransactionID(), getSender(), this); } else { ActorSelection leader = getLeader(); if (leader == null) { messageRetrySupport.addMessageToRetry(commit, getSender(), "Could not commit transaction " + commit.getTransactionID()); } else { LOG.debug("{}: Forwarding CommitTransaction to leader {}", persistenceId(), leader); leader.forward(commit, getContext()); } } }
persistenceId(), shardName, address, visitedAddresses); getContext().actorSelection(address).forward(new RemoteFindPrimary(shardName, message.isWaitUntilReady(), visitedAddresses), getContext()); return;
@Override protected void handleNonRaftCommand(Object message) { if(message instanceof KeyValue){ if(isLeader()) { persistData(getSender(), new PayloadIdentifier(persistIdentifier++), (Payload) message); } else { if(getLeader() != null) { getLeader().forward(message, getContext()); } } } else if (message instanceof PrintState) { if(LOG.isDebugEnabled()) { LOG.debug("State of the node:{} has entries={}, {}", getId(), state.size(), getReplicatedLogState()); } } else if (message instanceof PrintRole) { if(LOG.isDebugEnabled()) { if (getRaftState() == RaftState.Leader || getRaftState() == RaftState.IsolatedLeader) { final String followers = ((Leader)this.getCurrentBehavior()).printFollowerStates(); LOG.debug("{} = {}, Peers={}, followers={}", getId(), getRaftState(), getRaftActorContext().getPeerIds(), followers); } else { LOG.debug("{} = {}, Peers={}", getId(), getRaftState(), getRaftActorContext().getPeerIds()); } } } else { super.handleNonRaftCommand(message); } }
@Override protected void handleNonRaftCommand(Object message) { if (message instanceof KeyValue) { if (isLeader()) { persistData(getSender(), new PayloadIdentifier(persistIdentifier++), (Payload) message, false); } else { if (getLeader() != null) { getLeader().forward(message, getContext()); } } } else if (message instanceof PrintState) { if (LOG.isDebugEnabled()) { LOG.debug("State of the node:{} has entries={}, {}", getId(), state.size(), getReplicatedLogState()); } } else if (message instanceof PrintRole) { if (LOG.isDebugEnabled()) { if (getRaftState() == RaftState.Leader || getRaftState() == RaftState.IsolatedLeader) { final String followers = ((Leader)this.getCurrentBehavior()).printFollowerStates(); LOG.debug("{} = {}, Peers={}, followers={}", getId(), getRaftState(), getRaftActorContext().getPeerIds(), followers); } else { LOG.debug("{} = {}, Peers={}", getId(), getRaftState(), getRaftActorContext().getPeerIds()); } } } else { super.handleNonRaftCommand(message); } }
leader.forward(bm, getContext());
private void handleExecutePiggyBack(final ExecutePiggybackCommand command) { LogUtil.enhanceLogWithCorrelationId(log, command); deserializePiggybackCommand(command, jsonifiable -> { log.info("Received PiggybackCommand: <{}> - telling to: <{}>", jsonifiable, command.getTargetActorSelection()); getContext().actorSelection(command.getTargetActorSelection()) .forward(jsonifiable, getContext()); }, dittoRuntimeException -> getSender().tell(dittoRuntimeException, getSelf())); }
private void handleExecutePiggyBack(final ExecutePiggybackCommand command) { LogUtil.enhanceLogWithCorrelationId(log, command); final JsonObject piggybackCommandJson = command.getPiggybackCommand(); final String piggybackCommandType = piggybackCommandJson.getValueOrThrow(Command.JsonFields.TYPE); if (serviceMappingStrategy.containsKey(piggybackCommandType)) { final Jsonifiable<?> piggybackCommand; try { piggybackCommand = serviceMappingStrategy.get(piggybackCommandType) .apply(piggybackCommandJson, command.getDittoHeaders()); } catch (final DittoRuntimeException e) { log.warning("Got DittoRuntimeException while parsing piggybackCommand <{}>: {}", piggybackCommandType, e.getMessage()); getSender().tell(e, getSelf()); return; } log.info("Received PiggybackCommand: <{}> - telling to: <{}>", piggybackCommand, command.getTargetActorSelection()); getContext().actorSelection(command.getTargetActorSelection()).forward(piggybackCommand, getContext()); } else { final String message = String.format("ExecutePiggybackCommand with piggybackCommand <%s> cannot be executed " + "by this service as there is no mappingStrategy for it.", piggybackCommandType); log.warning(message); final JsonTypeNotParsableException typeNotMappableException = JsonTypeNotParsableException.fromMessage(message, command.getDittoHeaders()); getSender().tell(typeNotMappableException, getSelf()); } }
private void handleReadyLocalTransaction(final ReadyLocalTransaction message) { LOG.debug("{}: handleReadyLocalTransaction for {}", persistenceId(), message.getTransactionID()); boolean isLeaderActive = isLeaderActive(); if (isLeader() && isLeaderActive) { try { commitCoordinator.handleReadyLocalTransaction(message, getSender(), this); } catch (Exception e) { LOG.error("{}: Error handling ReadyLocalTransaction for Tx {}", persistenceId(), message.getTransactionID(), e); getSender().tell(new akka.actor.Status.Failure(e), getSelf()); } } else { ActorSelection leader = getLeader(); if (!isLeaderActive || leader == null) { messageRetrySupport.addMessageToRetry(message, getSender(), "Could not commit transaction " + message.getTransactionID()); } else { LOG.debug("{}: Forwarding ReadyLocalTransaction to leader {}", persistenceId(), leader); message.setRemoteVersion(getCurrentBehavior().getLeaderPayloadVersion()); leader.forward(message, getContext()); } } }
private void handleForwardedReadyTransaction(final ForwardedReadyTransaction forwardedReady) { LOG.debug("{}: handleForwardedReadyTransaction for {}", persistenceId(), forwardedReady.getTransactionID()); boolean isLeaderActive = isLeaderActive(); if (isLeader() && isLeaderActive) { commitCoordinator.handleForwardedReadyTransaction(forwardedReady, getSender(), this); } else { ActorSelection leader = getLeader(); if (!isLeaderActive || leader == null) { messageRetrySupport.addMessageToRetry(forwardedReady, getSender(), "Could not commit transaction " + forwardedReady.getTransactionID()); } else { LOG.debug("{}: Forwarding ForwardedReadyTransaction to leader {}", persistenceId(), leader); ReadyLocalTransaction readyLocal = new ReadyLocalTransaction(forwardedReady.getTransactionID(), forwardedReady.getTransaction().getSnapshot(), forwardedReady.isDoImmediateCommit()); readyLocal.setRemoteVersion(getCurrentBehavior().getLeaderPayloadVersion()); leader.forward(readyLocal, getContext()); } } }
private void handleCreateTransaction(final Object message) { if (isLeader()) { createTransaction(CreateTransaction.fromSerializable(message)); } else if (getLeader() != null) { getLeader().forward(message, getContext()); } else { getSender().tell(new akka.actor.Status.Failure(new NoShardLeaderException( "Could not create a shard transaction", persistenceId())), getSelf()); } }