X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FShardBackendInfo.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FShardBackendInfo.java;h=677ac403c783f43698c3ca71ce6febcb3ed72542;hb=c426700e494b8eb18e49c3384d057767a9efed35;hp=0000000000000000000000000000000000000000;hpb=97ff7dff8e58531065833736d5788808ca9e0396;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ShardBackendInfo.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ShardBackendInfo.java new file mode 100644 index 0000000000..677ac403c7 --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ShardBackendInfo.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.databroker.actors.dds; + +import akka.actor.ActorRef; +import com.google.common.base.MoreObjects.ToStringHelper; +import com.google.common.base.Preconditions; +import com.google.common.primitives.UnsignedLong; +import java.util.Optional; +import javax.annotation.concurrent.ThreadSafe; +import org.opendaylight.controller.cluster.access.ABIVersion; +import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier; +import org.opendaylight.controller.cluster.datastore.actors.client.BackendInfo; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; + +/** + * Combined backend tracking. Aside from usual {@link BackendInfo}, this object also tracks the cookie assigned + * to the shard. This assignment remains constant for as long as the client is not restarted. + * + * @author Robert Varga + */ +@ThreadSafe +final class ShardBackendInfo extends BackendInfo { + private final Optional dataTree; + private final UnsignedLong cookie; + private final String shardName; + + ShardBackendInfo(final ActorRef actor, final ABIVersion version, final String shardName, final UnsignedLong cookie, + final Optional dataTree) { + super(actor, version); + this.shardName = Preconditions.checkNotNull(shardName); + this.cookie = Preconditions.checkNotNull(cookie); + this.dataTree = Preconditions.checkNotNull(dataTree); + } + + UnsignedLong getCookie() { + return cookie; + } + + Optional getDataTree() { + return dataTree; + } + + String getShardName() { + return shardName; + } + + LocalHistoryIdentifier brandHistory(final LocalHistoryIdentifier id) { + Preconditions.checkArgument(id.getCookie() == 0, "History %s is already branded", id); + return new LocalHistoryIdentifier(id.getClientId(), id.getHistoryId(), cookie.longValue()); + } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return super.addToStringAttributes(toStringHelper).add("cookie", cookie).add("shard", shardName); + } +}