From: <mar...@us...> - 2011-04-19 15:11:00
|
Revision: 4415 http://bigdata.svn.sourceforge.net/bigdata/?rev=4415&view=rev Author: martyncutcher Date: 2011-04-19 15:10:52 +0000 (Tue, 19 Apr 2011) Log Message: ----------- Commits several modifications: 1) BufferedWriter interface to support write ellision 2) FutureTaskMon use to trace source of interrupted exceptions 3) AllocationContext refinements to support concurrent tasks Modified Paths: -------------- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/join/PipelineJoin.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/BufferedWrite.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/WriteCacheService.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractJournal.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/FileMetadata.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWAddressManager.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWStrategy.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RootBlockView.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/WriteExecutorService.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/AllocBlock.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWWriteCacheService.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/StorageStats.java branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/journal/TestRootBlockView.java branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/rwstore/TestRWJournal.java branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/StressTestConcurrent.java Added Paths: ----------- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/IBufferedWriter.java Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/join/PipelineJoin.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/join/PipelineJoin.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/join/PipelineJoin.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -512,7 +512,7 @@ public FutureTask<Void> eval(final BOpContext<IBindingSet> context) { - return new FutureTask<Void>(new JoinTask<E>(this, context)); + return new FutureTaskMon<Void>(new JoinTask<E>(this, context)); } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/BufferedWrite.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/BufferedWrite.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/BufferedWrite.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -59,7 +59,7 @@ * the slot. This can improve the IO efficiency When the slots are sized so * as to fall on multiples of sector boundaries. */ - private final RWStore m_store; + private final IBufferedWriter m_store; /** * The direct {@link ByteBuffer} used to combine writes which are contiguous @@ -95,7 +95,7 @@ private final CAT m_dataWrites = new CAT(); private final CAT m_fileWrites = new CAT(); - public BufferedWrite(final RWStore store) throws InterruptedException { + public BufferedWrite(final IBufferedWriter store) throws InterruptedException { if (store == null) throw new IllegalArgumentException(); Added: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/IBufferedWriter.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/IBufferedWriter.java (rev 0) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/IBufferedWriter.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -0,0 +1,7 @@ +package com.bigdata.io.writecache; + +public interface IBufferedWriter { + + int getSlotSize(int data_len); + +} Property changes on: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/IBufferedWriter.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Id Date Revision Author HeadURL Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/WriteCacheService.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/WriteCacheService.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/io/writecache/WriteCacheService.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -321,11 +321,11 @@ * * Toggle comment appropriately to activate/deactivate */ -/* final long[] addrsUsed = new long[4024 * 1024]; - int addrsUsedCurs = 0; - final char[] addrActions = new char[addrsUsed.length]; - final int[] addrLens = new int[addrsUsed.length]; -*/ private final long[] addrsUsed = null; +// final long[] addrsUsed = new long[4024 * 1024]; +// int addrsUsedCurs = 0; +// final char[] addrActions = new char[addrsUsed.length]; +// final int[] addrLens = new int[addrsUsed.length]; + private final long[] addrsUsed = null; private int addrsUsedCurs = 0; private final char[] addrActions = null; private final int[] addrLens = null; @@ -600,7 +600,7 @@ if (remoteWriteFuture != null) { try { remoteWriteFuture.get(); - } catch (ExecutionException ex) { + } catch (ExecutionException ex) { retrySend(quorum, cache, ex); } } @@ -769,6 +769,7 @@ // duplicate the write cache's buffer. final ByteBuffer b = cache.peek().duplicate(); + // final ByteBuffer b = ByteBuffer.allocate(0); // flip(limit=pos;pos=0) b.flip(); @@ -1812,6 +1813,9 @@ * When this method returns, the record will be on the disk and can * be read back safely from the disk. */ + if (log.isTraceEnabled()) + log.trace("FLUSHING LARGE RECORD"); + flush(false/* force */); // done. return true; @@ -1968,15 +1972,17 @@ * @param offset * the address to check */ - public void clearWrite(final long offset) { + public boolean clearWrite(final long offset) { try { final WriteCache cache = recordMap.remove(offset); if (cache == null) - return; + return false; final WriteCache cur = acquireForWriter(); // in case current debugAddrs(offset, 0, 'F'); try { cache.clearAddrMap(offset); + + return true; } finally { release(); } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractJournal.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractJournal.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractJournal.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -833,12 +833,12 @@ lastCommitTime, commitCounter, commitRecordAddr, commitRecordIndexAddr, uuid, quorumToken, 0L, // metaStartAddr 0L, // metaStartBits StoreTypeEnum.WORM,// - createTime, closedTime, checker); + createTime, closedTime, RootBlockView.currentVersion, checker); final IRootBlockView rootBlock1 = new RootBlockView(false, offsetBits, nextOffset, firstCommitTime, lastCommitTime, commitCounter, commitRecordAddr, commitRecordIndexAddr, uuid, quorumToken, 0L, // metaStartAddr 0L, // metaStartBits StoreTypeEnum.WORM,// - createTime, closedTime, checker); + createTime, closedTime, RootBlockView.currentVersion, checker); _bufferStrategy.writeRootBlock(rootBlock0, ForceEnum.No); _bufferStrategy.writeRootBlock(rootBlock1, ForceEnum.No); @@ -1540,7 +1540,7 @@ metaBitsAddr, // old.getStoreType(), // old.getCreateTime(), closeTime, // - checker); + old.getVersion(), checker); /* * Write it on the store. @@ -2431,7 +2431,8 @@ lastCommitTime, newCommitCounter, commitRecordAddr, commitRecordIndexAddr, old.getUUID(), quorumToken, metaStartAddr, metaBitsAddr, old.getStoreType(), - old.getCreateTime(), old.getCloseTime(), checker); + old.getCreateTime(), old.getCloseTime(), + old.getVersion(), checker); } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/FileMetadata.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/FileMetadata.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/FileMetadata.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -750,12 +750,12 @@ offsetBits, nextOffset, firstCommitTime, lastCommitTime, commitCounter, commitRecordAddr, commitRecordIndexAddr, uuid, quorumToken,// - 0L, 0L, stenum, createTime, closeTime, checker); + 0L, 0L, stenum, createTime, closeTime, version, checker); final IRootBlockView rootBlock1 = new RootBlockView(false, offsetBits, nextOffset, firstCommitTime, lastCommitTime, commitCounter, commitRecordAddr, commitRecordIndexAddr, uuid, quorumToken,// - 0L, 0L, stenum, createTime, closeTime, checker); + 0L, 0L, stenum, createTime, closeTime, version, checker); if (!temporary) { Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWAddressManager.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWAddressManager.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWAddressManager.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -1,6 +1,7 @@ package com.bigdata.journal; import com.bigdata.rawstore.IAddressManager; +import com.bigdata.rwstore.RWStore; /** * @@ -8,6 +9,11 @@ */ public class RWAddressManager implements IAddressManager { + RWStore m_store; + + public RWAddressManager(final RWStore store) { + m_store = store; + } public int getByteCount(final long addr) { return (int) (addr & 0xFFFFFFFFL); } @@ -21,8 +27,13 @@ } public String toString(final long addr) { - return "{off=" + getOffset(addr) + ",len=" + getByteCount(addr) - + "}"; + if (m_store == null) { + return "{off=NATIVE:" + getOffset(addr) + ",len=" + getByteCount(addr) + + "}"; + } else { + return "{off=" + m_store.physicalAddress((int) getOffset(addr)) + ",len=" + getByteCount(addr) + + "}"; + } } } \ No newline at end of file Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWStrategy.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWStrategy.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RWStrategy.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -76,7 +76,7 @@ private static final transient Logger log = Logger.getLogger(RWStrategy.class); - private final IAddressManager m_am = new RWAddressManager(); + private final IAddressManager m_am; /** * The backing store implementation. @@ -115,6 +115,8 @@ m_store = new RWStore(fileMetadata, quorum); + m_am = new RWAddressManager(m_store); + m_initialExtent = fileMetadata.file.length(); } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RootBlockView.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RootBlockView.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/RootBlockView.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -279,7 +279,7 @@ 0L, // metaStartAddr 0L, // metaBitsAddr StoreTypeEnum.WORM, // - createTime, closeTime, checker); + createTime, closeTime, currentVersion, checker); } @@ -353,6 +353,7 @@ * used by the {@link ResourceManager} to indicate that a journal * is no longer available for writing (because it has been * superseded by another journal). + * @param version */ RootBlockView(// final boolean rootBlock0, final int offsetBits, @@ -365,7 +366,7 @@ final long metaBitsAddr, // VERSION1 final StoreTypeEnum storeTypeEnum, // VERSION1 final long createTime, final long closeTime, - final ChecksumUtility checker) + final int version, final ChecksumUtility checker) { // Note: There is a unit test specifically for this condition. @@ -383,7 +384,7 @@ case RW: { // @todo check metaStartAddr // @todo check metaBitsAddr - am = new RWAddressManager(); + am = new RWAddressManager(null); // @todo check nextOffset break; } @@ -647,7 +648,7 @@ switch (getStoreType()) { case RW: { - am = new RWAddressManager(); + am = new RWAddressManager(null); break; Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/WriteExecutorService.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/WriteExecutorService.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/WriteExecutorService.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -913,6 +913,18 @@ final int nwrites = this.nwrites.incrementAndGet(); assert nwrites > 0; + + /* + * If an IsolatedActionJournal then we want to unravel any + * updates. + * + * So should we even be here doing a group commit? + */ +// IJournal jnl = r.getJournal(); +// if (jnl instanceof AbstractTask.IsolatedActionJournal) { +// // undo any journal writes prior to external commit +// ((AbstractTask.IsolatedActionJournal) jnl).abortContext(); +// } // add to the commit group. commitGroup.put(Thread.currentThread(), r); @@ -2300,6 +2312,7 @@ } // note: throws IllegalStateException if resource manager is not open. + // final AbstractJournal journal = resourceManager.getLiveJournal(); final AbstractJournal journal = resourceManager.getLiveJournal(); if(!journal.isOpen()) { Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/AllocBlock.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/AllocBlock.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/AllocBlock.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -139,6 +139,10 @@ */ public boolean freeBit(final int bit, final boolean sessionProtect) { if (!RWStore.tstBit(m_live, bit)) { + + if (sessionProtect && RWStore.tstBit(m_transients, bit)) + return false; + throw new IllegalArgumentException("Freeing bit not set"); } @@ -293,13 +297,39 @@ * T 1100 1110 1111 1110 * C 1100 1100 1110 1100 */ - public void abortshadow() { + public void abortshadow(final RWWriteCacheService cache) { for (int i = 0; i < m_live.length; i++) { + final int startBit = i * 32; + final int chkbits = m_live[i] & ~m_commit[i]; + clearCacheBits(cache, startBit, chkbits); + m_live[i] &= m_commit[i]; m_transients[i] = m_live[i] | m_saveCommit[i]; } m_commit = m_saveCommit; } + + private int clearCacheBits(RWWriteCacheService cache, final int startBit, final int chkbits) { + int freebits = 0; + + if (chkbits != 0) { + // there are writes to clear + for (int b = 0; b < 32; b++) { + if ((chkbits & (1 << b)) != 0) { + long clr = RWStore.convertAddr(m_addr) + ((long) m_allocator.m_size * (startBit + b)); + + if (log.isTraceEnabled()) + log.trace("releasing address: " + clr); + + cache.clearWrite(clr); + + freebits++; + } + } + } + + return freebits; + } /** * When a session is active, the transient bits do not equate to an ORing @@ -325,21 +355,8 @@ chkbits &= ~m_transients[i]; final int startBit = i * 32; - if (chkbits != 0) { - // there are writes to clear - for (int b = 0; b < 32; b++) { - if ((chkbits & (1 << b)) != 0) { - long clr = RWStore.convertAddr(m_addr) + ((long) m_allocator.m_size * (startBit + b)); - - if (log.isTraceEnabled()) - log.trace("releasing address: " + clr); - - cache.clearWrite(clr); - - freebits++; - } - } - } + + freebits += clearCacheBits(cache, startBit, chkbits); } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/FixedAllocator.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -153,7 +153,7 @@ } } - volatile private IAllocationContext m_context; + volatile IAllocationContext m_context; /** * Indicates whether session protection has been used to protect @@ -168,25 +168,34 @@ for (AllocBlock allocBlock : m_allocBlocks) { allocBlock.deshadow(); } - } else if (context != null & m_context == null) { + + // return to dirty list + m_store.addToCommit(this); + + } else if (context != null && m_context == null) { // restore commit bits in AllocBlocks for (AllocBlock allocBlock : m_allocBlocks) { allocBlock.shadow(); } + + // remove from dirty list if present! + // NO! m_store.removeFromCommit(this); } m_context = context; } /** - * Unwinds the allocations made within the context and clears + * Unwinds the allocations made within the context and clears the write + * cache of any associated data + * @param writeCacheService */ - public void abortAllocationContext(final IAllocationContext context) { - if (context != null && m_context == context) { + public void abortAllocationContext(final IAllocationContext context, RWWriteCacheService writeCacheService) { + if (m_context != null) { // restore commit bits in AllocBlocks for (AllocBlock allocBlock : m_allocBlocks) { - allocBlock.abortshadow(); + allocBlock.abortshadow(writeCacheService); } - m_context = null; + m_context = context; } else { throw new IllegalArgumentException(); } @@ -214,7 +223,11 @@ str.writeInt(block.m_addr); for (int i = 0; i < m_bitSize; i++) { - str.writeInt(block.m_live[i]); + if (m_context != null) { // shadowed + str.writeInt(block.m_transients[i]); + } else { + str.writeInt(block.m_live[i]); + } } if (!m_sessionActive) { @@ -513,19 +526,23 @@ final int block = offset/nbits; m_sessionActive = m_store.isSessionProtected(); - - if (((AllocBlock) m_allocBlocks.get(block)) - .freeBit(offset % nbits, m_sessionActive && !overideSession)) { // bit adjust + try { + if (((AllocBlock) m_allocBlocks.get(block)) + .freeBit(offset % nbits, m_sessionActive && !overideSession)) { // bit adjust + + m_freeBits++; + checkFreeList(); + } else { + m_freeTransients++; + } - m_freeBits++; - checkFreeList(); - } else { - m_freeTransients++; + if (m_statsBucket != null) { + m_statsBucket.delete(size); + } + } catch (IllegalArgumentException iae) { + // catch and rethrow with more information + throw new IllegalArgumentException("IAE with address: " + addr + ", size: " + size + ", context: " + (m_context == null ? -1 : m_context.hashCode()), iae); } - - if (m_statsBucket != null) { - m_statsBucket.delete(size); - } return true; } else if (addr >= m_startAddr && addr < m_endAddr) { @@ -797,6 +814,11 @@ return false; } } + + public boolean isUnsafeFree(final IAllocationContext context) { + // return m_context != null || context != null; // m_context != context; + return m_context != context; + } public void setBucketStats(Bucket b) { m_statsBucket = b; Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWStore.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -60,6 +60,7 @@ import com.bigdata.io.FileChannelUtility; import com.bigdata.io.IReopenChannel; import com.bigdata.io.writecache.BufferedWrite; +import com.bigdata.io.writecache.IBufferedWriter; import com.bigdata.io.writecache.WriteCache; import com.bigdata.io.writecache.WriteCacheService; import com.bigdata.journal.AbstractBufferStrategy; @@ -225,7 +226,7 @@ * space can be reclaimed). */ -public class RWStore implements IStore { +public class RWStore implements IStore, IBufferedWriter { private static final transient Logger log = Logger.getLogger(RWStore.class); @@ -1138,7 +1139,7 @@ m_allocs.add(allocator); if (m_storageStats != null) { - m_storageStats.register(allocator); + m_storageStats.register(allocator, true); } return allocator; @@ -1424,6 +1425,8 @@ c.release(); } } + } catch (PhysicalAddressResolutionException e) { + throw new IllegalArgumentException("Unable to read data: "+e, e); } catch (Throwable e) { /* * Note: ClosedByInterruptException can be thrown out of @@ -1432,8 +1435,6 @@ * error. */ // log.error(e,e); - -// throw new IllegalArgumentException("Unable to read data: "+e, e); throw new RuntimeException("addr=" + addr + " : cause=" + e, e); } @@ -1538,7 +1539,7 @@ free(laddr, sze, null/* AlocationContext */); } - + private long m_unsafeFrees = 0; /** * free * <p> @@ -1573,7 +1574,22 @@ freeBlob(addr, sze, context); } else { final FixedAllocator alloc = getBlockByAddress(addr); - /* + + /** + * If a request is made to free storage associated with some other + * allocation context, then it is unsafe to recycle. + */ + if (alloc.isUnsafeFree(context)) { + if ((++m_unsafeFrees % 5000) == 0 && log.isDebugEnabled()) { + log.debug("Unsafe frees : " + m_unsafeFrees + ", allocations: " + m_allocations + ", frees: " + m_frees); + StringBuilder sb = new StringBuilder(); + m_storageStats.showStats(sb); + log.debug(sb); + } + return; + } + + /* * There are a few conditions here. If the context owns the * allocator and the allocation was made by this context then it * can be freed immediately. The problem comes when the context @@ -1602,6 +1618,8 @@ immediateFree(addr, sze); } } else { + // if a free request is made within a context not managed by + // the allocator then it is not safe to free boolean alwaysDefer = m_activeTxCount > 0; if (!alwaysDefer) @@ -1733,14 +1751,15 @@ m_writeCache.clearWrite(pa); } m_frees++; + if (alloc.isAllocated(addrOffset)) throw new IllegalStateException("Reallocation problem with WriteCache"); - if (!m_commitList.contains(alloc)) { + if (alloc.m_context != null && !m_commitList.contains(alloc)) { m_commitList.add(alloc); - - m_recentAlloc = true; } + + m_recentAlloc = true; } finally { m_allocationLock.unlock(); } @@ -1837,7 +1856,7 @@ final int addr = allocator.alloc(this, size, context); - if (!m_commitList.contains(allocator)) { + if (allocator.m_context != null && !m_commitList.contains(allocator)) { m_commitList.add(allocator); } @@ -2169,7 +2188,7 @@ // return "RWStore " + s_version; // } - public void commitChanges(final Journal journal) { + public void commitChanges(final AbstractJournal journal) { assertOpen(); checkCoreAllocations(); @@ -2289,7 +2308,7 @@ * returns number of addresses freed */ /* public */int checkDeferredFrees(final boolean freeNow, - final Journal journal) { + final AbstractJournal journal) { // Note: Invoked from unit test w/o the lock... // if (!m_allocationLock.isHeldByCurrentThread()) @@ -2297,7 +2316,7 @@ if (journal != null) { - final JournalTransactionService transactionService = (JournalTransactionService) journal + final AbstractTransactionService transactionService = (AbstractTransactionService) journal .getLocalTransactionManager().getTransactionService(); // // the previous commit point. @@ -2492,8 +2511,6 @@ * the allocation blocks at the end of the file. */ int metaAlloc() { -// long lnextAlloc = convertAddr(m_nextAllocation); - int bit = fndMetabit(); if (bit < 0) { @@ -2910,7 +2927,7 @@ * latched2Physical **/ public long physicalAddress(final int addr) { - if (addr > 0) { + if (addr >= 0) { return addr & 0xFFFFFFE0; } else { final FixedAllocator allocator = getBlock(addr); @@ -3096,12 +3113,17 @@ // } // } - public void addToCommit(final Allocator allocator) { + void addToCommit(final Allocator allocator) { if (!m_commitList.contains(allocator)) { m_commitList.add(allocator); } } + + void removeFromCommit(final Allocator allocator) { + m_commitList.remove(allocator); + } + public Allocator getAllocator(final int i) { return (Allocator) m_allocs.get(i); } @@ -3138,61 +3160,40 @@ } - public FileChannel reopenChannel() throws IOException { + synchronized public FileChannel reopenChannel() throws IOException { - /* - * Note: This is basically a double-checked locking pattern. It is - * used to avoid synchronizing when the backing channel is already - * open. - */ - { - final RandomAccessFile tmp = raf; - if (tmp != null) { - final FileChannel channel = tmp.getChannel(); - if (channel.isOpen()) { - // The channel is still open. - return channel; - } - } - } - - synchronized(this) { + if (raf != null && raf.getChannel().isOpen()) { - if (raf != null) { - final FileChannel channel = raf.getChannel(); - if (channel.isOpen()) { - /* - * The channel is still open. If you are allowing - * concurrent reads on the channel, then this could - * indicate that two readers each found the channel - * closed and that one was able to re-open the channel - * before the other such that the channel was open again - * by the time the 2nd reader got here. - */ - return channel; - } - } + /* + * The channel is still open. If you are allowing concurrent + * reads on the channel, then this could indicate that two + * readers each found the channel closed and that one was able + * to re-open the channel before the other such that the channel + * was open again by the time the 2nd reader got here. + */ - // open the file. - this.raf = new RandomAccessFile(file, mode); + return raf.getChannel(); - // Update counters. - final StoreCounters<?> c = (StoreCounters<?>) storeCounters - .get().acquire(); - try { - c.nreopen++; - } finally { - c.release(); - } + } - return raf.getChannel(); + // open the file. + this.raf = new RandomAccessFile(file, mode); - } + // Update counters. + final StoreCounters<?> c = (StoreCounters<?>) storeCounters.get() + .acquire(); + try { + c.nreopen++; + } finally { + c.release(); + } + + return raf.getChannel(); } } - + /** * If the current file extent is different from the required extent then the * call is made to {@link #extendFile(int)}. @@ -3502,6 +3503,7 @@ final ContextAllocation alloc = m_contexts.remove(context); if (alloc != null) { + m_contextRemovals++; alloc.release(); } } finally { @@ -3525,6 +3527,7 @@ final ContextAllocation alloc = m_contexts.remove(context); if (alloc != null) { + m_contextRemovals++; alloc.abort(); } } finally { @@ -3592,12 +3595,13 @@ for (FixedAllocator f : m_allFixed) { f.setAllocationContext(pcontext); + // will add to free list if required f.setFreeList(freeFixed[m_store.fixedAllocatorIndex(f.m_size)]); } - for (int i = 0; i < m_freeFixed.length; i++) { - freeFixed[i].addAll(m_freeFixed[i]); - } +// for (int i = 0; i < m_freeFixed.length; i++) { +// freeFixed[i].addAll(m_freeFixed[i]); +// } // freeBlobs.addAll(m_freeBlobs); } @@ -3610,12 +3614,13 @@ : m_parent.m_context; for (FixedAllocator f : m_allFixed) { - f.abortAllocationContext(pcontext); + f.abortAllocationContext(pcontext, m_store.m_writeCache); + f.setFreeList(freeFixed[m_store.fixedAllocatorIndex(f.m_size)]); } - for (int i = 0; i < m_freeFixed.length; i++) { - freeFixed[i].addAll(m_freeFixed[i]); - } +// for (int i = 0; i < m_freeFixed.length; i++) { +// freeFixed[i].addAll(m_freeFixed[i]); +// } // freeBlobs.addAll(m_freeBlobs); } @@ -3625,8 +3630,7 @@ if (free.size() == 0) { final FixedAllocator falloc = establishFixedAllocator(i); falloc.setAllocationContext(m_context); - falloc.setFreeList(free); - free.add(falloc); + falloc.setFreeList(free); // will add to free list m_allFixed.add(falloc); } @@ -3656,6 +3660,8 @@ private final Map<IAllocationContext, ContextAllocation> m_contexts = new ConcurrentHashMap<IAllocationContext, ContextAllocation>(); + private int m_contextRequests = 0; + private int m_contextRemovals = 0; private ContextAllocation establishContextAllocation( final IAllocationContext context) { @@ -3668,7 +3674,7 @@ ContextAllocation ret = m_contexts.get(context); if (ret == null) { - + ret = new ContextAllocation(this, m_freeFixed.length, null, context); if (m_contexts.put(context, ret) != null) { @@ -3677,6 +3683,14 @@ } + if (log.isTraceEnabled()) + log.trace("Establish ContextAllocation: " + ret + + ", total: " + m_contexts.size() + + ", requests: " + ++m_contextRequests + + ", removals: " + m_contextRemovals + + ", allocators: " + m_allocs.size() ); + + if (log.isInfoEnabled()) log.info("Context: ncontexts=" + m_contexts.size() + ", context=" + context); Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWWriteCacheService.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWWriteCacheService.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/RWWriteCacheService.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -42,7 +42,7 @@ * * @author mgc */ -public class RWWriteCacheService extends WriteCacheService { +public class RWWriteCacheService extends WriteCacheService implements IWriteCacheManager { protected static final Logger log = Logger.getLogger(RWWriteCacheService.class); @@ -74,5 +74,9 @@ (IReopenChannel<FileChannel>) opener, null); } + + public boolean removeWriteToAddr(long address) { + return clearWrite(address); + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/StorageStats.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/StorageStats.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/rwstore/StorageStats.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -32,6 +32,8 @@ import java.math.RoundingMode; import java.util.ArrayList; +import com.bigdata.rwstore.sector.SectorAllocator; + /** * Maintains stats on the RWStore allocations, useful for tuning Allocator * sizes and tracking store efficiency. @@ -528,4 +530,9 @@ return used.divide(total, 2, RoundingMode.HALF_UP).floatValue(); } + + public void register(SectorAllocator allocator, boolean init) { + // TODO Auto-generated method stub + + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/journal/TestRootBlockView.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/journal/TestRootBlockView.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/journal/TestRootBlockView.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -129,7 +129,7 @@ nextOffset, firstCommitTime, lastCommitTime, commitCounter, commitRecordAddr, commitRecordIndexAddr, uuid, quorum, metaStartAddr, metaBitsAddr, storeType, createTime, - closeTime, checker); + closeTime, RootBlockView.currentVersion, checker); if (log.isInfoEnabled()) log.info("pass=" + i + " of " + nrounds + " : challisField=" @@ -399,43 +399,46 @@ // legit. new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, - uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, closeTimeOk, checkerOk); + uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, closeTimeOk, + RootBlockView.currentVersion, checkerOk); // legit (firstCommitTimeOk2,lastCommitTimeOk2). new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk2, lastCommitTimeOk2, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, - uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, closeTimeOk, checkerOk); + uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, closeTimeOk, + RootBlockView.currentVersion, checkerOk); // legit (rootsAddr2, commitRecordIndex2) new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOk2, commitRecordAddrOk2, commitRecordIndexOk2, - uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, closeTimeOk, checkerOk); + uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, closeTimeOk, + RootBlockView.currentVersion, checkerOk); // legit (closeTime2) new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk2, checkerOk); + closeTimeOk2, RootBlockView.currentVersion, checkerOk); // legit (quorum) new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk2, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk2, checkerOk); + closeTimeOk2, RootBlockView.currentVersion, checkerOk); new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk3, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk2, checkerOk); + closeTimeOk2, RootBlockView.currentVersion, checkerOk); // FIXME do legit (metaStartAddr, metaBitsAddr) tests here. // legit (storeTypeEnum) new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk2, createTimeOk, - closeTimeOk2, checkerOk); + closeTimeOk2, RootBlockView.currentVersion, checkerOk); // bad offsetBits. try { new RootBlockView(rootBlock0, offsetBitsBad, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -444,7 +447,7 @@ new RootBlockView(rootBlock0, offsetBitsBad2, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -455,7 +458,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetBad, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -466,7 +469,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeBad1, lastCommitTimeBad1, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); } catch (IllegalArgumentException ex) { fail("Unexpected exception", ex); } @@ -474,7 +477,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeBad2, lastCommitTimeBad2, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -483,7 +486,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeBad3, lastCommitTimeBad3, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); } catch (IllegalArgumentException ex) { fail("Unexpected exception", ex); } @@ -491,7 +494,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeBad4, lastCommitTimeBad4, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); } catch (IllegalArgumentException ex) { fail("Unexpected exception", ex); } @@ -501,7 +504,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterBad, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -510,7 +513,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterBad2, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -522,7 +525,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOk2, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -532,7 +535,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOk2, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -542,7 +545,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOk2, commitRecordAddrOkZero, commitRecordIndexOk2, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -552,7 +555,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOk2, commitRecordAddrOk2, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -561,7 +564,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -570,7 +573,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOk2, commitRecordIndexBad, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -583,7 +586,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOk2, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -594,7 +597,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidBad, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -605,7 +608,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidOk, quorumBad, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeBad, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -618,7 +621,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeBad, createTimeBad, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -629,7 +632,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidBad, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeBad, - closeTimeOk, checkerOk); + closeTimeOk, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -640,7 +643,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrBad, commitRecordIndexOk2, uuidBad, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeBad, checkerOk); + closeTimeBad, RootBlockView.currentVersion, checkerOk); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); @@ -651,7 +654,7 @@ new RootBlockView(rootBlock0, offsetBitsOk, nextOffsetOk, firstCommitTimeOk, lastCommitTimeOk, commitCounterOkZero, commitRecordAddrOkZero, commitRecordIndexOkZero, uuidOk, quorumOk, metaStartAddr, metaBitsAddr, storeTypeOk, createTimeOk, - closeTimeOk, checkerBad); + closeTimeOk, RootBlockView.currentVersion, checkerBad); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if(log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/rwstore/TestRWJournal.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/rwstore/TestRWJournal.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/rwstore/TestRWJournal.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -766,7 +766,7 @@ RWStore rw = bufferStrategy.getRWStore(); - final int tcount = 2000; // increase to ramp up stress levels + final int tcount = 5000; // increase to ramp up stress levels long numAllocs = rw.getTotalAllocations(); long startAllocations = rw.getTotalAllocationsSize(); @@ -820,6 +820,12 @@ } + public void notest_stressReallocationWithReadAndReopen() { + for (int i = 0; i < 20; i++) { + test_reallocationWithReadAndReopen(); + } + } + void showStore(Journal store) { RWStrategy bufferStrategy = (RWStrategy) store.getBufferStrategy(); @@ -896,7 +902,7 @@ try { - final int tcount = 2000; // increase to ramp up stress levels + final int tcount = 20000; // increase to ramp up stress levels RWStrategy bufferStrategy = (RWStrategy) store.getBufferStrategy(); @@ -1044,6 +1050,12 @@ } } + + public void notest_stressBlobReadBack() { + for (int i = 0; i < 100; i++) { + test_blob_readBack(); + } + } /** * Test of blob allocation and read-back, firstly from cache and then Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/StressTestConcurrent.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/StressTestConcurrent.java 2011-04-19 14:12:54 UTC (rev 4414) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/StressTestConcurrent.java 2011-04-19 15:10:52 UTC (rev 4415) @@ -134,7 +134,7 @@ final Properties properties = new Properties(super.getProperties()); // Make sure this test uses disk so that it can trigger overflows. - properties.setProperty(Options.BUFFER_MODE, BufferMode.Disk + properties.setProperty(Options.BUFFER_MODE, BufferMode.Disk .toString()); /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |