X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fshardmanager%2FShardManagerInfo.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fshardmanager%2FShardManagerInfo.java;h=ae0df0f1bea9664b46a1497d663f9ca2babbe687;hb=f86f7e8c204fb19615c45e669a764c623576e1a3;hp=0000000000000000000000000000000000000000;hpb=40460ae356add6bd8d28a25cf8b287c9bfa38b38;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerInfo.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerInfo.java new file mode 100644 index 0000000000..ae0df0f1be --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerInfo.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2014 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.datastore.shardmanager; + +import akka.actor.ActorRef; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.util.Collection; +import java.util.List; +import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shardmanager.ShardManagerInfoMBean; +import org.opendaylight.controller.cluster.datastore.messages.SwitchShardBehavior; +import org.opendaylight.controller.cluster.raft.RaftState; +import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +final class ShardManagerInfo extends AbstractMXBean implements ShardManagerInfoMBean { + + public static final String JMX_CATEGORY_SHARD_MANAGER = "ShardManager"; + + // The only states that you can switch to from outside. You cannot switch to Candidate/IsolatedLeader for example + private static final Collection ACCEPTABLE_STATES + = ImmutableList.of(RaftState.Leader.name(), RaftState.Follower.name()); + + private static final Logger LOG = LoggerFactory.getLogger(ShardManagerInfo.class); + + private final String memberName; + private final List localShards; + + private boolean syncStatus = false; + + private ShardManager shardManager; + + private ShardManagerInfo(String memberName, String name, String mxBeanType, List localShards) { + super(name, mxBeanType, JMX_CATEGORY_SHARD_MANAGER); + this.memberName = memberName; + this.localShards = localShards; + } + + static ShardManagerInfo createShardManagerMBean(String memberName, String name, String mxBeanType, + List localShards){ + ShardManagerInfo shardManagerInfo = new ShardManagerInfo(memberName, name, mxBeanType, localShards); + + shardManagerInfo.registerMBean(); + + return shardManagerInfo; + } + + public void addLocalShard(String shardName) { + localShards.add(shardName); + } + + @Override + public List getLocalShards() { + return localShards; + } + + @Override + public boolean getSyncStatus() { + return this.syncStatus; + } + + @Override + public String getMemberName() { + return memberName; + } + + @Override + public void switchAllLocalShardsState(String newState, long term) { + LOG.info("switchAllLocalShardsState called newState = {}, term = {}", newState, term); + + for(String shardName : localShards){ + switchShardState(shardName, newState, term); + } + } + + @Override + public void switchShardState(String shardName, String newState, long term) { + LOG.info("switchShardState called shardName = {}, newState = {}, term = {}", shardName, newState, term); + + Preconditions.checkArgument(localShards.contains(shardName), shardName + " is not local"); + Preconditions.checkArgument(ACCEPTABLE_STATES.contains(newState)); + + shardManager.getSelf().tell(new SwitchShardBehavior(shardName, RaftState.valueOf(newState), term), + ActorRef.noSender()); + } + + public void setSyncStatus(boolean syncStatus){ + this.syncStatus = syncStatus; + } + + public void setShardManager(ShardManager shardManager){ + this.shardManager = shardManager; + } +}