Search in sources :

Example 6 with SPI

use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.

the class MasterImplTest method lockResultMustHaveMessageWhenAcquiringSharedLockThrowsIllegalResource.

@Test
public void lockResultMustHaveMessageWhenAcquiringSharedLockThrowsIllegalResource() throws Exception {
    MasterImpl.SPI spi = mockedSpi();
    DefaultConversationSPI conversationSpi = mockedConversationSpi();
    Config config = config();
    ConversationManager conversationManager = new ConversationManager(conversationSpi, config);
    conversationManager.start();
    Client locks = mock(Client.class);
    MasterImpl master = new MasterImpl(spi, conversationManager, null, config);
    RequestContext context = createRequestContext(master);
    when(conversationSpi.acquireClient()).thenReturn(locks);
    ResourceTypes type = ResourceTypes.NODE;
    doThrow(new IllegalResourceException("")).when(locks).acquireExclusive(LockTracer.NONE, type, 1);
    master.acquireSharedLock(context, type, 1);
    ArgumentCaptor<LockResult> captor = ArgumentCaptor.forClass(LockResult.class);
    verify(spi).packTransactionObligationResponse(argThat(is(context)), captor.capture());
    assertThat(captor.getValue().getMessage(), is(not(nullValue())));
}
Also used : SPI(org.neo4j.kernel.ha.com.master.MasterImpl.SPI) ResourceTypes(org.neo4j.kernel.impl.locking.ResourceTypes) DefaultConversationSPI(org.neo4j.kernel.ha.cluster.DefaultConversationSPI) LockResult(org.neo4j.kernel.ha.lock.LockResult) Config(org.neo4j.kernel.configuration.Config) RequestContext(org.neo4j.com.RequestContext) Client(org.neo4j.kernel.impl.locking.Locks.Client) IllegalResourceException(org.neo4j.kernel.impl.transaction.IllegalResourceException) Test(org.junit.Test)

Example 7 with SPI

use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.

the class MasterImplTest method lockResultMustHaveMessageWhenAcquiringExclusiveLockThrowsIllegalResource.

@Test
public void lockResultMustHaveMessageWhenAcquiringExclusiveLockThrowsIllegalResource() throws Exception {
    MasterImpl.SPI spi = mockedSpi();
    DefaultConversationSPI conversationSpi = mockedConversationSpi();
    Config config = config();
    ConversationManager conversationManager = new ConversationManager(conversationSpi, config);
    conversationManager.start();
    Client locks = mock(Client.class);
    MasterImpl master = new MasterImpl(spi, conversationManager, null, config);
    RequestContext context = createRequestContext(master);
    when(conversationSpi.acquireClient()).thenReturn(locks);
    ResourceTypes type = ResourceTypes.NODE;
    doThrow(new IllegalResourceException("")).when(locks).acquireExclusive(LockTracer.NONE, type, 1);
    master.acquireExclusiveLock(context, type, 1);
    ArgumentCaptor<LockResult> captor = ArgumentCaptor.forClass(LockResult.class);
    verify(spi).packTransactionObligationResponse(argThat(is(context)), captor.capture());
    assertThat(captor.getValue().getMessage(), is(not(nullValue())));
}
Also used : SPI(org.neo4j.kernel.ha.com.master.MasterImpl.SPI) ResourceTypes(org.neo4j.kernel.impl.locking.ResourceTypes) DefaultConversationSPI(org.neo4j.kernel.ha.cluster.DefaultConversationSPI) LockResult(org.neo4j.kernel.ha.lock.LockResult) Config(org.neo4j.kernel.configuration.Config) RequestContext(org.neo4j.com.RequestContext) Client(org.neo4j.kernel.impl.locking.Locks.Client) IllegalResourceException(org.neo4j.kernel.impl.transaction.IllegalResourceException) Test(org.junit.Test)

Example 8 with SPI

use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.

the class MasterImplTest method lockResultMustHaveMessageWhenAcquiringSharedLockDeadlocks.

@Test
public void lockResultMustHaveMessageWhenAcquiringSharedLockDeadlocks() throws Exception {
    MasterImpl.SPI spi = mockedSpi();
    DefaultConversationSPI conversationSpi = mockedConversationSpi();
    Config config = config();
    ConversationManager conversationManager = new ConversationManager(conversationSpi, config);
    conversationManager.start();
    Client locks = mock(Client.class);
    MasterImpl master = new MasterImpl(spi, conversationManager, null, config);
    RequestContext context = createRequestContext(master);
    when(conversationSpi.acquireClient()).thenReturn(locks);
    ResourceTypes type = ResourceTypes.NODE;
    doThrow(new DeadlockDetectedException("")).when(locks).acquireExclusive(LockTracer.NONE, type, 1);
    master.acquireSharedLock(context, type, 1);
    ArgumentCaptor<LockResult> captor = ArgumentCaptor.forClass(LockResult.class);
    verify(spi).packTransactionObligationResponse(argThat(is(context)), captor.capture());
    assertThat(captor.getValue().getMessage(), is(not(nullValue())));
}
Also used : SPI(org.neo4j.kernel.ha.com.master.MasterImpl.SPI) ResourceTypes(org.neo4j.kernel.impl.locking.ResourceTypes) DefaultConversationSPI(org.neo4j.kernel.ha.cluster.DefaultConversationSPI) LockResult(org.neo4j.kernel.ha.lock.LockResult) Config(org.neo4j.kernel.configuration.Config) DeadlockDetectedException(org.neo4j.kernel.DeadlockDetectedException) RequestContext(org.neo4j.com.RequestContext) Client(org.neo4j.kernel.impl.locking.Locks.Client) Test(org.junit.Test)

Example 9 with SPI

use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.

the class MasterImplTest method failingToStartTxShouldNotLeadToNPE.

