You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2014/11/11 10:10:11 UTC

svn commit: r1638052 - in /qpid/trunk/qpid/java/bdbstore/src: main/java/org/apache/qpid/server/store/berkeleydb/replication/ main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/ test/java/org/apache/qpid/server/store/berkeleydb/replication/

Author: orudyy
Date: Tue Nov 11 09:10:11 2014
New Revision: 1638052

URL: http://svn.apache.org/r1638052
Log:
QPID-6222: Halt broker on running out of disk space

Modified:
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicationGroupListener.java
    qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
    qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java?rev=1638052&r1=1638051&r2=1638052&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java Tue Nov 11 09:10:11 2014
@@ -54,6 +54,7 @@ import com.sleepycat.je.Durability.SyncP
 import com.sleepycat.je.EnvironmentConfig;
 import com.sleepycat.je.EnvironmentFailureException;
 import com.sleepycat.je.ExceptionEvent;
+import com.sleepycat.je.LogWriteException;
 import com.sleepycat.je.Sequence;
 import com.sleepycat.je.SequenceConfig;
 import com.sleepycat.je.Transaction;
@@ -69,6 +70,7 @@ import com.sleepycat.je.utilint.PropUtil
 import com.sleepycat.je.utilint.VLSN;
 import org.apache.log4j.Logger;
 import org.apache.qpid.server.store.StoreException;
+import org.apache.qpid.server.util.ServerScopedRuntimeException;
 import org.codehaus.jackson.map.ObjectMapper;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
@@ -364,6 +366,13 @@ public class ReplicatedEnvironmentFacade
     @Override
     public RuntimeException handleDatabaseException(String contextMessage, final RuntimeException dbe)
     {
+        if (dbe instanceof LogWriteException)
+        {
+            // something wrong with the disk (for example, no space left on device)
+            // store cannot operate
+            throw new ServerScopedRuntimeException("Cannot save data into the store", dbe);
+        }
+
         if (dbe instanceof StoreException || dbe instanceof ConnectionScopedRuntimeException)
         {
             return dbe;
@@ -1468,6 +1477,22 @@ public class ReplicatedEnvironmentFacade
         }
     }
 
+    private void onException(final Exception e)
+    {
+        _groupChangeExecutor.submit(new Runnable()
+        {
+            @Override
+            public void run()
+            {
+                ReplicationGroupListener listener = _replicationGroupListener.get();
+                if (listener != null)
+                {
+                    listener.onException(e);
+                }
+            }
+        });
+    }
+
     private class RemoteNodeStateLearner implements Callable<Void>
     {
         private Map<String, ReplicatedEnvironment.State> _previousGroupState = Collections.emptyMap();
@@ -1793,11 +1818,18 @@ public class ReplicatedEnvironmentFacade
         @Override
         public void exceptionThrown(final ExceptionEvent event)
         {
-            if (event.getException() instanceof RollbackException)
+            Exception exception = event.getException();
+
+            if (exception instanceof LogWriteException)
+            {
+                onException(exception);
+            }
+
+            if (exception instanceof RollbackException)
             {
                 // Usually caused use of weak durability options: node priority zero,
                 // designated primary, electable group override.
-                RollbackException re = (RollbackException) event.getException();
+                RollbackException re = (RollbackException) exception;
 
                 LOGGER.warn(_prettyGroupNodeName + " has transaction(s) ahead of the current master. These"
                             + " must be discarded to allow this node to rejoin the group."

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicationGroupListener.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicationGroupListener.java?rev=1638052&r1=1638051&r2=1638052&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicationGroupListener.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicationGroupListener.java Tue Nov 11 09:10:11 2014
@@ -60,4 +60,10 @@ public interface ReplicationGroupListene
      * caused by use of the weak durability options such as node priority zero.
      */
     void onNodeRolledback();
+
+    /**
+     * Callback method to invoke on critical JE exceptions
+     * @param e je exception
+     */
+    void onException(Exception e);
 }

Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1638052&r1=1638051&r2=1638052&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Tue Nov 11 09:10:11 2014
@@ -44,6 +44,7 @@ import java.util.concurrent.atomic.Atomi
 import javax.security.auth.Subject;
 
 import com.sleepycat.je.DatabaseException;
+import com.sleepycat.je.LogWriteException;
 import com.sleepycat.je.rep.NodeState;
 import com.sleepycat.je.rep.NodeType;
 import com.sleepycat.je.rep.ReplicatedEnvironment;
@@ -1125,6 +1126,18 @@ public class BDBHAVirtualHostNodeImpl ex
             getEventLogger().message(getVirtualHostNodeLogSubject(), HighAvailabilityMessages.NODE_ROLLEDBACK());
         }
 
+        @Override
+        public void onException(Exception e)
+        {
+            if (e instanceof LogWriteException)
+            {
+                // something wrong with the disk (for example, no space left on device)
+                // broker and store cannot operate
+                // TODO: VHN can be transitioned into ERRORED state
+                throw new ServerScopedRuntimeException("Cannot save data into the store", e);
+            }
+        }
+
         private Map<String, Object> nodeToAttributes(ReplicationNode replicationNode)
         {
             Map<String, Object> attributes = new HashMap<String, Object>();

Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java?rev=1638052&r1=1638051&r2=1638052&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java Tue Nov 11 09:10:11 2014
@@ -976,5 +976,10 @@ public class ReplicatedEnvironmentFacade
         {
         }
 
+        @Override
+        public void onException(Exception e)
+        {
+        }
+
     }
 }



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