Search in sources :

Example 16 with Page

use of org.apache.activemq.artemis.core.paging.impl.Page in project activemq-artemis by apache.

the class PageTest method testDamagedPage.

protected void testDamagedPage(final SequentialFileFactory factory, final int numberOfElements) throws Exception {
    SequentialFile file = factory.createSequentialFile("00010.page");
    Page impl = new Page(new SimpleString("something"), new NullStorageManager(), factory, file, 10);
    Assert.assertEquals(10, impl.getPageId());
    impl.open();
    Assert.assertEquals(1, factory.listFiles("page").size());
    SimpleString simpleDestination = new SimpleString("Test");
    addPageElements(simpleDestination, impl, numberOfElements);
    impl.sync();
    long positionA = file.position();
    // Add one record that will be damaged
    addPageElements(simpleDestination, impl, 1);
    long positionB = file.position();
    // Add more 10 as they will need to be ignored
    addPageElements(simpleDestination, impl, 10);
    // Damage data... position the file on the middle between points A and B
    file.position(positionA + (positionB - positionA) / 2);
    ByteBuffer buffer = ByteBuffer.allocate((int) (positionB - file.position()));
    for (int i = 0; i < buffer.capacity(); i++) {
        buffer.put((byte) 'Z');
    }
    buffer.rewind();
    file.writeDirect(buffer, true);
    impl.close();
    file = factory.createSequentialFile("00010.page");
    file.open();
    impl = new Page(new SimpleString("something"), new NullStorageManager(), factory, file, 10);
    List<PagedMessage> msgs = impl.read(new NullStorageManager());
    Assert.assertEquals(numberOfElements, msgs.size());
    Assert.assertEquals(numberOfElements, impl.getNumberOfMessages());
    for (int i = 0; i < msgs.size(); i++) {
        Assert.assertEquals(simpleDestination, msgs.get(i).getMessage().getAddressSimpleString());
    }
    impl.delete(null);
    Assert.assertEquals(0, factory.listFiles("page").size());
    Assert.assertEquals(1, factory.listFiles("invalidPage").size());
}
Also used : SequentialFile(org.apache.activemq.artemis.core.io.SequentialFile) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) NullStorageManager(org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) Page(org.apache.activemq.artemis.core.paging.impl.Page) ByteBuffer(java.nio.ByteBuffer)

Example 17 with Page

use of org.apache.activemq.artemis.core.paging.impl.Page in project activemq-artemis by apache.

the class PageTest method testAdd.

/**
 * Validate if everything we add is recovered
 */
protected void testAdd(final SequentialFileFactory factory, final int numberOfElements) throws Exception {
    SequentialFile file = factory.createSequentialFile("00010.page");
    Page impl = new Page(new SimpleString("something"), new NullStorageManager(), factory, file, 10);
    Assert.assertEquals(10, impl.getPageId());
    impl.open();
    Assert.assertEquals(1, factory.listFiles("page").size());
    SimpleString simpleDestination = new SimpleString("Test");
    addPageElements(simpleDestination, impl, numberOfElements);
    impl.sync();
    impl.close();
    file = factory.createSequentialFile("00010.page");
    file.open();
    impl = new Page(new SimpleString("something"), new NullStorageManager(), factory, file, 10);
    List<PagedMessage> msgs = impl.read(new NullStorageManager());
    Assert.assertEquals(numberOfElements, msgs.size());
    Assert.assertEquals(numberOfElements, impl.getNumberOfMessages());
    for (int i = 0; i < msgs.size(); i++) {
        Assert.assertEquals(simpleDestination, msgs.get(i).getMessage().getAddressSimpleString());
    }
    impl.delete(null);
    Assert.assertEquals(0, factory.listFiles(".page").size());
}
Also used : SequentialFile(org.apache.activemq.artemis.core.io.SequentialFile) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) NullStorageManager(org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) Page(org.apache.activemq.artemis.core.paging.impl.Page)

Example 18 with Page

use of org.apache.activemq.artemis.core.paging.impl.Page in project activemq-artemis by apache.

the class PagingManagerImplTest method testPagingManager.

