You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/07/30 11:13:07 UTC

svn commit: r1693397 - in /qpid/java/trunk: bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java

Author: rgodfrey
Date: Thu Jul 30 09:13:06 2015
New Revision: 1693397

URL: http://svn.apache.org/r1693397
Log:
QPID-6662 : When using direct ByteBuffers the GC does not evacuate SoftRefs from memory in a timely fashion leading to out of memory errors.  By explicitly nulling the softrefs when the broker indicates eviction is desired the GC can remove the bytebuffer from memory

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/store/AbstractJDBCMessageStore.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=1693397&r1=1693396&r2=1693397&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 Thu Jul 30 09:13:06 2015
@@ -1263,7 +1263,7 @@ public abstract class AbstractBDBMessage
         @Override
         public boolean isInMemory()
         {
-            return _messageDataRef.isHardRef();
+            return _messageDataRef.isHardRef() || _messageDataRef.getData() != null;
         }
 
         private boolean stored()
@@ -1274,7 +1274,12 @@ public abstract class AbstractBDBMessage
         @Override
         public boolean flowToDisk()
         {
+
             flushToStore();
+            if(!_messageDataRef.isHardRef())
+            {
+                ((MessageDataSoftRef)_messageDataRef).clear();
+            }
             return true;
         }
 

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=1693397&r1=1693396&r2=1693397&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 Thu Jul 30 09:13:06 2015
@@ -1697,20 +1697,27 @@ public abstract class AbstractJDBCMessag
         @Override
         public boolean isInMemory()
         {
-            return _messageDataRef.isHardRef();
+            return _messageDataRef.isHardRef() || _messageDataRef.getData() != null;
         }
 
         @Override
         public boolean flowToDisk()
         {
-            try(Connection conn = newConnection())
+            if(!stored())
             {
-                store(conn);
-                conn.commit();
+                try (Connection conn = newConnection())
+                {
+                    store(conn);
+                    conn.commit();
+                }
+                catch (SQLException e)
+                {
+                    throw new StoreException("Failed to flow to disk", e);
+                }
             }
-            catch (SQLException e)
+            if(!_messageDataRef.isHardRef())
             {
-                throw new StoreException("Failed to flow to disk", e);
+                ((MessageDataSoftRef)_messageDataRef).clear();
             }
             return true;
         }



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