Example usage for org.apache.cassandra.service StorageServiceMBean effectiveOwnership

List of usage examples for org.apache.cassandra.service StorageServiceMBean effectiveOwnership

Introduction

In this page you can find the example usage for org.apache.cassandra.service StorageServiceMBean effectiveOwnership.

Prototype

@Deprecated
public Map<InetAddress, Float> effectiveOwnership(String keyspace) throws IllegalStateException;

Source Link

Document

Effective ownership is % of the data each node owns given the keyspace we calculate the percentage using replication factor.

Usage

From source file:org.ayache.cassandra.repair.scheduler.NodeChooser.java

/**
 * Construct NodeChooser//from   w w  w  .  j  a  v a2  s  .c  om
 *
 * @param serviceMBean
 * @param esMBean
 * @param dc
 * @param lastRepairedNode
 * @throws java.io.IOException
 */
public NodeChooser(StorageServiceMBean serviceMBean, EndpointSnitchInfoMBean esMBean, String dc,
        String lastRepairedNode, boolean simult) throws IOException {
    this.serviceMBean = serviceMBean;
    this.esMBean = esMBean;
    this.dc = dc;
    this.lastRepairedNode = lastRepairedNode;

    List<String> keyspaces = serviceMBean.getKeyspaces();
    Collection<String> nodesFromDC = getNodesFromDC();
    Collection<Float> values = new LinkedList<>();
    float Rf = 0;
    for (String keyspace : keyspaces) {
        try {
            values.clear();
            Map<InetAddress, Float> effectiveOwnership = serviceMBean.effectiveOwnership(keyspace);
            for (Map.Entry<InetAddress, Float> entry : effectiveOwnership.entrySet()) {
                for (String node : nodesFromDC) {
                    if (entry.getKey().getHostAddress().equals(node)) {
                        values.add(entry.getValue());
                    }
                }
            }
            float localRf = 0;
            for (Float value : values) {
                localRf += value;
            }
            Rf = (localRf > Rf) ? localRf : Rf;
        } catch (IllegalStateException ex) {
            //Ignore error, pass to next keyspace
        }
    }
    //        replicates = (int) Rf;

    supportSimultaneousRepair = simult && nodesFromDC.size() >= 3 * Rf;
    Logger.getLogger(NodeChooser.class.getName()).info(serviceMBean.getLoadMap().toString());
    Logger.getLogger(NodeChooser.class.getName())
            .info("Replicas :" + Rf + " Simultaneous Repair Supported: " + supportSimultaneousRepair);
}

From source file:org.ayache.cassandra.repair.scheduler.NodeChooserTest.java

/**
 * Test of getNextNodeToRepair method, of class NodeChooser.
 *//*ww w .j  a  v  a  2 s.  c  o m*/
@Test
public void testGetNextNodeToRepair() throws Exception {
    System.out.println("getNextNodeToRepair");
    StorageServiceMBean mock = Mockito.mock(StorageServiceMBean.class);
    List<String> nodes = Arrays.asList("127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5",
            "127.0.0.6", "127.0.0.7", "127.0.0.8", "127.0.0.9");
    Map<InetAddress, Float> ownership = new HashMap<>();
    Map<String, String> tokenToEndpoints = new LinkedHashMap<>();
    int Rf = 3;
    for (String node : nodes) {
        ownership.put(InetAddress.getByName(node), 1f / nodes.size() * (float) Rf);
        tokenToEndpoints.put(node, node);
    }
    Mockito.when(mock.getKeyspaces()).thenReturn(Arrays.asList("TestKeyspace"));
    Mockito.when(mock.effectiveOwnership(Mockito.anyString())).thenReturn(ownership);
    Mockito.when(mock.getLiveNodes()).thenReturn(nodes);
    Mockito.when(mock.getTokenToEndpointMap()).thenReturn(tokenToEndpoints);
    NodeChooser instance = new NodeChooser(mock, new EndpointSnitchInfoMBean() {
        @Override
        public String getRack(String host) throws UnknownHostException {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public String getDatacenter(String host) throws UnknownHostException {
            return "DC1";
        }

        @Override
        public String getSnitchName() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }, "DC1", null, true);
    Collection<String> expResult = new HashSet<>(Arrays.asList("127.0.0.1", "127.0.0.5"));
    Collection<String> result = instance.getNextNodeToRepair();
    assertEquals(expResult, result);

    instance = new NodeChooser(mock, new EndpointSnitchInfoMBean() {
        @Override
        public String getRack(String host) throws UnknownHostException {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public String getDatacenter(String host) throws UnknownHostException {
            return "DC1";
        }

        @Override
        public String getSnitchName() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }, "DC1", "127.0.0.2", true);
    expResult = new HashSet<>(Arrays.asList("127.0.0.3", "127.0.0.7"));
    result = instance.getNextNodeToRepair();
    assertEquals(expResult, result);

    instance = new NodeChooser(mock, new EndpointSnitchInfoMBean() {
        @Override
        public String getRack(String host) throws UnknownHostException {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public String getDatacenter(String host) throws UnknownHostException {
            return "DC1";
        }

        @Override
        public String getSnitchName() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }, "DC1", "127.0.0.8", true);
    expResult = new HashSet<>(Arrays.asList("127.0.0.9", "127.0.0.4"));
    result = instance.getNextNodeToRepair();
    assertEquals(expResult, result);

    instance = new NodeChooser(mock, new EndpointSnitchInfoMBean() {
        @Override
        public String getRack(String host) throws UnknownHostException {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public String getDatacenter(String host) throws UnknownHostException {
            return "DC1";
        }

        @Override
        public String getSnitchName() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }, "DC1", "127.0.0.9", true);
    expResult = new HashSet<>(Arrays.asList("127.0.0.1", "127.0.0.5"));
    result = instance.getNextNodeToRepair();
    assertEquals(expResult, result);
    //        // TODO review the generated test code and remove the default call to fail.
    //        fail("The test case is a prototype.");
}