HBASE-9173 replication_admin#get_peer_state(id) in ruby script pointing to
undefined method `getPeerState' git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1513676 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f0dfc4d1ae
commit
cd72d29eae
|
@ -175,6 +175,16 @@ public class ReplicationAdmin implements Closeable {
|
||||||
return this.replicationPeers.getAllPeerClusterKeys();
|
return this.replicationPeers.getAllPeerClusterKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the state of the specified peer cluster
|
||||||
|
* @param id String format of the Short that identifies the peer, an IllegalArgumentException
|
||||||
|
* is thrown if it doesn't exist
|
||||||
|
* @return true if replication is enabled to that peer, false if it isn't
|
||||||
|
*/
|
||||||
|
public boolean getPeerState(String id) throws IOException {
|
||||||
|
return this.replicationPeers.getStatusOfPeerFromBackingStore(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws IOException {
|
public void close() throws IOException {
|
||||||
if (this.connection != null) {
|
if (this.connection != null) {
|
||||||
|
|
|
@ -200,11 +200,12 @@ public class ReplicationPeer implements Abortable, Closeable {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param bytes
|
* Parse the raw data from ZK to get a peer's state
|
||||||
|
* @param bytes raw ZK data
|
||||||
* @return True if the passed in <code>bytes</code> are those of a pb serialized ENABLED state.
|
* @return True if the passed in <code>bytes</code> are those of a pb serialized ENABLED state.
|
||||||
* @throws DeserializationException
|
* @throws DeserializationException
|
||||||
*/
|
*/
|
||||||
private static boolean isStateEnabled(final byte[] bytes) throws DeserializationException {
|
public static boolean isStateEnabled(final byte[] bytes) throws DeserializationException {
|
||||||
ZooKeeperProtos.ReplicationState.State state = parseStateFrom(bytes);
|
ZooKeeperProtos.ReplicationState.State state = parseStateFrom(bytes);
|
||||||
return ZooKeeperProtos.ReplicationState.State.ENABLED == state;
|
return ZooKeeperProtos.ReplicationState.State.ENABLED == state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,11 +76,23 @@ public interface ReplicationPeers {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the replication status for the specified connected remote slave cluster.
|
* Get the replication status for the specified connected remote slave cluster.
|
||||||
|
* The value might be read from cache, so it is recommended to
|
||||||
|
* use {@link #getStatusOfPeerFromBackingStore(String)}
|
||||||
|
* if reading the state after enabling or disabling it.
|
||||||
* @param peerId a short that identifies the cluster
|
* @param peerId a short that identifies the cluster
|
||||||
* @return true if replication is enabled, false otherwise.
|
* @return true if replication is enabled, false otherwise.
|
||||||
*/
|
*/
|
||||||
boolean getStatusOfConnectedPeer(String peerId);
|
boolean getStatusOfConnectedPeer(String peerId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the replication status for the specified remote slave cluster, which doesn't
|
||||||
|
* have to be connected. The state is read directly from the backing store.
|
||||||
|
* @param peerId a short that identifies the cluster
|
||||||
|
* @return true if replication is enabled, false otherwise.
|
||||||
|
* @throws IOException Throws if there's an error contacting the store
|
||||||
|
*/
|
||||||
|
boolean getStatusOfPeerFromBackingStore(String peerId) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a set of all connected remote slave clusters.
|
* Get a set of all connected remote slave clusters.
|
||||||
* @return set of peer ids
|
* @return set of peer ids
|
||||||
|
|
|
@ -137,6 +137,21 @@ public class ReplicationPeersZKImpl extends ReplicationStateZKBase implements Re
|
||||||
return this.peerClusters.get(id).getPeerEnabled().get();
|
return this.peerClusters.get(id).getPeerEnabled().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getStatusOfPeerFromBackingStore(String id) throws IOException {
|
||||||
|
if (!this.getAllPeerIds().contains(id)) {
|
||||||
|
throw new IllegalArgumentException("peer " + id + " doesn't exist");
|
||||||
|
}
|
||||||
|
String peerStateZNode = getPeerStateNode(id);
|
||||||
|
try {
|
||||||
|
return ReplicationPeer.isStateEnabled(ZKUtil.getData(this.zookeeper, peerStateZNode));
|
||||||
|
} catch (KeeperException e) {
|
||||||
|
throw new IOException(e);
|
||||||
|
} catch (DeserializationException e) {
|
||||||
|
throw new IOException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean connectToPeer(String peerId) throws IOException, KeeperException {
|
public boolean connectToPeer(String peerId) throws IOException, KeeperException {
|
||||||
if (peerClusters == null) {
|
if (peerClusters == null) {
|
||||||
|
|
|
@ -58,7 +58,7 @@ module Hbase
|
||||||
#----------------------------------------------------------------------------------------------
|
#----------------------------------------------------------------------------------------------
|
||||||
# Get peer cluster state
|
# Get peer cluster state
|
||||||
def get_peer_state(id)
|
def get_peer_state(id)
|
||||||
@replication_admin.getPeerState(id)
|
@replication_admin.getPeerState(id) ? "ENABLED" : "DISABLED"
|
||||||
end
|
end
|
||||||
|
|
||||||
#----------------------------------------------------------------------------------------------
|
#----------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -27,6 +27,8 @@ import org.junit.experimental.categories.Category;
|
||||||
|
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit testing of ReplicationAdmin
|
* Unit testing of ReplicationAdmin
|
||||||
|
@ -86,12 +88,33 @@ public class TestReplicationAdmin {
|
||||||
admin.addPeer(ID_SECOND, KEY_SECOND);
|
admin.addPeer(ID_SECOND, KEY_SECOND);
|
||||||
} catch (IllegalStateException iae) {
|
} catch (IllegalStateException iae) {
|
||||||
fail();
|
fail();
|
||||||
// OK!
|
|
||||||
}
|
}
|
||||||
assertEquals(2, admin.getPeersCount());
|
assertEquals(2, admin.getPeersCount());
|
||||||
// Remove the first peer we added
|
// Remove the first peer we added
|
||||||
admin.removePeer(ID_ONE);
|
admin.removePeer(ID_ONE);
|
||||||
assertEquals(1, admin.getPeersCount());
|
assertEquals(1, admin.getPeersCount());
|
||||||
|
admin.removePeer(ID_SECOND);
|
||||||
|
assertEquals(0, admin.getPeersCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* basic checks that when we add a peer that it is enabled, and that we can disable
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testEnableDisable() throws Exception {
|
||||||
|
admin.addPeer(ID_ONE, KEY_ONE);
|
||||||
|
assertEquals(1, admin.getPeersCount());
|
||||||
|
assertTrue(admin.getPeerState(ID_ONE));
|
||||||
|
admin.disablePeer(ID_ONE);
|
||||||
|
|
||||||
|
assertFalse(admin.getPeerState(ID_ONE));
|
||||||
|
try {
|
||||||
|
admin.getPeerState(ID_SECOND);
|
||||||
|
} catch (IllegalArgumentException iae) {
|
||||||
|
// OK!
|
||||||
|
}
|
||||||
|
admin.removePeer(ID_ONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,6 +231,10 @@ public abstract class TestReplicationStateBasic {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void assertConnectedPeerStatus(boolean status, String peerId) throws Exception {
|
protected void assertConnectedPeerStatus(boolean status, String peerId) throws Exception {
|
||||||
|
// we can first check if the value was changed in the store, if it wasn't then fail right away
|
||||||
|
if (status != rp.getStatusOfPeerFromBackingStore(peerId)) {
|
||||||
|
fail("ConnectedPeerStatus was " + !status + " but expected " + status + " in ZK");
|
||||||
|
}
|
||||||
while (true) {
|
while (true) {
|
||||||
if (status == rp.getStatusOfConnectedPeer(peerId)) {
|
if (status == rp.getStatusOfConnectedPeer(peerId)) {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue