Search in sources :

Example 6 with ServerServices

use of org.apache.accumulo.core.util.ServerServices in project accumulo by apache.

the class TabletServer method announceExistence.

private void announceExistence() {
    IZooReaderWriter zoo = ZooReaderWriter.getInstance();
    try {
        String zPath = ZooUtil.getRoot(getInstance()) + Constants.ZTSERVERS + "/" + getClientAddressString();
        try {
            zoo.putPersistentData(zPath, new byte[] {}, NodeExistsPolicy.SKIP);
        } catch (KeeperException e) {
            if (KeeperException.Code.NOAUTH == e.code()) {
                log.error("Failed to write to ZooKeeper. Ensure that accumulo-site.xml, specifically instance.secret, is consistent.");
            }
            throw e;
        }
        tabletServerLock = new ZooLock(zPath);
        LockWatcher lw = new LockWatcher() {

            @Override
            public void lostLock(final LockLossReason reason) {
                Halt.halt(serverStopRequested ? 0 : 1, new Runnable() {

                    @Override
                    public void run() {
                        if (!serverStopRequested)
                            log.error("Lost tablet server lock (reason = {}), exiting.", reason);
                        gcLogger.logGCInfo(getConfiguration());
                    }
                });
            }

            @Override
            public void unableToMonitorLockNode(final Throwable e) {
                Halt.halt(1, new Runnable() {

                    @Override
                    public void run() {
                        log.error("Lost ability to monitor tablet server lock, exiting.", e);
                    }
                });
            }
        };
        byte[] lockContent = new ServerServices(getClientAddressString(), Service.TSERV_CLIENT).toString().getBytes(UTF_8);
        for (int i = 0; i < 120 / 5; i++) {
            zoo.putPersistentData(zPath, new byte[0], NodeExistsPolicy.SKIP);
            if (tabletServerLock.tryLock(lw, lockContent)) {
                log.debug("Obtained tablet server lock {}", tabletServerLock.getLockPath());
                lockID = tabletServerLock.getLockID().serialize(ZooUtil.getRoot(getInstance()) + Constants.ZTSERVERS + "/");
                return;
            }
            log.info("Waiting for tablet server lock");
            sleepUninterruptibly(5, TimeUnit.SECONDS);
        }
        String msg = "Too many retries, exiting.";
        log.info(msg);
        throw new RuntimeException(msg);
    } catch (Exception e) {
        log.info("Could not obtain tablet server lock, exiting.", e);
        throw new RuntimeException(e);
    }
}
Also used : ServerServices(org.apache.accumulo.core.util.ServerServices) TableNotFoundException(org.apache.accumulo.core.client.TableNotFoundException) ThriftSecurityException(org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException) IterationInterruptedException(org.apache.accumulo.core.iterators.IterationInterruptedException) TSampleNotPresentException(org.apache.accumulo.core.tabletserver.thrift.TSampleNotPresentException) WalMarkerException(org.apache.accumulo.server.log.WalStateManager.WalMarkerException) ConstraintViolationException(org.apache.accumulo.core.tabletserver.thrift.ConstraintViolationException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) ExecutionException(java.util.concurrent.ExecutionException) NotServingTabletException(org.apache.accumulo.core.tabletserver.thrift.NotServingTabletException) AccumuloSecurityException(org.apache.accumulo.core.client.AccumuloSecurityException) KeeperException(org.apache.zookeeper.KeeperException) NoSuchScanIDException(org.apache.accumulo.core.tabletserver.thrift.NoSuchScanIDException) CancellationException(java.util.concurrent.CancellationException) DistributedStoreException(org.apache.accumulo.server.master.state.DistributedStoreException) TException(org.apache.thrift.TException) NoNodeException(org.apache.zookeeper.KeeperException.NoNodeException) ThriftTableOperationException(org.apache.accumulo.core.client.impl.thrift.ThriftTableOperationException) BadLocationStateException(org.apache.accumulo.server.master.state.TabletLocationState.BadLocationStateException) TimeoutException(java.util.concurrent.TimeoutException) TabletClosedException(org.apache.accumulo.tserver.tablet.TabletClosedException) SampleNotPresentException(org.apache.accumulo.core.client.SampleNotPresentException) AccumuloException(org.apache.accumulo.core.client.AccumuloException) IZooReaderWriter(org.apache.accumulo.fate.zookeeper.IZooReaderWriter) LockWatcher(org.apache.accumulo.fate.zookeeper.ZooLock.LockWatcher) LoggingRunnable(org.apache.accumulo.fate.util.LoggingRunnable) LockLossReason(org.apache.accumulo.fate.zookeeper.ZooLock.LockLossReason) KeeperException(org.apache.zookeeper.KeeperException) ZooLock(org.apache.accumulo.server.zookeeper.ZooLock)