@Test
public void failingToStartTxShouldNotLeadToNPE() throws Throwable {
    // Given
    MasterImpl.SPI spi = mockedSpi();
    DefaultConversationSPI conversationSpi = mockedConversationSpi();
    Config config = config();
    ConversationManager conversationManager = new ConversationManager(conversationSpi, config);
    when(spi.isAccessible()).thenReturn(true);
    when(conversationSpi.acquireClient()).thenThrow(new RuntimeException("Nope"));
    when(spi.getTransactionChecksum(anyLong())).thenReturn(1L);
    mockEmptyResponse(spi);
    MasterImpl instance = new MasterImpl(spi, conversationManager, mock(MasterImpl.Monitor.class), config);
    instance.start();
    Response<HandshakeResult> response = instance.handshake(1, newStoreIdForCurrentVersion());
    HandshakeResult handshake = response.response();
    // When
    try {
        instance.newLockSession(new RequestContext(handshake.epoch(), 1, 2, 0, 0));
        fail("Should have failed.");
    } catch (Exception e) {
        // Then
        assertThat(e, instanceOf(RuntimeException.class));
        assertThat(e.getMessage(), equalTo("Nope"));
    }
}
Also used : SPI(org.neo4j.kernel.ha.com.master.MasterImpl.SPI) DefaultConversationSPI(org.neo4j.kernel.ha.cluster.DefaultConversationSPI) Monitor(org.neo4j.kernel.ha.com.master.MasterImpl.Monitor) Config(org.neo4j.kernel.configuration.Config) RequestContext(org.neo4j.com.RequestContext) DeadlockDetectedException(org.neo4j.kernel.DeadlockDetectedException) IllegalResourceException(org.neo4j.kernel.impl.transaction.IllegalResourceException) TransactionNotPresentOnMasterException(org.neo4j.com.TransactionNotPresentOnMasterException) NoSuchEntryException(org.neo4j.kernel.impl.util.collection.NoSuchEntryException) Test(org.junit.Test)

Example 10 with SPI

use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.

the class MasterEpochTest method shouldFailSubsequentRequestsAfterAllocateIdsAfterMasterSwitch.

@Test
public void shouldFailSubsequentRequestsAfterAllocateIdsAfterMasterSwitch() throws Throwable {
    // GIVEN
    SPI spi = MasterImplTest.mockedSpi();
    IdAllocation servedIdAllocation = idAllocation(0, 999);
    when(spi.allocateIds(any(IdType.class))).thenReturn(servedIdAllocation);
    when(spi.getTransactionChecksum(anyLong())).thenReturn(10L);
    StoreId storeId = newStoreIdForCurrentVersion();
    MasterImpl master = new MasterImpl(spi, mock(ConversationManager.class), mock(MasterImpl.Monitor.class), Config.embeddedDefaults(stringMap(ClusterSettings.server_id.name(), "1")));
    HandshakeResult handshake = master.handshake(1, storeId).response();
    master.start();
    // WHEN/THEN
    IdAllocation idAllocation = master.allocateIds(context(handshake.epoch()), IdType.NODE).response();
    assertEquals(servedIdAllocation.getHighestIdInUse(), idAllocation.getHighestIdInUse());
    try {
        master.allocateIds(context(handshake.epoch() + 1), IdType.NODE);
        fail("Should fail with invalid epoch");
    } catch (InvalidEpochException e) {
    // Good
    }
}
Also used : HandshakeResult(org.neo4j.kernel.ha.com.master.HandshakeResult) MasterImpl(org.neo4j.kernel.ha.com.master.MasterImpl) StoreId(org.neo4j.kernel.impl.store.StoreId) ConversationManager(org.neo4j.kernel.ha.com.master.ConversationManager) IdAllocation(org.neo4j.kernel.ha.id.IdAllocation) InvalidEpochException(org.neo4j.kernel.ha.com.master.InvalidEpochException) SPI(org.neo4j.kernel.ha.com.master.MasterImpl.SPI) IdType(org.neo4j.kernel.impl.store.id.IdType) MasterImplTest(org.neo4j.kernel.ha.com.master.MasterImplTest) Test(org.junit.Test)

Aggregations

SPI (org.neo4j.kernel.ha.com.master.MasterImpl.SPI)16 Test (org.junit.Test)14 Config (org.neo4j.kernel.configuration.Config)14 RequestContext (org.neo4j.com.RequestContext)12 DefaultConversationSPI (org.neo4j.kernel.ha.cluster.DefaultConversationSPI)9 Monitor (org.neo4j.kernel.ha.com.master.MasterImpl.Monitor)7 LockResult (org.neo4j.kernel.ha.lock.LockResult)6 Client (org.neo4j.kernel.impl.locking.Locks.Client)6 DeadlockDetectedException (org.neo4j.kernel.DeadlockDetectedException)4 ResourceTypes (org.neo4j.kernel.impl.locking.ResourceTypes)4 IllegalResourceException (org.neo4j.kernel.impl.transaction.IllegalResourceException)4 NoSuchEntryException (org.neo4j.kernel.impl.util.collection.NoSuchEntryException)4 TransactionNotPresentOnMasterException (org.neo4j.com.TransactionNotPresentOnMasterException)3 TransactionRepresentation (org.neo4j.kernel.impl.transaction.TransactionRepresentation)2 Collection (java.util.Collection)1 InOrder (org.mockito.InOrder)1 ConversationManager (org.neo4j.kernel.ha.com.master.ConversationManager)1 HandshakeResult (org.neo4j.kernel.ha.com.master.HandshakeResult)1 InvalidEpochException (org.neo4j.kernel.ha.com.master.InvalidEpochException)1 MasterImpl (org.neo4j.kernel.ha.com.master.MasterImpl)1