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