You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2016/10/10 12:55:39 UTC

svn commit: r1764080 - in /qpid/java/trunk: bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/ broker-core/src/main/java/org/apache/qpid/server/model/adapter/ broker-core/src/main/java/org/apache/qpid/server/store/ broker-core/src/main/jav...

Author: lquack
Date: Mon Oct 10 12:55:39 2016
New Revision: 1764080

URL: http://svn.apache.org/viewvc?rev=1764080&view=rev
Log:
QPID-7447: [Java Broker] Performance Improvements

* Stop taking defensive copy in AMQConnection#getSessionModels()
* Use Long instead of Date in TransactionTimeoutTicker
* Prevent unnecessary iterator alloctions in SelectorThread when lists are empty

Modified:
    qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
    qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java
    qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java

Modified: qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java (original)
+++ qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java Mon Oct 10 12:55:39 2016
@@ -1348,6 +1348,7 @@ public abstract class AbstractBDBMessage
 
         private void doPostCommitActions()
         {
+            // QPID-7447: prevent unnecessary allocation of empty iterator
             if (!_postCommitActions.isEmpty())
             {
                 for (Runnable action : _postCommitActions)

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java Mon Oct 10 12:55:39 2016
@@ -216,20 +216,20 @@ public final class SessionAdapter extend
             final VirtualHost virtualhost = (VirtualHost) addressSpace;
             final List<Ticker> tickers = new ArrayList<>(4);
 
-            final Supplier<Date> transactionStartTimeSupplier = new Supplier<Date>()
+            final Supplier<Long> transactionStartTimeSupplier = new Supplier<Long>()
             {
                 @Override
-                public Date get()
+                public Long get()
                 {
-                    return SessionAdapter.this.getTransactionStartTime();
+                    return SessionAdapter.this._session.getTransactionStartTime();
                 }
             };
-            final Supplier<Date> transactionUpdateTimeSupplier = new Supplier<Date>()
+            final Supplier<Long> transactionUpdateTimeSupplier = new Supplier<Long>()
             {
                 @Override
-                public Date get()
+                public Long get()
                 {
-                    return SessionAdapter.this.getTransactionUpdateTime();
+                    return SessionAdapter.this._session.getTransactionUpdateTime();
                 }
             };
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java Mon Oct 10 12:55:39 2016
@@ -1193,6 +1193,7 @@ public abstract class AbstractJDBCMessag
 
         private void doPostCommitActions()
         {
+            // QPID-7447: prevent unnecessary allocation of empty iterator
             if (!_postCommitActions.isEmpty())
             {
                 for (Runnable action : _postCommitActions)

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java Mon Oct 10 12:55:39 2016
@@ -23,7 +23,7 @@ package org.apache.qpid.server.transport
 import java.net.SocketAddress;
 import java.security.AccessControlContext;
 import java.security.Principal;
-import java.util.List;
+import java.util.Collection;
 
 import javax.security.auth.Subject;
 
@@ -83,11 +83,11 @@ public interface AMQPConnection<C extend
     void stopConnection();
 
     /**
-     * Returns the a list of session models.  Required to return a copy.
+     * Returns the a view of session models.  Callers may not modify the returned view Required to return a copy.
      *
      * @return list of sessions
      */
-    List<? extends AMQSessionModel<?>> getSessionModels();
+    Collection<? extends AMQSessionModel<?>> getSessionModels();
 
     void resetStatistics();
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java Mon Oct 10 12:55:39 2016
@@ -32,6 +32,7 @@ public class AggregateTicker implements
     public int getTimeToNextTick(final long currentTime)
     {
         int nextTick = Integer.MAX_VALUE;
+        // QPID-7447: prevent unnecessary allocation of empty iterator
         if (!_tickers.isEmpty())
         {
             for (Ticker ticker : _tickers)
@@ -46,9 +47,13 @@ public class AggregateTicker implements
     public int tick(final long currentTime)
     {
         int nextTick = Integer.MAX_VALUE;
-        for(Ticker ticker : _tickers)
+        // QPID-7447: prevent unnecessary allocation of empty iterator
+        if (!_tickers.isEmpty())
         {
-            nextTick = Math.min(ticker.tick(currentTime), nextTick);
+            for(Ticker ticker : _tickers)
+            {
+                nextTick = Math.min(ticker.tick(currentTime), nextTick);
+            }
         }
         return nextTick;
     }
@@ -71,6 +76,7 @@ public class AggregateTicker implements
     @Override
     public void notifySchedulingDelay(final long schedulingDelay)
     {
+        // QPID-7447: prevent unnecessary allocation of empty iterator
         if (!_tickers.isEmpty())
         {
             for (Ticker ticker : _tickers)

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java Mon Oct 10 12:55:39 2016
@@ -150,7 +150,8 @@ class SelectorThread extends Thread
                 }
             }
 
-            return toBeScheduled;
+            // QPID-7447: prevent unnecessary allocation of empty iterator
+            return toBeScheduled.isEmpty() ? Collections.<NonBlockingConnection>emptyList() : toBeScheduled;
         }
 
         private List<NonBlockingConnection> processSelectionKeys()
@@ -261,7 +262,8 @@ class SelectorThread extends Thread
                 }
             }
 
-            return unregisterableConnections;
+            // QPID-7447: prevent unnecessary allocation of empty iterator
+            return unregisterableConnections.isEmpty() ? Collections.<NonBlockingConnection>emptyList() : unregisterableConnections;
         }
 
         private void performSelect()

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java Mon Oct 10 12:55:39 2016
@@ -21,7 +21,6 @@
 
 package org.apache.qpid.server.transport;
 
-import java.util.Date;
 import java.util.concurrent.atomic.AtomicLong;
 
 import com.google.common.base.Supplier;
@@ -33,7 +32,7 @@ public class TransactionTimeoutTicker im
 {
     private final long _timeoutValue;
     private final Action<Long> _notification;
-    private final Supplier<Date> _timeSupplier;
+    private final Supplier<Long> _timeSupplier;
     private final long _notificationRepeatPeriod;
 
     private AtomicLong _accumulatedSchedulingDelay = new AtomicLong();
@@ -44,12 +43,12 @@ public class TransactionTimeoutTicker im
 
     public TransactionTimeoutTicker(long timeoutValue,
                                     long notificationRepeatPeriod,
-                                    Supplier<Date> timeStampSupplier,
+                                    Supplier<Long> timeStampSupplier,
                                     Action<Long> notification)
     {
         _timeoutValue = timeoutValue;
         _notification = notification;
-        _lastTransactionTimeStamp = timeStampSupplier.get().getTime();
+        _lastTransactionTimeStamp = timeStampSupplier.get();
         _timeSupplier = timeStampSupplier;
         _notificationRepeatPeriod = notificationRepeatPeriod;
     }
@@ -57,7 +56,7 @@ public class TransactionTimeoutTicker im
     @Override
     public int getTimeToNextTick(final long currentTime)
     {
-        final long transactionTimeStamp = _timeSupplier.get().getTime();
+        final long transactionTimeStamp = _timeSupplier.get();
         int tick = calculateTimeToNextTick(currentTime, transactionTimeStamp);
         if (tick <= 0 && _nextNotificationTime > currentTime)
         {
@@ -69,7 +68,7 @@ public class TransactionTimeoutTicker im
     @Override
     public int tick(final long currentTime)
     {
-        final long transactionTimeStamp = _timeSupplier.get().getTime();
+        final long transactionTimeStamp = _timeSupplier.get();
         int tick = calculateTimeToNextTick(currentTime, transactionTimeStamp);
         if (tick <= 0)
         {

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java Mon Oct 10 12:55:39 2016
@@ -29,8 +29,6 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.Date;
-
 import com.google.common.base.Supplier;
 import org.mockito.InOrder;
 
@@ -41,7 +39,7 @@ public class TransactionTimeoutTickerTes
 {
 
     private TransactionTimeoutTicker _ticker;
-    private Supplier<Date> _dateSupplier = mock(Supplier.class);
+    private Supplier<Long> _dateSupplier = mock(Supplier.class);
     private Action<Long> _notificationAction = mock(Action.class);
     private long _timeoutValue = 100;
     private long _notificationRepeatPeriod = 5000;
@@ -50,7 +48,7 @@ public class TransactionTimeoutTickerTes
     {
         final long timeNow = System.currentTimeMillis();
 
-        when(_dateSupplier.get()).thenReturn(new Date(0));
+        when(_dateSupplier.get()).thenReturn(0L);
 
         _ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
                                                _dateSupplier,
@@ -68,7 +66,7 @@ public class TransactionTimeoutTickerTes
         final long timeNow = System.currentTimeMillis();
         final long transactionTime = timeNow - 90;
 
-        when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+        when(_dateSupplier.get()).thenReturn(transactionTime);
 
         _ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
                                                _dateSupplier,
@@ -87,7 +85,7 @@ public class TransactionTimeoutTickerTes
         final long timeNow = System.currentTimeMillis();
         final long transactionTime = timeNow - 90;
 
-        when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+        when(_dateSupplier.get()).thenReturn(transactionTime);
 
         _ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
                                                _dateSupplier,
@@ -109,7 +107,7 @@ public class TransactionTimeoutTickerTes
         final long firstTransactionTime = timeNow - 10;
 
         // First transaction
-        when(_dateSupplier.get()).thenReturn(new Date(firstTransactionTime));
+        when(_dateSupplier.get()).thenReturn(firstTransactionTime);
 
         _ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
                                                _dateSupplier,
@@ -124,7 +122,7 @@ public class TransactionTimeoutTickerTes
         timeNow += 100;
         final long secondTransactionTime = timeNow - 5;
 
-        when(_dateSupplier.get()).thenReturn(new Date(secondTransactionTime));
+        when(_dateSupplier.get()).thenReturn(secondTransactionTime);
 
         final int expectedTickForSecondTransaction = 95;
         assertTickTime("Unexpected ticker value for second transaction",
@@ -140,7 +138,7 @@ public class TransactionTimeoutTickerTes
         final long firstTransactionTime = timeNow - 10;
 
         // First transaction
-        when(_dateSupplier.get()).thenReturn(new Date(firstTransactionTime));
+        when(_dateSupplier.get()).thenReturn(firstTransactionTime);
 
         _ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
                                                _dateSupplier,
@@ -156,7 +154,7 @@ public class TransactionTimeoutTickerTes
         timeNow += 100;
         final long secondTransactionTime = timeNow - 5;
 
-        when(_dateSupplier.get()).thenReturn(new Date(secondTransactionTime));
+        when(_dateSupplier.get()).thenReturn(secondTransactionTime);
 
         final int expectedTickForSecondTransaction = 95;
         assertTickTime("Unexpected ticker value for second transaction",
@@ -171,7 +169,7 @@ public class TransactionTimeoutTickerTes
         long timeNow = System.currentTimeMillis();
         final long transactionTime = timeNow - 110;
 
-        when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+        when(_dateSupplier.get()).thenReturn(transactionTime);
 
         _ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
                                                _dateSupplier,
@@ -192,7 +190,7 @@ public class TransactionTimeoutTickerTes
         long timeNow = System.currentTimeMillis();
         final long transactionTime = timeNow - 110;
 
-        when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+        when(_dateSupplier.get()).thenReturn(transactionTime);
 
         _ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
                                                _dateSupplier,

Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java Mon Oct 10 12:55:39 2016
@@ -24,9 +24,9 @@ import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -313,7 +313,7 @@ public class AMQPConnection_0_10 extends
         return _connection.getRemoteContainerName();
     }
 
-    public List<ServerSession> getSessionModels()
+    public Collection<? extends AMQSessionModel<?>> getSessionModels()
     {
         return _connection.getSessionModels();
     }

Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java Mon Oct 10 12:55:39 2016
@@ -28,6 +28,8 @@ import java.security.AccessController;
 import java.security.Principal;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
@@ -335,16 +337,16 @@ public class ServerConnection extends Co
         super.removeSession(ssn);
     }
 
-    public List<ServerSession> getSessionModels()
+    public Collection<? extends ServerSession> getSessionModels()
     {
-        List<ServerSession> sessions = new ArrayList<>();
-        for (Session ssn : getChannels())
-        {
-            sessions.add((ServerSession) ssn);
-        }
-        return sessions;
+        return Collections.unmodifiableCollection(getChannels());
     }
 
+    @Override
+    protected Collection<ServerSession> getChannels()
+    {
+        return  (Collection<ServerSession>) super.getChannels();
+    }
 
     /**
      * @return authorizedSubject
@@ -502,11 +504,11 @@ public class ServerConnection extends Co
 
     private class ProcessPendingIterator implements Iterator<Runnable>
     {
-        private final List<? extends AMQSessionModel<?>> _sessionsWithPending;
+        private final Collection<? extends ServerSession> _sessionsWithPending;
         private Iterator<? extends AMQSessionModel<?>> _sessionIterator;
         private ProcessPendingIterator()
         {
-            _sessionsWithPending = getSessionModels();
+            _sessionsWithPending = new ArrayList<>(getSessionModels());
             _sessionIterator = _sessionsWithPending.iterator();
         }
 

Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java Mon Oct 10 12:55:39 2016
@@ -1209,6 +1209,7 @@ public class ServerSession extends Sessi
             consumerListNeedsRefreshing = true;
         }
 
+        // QPID-7447: prevent unnecessary allocation of empty iterator
         Iterator<ConsumerTarget> iter = _consumersWithPendingWork.isEmpty() ? Collections.<ConsumerTarget>emptyIterator() : _consumersWithPendingWork.iterator();
 
         boolean consumerHasMoreWork = false;

Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java Mon Oct 10 12:55:39 2016
@@ -3782,6 +3782,7 @@ public class AMQChannel
             consumerListNeedsRefreshing = true;
         }
 
+        // QPID-7447: prevent unnecessary allocation of empty iterator
         Iterator<ConsumerTarget_0_8> iter = _consumersWithPendingWork.isEmpty() ? Collections.<ConsumerTarget_0_8>emptyIterator() : _consumersWithPendingWork.iterator();
 
         boolean consumerHasMoreWork = false;

Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java Mon Oct 10 12:55:39 2016
@@ -31,6 +31,7 @@ import java.security.AccessController;
 import java.security.Principal;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -849,9 +850,9 @@ public class AMQPConnection_0_8Impl
     }
 
     @Override
-    public List<AMQChannel> getSessionModels()
+    public Collection<? extends AMQChannel> getSessionModels()
     {
-        return new ArrayList<>(_channelMap.values());
+        return Collections.unmodifiableCollection(_channelMap.values());
     }
 
     @Override
@@ -1414,11 +1415,11 @@ public class AMQPConnection_0_8Impl
 
     private class ProcessPendingIterator implements Iterator<Runnable>
     {
-        private final List<? extends AMQSessionModel<?>> _sessionsWithPending;
+        private final Collection<? extends AMQChannel> _sessionsWithPending;
         private Iterator<? extends AMQSessionModel<?>> _sessionIterator;
         private ProcessPendingIterator()
         {
-            _sessionsWithPending = getSessionModels();
+            _sessionsWithPending = new ArrayList<>(getSessionModels());
             _sessionIterator = _sessionsWithPending.iterator();
         }
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java Mon Oct 10 12:55:39 2016
@@ -1423,9 +1423,9 @@ public class AMQPConnection_1_0 extends
         return _remoteContainerId;
     }
 
-    public List<Session_1_0> getSessionModels()
+    public Collection<? extends Session_1_0> getSessionModels()
     {
-        return new ArrayList<>(_sessions);
+        return Collections.unmodifiableCollection(_sessions);
     }
 
     public void unblock()
@@ -1532,11 +1532,11 @@ public class AMQPConnection_1_0 extends
 
     private class ProcessPendingIterator implements Iterator<Runnable>
     {
-        private final List<? extends AMQSessionModel<?>> _sessionsWithPending;
+        private final Collection<? extends AMQSessionModel<?>> _sessionsWithPending;
         private Iterator<? extends AMQSessionModel<?>> _sessionIterator;
         private ProcessPendingIterator()
         {
-            _sessionsWithPending = getSessionModels();
+            _sessionsWithPending = new ArrayList<>(getSessionModels());
             _sessionIterator = _sessionsWithPending.iterator();
         }
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java Mon Oct 10 12:55:39 2016
@@ -1544,6 +1544,7 @@ public class Session_1_0 implements AMQS
             consumerListNeedsRefreshing = true;
         }
 
+        // QPID-7447: prevent unnecessary allocation of empty iterator
         Iterator<ConsumerTarget_1_0> iter = _consumersWithPendingWork.isEmpty() ? Collections.<ConsumerTarget_1_0>emptyIterator() : _consumersWithPendingWork.iterator();
         boolean consumerHasMoreWork = false;
         while(iter.hasNext())

Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java Mon Oct 10 12:55:39 2016
@@ -649,6 +649,7 @@ public class QpidByteBuffer
                                              QpidByteBuffer dest) throws SSLException
     {
         final ByteBuffer[] src;
+        // QPID-7447: prevent unnecessary allocations
         if (buffers.isEmpty())
         {
             src = EMPTY_BYTE_BUFFER_ARRAY;

Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java Mon Oct 10 12:55:39 2016
@@ -721,7 +721,7 @@ public class Connection extends Connecti
         return connectionLost.get();
     }
 
-    protected Collection<Session> getChannels()
+    protected Collection<? extends Session> getChannels()
     {
         return new ArrayList<>(channels.values());
     }



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