You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by qm...@apache.org on 2018/12/06 09:28:50 UTC

[incubator-druid] branch master updated: add close method in Cache interface (#6540)

This is an automated email from the ASF dual-hosted git repository.

qmm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new e8dd371  add close method in Cache interface (#6540)
e8dd371 is described below

commit e8dd3716b82dcb2a11c8a2fc4307e5fef4166de8
Author: Mingming Qiu <cs...@gmail.com>
AuthorDate: Thu Dec 6 17:28:41 2018 +0800

    add close method in Cache interface (#6540)
    
    * add close method in Cache interface
    
    * address comments
    
    * address comments and fix travis-ci
    
    * use try-finally
---
 .../org/apache/druid/client/cache/RedisCache.java  |  9 ++++++
 .../java/org/apache/druid/client/cache/Cache.java  |  3 +-
 .../apache/druid/client/cache/CaffeineCache.java   |  9 ++++++
 .../org/apache/druid/client/cache/HybridCache.java | 34 ++++++++++++++++++++--
 .../org/apache/druid/client/cache/MapCache.java    | 11 +++++++
 .../apache/druid/client/cache/MemcachedCache.java  |  8 +++++
 .../druid/client/CachingQueryRunnerTest.java       |  5 ++++
 7 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/extensions-contrib/redis-cache/src/main/java/org/apache/druid/client/cache/RedisCache.java b/extensions-contrib/redis-cache/src/main/java/org/apache/druid/client/cache/RedisCache.java
index bf9fb42..817a217 100644
--- a/extensions-contrib/redis-cache/src/main/java/org/apache/druid/client/cache/RedisCache.java
+++ b/extensions-contrib/redis-cache/src/main/java/org/apache/druid/client/cache/RedisCache.java
@@ -21,6 +21,7 @@ package org.apache.druid.client.cache;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
+import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
@@ -29,6 +30,7 @@ import redis.clients.jedis.JedisPool;
 import redis.clients.jedis.JedisPoolConfig;
 import redis.clients.jedis.exceptions.JedisException;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -148,6 +150,13 @@ public class RedisCache implements Cache
   }
 
   @Override
+  @LifecycleStop
+  public void close() throws IOException
+  {
+    pool.close();
+  }
+
+  @Override
   public CacheStats getStats()
   {
     return new CacheStats(
diff --git a/server/src/main/java/org/apache/druid/client/cache/Cache.java b/server/src/main/java/org/apache/druid/client/cache/Cache.java
index 725a880..baeea8f 100644
--- a/server/src/main/java/org/apache/druid/client/cache/Cache.java
+++ b/server/src/main/java/org/apache/druid/client/cache/Cache.java
@@ -24,13 +24,14 @@ import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 
 import javax.annotation.Nullable;
+import java.io.Closeable;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.Map;
 
 /**
  */
-public interface Cache
+public interface Cache extends Closeable
 {
   @Nullable
   byte[] get(NamedKey key);
diff --git a/server/src/main/java/org/apache/druid/client/cache/CaffeineCache.java b/server/src/main/java/org/apache/druid/client/cache/CaffeineCache.java
index 2095184..6ab0eb4 100644
--- a/server/src/main/java/org/apache/druid/client/cache/CaffeineCache.java
+++ b/server/src/main/java/org/apache/druid/client/cache/CaffeineCache.java
@@ -28,11 +28,13 @@ import com.google.common.collect.Maps;
 import net.jpountz.lz4.LZ4Compressor;
 import net.jpountz.lz4.LZ4Factory;
 import net.jpountz.lz4.LZ4FastDecompressor;
+import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
 import org.apache.druid.utils.JvmUtils;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Map;
 import java.util.OptionalLong;
@@ -116,6 +118,13 @@ public class CaffeineCache implements org.apache.druid.client.cache.Cache
   }
 
   @Override
+  @LifecycleStop
+  public void close() throws IOException
+  {
+    cache.cleanUp();
+  }
+
+  @Override
   public org.apache.druid.client.cache.CacheStats getStats()
   {
     final CacheStats stats = cache.stats();
diff --git a/server/src/main/java/org/apache/druid/client/cache/HybridCache.java b/server/src/main/java/org/apache/druid/client/cache/HybridCache.java
index eb74d33..fcd211a 100644
--- a/server/src/main/java/org/apache/druid/client/cache/HybridCache.java
+++ b/server/src/main/java/org/apache/druid/client/cache/HybridCache.java
@@ -20,10 +20,13 @@
 package org.apache.druid.client.cache;
 
 import com.google.common.collect.Sets;
+import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 
 import javax.annotation.Nullable;
+import java.io.Closeable;
+import java.io.IOException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -127,8 +130,35 @@ public class HybridCache implements Cache
   @Override
   public void close(String namespace)
   {
-    level1.close(namespace);
-    level2.close(namespace);
+    Throwable t = null;
+    try {
+      level1.close(namespace);
+    }
+    catch (Throwable t1) {
+      t = t1;
+      throw t1;
+    }
+    finally {
+      if (t != null) {
+        try {
+          level2.close(namespace);
+        }
+        catch (Throwable t2) {
+          t.addSuppressed(t2);
+        }
+      } else {
+        level2.close(namespace);
+      }
+    }
+  }
+
+  @Override
+  @LifecycleStop
+  public void close() throws IOException
+  {
+    try (Closeable closeable1 = level1; Closeable closeable2 = level2) {
+      // Just for closing
+    }
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/druid/client/cache/MapCache.java b/server/src/main/java/org/apache/druid/client/cache/MapCache.java
index 2af7971..c8cf0e9 100644
--- a/server/src/main/java/org/apache/druid/client/cache/MapCache.java
+++ b/server/src/main/java/org/apache/druid/client/cache/MapCache.java
@@ -20,8 +20,10 @@
 package org.apache.druid.client.cache;
 
 import com.google.common.primitives.Ints;
+import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -144,6 +146,15 @@ public class MapCache implements Cache
     }
   }
 
+  @Override
+  @LifecycleStop
+  public void close() throws IOException
+  {
+    baseMap.clear();
+    byteCountingLRUMap.clear();
+    namespaceId.clear();
+  }
+
   private byte[] getNamespaceId(final String identifier)
   {
     synchronized (namespaceId) {
diff --git a/server/src/main/java/org/apache/druid/client/cache/MemcachedCache.java b/server/src/main/java/org/apache/druid/client/cache/MemcachedCache.java
index 3afa1dd..9087d77 100644
--- a/server/src/main/java/org/apache/druid/client/cache/MemcachedCache.java
+++ b/server/src/main/java/org/apache/druid/client/cache/MemcachedCache.java
@@ -46,6 +46,7 @@ import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.druid.collections.ResourceHolder;
 import org.apache.druid.collections.StupidResourceHolder;
 import org.apache.druid.java.util.common.StringUtils;
+import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
 import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
@@ -596,6 +597,13 @@ public class MemcachedCache implements Cache
     // no resources to cleanup
   }
 
+  @Override
+  @LifecycleStop
+  public void close() throws IOException
+  {
+    monitor.stop();
+  }
+
   public static final int MAX_PREFIX_LENGTH =
       MemcachedClientIF.MAX_KEY_LENGTH
       - 40 // length of namespace hash
diff --git a/server/src/test/java/org/apache/druid/client/CachingQueryRunnerTest.java b/server/src/test/java/org/apache/druid/client/CachingQueryRunnerTest.java
index 12c653a..c5f6403 100644
--- a/server/src/test/java/org/apache/druid/client/CachingQueryRunnerTest.java
+++ b/server/src/test/java/org/apache/druid/client/CachingQueryRunnerTest.java
@@ -254,6 +254,11 @@ public class CachingQueryRunnerTest
       }
 
       @Override
+      public void close() throws IOException
+      {
+      }
+
+      @Override
       public CacheStats getStats()
       {
         return null;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org