This is an automated email from the ASF dual-hosted git repository. orudyy pushed a commit to branch 8.0.x in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
commit 3b58792032bea988f186e3db119951d095046bc9 Author: Dedeepya T <dedeepy...@yahoo.co.in> AuthorDate: Fri Jul 16 16:07:31 2021 +0530 QPID-8161:[Broekr-J] Rethrow LockTimeoutException on sequence generation as ConnectionScopedRuntimeException This closes #102 --- .../store/berkeleydb/AbstractBDBMessageStore.java | 6 ++++ .../store/berkeleydb/BDBMessageStoreTest.java | 33 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java index 84e1190..a7df6a7 100644 --- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java +++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java @@ -41,6 +41,7 @@ import com.sleepycat.je.DatabaseEntry; import com.sleepycat.je.DatabaseNotFoundException; import com.sleepycat.je.LockConflictException; import com.sleepycat.je.LockMode; +import com.sleepycat.je.LockTimeoutException; import com.sleepycat.je.OperationStatus; import com.sleepycat.je.Sequence; import com.sleepycat.je.SequenceConfig; @@ -72,6 +73,7 @@ import org.apache.qpid.server.store.handler.MessageHandler; import org.apache.qpid.server.store.handler.MessageInstanceHandler; import org.apache.qpid.server.txn.Xid; import org.apache.qpid.server.util.CachingUUIDFactory; +import org.apache.qpid.server.util.ConnectionScopedRuntimeException; public abstract class AbstractBDBMessageStore implements MessageStore @@ -231,6 +233,10 @@ public abstract class AbstractBDBMessageStore implements MessageStore MESSAGE_METADATA_SEQ_CONFIG); newMessageId = mmdSeq.get(null, 1); } + catch(LockTimeoutException le) + { + throw new ConnectionScopedRuntimeException("Unexpected exception on BDB sequence", le); + } catch (RuntimeException de) { throw getEnvironmentFacade().handleDatabaseException("Cannot get sequence value for new message", de); diff --git a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java index 8b03750..30c288e 100644 --- a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java +++ b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java @@ -22,19 +22,30 @@ package org.apache.qpid.server.store.berkeleydb; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.io.File; import java.util.Collections; +import com.sleepycat.je.LockTimeoutException; +import com.sleepycat.je.Sequence; import org.junit.Test; +import org.mockito.Mockito; import org.apache.qpid.server.bytebuffer.QpidByteBuffer; +import org.apache.qpid.server.message.internal.InternalMessageMetaData; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.protocol.v0_8.AMQShortString; import org.apache.qpid.server.protocol.v0_8.FieldTableFactory; @@ -47,6 +58,7 @@ import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.MessageStoreTestCase; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.StoredMessage; +import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.util.FileUtils; import org.apache.qpid.server.virtualhost.berkeleydb.BDBVirtualHost; import org.apache.qpid.test.utils.VirtualHostNodeStoreType; @@ -218,4 +230,25 @@ public class BDBMessageStoreTest extends MessageStoreTestCase return true; } + @Test + public void testGetNextMessgaeIdWithLockException(){ + EnvironmentFacadeFactory eff = mock(EnvironmentFacadeFactory.class); + EnvironmentFacade ef = mock(EnvironmentFacade.class); + doThrow(LockTimeoutException.class).when(ef).openSequence(any(),any(),any()); + when(((EnvironmentFacadeFactory) eff).createEnvironmentFacade(any())).thenReturn(ef); + + BDBMessageStore store = new BDBMessageStore (eff); + store.openMessageStore(getVirtualHost()); + + try + { + store.addMessage(new InternalMessageMetaData(false, null, 0)); + fail("exception is expected"); + } + catch(ConnectionScopedRuntimeException e) + { + assertEquals("Unexpected exception on BDB sequence",e.getMessage()); + } + + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org