You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ec...@apache.org on 2014/09/22 17:58:44 UTC

[6/7] git commit: ACCUMULO-3157 close scanners

ACCUMULO-3157 close scanners


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/2f68e078
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/2f68e078
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/2f68e078

Branch: refs/heads/1.6.2-SNAPSHOT
Commit: 2f68e078d378ec5a836e04e0aeed60dc837e81f9
Parents: 65be6dc 9167993
Author: Eric Newton <Eric Newton>
Authored: Mon Sep 22 11:55:19 2014 -0400
Committer: Eric Newton <Eric Newton>
Committed: Mon Sep 22 11:55:19 2014 -0400

----------------------------------------------------------------------
 .../server/util/FindOfflineTablets.java         | 25 +++++++++++---------
 1 file changed, 14 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/2f68e078/server/base/src/main/java/org/apache/accumulo/server/util/FindOfflineTablets.java
----------------------------------------------------------------------
diff --cc server/base/src/main/java/org/apache/accumulo/server/util/FindOfflineTablets.java
index 64c23d0,0000000..8f78488
mode 100644,000000..100644
--- a/server/base/src/main/java/org/apache/accumulo/server/util/FindOfflineTablets.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/util/FindOfflineTablets.java
@@@ -1,129 -1,0 +1,132 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.accumulo.server.util;
 +
 +import java.util.Iterator;
 +import java.util.Set;
 +import java.util.concurrent.atomic.AtomicBoolean;
 +
 +import org.apache.accumulo.core.client.AccumuloException;
 +import org.apache.accumulo.core.client.Instance;
 +import org.apache.accumulo.core.client.TableNotFoundException;
 +import org.apache.accumulo.core.client.impl.Tables;
 +import org.apache.accumulo.core.conf.DefaultConfiguration;
 +import org.apache.accumulo.core.data.KeyExtent;
 +import org.apache.accumulo.core.data.Range;
 +import org.apache.accumulo.core.master.state.tables.TableState;
 +import org.apache.accumulo.core.metadata.MetadataTable;
 +import org.apache.accumulo.core.metadata.RootTable;
 +import org.apache.accumulo.core.metadata.schema.MetadataSchema;
 +import org.apache.accumulo.core.security.Credentials;
 +import org.apache.accumulo.server.cli.ClientOpts;
 +import org.apache.accumulo.server.master.LiveTServerSet;
 +import org.apache.accumulo.server.master.LiveTServerSet.Listener;
 +import org.apache.accumulo.server.master.state.DistributedStoreException;
 +import org.apache.accumulo.server.master.state.MetaDataTableScanner;
 +import org.apache.accumulo.server.master.state.TServerInstance;
 +import org.apache.accumulo.server.master.state.TabletLocationState;
 +import org.apache.accumulo.server.master.state.TabletState;
 +import org.apache.accumulo.server.master.state.ZooTabletStateStore;
 +import org.apache.accumulo.server.security.SystemCredentials;
 +import org.apache.accumulo.server.tables.TableManager;
 +import org.apache.hadoop.io.Text;
 +import org.apache.log4j.Logger;
 +
 +public class FindOfflineTablets {
 +  private static final Logger log = Logger.getLogger(FindOfflineTablets.class);
 +
 +  public static void main(String[] args) throws Exception {
 +    ClientOpts opts = new ClientOpts();
 +    opts.parseArgs(FindOfflineTablets.class.getName(), args);
 +    Instance instance = opts.getInstance();
 +    SystemCredentials creds = SystemCredentials.get();
 +
 +    findOffline(instance, creds, null);
 +  }
 +
 +  static int findOffline(Instance instance, Credentials creds, String tableName) throws AccumuloException, TableNotFoundException {
 +
 +    final AtomicBoolean scanning = new AtomicBoolean(false);
 +
 +    LiveTServerSet tservers = new LiveTServerSet(instance, DefaultConfiguration.getDefaultConfiguration(), new Listener() {
 +      @Override
 +      public void update(LiveTServerSet current, Set<TServerInstance> deleted, Set<TServerInstance> added) {
 +        if (!deleted.isEmpty() && scanning.get())
 +          log.warn("Tablet servers deleted while scanning: " + deleted);
 +        if (!added.isEmpty() && scanning.get())
 +          log.warn("Tablet servers added while scanning: " + added);
 +      }
 +    });
 +    tservers.startListeningForTabletServerChanges();
 +    scanning.set(true);
 +
 +    Iterator<TabletLocationState> zooScanner;
 +    try {
 +      zooScanner = new ZooTabletStateStore().iterator();
 +    } catch (DistributedStoreException e) {
 +      throw new AccumuloException(e);
 +    }
 +
 +    int offline = 0;
 +
 +    System.out.println("Scanning zookeeper");
 +    if ((offline = checkTablets(zooScanner, tservers)) > 0)
 +      return offline;
 +
 +    if (RootTable.NAME.equals(tableName))
 +      return 0;
 +
 +    System.out.println("Scanning " + RootTable.NAME);
 +    Iterator<TabletLocationState> rootScanner = new MetaDataTableScanner(instance, creds, MetadataSchema.TabletsSection.getRange(), RootTable.NAME);
 +    if ((offline = checkTablets(rootScanner, tservers)) > 0)
 +      return offline;
 +
 +    if (MetadataTable.NAME.equals(tableName))
 +      return 0;
 +
 +    System.out.println("Scanning " + MetadataTable.NAME);
 +
 +    Range range = MetadataSchema.TabletsSection.getRange();
 +    if (tableName != null) {
 +      String tableId = Tables.getTableId(instance, tableName);
 +      range = new KeyExtent(new Text(tableId), null, null).toMetadataRange();
 +    }
 +
 +    Iterator<TabletLocationState> metaScanner = new MetaDataTableScanner(instance, creds, range, MetadataTable.NAME);
 +    return checkTablets(metaScanner, tservers);
 +  }
 +
 +  private static int checkTablets(Iterator<TabletLocationState> scanner, LiveTServerSet tservers) {
 +    int offline = 0;
 +    
-     while (scanner.hasNext() && !System.out.checkError()) {
-       TabletLocationState locationState = scanner.next();
-       TabletState state = locationState.getState(tservers.getCurrentServers());
-       if (state != null && state != TabletState.HOSTED
-           && TableManager.getInstance().getTableState(locationState.extent.getTableId().toString()) != TableState.OFFLINE) {
-         System.out.println(locationState + " is " + state + "  #walogs:" + locationState.walogs.size());
-         offline++;
++    try {
++      while (scanner.hasNext() && !System.out.checkError()) {
++        TabletLocationState locationState = scanner.next();
++        TabletState state = locationState.getState(tservers.getCurrentServers());
++        if (state != null && state != TabletState.HOSTED
++            && TableManager.getInstance().getTableState(locationState.extent.getTableId().toString()) != TableState.OFFLINE) {
++          System.out.println(locationState + " is " + state + "  #walogs:" + locationState.walogs.size());
++          offline++;
++        }
 +      }
-     }
- 
-     return offline;
++  
++      return offline;
++    } finally {
++      scanner.close();
++    } 
 +  }
- 
 +}