use of io.atomix.primitive.service.Commit in project atomix by atomix.
the class PrimaryElectorService method enter.
/**
* Applies an {@link PrimaryElectorOperations.Enter} commit.
*
* @param commit commit entry
* @return topic leader. If no previous leader existed this is the node that just entered the race.
*/
protected PrimaryTerm enter(Commit<? extends PrimaryElectorOperations.Enter> commit) {
try {
PartitionId partitionId = commit.value().partitionId();
PrimaryTerm oldTerm = term(partitionId);
Registration registration = new Registration(commit.value().member(), commit.session().sessionId().id());
PrimaryTerm newTerm = elections.compute(partitionId, (k, v) -> {
if (v == null) {
return new ElectionState(partitionId, registration, elections);
} else {
if (!v.isDuplicate(registration)) {
return new ElectionState(v).addRegistration(registration);
} else {
return v;
}
}
}).term();
if (!Objects.equals(oldTerm, newTerm)) {
notifyTermChange(partitionId, newTerm);
scheduleRebalance();
}
return newTerm;
} catch (Exception e) {
getLogger().error("State machine operation failed", e);
throw Throwables.propagate(e);
}
}
use of io.atomix.primitive.service.Commit in project atomix by atomix.
the class ConsistentMapService method rollback.
/**
* Handles an rollback commit (ha!).
*
* @param commit transaction rollback commit
* @return rollback result
*/
protected RollbackResult rollback(Commit<? extends TransactionRollback> commit) {
TransactionId transactionId = commit.value().transactionId();
TransactionScope transactionScope = activeTransactions.remove(transactionId);
if (transactionScope == null) {
return RollbackResult.UNKNOWN_TRANSACTION_ID;
} else if (!transactionScope.isPrepared()) {
discardTombstones();
return RollbackResult.OK;
} else {
try {
transactionScope.transactionLog().records().forEach(record -> {
if (record.type() != MapUpdate.Type.VERSION_MATCH) {
preparedKeys.remove(record.key());
}
});
return RollbackResult.OK;
} finally {
discardTombstones();
}
}
}
use of io.atomix.primitive.service.Commit in project atomix by atomix.
the class DocumentTreeService method listen.
protected void listen(Commit<? extends Listen> commit) {
Long sessionId = commit.session().sessionId().id();
listeners.computeIfAbsent(sessionId, k -> new SessionListenCommits()).add(new Listener(commit.session(), commit.value().path()));
}
Aggregations