Search in sources :

Example 6 with NullStorageManager

use of org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager in project activemq-artemis by apache.

the class PagingStoreImplTest method testDepageOnCurrentPage.

@Test
public void testDepageOnCurrentPage() throws Exception {
    SequentialFileFactory factory = new FakeSequentialFileFactory();
    SimpleString destination = new SimpleString("test");
    PagingStoreFactory storeFactory = new FakeStoreFactory(factory);
    PagingStoreImpl storeImpl = new PagingStoreImpl(PagingStoreImplTest.destinationTestName, null, 100, createMockManager(), createStorageManagerMock(), factory, storeFactory, PagingStoreImplTest.destinationTestName, new AddressSettings().setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE), getExecutorFactory().getExecutor(), true);
    storeImpl.start();
    Assert.assertEquals(0, storeImpl.getNumberOfPages());
    storeImpl.startPaging();
    List<ActiveMQBuffer> buffers = new ArrayList<>();
    int numMessages = 10;
    for (int i = 0; i < numMessages; i++) {
        ActiveMQBuffer buffer = createRandomBuffer(i + 1L, 10);
        buffers.add(buffer);
        Message msg = createMessage(i, storeImpl, destination, buffer);
        final RoutingContextImpl ctx = new RoutingContextImpl(null);
        Assert.assertTrue(storeImpl.page(msg, ctx.getTransaction(), ctx.getContextListing(storeImpl.getStoreName()), lock));
    }
    Assert.assertEquals(1, storeImpl.getNumberOfPages());
    storeImpl.sync();
    Page page = storeImpl.depage();
    page.open();
    List<PagedMessage> msg = page.read(new NullStorageManager());
    Assert.assertEquals(numMessages, msg.size());
    Assert.assertEquals(1, storeImpl.getNumberOfPages());
    page = storeImpl.depage();
    Assert.assertNull(page);
    Assert.assertEquals(0, storeImpl.getNumberOfPages());
    for (int i = 0; i < numMessages; i++) {
        ActiveMQBuffer horn1 = buffers.get(i);
        ActiveMQBuffer horn2 = msg.get(i).getMessage().toCore().getBodyBuffer();
        horn1.resetReaderIndex();
        horn2.resetReaderIndex();
        for (int j = 0; j < horn1.writerIndex(); j++) {
            Assert.assertEquals(horn1.readByte(), horn2.readByte());
        }
    }
}
Also used : AddressSettings(org.apache.activemq.artemis.core.settings.impl.AddressSettings) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) CoreMessage(org.apache.activemq.artemis.core.message.impl.CoreMessage) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) Message(org.apache.activemq.artemis.api.core.Message) ArrayList(java.util.ArrayList) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) Page(org.apache.activemq.artemis.core.paging.impl.Page) FakeSequentialFileFactory(org.apache.activemq.artemis.tests.unit.core.journal.impl.fakes.FakeSequentialFileFactory) NIOSequentialFileFactory(org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory) SequentialFileFactory(org.apache.activemq.artemis.core.io.SequentialFileFactory) RoutingContextImpl(org.apache.activemq.artemis.core.server.impl.RoutingContextImpl) FakeSequentialFileFactory(org.apache.activemq.artemis.tests.unit.core.journal.impl.fakes.FakeSequentialFileFactory) PagingStoreImpl(org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl) NullStorageManager(org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager) PagingStoreFactory(org.apache.activemq.artemis.core.paging.PagingStoreFactory) ActiveMQBuffer(org.apache.activemq.artemis.api.core.ActiveMQBuffer) Test(org.junit.Test)

Example 7 with NullStorageManager

use of org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager in project activemq-artemis by apache.

the class PagingStoreImplTest method testDepageMultiplePages.

