Search in sources :

Example 6 with Modification

use of org.opendaylight.controller.cluster.datastore.modification.Modification in project controller by opendaylight.

the class EntityOwnershipShard method onVotingStateChangeComplete.

@Override
protected void onVotingStateChangeComplete() {
    // Re-evaluate ownership for all entities - if a member changed from voting to non-voting it should lose
    // ownership and vice versa it now is a candidate to become owner.
    final List<Modification> modifications = new ArrayList<>();
    searchForEntities((entityTypeNode, entityNode) -> {
        YangInstanceIdentifier entityPath = YangInstanceIdentifier.builder(ENTITY_TYPES_PATH).node(entityTypeNode.getIdentifier()).node(ENTITY_NODE_ID).node(entityNode.getIdentifier()).node(ENTITY_OWNER_NODE_ID).build();
        java.util.Optional<String> possibleOwner = entityNode.getChild(ENTITY_OWNER_NODE_ID).map(node -> node.getValue().toString());
        String newOwner = newOwner(possibleOwner.orElse(null), getCandidateNames(entityNode), getEntityOwnerElectionStrategy(entityPath));
        if (!newOwner.equals(possibleOwner.orElse(""))) {
            modifications.add(new WriteModification(entityPath, ImmutableNodes.leafNode(ENTITY_OWNER_NODE_ID, newOwner)));
        }
    });
    commitCoordinator.commitModifications(modifications, this);
}
Also used : WriteModification(org.opendaylight.controller.cluster.datastore.modification.WriteModification) Modification(org.opendaylight.controller.cluster.datastore.modification.Modification) DeleteModification(org.opendaylight.controller.cluster.datastore.modification.DeleteModification) MergeModification(org.opendaylight.controller.cluster.datastore.modification.MergeModification) WriteModification(org.opendaylight.controller.cluster.datastore.modification.WriteModification) ArrayList(java.util.ArrayList) YangInstanceIdentifier(org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier)

Example 7 with Modification

use of org.opendaylight.controller.cluster.datastore.modification.Modification in project controller by opendaylight.

the class EntityOwnershipShardCommitCoordinator method pruneModifications.

@Nullable
private BatchedModifications pruneModifications(BatchedModifications toPrune) {
    BatchedModifications prunedModifications = new BatchedModifications(toPrune.getTransactionId(), toPrune.getVersion());
    prunedModifications.setDoCommitOnReady(toPrune.isDoCommitOnReady());
    prunedModifications.setReady(toPrune.isReady());
    prunedModifications.setTotalMessagesSent(toPrune.getTotalMessagesSent());
    for (Modification mod : toPrune.getModifications()) {
        if (canForwardModificationToNewLeader(mod)) {
            prunedModifications.addModification(mod);
        }
    }
    return !prunedModifications.getModifications().isEmpty() ? prunedModifications : null;
}
Also used : WriteModification(org.opendaylight.controller.cluster.datastore.modification.WriteModification) Modification(org.opendaylight.controller.cluster.datastore.modification.Modification) BatchedModifications(org.opendaylight.controller.cluster.datastore.messages.BatchedModifications) Nullable(javax.annotation.Nullable)

Aggregations

Modification (org.opendaylight.controller.cluster.datastore.modification.Modification)7 WriteModification (org.opendaylight.controller.cluster.datastore.modification.WriteModification)7 MergeModification (org.opendaylight.controller.cluster.datastore.modification.MergeModification)4 ArrayList (java.util.ArrayList)3 DeleteModification (org.opendaylight.controller.cluster.datastore.modification.DeleteModification)3 YangInstanceIdentifier (org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier)3 BatchedModifications (org.opendaylight.controller.cluster.datastore.messages.BatchedModifications)2 ExtendedActorSystem (akka.actor.ExtendedActorSystem)1 Nullable (javax.annotation.Nullable)1 Test (org.junit.Test)1 TransactionIdentifier (org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier)1 AbstractTest (org.opendaylight.controller.cluster.datastore.AbstractTest)1 AbstractModification (org.opendaylight.controller.cluster.datastore.modification.AbstractModification)1 ContainerNode (org.opendaylight.yangtools.yang.data.api.schema.ContainerNode)1 MapNode (org.opendaylight.yangtools.yang.data.api.schema.MapNode)1 DataTree (org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree)1 DataTreeModification (org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification)1 InMemoryDataTreeFactory (org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory)1