Example 7 with ServerServices

use of org.apache.accumulo.core.util.ServerServices in project accumulo by apache.

the class ServerClient method getConnection.

public static <CT extends TServiceClient> Pair<String, CT> getConnection(ClientContext context, TServiceClientFactory<CT> factory, boolean preferCachedConnections, long rpcTimeout) throws TTransportException {
    checkArgument(context != null, "context is null");
    // create list of servers
    ArrayList<ThriftTransportKey> servers = new ArrayList<>();
    // add tservers
    Instance instance = context.getInstance();
    ZooCache zc = new ZooCacheFactory().getZooCache(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut());
    for (String tserver : zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZTSERVERS)) {
        String path = ZooUtil.getRoot(instance) + Constants.ZTSERVERS + "/" + tserver;
        byte[] data = ZooUtil.getLockData(zc, path);
        if (data != null) {
            String strData = new String(data, UTF_8);
            if (!strData.equals("master"))
                servers.add(new ThriftTransportKey(new ServerServices(strData).getAddress(Service.TSERV_CLIENT), rpcTimeout, context));
        }
    }
    boolean opened = false;
    try {
        Pair<String, TTransport> pair = ThriftTransportPool.getInstance().getAnyTransport(servers, preferCachedConnections);
        CT client = ThriftUtil.createClient(factory, pair.getSecond());
        opened = true;
        warnedAboutTServersBeingDown = false;
        return new Pair<>(pair.getFirst(), client);
    } finally {
        if (!opened) {
            if (!warnedAboutTServersBeingDown) {
                if (servers.isEmpty()) {
                    log.warn("There are no tablet servers: check that zookeeper and accumulo are running.");
                } else {
                    log.warn("Failed to find an available server in the list of servers: {}", servers);
                }
                warnedAboutTServersBeingDown = true;
            }
        }
    }
}
Also used : ServerServices(org.apache.accumulo.core.util.ServerServices) Instance(org.apache.accumulo.core.client.Instance) ArrayList(java.util.ArrayList) ZooCache(org.apache.accumulo.fate.zookeeper.ZooCache) ZooCacheFactory(org.apache.accumulo.fate.zookeeper.ZooCacheFactory) TTransport(org.apache.thrift.transport.TTransport) Pair(org.apache.accumulo.core.util.Pair)

Aggregations

ServerServices (org.apache.accumulo.core.util.ServerServices)7 Instance (org.apache.accumulo.core.client.Instance)3 LockLossReason (org.apache.accumulo.fate.zookeeper.ZooLock.LockLossReason)3 LockWatcher (org.apache.accumulo.fate.zookeeper.ZooLock.LockWatcher)3 ZooLock (org.apache.accumulo.server.zookeeper.ZooLock)3 UnknownHostException (java.net.UnknownHostException)2 ArrayList (java.util.ArrayList)2 ThriftSecurityException (org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException)2 HostAndPort (org.apache.accumulo.core.util.HostAndPort)2 ZooCache (org.apache.accumulo.fate.zookeeper.ZooCache)2 ZooCacheFactory (org.apache.accumulo.fate.zookeeper.ZooCacheFactory)2 AccumuloServerContext (org.apache.accumulo.server.AccumuloServerContext)2 ZooReaderWriter (org.apache.accumulo.server.zookeeper.ZooReaderWriter)2 TException (org.apache.thrift.TException)2 TTransport (org.apache.thrift.transport.TTransport)2 IOException (java.io.IOException)1 Random (java.util.Random)1 CancellationException (java.util.concurrent.CancellationException)1 ExecutionException (java.util.concurrent.ExecutionException)1 TimeoutException (java.util.concurrent.TimeoutException)1