You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2017/03/03 20:25:06 UTC

[2/3] tomee git commit: Simplify stop & cleanups

Simplify stop & cleanups


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

Branch: refs/heads/master
Commit: de09ee0b365a28d0a347732a3c8347d0c52b5108
Parents: 7f63e5e
Author: AndyGee <an...@gmx.de>
Authored: Fri Mar 3 21:23:28 2017 +0100
Committer: AndyGee <an...@gmx.de>
Committed: Fri Mar 3 21:23:28 2017 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/openejb/util/Pool.java | 53 ++++++++------------
 .../java/org/apache/openejb/util/PoolTest.java  |  1 +
 2 files changed, 21 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/de09ee0b/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java b/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
index b2bc9b2..877598b 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
@@ -152,15 +152,15 @@ public class Pool<T> {
     }
 
     public void stop() {
-        final ScheduledFuture<?> future = this.future.get();
-        if (future != null && this.future.compareAndSet(future, null)
+        final ScheduledFuture<?> future = this.future.getAndSet(null);
+        if (future != null
                 && !future.isDone() && !future.isCancelled()
                 && !future.cancel(false)) {
             Logger.getLogger(Pool.class.getName()).log(Level.WARNING, "Pool scheduler task termination timeout expired");
         }
 
-        final ScheduledExecutorService scheduler = this.scheduler.get();
-        if (scheduler != null && this.scheduler.compareAndSet(scheduler, null)) {
+        final ScheduledExecutorService scheduler = this.scheduler.getAndSet(null);
+        if (scheduler != null) {
             scheduler.shutdown();
             try {
                 if (!scheduler.awaitTermination(10, SECONDS)) { // should last something like 0s max since we killed the task
@@ -370,7 +370,7 @@ public class Pool<T> {
 
         try {
             if (entry == null) {
-                return added;
+                return false;
             }
 
             if (!sweeper) {
@@ -467,18 +467,8 @@ public class Pool<T> {
 
     public boolean close(final long timeout, final TimeUnit unit) throws InterruptedException {
 
-        final ScheduledExecutorService ses = this.scheduler.getAndSet(null);
-
-        if (null != ses) {
-            try {
-                ses.shutdown();
-                if(!ses.awaitTermination(timeout, unit)){
-                    Logger.getLogger(Pool.class.getName()).log(Level.WARNING, "Pool scheduler termination timeout expired");
-                }
-            } catch (final Exception e) {
-                //no-op
-            }
-        }
+        // Stop the sweeper thread
+        stop();
 
         // drain all keys so no new instances will be accepted into the pool
         while (instances.tryAcquire()) {
@@ -498,9 +488,6 @@ public class Pool<T> {
             //Ignore
         }
 
-        // Stop the sweeper thread
-        stop();
-
         // Drain all leases
         if (!(available instanceof Overdraft)) {
             while (available.tryAcquire()) {
@@ -544,12 +531,12 @@ public class Pool<T> {
         private long used;
         private final int version;
         private final SoftReference<Instance> soft;
-        private final AtomicReference<Instance> hard = new AtomicReference<Instance>();
+        private final AtomicReference<Instance> hard = new AtomicReference<>();
 
         // Added this so the soft reference isn't collected
         // after the Entry instance is returned from a "pop" method
         // Also acts as an "inUse" boolean
-        private final AtomicReference<Instance> active = new AtomicReference<Instance>();
+        private final AtomicReference<Instance> active = new AtomicReference<>();
 
         /**
          * Constructor is private so that it is impossible for an Entry object
@@ -569,8 +556,8 @@ public class Pool<T> {
             }
             final Instance instance = new Instance(obj);
             this.soft = garbageCollection ?
-                new SoftReference<Instance>(instance) :
-                new HardReference<Instance>(instance);
+                    new SoftReference<>(instance) :
+                    new HardReference<>(instance);
             this.version = poolVersion.get();
             this.active.set(instance);
             this.created = now() + offset;
@@ -685,14 +672,14 @@ public class Pool<T> {
 
             final long now = now();
 
-            final List<Entry> entries = new ArrayList<Entry>(max);
+            final List<Entry> entries = new ArrayList<>(max);
 
             // Pull all the entries from the pool
             try {
                 while (true) {
                     final Entry entry = pop(0, MILLISECONDS, false);
                     if (entry == null) {
-                        push(entry, true);
+                        push(null, true);
                         break;
                     }
                     entries.add(entry);
@@ -703,7 +690,7 @@ public class Pool<T> {
                 // pool has been drained
             }
 
-            final List<Expired> expiredList = new ArrayList<Expired>(max);
+            final List<Expired> expiredList = new ArrayList<>(max);
 
             { // Expire aged instances, enforce pool "versioning"
 
@@ -793,7 +780,7 @@ public class Pool<T> {
             // If there are any "min" pool instances left over
             // we need to queue up creation of a replacement
 
-            final List<Expired> replace = new ArrayList<Expired>();
+            final List<Expired> replace = new ArrayList<>();
 
             for (final Expired expired : expiredList) {
                 executor.execute(expired.entry.active().discard(expired.event));
@@ -804,14 +791,14 @@ public class Pool<T> {
             }
 
             for (int i = 0; i < replace.size(); i++) {
-                final long offset = maxAge > 0 ? (long) (maxAge / replace.size() * i * maxAgeOffset) % maxAge : 0l;
+                final long offset = maxAge > 0 ? (long) (maxAge / replace.size() * i * maxAgeOffset) % maxAge : 0L;
                 executor.execute(new Replace(replace.get(i).entry, offset));
             }
         }
 
     }
 
-    public static enum Event {
+    public enum Event {
         FULL, IDLE, AGED, FLUSHED, GC
     }
 
@@ -1246,11 +1233,11 @@ public class Pool<T> {
             this.scheduledExecutorService = scheduledExecutorService;
         }
 
+        @SuppressWarnings("unchecked")
         public Pool<T> build() {
-            //noinspection unchecked
             final Pool pool = new Pool(max, min, strict, maxAge.getTime(MILLISECONDS), idleTimeout.getTime(MILLISECONDS), interval.getTime(MILLISECONDS), executor, supplier, replaceAged, maxAgeOffset, this.garbageCollection, replaceFlushed);
-            if (scheduledExecutorService != null) {
-                pool.scheduler.set(scheduledExecutorService);
+            if (this.scheduledExecutorService != null) {
+                pool.scheduler.set(this.scheduledExecutorService);
             }
             return pool;
         }

http://git-wip-us.apache.org/repos/asf/tomee/blob/de09ee0b/container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java b/container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java
index 6dc08cd..fbde94f 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/util/PoolTest.java
@@ -321,6 +321,7 @@ public class PoolTest extends TestCase {
 
         final long start = System.currentTimeMillis();
         assertTrue(pool.close(10, TimeUnit.SECONDS));
+        assertFalse(pool.running());
         final long time = System.currentTimeMillis() - start;
 
         // All instances should have been removed