package com.netflix.priam.agent;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import org.codehaus.jettison.json.JSONObject;
import javax.inject.Provider;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public class MockNodeStatus implements NodeStatus, Provider<NodeStatus>
{
private JSONObject info = new JSONObject();
private List<String> liveNodes = Lists.newArrayList();
private List<String> movingNodes = Lists.newArrayList();
private List<String> joiningNodes = Lists.newArrayList();
private List<String> unreachableNodes = Lists.newArrayList();
private String operationMode = "";
private String gossipInfo = "";
private List<String> operations = Lists.newArrayList();
private final CountDownLatch flushLatch = new CountDownLatch(1);
public List<String> getOperations()
{
return operations;
}
@Override
public NodeStatus get()
{
return this;
}
@Override
public JSONObject info()
{
return info;
}
public void setInfo(JSONObject info)
{
this.info = info;
}
@Override
public boolean isJoined()
{
return false;
}
@Override
public String getEndpoint()
{
return null;
}
@Override
public int getExceptionCount()
{
return 0;
}
@Override
public List<String> getLiveNodes()
{
return liveNodes;
}
public void setLiveNodes(List<String> liveNodes)
{
this.liveNodes = liveNodes;
}
@Override
public List<String> getMovingNodes()
{
return movingNodes;
}
public void setMovingNodes(List<String> movingNodes)
{
this.movingNodes = movingNodes;
}
@Override
public List<String> getJoiningNodes()
{
return joiningNodes;
}
public void setJoiningNodes(List<String> joiningNodes)
{
this.joiningNodes = joiningNodes;
}
@Override
public List<String> getUnreachableNodes()
{
return unreachableNodes;
}
public void setUnreachableNodes(List<String> unreachableNodes)
{
this.unreachableNodes = unreachableNodes;
}
@Override
public String getOperationMode()
{
return operationMode;
}
public void setOperationMode(String operationMode)
{
this.operationMode = operationMode;
}
@Override
public String getGossipInfo()
{
return gossipInfo;
}
public void setGossipInfo(String gossipInfo)
{
this.gossipInfo = gossipInfo;
}
@Override
public int getCompactionThroughput()
{
return 0;
}
@Override
public void invalidateKeyCache()
{
operations.add("invalidateKeyCache");
}
@Override
public void compact()
{
operations.add("compact");
}
@Override
public void decommission()
{
operations.add("decommission");
}
@Override
public void cleanup()
{
operations.add("cleanup");
}
@Override
public void joinRing()
{
operations.add("joinRing");
}
@Override
public void refresh(List<String> keyspaces)
{
operations.add("refresh," + Joiner.on(',').join(keyspaces));
}
@Override
public void removeNode(String token)
{
operations.add("removeNode," + token);
}
@Override
public void startThriftServer()
{
operations.add("startThriftServer");
}
@Override
public void move(String token)
{
operations.add("move," + token);
}
public CountDownLatch getFlushLatch()
{
return flushLatch;
}
@Override
public void flush() throws InterruptedException
{
operations.add("flush");
flushLatch.countDown();
Thread.currentThread().join(); // NOTE: Block forever
}
@Override
public void repair(boolean sequential, boolean localDataCenterOnly)
{
operations.add("repair," + sequential + "," + localDataCenterOnly);
}
@Override
public void invalidateRowCache()
{
operations.add("invalidateRowCache");
}
@Override
public void stopGossiping()
{
operations.add("stopGossiping");
}
@Override
public void startGossiping()
{
operations.add("startGossiping");
}
@Override
public void stopThriftServer()
{
operations.add("stopThriftServer");
}
@Override
public void drain()
{
operations.add("drain");
}
}