@Test
public void testDepageMultiplePages() throws Exception {
    SequentialFileFactory factory = new FakeSequentialFileFactory();
    SimpleString destination = new SimpleString("test");
    PagingStoreFactory storeFactory = new FakeStoreFactory(factory);
    PagingStoreImpl store = new PagingStoreImpl(PagingStoreImplTest.destinationTestName, null, 100, createMockManager(), createStorageManagerMock(), factory, storeFactory, PagingStoreImplTest.destinationTestName, new AddressSettings().setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE), getExecutorFactory().getExecutor(), true);
    store.start();
    Assert.assertEquals(0, store.getNumberOfPages());
    store.startPaging();
    Assert.assertEquals(1, store.getNumberOfPages());
    List<ActiveMQBuffer> buffers = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        ActiveMQBuffer buffer = createRandomBuffer(i + 1L, 10);
        buffers.add(buffer);
        if (i == 5) {
            store.forceAnotherPage();
        }
        Message msg = createMessage(i, store, destination, buffer);
        final RoutingContextImpl ctx = new RoutingContextImpl(null);
        Assert.assertTrue(store.page(msg, ctx.getTransaction(), ctx.getContextListing(store.getStoreName()), lock));
    }
    Assert.assertEquals(2, store.getNumberOfPages());
    store.sync();
    int sequence = 0;
    for (int pageNr = 0; pageNr < 2; pageNr++) {
        Page page = store.depage();
        System.out.println("numberOfPages = " + store.getNumberOfPages());
        page.open();
        List<PagedMessage> msg = page.read(new NullStorageManager());
        page.close();
        Assert.assertEquals(5, msg.size());
        for (int i = 0; i < 5; i++) {
            Assert.assertEquals(sequence++, msg.get(i).getMessage().getMessageID());
            ActiveMQTestBase.assertEqualsBuffers(18, buffers.get(pageNr * 5 + i), msg.get(i).getMessage().toCore().getBodyBuffer());
        }
    }
    Assert.assertEquals(1, store.getNumberOfPages());
    Assert.assertTrue(store.isPaging());
    Message msg = createMessage(1, store, destination, buffers.get(0));
    final RoutingContextImpl ctx = new RoutingContextImpl(null);
    Assert.assertTrue(store.page(msg, ctx.getTransaction(), ctx.getContextListing(store.getStoreName()), lock));
    Page newPage = store.depage();
    newPage.open();
    Assert.assertEquals(1, newPage.read(new NullStorageManager()).size());
    newPage.delete(null);
    Assert.assertEquals(1, store.getNumberOfPages());
    Assert.assertTrue(store.isPaging());
    Assert.assertNull(store.depage());
    Assert.assertFalse(store.isPaging());
    {
        final RoutingContextImpl ctx2 = new RoutingContextImpl(null);
        Assert.assertFalse(store.page(msg, ctx2.getTransaction(), ctx2.getContextListing(store.getStoreName()), lock));
    }
    store.startPaging();
    {
        final RoutingContextImpl ctx2 = new RoutingContextImpl(null);
        Assert.assertTrue(store.page(msg, ctx2.getTransaction(), ctx2.getContextListing(store.getStoreName()), lock));
    }
    Page page = store.depage();
    page.open();
    List<PagedMessage> msgs = page.read(new NullStorageManager());
    Assert.assertEquals(1, msgs.size());
    Assert.assertEquals(1L, msgs.get(0).getMessage().getMessageID());
    ActiveMQTestBase.assertEqualsBuffers(18, buffers.get(0), msgs.get(0).getMessage().toCore().getBodyBuffer());
    Assert.assertEquals(1, store.getNumberOfPages());
    Assert.assertTrue(store.isPaging());
    Assert.assertNull(store.depage());
    Assert.assertEquals(0, store.getNumberOfPages());
    page.open();
}
Also used : AddressSettings(org.apache.activemq.artemis.core.settings.impl.AddressSettings) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) CoreMessage(org.apache.activemq.artemis.core.message.impl.CoreMessage) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) Message(org.apache.activemq.artemis.api.core.Message) ArrayList(java.util.ArrayList) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) Page(org.apache.activemq.artemis.core.paging.impl.Page) FakeSequentialFileFactory(org.apache.activemq.artemis.tests.unit.core.journal.impl.fakes.FakeSequentialFileFactory) NIOSequentialFileFactory(org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory) SequentialFileFactory(org.apache.activemq.artemis.core.io.SequentialFileFactory) RoutingContextImpl(org.apache.activemq.artemis.core.server.impl.RoutingContextImpl) FakeSequentialFileFactory(org.apache.activemq.artemis.tests.unit.core.journal.impl.fakes.FakeSequentialFileFactory) PagingStoreImpl(org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl) NullStorageManager(org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager) PagingStoreFactory(org.apache.activemq.artemis.core.paging.PagingStoreFactory) ActiveMQBuffer(org.apache.activemq.artemis.api.core.ActiveMQBuffer) Test(org.junit.Test)

Example 8 with NullStorageManager

use of org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager in project activemq-artemis by apache.

the class PagingStoreImplTest method testOrderOnPaging.

