Repository: phoenix
Updated Branches:
  refs/heads/4.0 45e2891ce -> 89262f2be


PHOENIX-1250 Remove use of Closeables.closeQuietly

Remove the use of Guava's Closeables.closeQuietly to allow using
Phoenix within a client-side application that has a more recent
version of Guava. After this commit, Phoenix can be built against
Guava 18.0 (although full integration tests will not work because
HBase/Hadoop still rely on an older version of Guava internally).


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/89262f2b
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/89262f2b
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/89262f2b

Branch: refs/heads/4.0
Commit: 89262f2be4c6bf6b63b6e57364141a2a2d5d673e
Parents: 45e2891
Author: Gabriel Reid <gabri...@ngdata.com>
Authored: Tue Sep 16 11:58:33 2014 +0200
Committer: Gabriel Reid <gabri...@ngdata.com>
Committed: Wed Sep 17 09:17:41 2014 +0200

----------------------------------------------------------------------
 phoenix-core/pom.xml                            |  4 ++
 .../apache/phoenix/cache/ServerCacheClient.java |  4 +-
 .../phoenix/cache/aggcache/SpillFile.java       |  2 +-
 .../phoenix/cache/aggcache/SpillManager.java    |  2 +-
 .../cache/aggcache/SpillableGroupByCache.java   |  2 +-
 .../apache/phoenix/compile/FromCompiler.java    |  2 +-
 .../GroupedAggregateRegionObserver.java         |  3 +-
 .../phoenix/iterate/TableResultIterator.java    |  2 +-
 .../query/ConnectionQueryServicesImpl.java      |  7 ++-
 .../org/apache/phoenix/util/Closeables.java     | 46 +++++++++++++++++---
 .../apache/phoenix/flume/sink/PhoenixSink.java  |  7 +--
 pom.xml                                         |  5 +++
 12 files changed, 62 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-core/pom.xml b/phoenix-core/pom.xml
index ff3f5d8..0a8b61b 100644
--- a/phoenix-core/pom.xml
+++ b/phoenix-core/pom.xml
@@ -325,6 +325,10 @@
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-csv</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.google.code.findbugs</groupId>
+      <artifactId>jsr305</artifactId>
+    </dependency>
   </dependencies>
 
   <profiles>

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java 
b/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
index 301c452..f4be508 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
@@ -17,8 +17,6 @@
  */
 package org.apache.phoenix.cache;
 
-import static com.google.common.io.Closeables.closeQuietly;
-
 import java.io.Closeable;
 import java.io.IOException;
 import java.sql.SQLException;
