Example usage for org.apache.zookeeper.server.quorum.flexible QuorumMaj QuorumMaj

List of usage examples for org.apache.zookeeper.server.quorum.flexible QuorumMaj QuorumMaj

Introduction

In this page you can find the example usage for org.apache.zookeeper.server.quorum.flexible QuorumMaj QuorumMaj.

Prototype

public QuorumMaj(Properties props) throws ConfigException 

Source Link

Usage

From source file:com.linkedin.d2.quorum.ZKPeer.java

License:Apache License

public void setQuorumPeer(int peersCount, Map<Long, QuorumServer> peersView, FileTxnSnapLog fts)
        throws IOException {
    NIOServerCnxn.Factory cnxnFactory = new NIOServerCnxn.Factory(
            new InetSocketAddress("127.0.0.1", _clientPort), _maxClientCnxns);

    _peer = new QuorumPeer();
    _peer.setClientPortAddress(new InetSocketAddress("127.0.0.1", _clientPort));
    _peer.setTxnFactory(fts);// w  w  w.  j  av  a  2s  .co  m
    _peer.setQuorumPeers(peersView);
    _peer.setElectionType(_electionAlg);
    _peer.setMyid(_id);
    _peer.setTickTime(_tickTime);
    _peer.setMinSessionTimeout(_minSessionTimeout);
    _peer.setMaxSessionTimeout(_maxSessionTimeout);
    _peer.setInitLimit(_initLimit);
    _peer.setSyncLimit(_syncLimit);
    _peer.setQuorumVerifier(new QuorumMaj(peersCount));
    _peer.setCnxnFactory(cnxnFactory);
    _peer.setZKDatabase(new ZKDatabase(_peer.getTxnFactory()));
    _peer.setPeerType(LearnerType.PARTICIPANT);

}

From source file:com.netflix.curator.utils.TestingCluster.java

License:Apache License

/**
 * Start the ensemble. The cluster must be started before use.
 *
 * @throws Exception errors/*from   w  ww.j  av  a 2  s .com*/
 */
public void start() throws Exception {
    final Map<QuorumPeerEntry, QuorumPeer.QuorumServer> serverMap = Maps.newHashMap();
    final Map<Long, QuorumPeer.QuorumServer> testingServers = Maps.newHashMap();
    for (final QuorumPeerEntry entry : entries) {
        InetSocketAddress address = new InetSocketAddress("localhost", entry.instanceSpec.quorumPort);
        InetSocketAddress electionAddress = new InetSocketAddress("localhost", entry.instanceSpec.electionPort);
        long serverId = serverMap.size() + 1;
        QuorumPeer.QuorumServer quorumServer = new QuorumPeer.QuorumServer(serverId, address, electionAddress);
        serverMap.put(entry, quorumServer);
        testingServers.put(serverId, quorumServer);
    }

    final QuorumVerifier testingQuorumVerifier = new QuorumMaj(testingServers.size());
    for (final QuorumPeerEntry entry : entries) {
        final long thisServerId = serverMap.get(entry).id;
        final String path = entry.instanceSpec.dataDirectory.getCanonicalPath();
        final InetSocketAddress clientPort = new InetSocketAddress(entry.instanceSpec.port);
        final QuorumPeerConfig config = new QuorumPeerConfig() {
            @Override
            public String getDataDir() {
                return path;
            }

            @Override
            public QuorumVerifier getQuorumVerifier() {
                return testingQuorumVerifier;
            }

            @Override
            public InetSocketAddress getClientPortAddress() {
                return clientPort;
            }

            @Override
            public int getElectionPort() {
                return entry.instanceSpec.electionPort;
            }

            @Override
            public String getDataLogDir() {
                return path;
            }

            @Override
            public int getTickTime() {
                return 2000;
            }

            @Override
            public long getServerId() {
                return thisServerId;
            }

            @Override
            public Map<Long, QuorumPeer.QuorumServer> getServers() {
                return testingServers;
            }

            @Override
            public int getSyncLimit() {
                return 5;
            }

            @Override
            public int getInitLimit() {
                return 10;
            }
        };

        executorService.submit(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                try {
                    entry.quorumPeerMain.runFromConfig(config);
                } catch (Throwable e) {
                    e.printStackTrace();
                    throw new IOException(e);
                }
                return null;
            }
        });
    }
}

From source file:org.apache.curator.framework.imps.EnsembleTracker.java

License:Apache License

private void processConfigData(byte[] data) throws Exception {
    Properties properties = new Properties();
    properties.load(new ByteArrayInputStream(data));
    log.info("New config event received: {}", properties);

    if (!properties.isEmpty()) {
        QuorumMaj newConfig = new QuorumMaj(properties);
        String connectionString = configToConnectionString(newConfig);
        if (connectionString.trim().length() > 0) {
            currentConfig.set(newConfig);
            ensembleProvider.setConnectionString(connectionString);
        } else {//  w  w w.  j  a  va2 s . co m
            log.error("Invalid config event received: {}", properties);
        }
    } else {
        log.debug("Ignoring new config as it is empty");
    }
}

From source file:org.apache.curator.framework.imps.TestReconfiguration.java

License:Apache License

private static QuorumVerifier toQuorumVerifier(byte[] bytes) throws Exception {
    Assert.assertNotNull(bytes);/*from ww w . ja v  a 2  s.  co  m*/
    Properties properties = new Properties();
    properties.load(new ByteArrayInputStream(bytes));
    return new QuorumMaj(properties);
}

