@Test public void testAddFirst() throws Exception { final int COUNT = 1000; LinkedList<ByteSequence> list = new LinkedList<ByteSequence>(); for (int i = 0; i < COUNT; i++) { String test = new String("test" + i); ByteSequence bs = new ByteSequence(test.getBytes()); list.addFirst(bs); plist.addFirst(test, bs); } assertEquals(plist.size(), COUNT); PList.PListIterator actual = plist.iterator(); Iterator<ByteSequence> expected = list.iterator(); while (expected.hasNext()) { ByteSequence bs = expected.next(); assertTrue(actual.hasNext()); PListEntry entry = actual.next(); String origStr = new String(bs.getData(), bs.getOffset(), bs.getLength()); String plistString = new String(entry.getByteSequence().getData(), entry.getByteSequence().getOffset(), entry.getByteSequence().getLength()); assertEquals(origStr, plistString); } assertFalse(actual.hasNext()); }
if (exceptions.isEmpty()) { String key = "PL>" + id + idSeed + "-" + j; entries.put(key, plist.addLast(key, payload)); } else { break; Object position = entries.remove(key); if( position!=null ) { plist.remove(position); synchronized (plistLocks(plist)) { if (exceptions.isEmpty()) { Iterator<PListEntry> iterator = plist.iterator(); while (iterator.hasNext() && exceptions.isEmpty()) { iterator.next(); if (plist.size() != iterateCount) { System.err.println("Count Wrong: " + iterator); assertEquals("iterate got all " + id + " iterator:" + iterator , plist.size(), iterateCount); synchronized (plistLocks(plist)) { Iterator<PListEntry> removeIterator = plist.iterator();
@Test public void testDestroyNonEmpty() throws Exception { final int COUNT = 1000; Map<String, ByteSequence> map = new LinkedHashMap<String, ByteSequence>(); for (int i = 0; i < COUNT; i++) { String test = new String("test" + i); ByteSequence bs = new ByteSequence(test.getBytes()); map.put(test, bs); plist.addLast(test, bs); } plist.destroy(); assertEquals(0,plist.size()); }
@Test public void testRemoveSecondPosition() throws Exception { Object first = plist.addLast("First", new ByteSequence("A".getBytes())); Object second = plist.addLast("Second", new ByteSequence("B".getBytes())); assertTrue(plist.remove(second)); assertTrue(plist.remove(first)); assertFalse(plist.remove(first)); }
protected void doTestRemove(final int COUNT) throws IOException { Map<String, ByteSequence> map = new LinkedHashMap<String, ByteSequence>(); for (int i = 0; i < COUNT; i++) { String test = new String("test" + i); ByteSequence bs = new ByteSequence(test.getBytes()); map.put(test, bs); plist.addLast(test, bs); } assertEquals(plist.size(), COUNT); PListEntry entry = getFirst(plist); while (entry != null) { plist.remove(entry.getLocator()); entry = getFirst(plist); } assertEquals(0,plist.size()); }
@Test public void testAddLast() throws Exception { final int COUNT = 1000; LinkedList<ByteSequence> list = new LinkedList<ByteSequence>(); for (int i = 0; i < COUNT; i++) { String test = new String("test" + i); ByteSequence bs = new ByteSequence(test.getBytes()); list.addLast(bs); plist.addLast(test, bs); } assertEquals(plist.size(), COUNT); PList.PListIterator actual = plist.iterator(); Iterator<ByteSequence> expected = list.iterator(); while (expected.hasNext()) { ByteSequence bs = expected.next(); assertTrue(actual.hasNext()); PListEntry entry = actual.next(); String origStr = new String(bs.getData(), bs.getOffset(), bs.getLength()); String plistString = new String(entry.getByteSequence().getData(), entry.getByteSequence().getOffset(), entry.getByteSequence().getLength()); assertEquals(origStr, plistString); } assertFalse(actual.hasNext()); }
protected synchronized void flushToDisk() { if (!memoryList.isEmpty() && store != null) { long start = 0; if (LOG.isTraceEnabled()) { start = System.currentTimeMillis(); LOG.trace("{}, flushToDisk() mem list size: {} {}", new Object[] { name, memoryList.size(), (systemUsage != null ? systemUsage.getMemoryUsage() : "") }); } for (Iterator<MessageReference> iterator = memoryList.iterator(); iterator.hasNext();) { MessageReference node = iterator.next(); node.decrementReferenceCount(); ByteSequence bs; try { bs = getByteSequence(node.getMessage()); getDiskList().addLast(node.getMessageId().toString(), bs); } catch (IOException e) { LOG.error("Failed to write to disk list", e); throw new RuntimeException(e); } } memoryList.clear(); setCacheEnabled(false); LOG.trace("{}, flushToDisk() done - {} ms {}", new Object[]{ name, (System.currentTimeMillis() - start), (systemUsage != null ? systemUsage.getMemoryUsage() : "") }); } }
DiskIterator() { try { iterator = getDiskList().iterator(); } catch (Exception e) { throw new RuntimeException(e); } }
/** * @return the number of pending messages */ @Override public synchronized int size() { return memoryList.size() + (isDiskListEmpty() ? 0 : (int)getDiskList().size()); }
/** * clear all pending messages */ @Override public synchronized void clear() { memoryList.clear(); if (!isDiskListEmpty()) { try { getDiskList().destroy(); } catch (IOException e) { throw new RuntimeException(e); } } last = null; }
/** * @param node * @see org.apache.activemq.broker.region.cursors.AbstractPendingMessageCursor#remove(org.apache.activemq.broker.region.MessageReference) */ @Override public synchronized void remove(MessageReference node) { if (memoryList.remove(node) != null) { node.decrementReferenceCount(); } if (!isDiskListEmpty()) { try { getDiskList().remove(node.getMessageId().getPlistLocator()); } catch (IOException e) { throw new RuntimeException(e); } } }
node.decrementReferenceCount(); ByteSequence bs = getByteSequence(node.getMessage()); Object locator = getDiskList().addFirst(node.getMessageId().toString(), bs); node.getMessageId().setPlistLocator(locator);
@Override public synchronized long messageSize() { return memoryList.messageSize() + (isDiskListEmpty() ? 0 : getDiskList().messageSize()); }
protected boolean isDiskListEmpty() { return diskList == null || diskList.isEmpty(); }
@Test public void testRemoveSecond() throws Exception { Object first = plist.addLast("First", new ByteSequence("A".getBytes())); Object second = plist.addLast("Second", new ByteSequence("B".getBytes())); assertTrue(plist.remove(second)); assertTrue(plist.remove(first)); assertFalse(plist.remove(first)); }
getDiskList().addLast(node.getMessageId().toString(), bs); return true;
private PListEntry getFirst(PList plist) throws IOException { PList.PListIterator iterator = plist.iterator(); try { if( iterator.hasNext() ) { return iterator.next(); } else { return null; } }finally { iterator.release(); } }
assertEquals("empty " + i, 0, store.getPList("List-" + i).size());