@@ -319,7 +317,7 @@ public class ServerCacheClient {
                        LOG.warn("Unable to remove hash cache for " + 
remainingOnServers, lastThrowable);
                }
        } finally {
-               closeQuietly(iterateOverTable);
+               Closeables.closeQuietly(iterateOverTable);
        }
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillFile.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillFile.java 
b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillFile.java
index 31ad5ce..8dd64d0 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillFile.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillFile.java
@@ -28,11 +28,11 @@ import java.nio.channels.FileChannel.MapMode;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.phoenix.util.Closeables;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.Maps;
-import com.google.common.io.Closeables;
 
 /**
  * This class abstracts a SpillFile It is a accessible on a per page basis

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillManager.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillManager.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillManager.java
index 3f4bf35..2fbea5c 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillManager.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillManager.java
@@ -40,12 +40,12 @@ import org.apache.phoenix.schema.KeyValueSchema;
 import org.apache.phoenix.schema.ValueBitSet;
 import org.apache.phoenix.schema.tuple.SingleKeyValueTuple;
 import org.apache.phoenix.schema.tuple.Tuple;
+import org.apache.phoenix.util.Closeables;
 import org.apache.phoenix.util.KeyValueUtil;
 import org.apache.phoenix.util.TupleUtil;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-import com.google.common.io.Closeables;
 
 /**
  * Class servers as an adapter between the in-memory LRU cache and the Spill 
data structures. It

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillableGroupByCache.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillableGroupByCache.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillableGroupByCache.java
index 7caa388..ce18cc2 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillableGroupByCache.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/cache/aggcache/SpillableGroupByCache.java
@@ -51,11 +51,11 @@ import 
org.apache.phoenix.expression.aggregator.ServerAggregators;
 import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr;
 import org.apache.phoenix.memory.InsufficientMemoryException;
 import org.apache.phoenix.memory.MemoryManager.MemoryChunk;
+import org.apache.phoenix.util.Closeables;
 import org.apache.phoenix.util.KeyValueUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.io.Closeables;
 
 /**
  * The main entry point is in GroupedAggregateRegionObserver. It instantiates 
a SpillableGroupByCache and invokes a

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java 
b/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
index dc262ce..8336f3e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
@@ -67,6 +67,7 @@ import org.apache.phoenix.schema.PTableType;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.TableNotFoundException;
 import org.apache.phoenix.schema.TableRef;
+import org.apache.phoenix.util.Closeables;
 import org.apache.phoenix.util.SchemaUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -75,7 +76,6 @@ import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Lists;
-import com.google.common.io.Closeables;
 
 /**
  * Validates FROM clause and builds a ColumnResolver for resolving column 
references

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/GroupedAggregateRegionObserver.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/GroupedAggregateRegionObserver.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/GroupedAggregateRegionObserver.java
index 54e1eb2..c352e9a 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/GroupedAggregateRegionObserver.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/GroupedAggregateRegionObserver.java
@@ -66,6 +66,7 @@ import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.MultiKeyValueTuple;
+import org.apache.phoenix.util.Closeables;
 import org.apache.phoenix.util.IndexUtil;
 import org.apache.phoenix.util.KeyValueUtil;
 import org.apache.phoenix.util.ScanUtil;
@@ -74,9 +75,7 @@ import org.apache.phoenix.util.TupleUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.google.common.io.Closeables;
 
 /**
  * Region observer that aggregates grouped rows (i.e. SQL query with GROUP BY 
clause)

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableResultIterator.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableResultIterator.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableResultIterator.java
index 756861b..97ff563 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableResultIterator.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableResultIterator.java
@@ -24,10 +24,10 @@ import java.util.List;
 import org.apache.hadoop.hbase.client.HTableInterface;
 import org.apache.hadoop.hbase.client.Scan;
 
-import com.google.common.io.Closeables;
 import org.apache.phoenix.compile.StatementContext;
 import org.apache.phoenix.schema.TableRef;
 import org.apache.phoenix.schema.tuple.Tuple;
+import org.apache.phoenix.util.Closeables;
 import org.apache.phoenix.util.ServerUtil;
 
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
index 043c8fd..7e1e0a5 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
@@ -17,7 +17,6 @@
  */
 package org.apache.phoenix.query;
 
-import static com.google.common.io.Closeables.closeQuietly;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CYCLE_FLAG;
 import static 
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LIMIT_REACHED_FLAG;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.MAX_VALUE;
@@ -125,6 +124,7 @@ import org.apache.phoenix.schema.SequenceKey;
 import org.apache.phoenix.schema.TableAlreadyExistsException;
 import org.apache.phoenix.schema.TableNotFoundException;
 import org.apache.phoenix.util.ByteUtil;
+import org.apache.phoenix.util.Closeables;
 import org.apache.phoenix.util.ConfigUtil;
 import org.apache.phoenix.util.MetaDataUtil;
 import org.apache.phoenix.util.PhoenixContextExecutor;
@@ -140,7 +140,6 @@ import com.google.common.base.Throwables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import com.google.common.io.Closeables;
 import com.google.protobuf.HBaseZeroCopyByteString;
 
 