@Test
public void testOrderOnPaging() throws Throwable {
    clearDataRecreateServerDirs();
    SequentialFileFactory factory = new NIOSequentialFileFactory(new File(getPageDir()), 1);
    PagingStoreFactory storeFactory = new FakeStoreFactory(factory);
    final int MAX_SIZE = 1024 * 10;
    AddressSettings settings = new AddressSettings().setPageSizeBytes(MAX_SIZE).setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE);
    final PagingStore store = new PagingStoreImpl(PagingStoreImplTest.destinationTestName, null, 100, createMockManager(), createStorageManagerMock(), factory, storeFactory, new SimpleString("test"), settings, getExecutorFactory().getExecutor(), false);
    store.start();
    Assert.assertEquals(0, store.getNumberOfPages());
    // Marked the store to be paged
    store.startPaging();
    final CountDownLatch producedLatch = new CountDownLatch(1);
    Assert.assertEquals(1, store.getNumberOfPages());
    final SimpleString destination = new SimpleString("test");
    final long NUMBER_OF_MESSAGES = 100000;
    final List<Throwable> errors = new ArrayList<>();
    class WriterThread extends Thread {

        WriterThread() {
            super("PageWriter");
        }

        @Override
        public void run() {
            try {
                for (long i = 0; i < NUMBER_OF_MESSAGES; i++) {
                    // Each thread will Keep paging until all the messages are depaged.
                    // This is possible because the depage thread is not actually reading the pages.
                    // Just using the internal API to remove it from the page file system
                    Message msg = createMessage(i, store, destination, createRandomBuffer(i, 1024));
                    msg.putLongProperty("count", i);
                    final RoutingContextImpl ctx2 = new RoutingContextImpl(null);
                    while (!store.page(msg, ctx2.getTransaction(), ctx2.getContextListing(store.getStoreName()), lock)) {
                        store.startPaging();
                    }
                    if (i == 0) {
                        producedLatch.countDown();
                    }
                }
            } catch (Throwable e) {
                e.printStackTrace();
                errors.add(e);
            }
        }
    }
    class ReaderThread extends Thread {

        ReaderThread() {
            super("PageReader");
        }

        @Override
        public void run() {
            try {
                long msgsRead = 0;
                while (msgsRead < NUMBER_OF_MESSAGES) {
                    Page page = store.depage();
                    if (page != null) {
                        page.open();
                        List<PagedMessage> messages = page.read(new NullStorageManager());
                        for (PagedMessage pgmsg : messages) {
                            Message msg = pgmsg.getMessage();
                            Assert.assertEquals(msgsRead++, msg.getMessageID());
                            Assert.assertEquals(msg.getMessageID(), msg.getLongProperty("count").longValue());
                        }
                        page.close();
                        page.delete(null);
                    } else {
                        System.out.println("Depaged!!!! numerOfMessages = " + msgsRead + " of " + NUMBER_OF_MESSAGES);
                        Thread.sleep(500);
                    }
                }
            } catch (Throwable e) {
                e.printStackTrace();
                errors.add(e);
            }
        }
    }
    WriterThread producerThread = new WriterThread();
    producerThread.start();
    ReaderThread consumer = new ReaderThread();
    consumer.start();
    producerThread.join();
    consumer.join();
    store.stop();
    for (Throwable e : errors) {
        throw e;
    }
}
Also used : AddressSettings(org.apache.activemq.artemis.core.settings.impl.AddressSettings) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) CoreMessage(org.apache.activemq.artemis.core.message.impl.CoreMessage) PagedMessage(org.apache.activemq.artemis.core.paging.PagedMessage) Message(org.apache.activemq.artemis.api.core.Message) ArrayList(java.util.ArrayList) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) Page(org.apache.activemq.artemis.core.paging.impl.Page) CountDownLatch(java.util.concurrent.CountDownLatch) FakeSequentialFileFactory(org.apache.activemq.artemis.tests.unit.core.journal.impl.fakes.FakeSequentialFileFactory) NIOSequentialFileFactory(org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory) SequentialFileFactory(org.apache.activemq.artemis.core.io.SequentialFileFactory) RoutingContextImpl(org.apache.activemq.artemis.core.server.impl.RoutingContextImpl) PagingStoreImpl(org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl) NullStorageManager(org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager) PagingStoreFactory(org.apache.activemq.artemis.core.paging.PagingStoreFactory) SequentialFile(org.apache.activemq.artemis.core.io.SequentialFile) File(java.io.File) PagingStore(org.apache.activemq.artemis.core.paging.PagingStore) NIOSequentialFileFactory(org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory) Test(org.junit.Test)

Example 9 with NullStorageManager

use of org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager 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 10 with NullStorageManager

use of org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager 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)

Aggregations

NullStorageManager (org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager)11 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)9 PagedMessage (org.apache.activemq.artemis.core.paging.PagedMessage)7 Page (org.apache.activemq.artemis.core.paging.impl.Page)7 AddressSettings (org.apache.activemq.artemis.core.settings.impl.AddressSettings)7 Test (org.junit.Test)6 PagingStoreFactory (org.apache.activemq.artemis.core.paging.PagingStoreFactory)5 RoutingContextImpl (org.apache.activemq.artemis.core.server.impl.RoutingContextImpl)5 ArrayList (java.util.ArrayList)4 Message (org.apache.activemq.artemis.api.core.Message)4 SequentialFile (org.apache.activemq.artemis.core.io.SequentialFile)4 CoreMessage (org.apache.activemq.artemis.core.message.impl.CoreMessage)4 PagingStore (org.apache.activemq.artemis.core.paging.PagingStore)4 PagingStoreImpl (org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl)4 SequentialFileFactory (org.apache.activemq.artemis.core.io.SequentialFileFactory)3 NIOSequentialFileFactory (org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory)3 PagingManagerImpl (org.apache.activemq.artemis.core.paging.impl.PagingManagerImpl)3 PagingStoreFactoryNIO (org.apache.activemq.artemis.core.paging.impl.PagingStoreFactoryNIO)3 StorageManager (org.apache.activemq.artemis.core.persistence.StorageManager)3 HierarchicalObjectRepository (org.apache.activemq.artemis.core.settings.impl.HierarchicalObjectRepository)3