From source file:org.apache.solr.cloud.SolrZkServer.java

License:Apache License

/**
 * Parse config from a Properties.//  ww  w . j  a  v  a2  s.  co m
 * @param zkProp Properties to parse from.
 */
@Override
public void parseProperties(Properties zkProp) throws IOException, ConfigException {
    for (Entry<Object, Object> entry : zkProp.entrySet()) {
        String key = entry.getKey().toString().trim();
        String value = entry.getValue().toString().trim();
        if (key.equals("dataDir")) {
            dataDir = value;
        } else if (key.equals("dataLogDir")) {
            dataLogDir = value;
        } else if (key.equals("clientPort")) {
            setClientPort(Integer.parseInt(value));
        } else if (key.equals("tickTime")) {
            tickTime = Integer.parseInt(value);
        } else if (key.equals("initLimit")) {
            initLimit = Integer.parseInt(value);
        } else if (key.equals("syncLimit")) {
            syncLimit = Integer.parseInt(value);
        } else if (key.equals("electionAlg")) {
            electionAlg = Integer.parseInt(value);
        } else if (key.equals("maxClientCnxns")) {
            maxClientCnxns = Integer.parseInt(value);
        } else if (key.startsWith("server.")) {
            int dot = key.indexOf('.');
            long sid = Long.parseLong(key.substring(dot + 1));
            String parts[] = value.split(":");
            if ((parts.length != 2) && (parts.length != 3)) {
                LOG.error(value + " does not have the form host:port or host:port:port");
            }
            InetSocketAddress addr = new InetSocketAddress(parts[0], Integer.parseInt(parts[1]));
            if (parts.length == 2) {
                servers.put(Long.valueOf(sid), new QuorumPeer.QuorumServer(sid, addr));
            } else if (parts.length == 3) {
                InetSocketAddress electionAddr = new InetSocketAddress(parts[0], Integer.parseInt(parts[2]));
                servers.put(Long.valueOf(sid), new QuorumPeer.QuorumServer(sid, addr, electionAddr));
            }
        } else if (key.startsWith("group")) {
            int dot = key.indexOf('.');
            long gid = Long.parseLong(key.substring(dot + 1));

            numGroups++;

            String parts[] = value.split(":");
            for (String s : parts) {
                long sid = Long.parseLong(s);
                if (serverGroup.containsKey(sid))
                    throw new ConfigException("Server " + sid + "is in multiple groups");
                else
                    serverGroup.put(sid, gid);
            }

        } else if (key.startsWith("weight")) {
            int dot = key.indexOf('.');
            long sid = Long.parseLong(key.substring(dot + 1));
            serverWeight.put(sid, Long.parseLong(value));
        } else {
            System.setProperty("zookeeper." + key, value);
        }
    }
    if (dataDir == null) {
        throw new IllegalArgumentException("dataDir is not set");
    }
    if (dataLogDir == null) {
        dataLogDir = dataDir;
    } else {
        if (!new File(dataLogDir).isDirectory()) {
            throw new IllegalArgumentException("dataLogDir " + dataLogDir + " is missing.");
        }
    }

    if (tickTime == 0) {
        throw new IllegalArgumentException("tickTime is not set");
    }
    if (servers.size() > 1) {
        if (initLimit == 0) {
            throw new IllegalArgumentException("initLimit is not set");
        }
        if (syncLimit == 0) {
            throw new IllegalArgumentException("syncLimit is not set");
        }
        /*
        * If using FLE, then every server requires a separate election
        * port.
        */
        if (electionAlg != 0) {
            for (QuorumPeer.QuorumServer s : servers.values()) {
                if (s.electionAddr == null)
                    throw new IllegalArgumentException("Missing election port for server: " + s.id);
            }
        }

        /*
        * Default of quorum config is majority
        */
        if (serverGroup.size() > 0) {
            if (servers.size() != serverGroup.size())
                throw new ConfigException("Every server must be in exactly one group");
            /*
             * The deafult weight of a server is 1
             */
            for (QuorumPeer.QuorumServer s : servers.values()) {
                if (!serverWeight.containsKey(s.id))
                    serverWeight.put(s.id, (long) 1);
            }

            /*
              * Set the quorumVerifier to be QuorumHierarchical
              */
            quorumVerifier = new QuorumHierarchical(numGroups, serverWeight, serverGroup);
        } else {
            /*
              * The default QuorumVerifier is QuorumMaj
              */

            LOG.info("Defaulting to majority quorums");
            quorumVerifier = new QuorumMaj(servers.size());
        }

        File myIdFile = new File(dataDir, "myid");
        if (!myIdFile.exists()) {
            ///////////////// ADDED FOR SOLR //////
            Long myid = getMyServerId();
            if (myid != null) {
                serverId = myid;
                return;
            }
            if (zkRun == null)
                return;
            //////////////// END ADDED FOR SOLR //////
            throw new IllegalArgumentException(myIdFile.toString() + " file is missing");
        }

        BufferedReader br = new BufferedReader(
                new InputStreamReader(new FileInputStream(myIdFile), IOUtils.CHARSET_UTF_8));
        String myIdString;
        try {
            myIdString = br.readLine();
        } finally {
            br.close();
        }
        try {
            serverId = Long.parseLong(myIdString);
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("serverid " + myIdString + " is not a number");
        }
    }
}