@@ -1716,7 +1715,7 @@ public class ConnectionQueryServicesImpl extends 
DelegateQueryServices implement
             } catch (IOException e) {
                 throw ServerUtil.parseServerException(e);
             } finally {
-                closeQuietly(htable);
+                Closeables.closeQuietly(htable);
             }
         } finally {
             sequence.getLock().unlock();
@@ -1742,7 +1741,7 @@ public class ConnectionQueryServicesImpl extends 
DelegateQueryServices implement
             } catch (IOException e) {
                 throw ServerUtil.parseServerException(e);
             } finally {
-                closeQuietly(htable);
+                Closeables.closeQuietly(htable);
             }
         } finally {
             sequence.getLock().unlock();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-core/src/main/java/org/apache/phoenix/util/Closeables.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/Closeables.java 
b/phoenix-core/src/main/java/org/apache/phoenix/util/Closeables.java
index c4b15dc..3046929 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/Closeables.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/Closeables.java
@@ -17,11 +17,16 @@
  */
 package org.apache.phoenix.util;
 
+import com.google.common.collect.Iterables;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nullable;
 import java.io.Closeable;
 import java.io.IOException;
-import java.util.*;
-
-import com.google.common.collect.Iterables;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
 
 
 /**
@@ -29,10 +34,38 @@ import com.google.common.collect.Iterables;
  * 
  */
 public class Closeables {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(Closeables.class);
+
     /** Not constructed */
     private Closeables() { }
     
     /**
+     * Close a {@code Closeable}, returning an {@code IOException} if it 
occurs while closing
+     * instead of throwing it. This is nearly a clone of the Guava 
Closeables.closeQuietly method
+     * which has long since been removed from Guava.
+     *
+     * Use of this method should be avoided -- quietly swallowing IOExceptions 
(particularly on
+     * Closeables that are being written to) is a code smell. Use of the 
equivalent method in
+     * Guava was done for this reason.
+     *
+     * @param closeable the Closeable to be closed, can be null
+     * @return the IOException if one was thrown, otherwise {@code null}
+     */
+    public static IOException closeQuietly(@Nullable Closeable closeable) {
+        if (closeable == null) {
+            return null;
+        }
+        try {
+            closeable.close();
+            return null;
+        } catch (IOException e) {
+            LOGGER.error("Error closing " + closeable, e);
+            return e;
+        }
+    }
+
+    /**
      * Allows you to close as many of the {@link Closeable}s as possible.
      * 
      * If any of the close's fail with an IOException, those exception(s) will
@@ -48,11 +81,10 @@ public class Closeables {
         
         LinkedList<IOException> exceptions = null;
         for (Closeable closeable : iterable) {
-            try {
-                closeable.close();
-            } catch (IOException x) {
+            IOException ioe = closeQuietly(closeable);
+            if (ioe != null) {
                 if (exceptions == null) exceptions = new 
LinkedList<IOException>();
-                exceptions.add(x);
+                exceptions.add(ioe);
             }
         }
         

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/phoenix-flume/src/main/java/org/apache/phoenix/flume/sink/PhoenixSink.java
----------------------------------------------------------------------
diff --git 
a/phoenix-flume/src/main/java/org/apache/phoenix/flume/sink/PhoenixSink.java 
b/phoenix-flume/src/main/java/org/apache/phoenix/flume/sink/PhoenixSink.java
index efcbef6..f9c929d 100644
--- a/phoenix-flume/src/main/java/org/apache/phoenix/flume/sink/PhoenixSink.java
+++ b/phoenix-flume/src/main/java/org/apache/phoenix/flume/sink/PhoenixSink.java
@@ -39,7 +39,6 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.common.base.Stopwatch;
 import com.google.common.base.Throwables;
 import com.google.common.collect.Lists;
 
@@ -140,7 +139,7 @@ public final class PhoenixSink  extends AbstractSink 
implements Configurable {
         Channel channel = getChannel();
         Transaction transaction = null;
         List<Event>  events = 
Lists.newArrayListWithExpectedSize(this.batchSize); 
-        Stopwatch watch = new Stopwatch().start();
+        long startTime = System.nanoTime();
         try {
             transaction = channel.getTransaction();
             transaction.begin();
@@ -194,7 +193,9 @@ public final class PhoenixSink  extends AbstractSink 
implements Configurable {
             throw new EventDeliveryException("Failed to persist message", e);
         }
         finally {
-            logger.error(String.format("Time taken to process [%s] events was 
[%s] seconds",events.size(),watch.stop().elapsedTime(TimeUnit.SECONDS)));
+            logger.info(String.format("Time taken to process [%s] events was 
[%s] seconds",
+                    events.size(),
+                    TimeUnit.SECONDS.convert(System.nanoTime() - startTime, 
TimeUnit.NANOSECONDS)));
             if( transaction != null ) {
                 transaction.close();
             }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/89262f2b/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 42184d4..4ffb4ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -476,6 +476,11 @@
         <scope>compile</scope>
       </dependency>
       <dependency>
+        <groupId>com.google.code.findbugs</groupId>
+        <artifactId>jsr305</artifactId>
+        <version>2.0.1</version>
+      </dependency>
+      <dependency>
         <groupId>org.codehaus.jackson</groupId>
         <artifactId>jackson-jaxrs</artifactId>
         <version>${jackson.version}</version>

Reply via email to