@Test
public void testPagingManager() throws Exception {
    HierarchicalRepository<AddressSettings> addressSettings = new HierarchicalObjectRepository<>();
    addressSettings.setDefault(new AddressSettings().setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE));
    final StorageManager storageManager = new NullStorageManager();
    PagingStoreFactoryNIO storeFactory = new PagingStoreFactoryNIO(storageManager, getPageDirFile(), 100, null, getOrderedExecutor(), true, null);
    PagingManagerImpl managerImpl = new PagingManagerImpl(storeFactory, addressSettings);
    managerImpl.start();
    PagingStore store = managerImpl.getPageStore(new SimpleString("simple-test"));
    ICoreMessage msg = createMessage(1L, new SimpleString("simple-test"), createRandomBuffer(10));
    final RoutingContextImpl ctx = new RoutingContextImpl(null);
    Assert.assertFalse(store.page(msg, ctx.getTransaction(), ctx.getContextListing(store.getStoreName()), lock));
    store.startPaging();
    Assert.assertTrue(store.page(msg, ctx.getTransaction(), ctx.getContextListing(store.getStoreName()), lock));
    Page page = store.depage();
    page.open();
    List<PagedMessage> msgs = page.read(new NullStorageManager());
    page.close();
    Assert.assertEquals(1, msgs.size());
    ActiveMQTestBase.assertEqualsByteArrays(msg.getBodyBuffer().writerIndex(), msg.getBodyBuffer().toByteBuffer().array(), (msgs.get(0).getMessage()).toCore().getBodyBuffer().toByteBuffer().array());
    Assert.assertTrue(store.isPaging());
    Assert.assertNull(store.depage());
    final RoutingContextImpl ctx2 = new RoutingContextImpl(null);
    Assert.assertFalse(store.page(msg, ctx2.getTransaction(), ctx2.getContextListing(store.getStoreName()), lock));
}
Also used : AddressSettings(org.apache.activemq.artemis.core.settings.impl.AddressSettings) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) StorageManager(org.apache.activemq.artemis.core.persistence.StorageManager) NullStorageManager(org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) Page(org.apache.activemq.artemis.core.paging.impl.Page) HierarchicalObjectRepository(org.apache.activemq.artemis.core.settings.impl.HierarchicalObjectRepository) RoutingContextImpl(org.apache.activemq.artemis.core.server.impl.RoutingContextImpl) ICoreMessage(org.apache.activemq.artemis.api.core.ICoreMessage) NullStorageManager(org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager) PagingStoreFactoryNIO(org.apache.activemq.artemis.core.paging.impl.PagingStoreFactoryNIO) PagingManagerImpl(org.apache.activemq.artemis.core.paging.impl.PagingManagerImpl) PagingStore(org.apache.activemq.artemis.core.paging.PagingStore) Test(org.junit.Test)

Example 19 with Page

use of org.apache.activemq.artemis.core.paging.impl.Page in project activemq-artemis by apache.

the class ReplicationEndpoint method getPage.

private Page getPage(final SimpleString storeName, final int pageId) throws Exception {
    ConcurrentMap<Integer, Page> map = getPageMap(storeName);
    Page page = map.get(pageId);
    if (page == null) {
        page = newPage(pageId, storeName, map);
    }
    return page;
}
Also used : Page(org.apache.activemq.artemis.core.paging.impl.Page)

Example 20 with Page

use of org.apache.activemq.artemis.core.paging.impl.Page in project activemq-artemis by apache.

the class ReplicationEndpoint method newPage.

/**
 * @param pageId
 * @param map
 * @return
 */
private synchronized Page newPage(final int pageId, final SimpleString storeName, final ConcurrentMap<Integer, Page> map) throws Exception {
    Page page = map.get(pageId);
    if (page == null) {
        page = pageManager.getPageStore(storeName).createPage(pageId);
        page.open();
        map.put(pageId, page);
    }
    return page;
}
Also used : Page(org.apache.activemq.artemis.core.paging.impl.Page)

Aggregations

Page (org.apache.activemq.artemis.core.paging.impl.Page)22 PagedMessage (org.apache.activemq.artemis.core.paging.PagedMessage)13 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)10 ArrayList (java.util.ArrayList)8 PagingStore (org.apache.activemq.artemis.core.paging.PagingStore)6 NullStorageManager (org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager)6 Message (org.apache.activemq.artemis.api.core.Message)5 SequentialFile (org.apache.activemq.artemis.core.io.SequentialFile)5 AtomicLong (java.util.concurrent.atomic.AtomicLong)4 CoreMessage (org.apache.activemq.artemis.core.message.impl.CoreMessage)4 PagingStoreFactory (org.apache.activemq.artemis.core.paging.PagingStoreFactory)4 NonExistentPage (org.apache.activemq.artemis.core.paging.cursor.NonExistentPage)4 PagingStoreImpl (org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl)4 RoutingContextImpl (org.apache.activemq.artemis.core.server.impl.RoutingContextImpl)4 AddressSettings (org.apache.activemq.artemis.core.settings.impl.AddressSettings)4 Test (org.junit.Test)4 File (java.io.File)3 HashMap (java.util.HashMap)3 Map (java.util.Map)3 ActiveMQException (org.apache.activemq.artemis.api.core.ActiveMQException)3