Repository: accumulo
Updated Branches:
  refs/heads/master 17bc1ef6d -> f8cdf1936


ACCUMULO-2354 ensure that the TabletLocationState iterator is closed


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

Branch: refs/heads/master
Commit: 0da9a567762cb79b6fb506310d366193f4953766
Parents: aab22b2
Author: Eric Newton <eric.new...@gmail.com>
Authored: Wed Feb 19 13:27:50 2014 -0500
Committer: Eric Newton <eric.new...@gmail.com>
Committed: Wed Feb 19 13:28:33 2014 -0500

----------------------------------------------------------------------
 .../server/master/state/MetaDataStateStore.java      |  3 +--
 .../server/master/state/MetaDataTableScanner.java    |  2 +-
 .../server/master/state/RootTabletStateStore.java    |  4 +---
 .../server/master/state/TabletStateStore.java        |  3 +--
 .../server/master/state/ZooTabletStateStore.java     |  8 ++++++--
 .../apache/accumulo/master/TabletGroupWatcher.java   | 15 ++++++++++++++-
 6 files changed, 24 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/0da9a567/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataStateStore.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataStateStore.java
 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataStateStore.java
index 57d38eb..e4d1eeb 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataStateStore.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataStateStore.java
@@ -17,7 +17,6 @@
 package org.apache.accumulo.server.master.state;
 
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.accumulo.core.client.BatchWriter;
@@ -66,7 +65,7 @@ public class MetaDataStateStore extends TabletStateStore {
   }
   
   @Override
-  public Iterator<TabletLocationState> iterator() {
+  public ClosableIterator<TabletLocationState> iterator() {
     return new MetaDataTableScanner(instance, credentials, 
MetadataSchema.TabletsSection.getRange(), state);
   }
   

http://git-wip-us.apache.org/repos/asf/accumulo/blob/0da9a567/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java
 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java
index f0ac7bc..155a5d2 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/MetaDataTableScanner.java
@@ -46,7 +46,7 @@ import 
org.apache.accumulo.server.master.state.TabletLocationState.BadLocationSt
 import org.apache.hadoop.io.Text;
 import org.apache.log4j.Logger;
 
-public class MetaDataTableScanner implements Iterator<TabletLocationState> {
+public class MetaDataTableScanner implements 
ClosableIterator<TabletLocationState> {
   private static final Logger log = 
Logger.getLogger(MetaDataTableScanner.class);
   
   BatchScanner mdScanner = null;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/0da9a567/server/base/src/main/java/org/apache/accumulo/server/master/state/RootTabletStateStore.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/RootTabletStateStore.java
 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/RootTabletStateStore.java
index bdf5478..219fd49 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/RootTabletStateStore.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/RootTabletStateStore.java
@@ -16,8 +16,6 @@
  */
 package org.apache.accumulo.server.master.state;
 
-import java.util.Iterator;
-
 import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.metadata.RootTable;
 import org.apache.accumulo.core.metadata.schema.MetadataSchema;
@@ -34,7 +32,7 @@ public class RootTabletStateStore extends MetaDataStateStore {
   }
   
   @Override
-  public Iterator<TabletLocationState> iterator() {
+  public ClosableIterator<TabletLocationState> iterator() {
     return new MetaDataTableScanner(instance, credentials, 
MetadataSchema.TabletsSection.getRange(), state, RootTable.NAME);
   }
   

http://git-wip-us.apache.org/repos/asf/accumulo/blob/0da9a567/server/base/src/main/java/org/apache/accumulo/server/master/state/TabletStateStore.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/TabletStateStore.java
 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/TabletStateStore.java
index ed68b4e..e898109 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/TabletStateStore.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/TabletStateStore.java
@@ -18,7 +18,6 @@ package org.apache.accumulo.server.master.state;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Iterator;
 
 /**
  * Interface for storing information about tablet assignments. There are three 
implementations:
@@ -38,7 +37,7 @@ public abstract class TabletStateStore implements 
Iterable<TabletLocationState>
    * Scan the information about the tablets covered by this store
    */
   @Override
-  abstract public Iterator<TabletLocationState> iterator();
+  abstract public ClosableIterator<TabletLocationState> iterator();
   
   /**
    * Store the assigned locations in the data store.

http://git-wip-us.apache.org/repos/asf/accumulo/blob/0da9a567/server/base/src/main/java/org/apache/accumulo/server/master/state/ZooTabletStateStore.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/ZooTabletStateStore.java
 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/ZooTabletStateStore.java
index bbd1257..0a0e1ee 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/master/state/ZooTabletStateStore.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/master/state/ZooTabletStateStore.java
@@ -48,8 +48,8 @@ public class ZooTabletStateStore extends TabletStateStore {
   }
   
   @Override
-  public Iterator<TabletLocationState> iterator() {
-    return new Iterator<TabletLocationState>() {
+  public ClosableIterator<TabletLocationState> iterator() {
+    return new ClosableIterator<TabletLocationState>() {
       boolean finished = false;
       
       @Override
@@ -101,6 +101,10 @@ public class ZooTabletStateStore extends TabletStateStore {
       public void remove() {
         throw new NotImplementedException();
       }
+
+      @Override
+      public void close() {
+      }
     };
   }
   

http://git-wip-us.apache.org/repos/asf/accumulo/blob/0da9a567/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
----------------------------------------------------------------------
diff --git 
a/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
 
b/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
index 1a201f5..1590348 100644
--- 
a/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
+++ 
b/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
@@ -18,6 +18,7 @@ package org.apache.accumulo.master;
 
 import static java.lang.Math.min;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -66,6 +67,7 @@ import org.apache.accumulo.server.fs.FileRef;
 import org.apache.accumulo.server.fs.VolumeManager.FileType;
 import org.apache.accumulo.server.master.LiveTServerSet.TServerConnection;
 import org.apache.accumulo.server.master.state.Assignment;
+import org.apache.accumulo.server.master.state.ClosableIterator;
 import org.apache.accumulo.server.master.state.DistributedStoreException;
 import org.apache.accumulo.server.master.state.MergeInfo;
 import org.apache.accumulo.server.master.state.MergeState;
@@ -118,6 +120,7 @@ class TabletGroupWatcher extends Daemon {
 
       int totalUnloaded = 0;
       int unloaded = 0;
+      ClosableIterator<TabletLocationState> iter = null;
       try {
         Map<Text,MergeStats> mergeStatsCache = new HashMap<Text,MergeStats>();
         
@@ -145,7 +148,9 @@ class TabletGroupWatcher extends Daemon {
         stats.begin();
         // Walk through the tablets in our store, and work tablets
         // towards their goal
-        for (TabletLocationState tls : store) {
+        iter = store.iterator();
+        while (iter.hasNext()) {
+          TabletLocationState tls = iter.next();
           if (tls == null) {
             continue;
           }
@@ -286,6 +291,14 @@ class TabletGroupWatcher extends Daemon {
         } else {
           UtilWaitThread.sleep(Master.WAIT_BETWEEN_ERRORS);
         }
+      } finally {
+        if (iter != null) {
+          try {
+            iter.close();
+          } catch (IOException ex) {
+            Master.log.warn("Error closing TabletLocationState iterator: " + 
ex, ex);
+          }
+        }
       }
     }
   }

Reply via email to