You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2012/06/07 17:15:05 UTC
svn commit: r1347666 - in /jena/trunk/jena-tdb/src:
main/java/com/hp/hpl/jena/tdb/base/block/
main/java/com/hp/hpl/jena/tdb/base/file/
main/java/com/hp/hpl/jena/tdb/index/bplustree/
main/java/com/hp/hpl/jena/tdb/transaction/ test/java/com/hp/hpl/jena/t...
Author: andy
Date: Thu Jun 7 15:15:04 2012
New Revision: 1347666
URL: http://svn.apache.org/viewvc?rev=1347666&view=rev
Log:
JENA-250
1/ Sync after creating a B+Tree (else block in the write cache).
2/ Add a BlockMgr that guarantees to pass down a sync request, for when the system has byapssssed caches.
Modified:
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java
jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestStoreConnections.java
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java Thu Jun 7 15:15:04 2012
@@ -76,6 +76,9 @@ public interface BlockMgr extends Sync,
@Override
public void sync() ;
+ /** Sync the block manager : system operation to ensure sync() is passed down */
+ public void syncForce() ;
+
// This is not Session interface which si more an application facing
// coarser granularity interface. We also add iterator tracking.
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java Thu Jun 7 15:15:04 2012
@@ -316,6 +316,8 @@ public class BlockMgrCache extends Block
Long id = ids[i] ;
expelEntry(id) ;
}
+ if ( didSync )
+ super.sync() ;
return didSync ;
}
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java Thu Jun 7 15:15:04 2012
@@ -35,6 +35,7 @@ public class BlockMgrFileAccess extends
private final BlockAccess file ;
private boolean closed = false ;
+ private boolean syncNeeded = false ; // Set on any write operations.
// Create via the BlockMgrFactory.
/*package*/ BlockMgrFileAccess(BlockAccess blockAccess, int blockSize)
@@ -46,6 +47,7 @@ public class BlockMgrFileAccess extends
@Override
protected Block allocate()
{
+ syncNeeded = true ;
return file.allocate(blockSize) ;
}
@@ -89,19 +91,21 @@ public class BlockMgrFileAccess extends
@Override
public void write(Block block)
{
+ syncNeeded = true ;
file.write(block) ;
}
@Override
public void overwrite(Block block)
{
+ syncNeeded = true ;
file.overwrite(block) ;
}
-
@Override
public void free(Block block)
{
+ //syncNeeded = true ;
// We do nothing about free blocks currently.
}
@@ -113,7 +117,20 @@ public class BlockMgrFileAccess extends
@Override
public void sync()
- { file.sync() ; }
+ {
+ if ( syncNeeded )
+ file.sync() ;
+ else
+ syncNeeded = true;
+ syncNeeded = false ;
+ }
+
+ @Override
+ public void syncForce()
+ {
+ sync() ;
+ }
+
@Override
public boolean isClosed() { return closed ; }
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java Thu Jun 7 15:15:04 2012
@@ -149,11 +149,18 @@ public class BlockMgrLogger implements B
@Override
public void sync()
{
- info("Sync") ;
+ info("sync") ;
blockMgr.sync() ;
}
@Override
+ public void syncForce()
+ {
+ info("syncForce") ;
+ blockMgr.syncForce() ;
+ }
+
+ @Override
public void beginIterator(Iterator<?> iter)
{
info("> start iterator") ;
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java Thu Jun 7 15:15:04 2012
@@ -32,6 +32,8 @@ public class BlockMgrSync implements Blo
this.blockMgr = blockMgr ;
}
+ public BlockMgr getWrapped() { return blockMgr ; }
+
@Override
synchronized
public Block allocate(int blockSize)
@@ -102,6 +104,15 @@ public class BlockMgrSync implements Blo
blockMgr.sync() ;
}
+
+ @Override
+ synchronized
+ public void syncForce()
+ {
+ blockMgr.syncForce() ;
+ }
+
+
@Override
synchronized
public void close()
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java Thu Jun 7 15:15:04 2012
@@ -259,6 +259,12 @@ public class BlockMgrTracker /*extends B
{
blockMgr.sync() ;
}
+
+ @Override
+ public void syncForce()
+ {
+ blockMgr.syncForce() ;
+ }
@Override
public void close()
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java Thu Jun 7 15:15:04 2012
@@ -38,6 +38,8 @@ public class BlockMgrWrapper implements
return old ;
}
+ public BlockMgr getWrapped() { return blockMgr ; }
+
@Override
public Block allocate(int blockSize)
{
@@ -105,6 +107,14 @@ public class BlockMgrWrapper implements
blockMgr.sync() ;
}
+
+ @Override
+ public void syncForce()
+ {
+ blockMgr.syncForce() ;
+ }
+
+
@Override
public boolean valid(int id)
{
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java Thu Jun 7 15:15:04 2012
@@ -274,4 +274,10 @@ public class BlockAccessMapped extends B
{
return log ;
}
+
+ @Override
+ public String toString()
+ {
+ return super.getLabel() ;
+ }
}
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java Thu Jun 7 15:15:04 2012
@@ -154,4 +154,11 @@ public class BlockAccessMem implements B
{
return label ;
}
+
+ @Override
+ public String toString()
+ {
+ return "Mem:"+label ;
+ }
+
}
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java Thu Jun 7 15:15:04 2012
@@ -222,6 +222,11 @@ public class BPlusTree implements Iterab
root.checkNodeDeep() ;
root.release() ;
}
+
+ // Sync created blocks to disk - any caches are now clean.
+ nodeManager.getBlockMgr().sync() ;
+ recordsMgr.getBlockMgr().sync() ;
+
// Cache : not currently done - root is null
//setRoot(root) ;
finishUpdateBlkMgr() ;
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java Thu Jun 7 15:15:04 2012
@@ -267,6 +267,12 @@ public class BlockMgrJournal implements
{
checkIfClosed() ;
}
+
+ @Override
+ public void syncForce()
+ {
+ blockMgr.syncForce() ;
+ }
// we only use the underlying blockMgr in read-mode - we don't write back blocks.
@Override
Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java Thu Jun 7 15:15:04 2012
@@ -24,6 +24,7 @@ import static java.lang.String.format ;
import java.io.File ;
import java.nio.ByteBuffer ;
+import java.util.Collection ;
import java.util.Iterator ;
import java.util.Map ;
@@ -255,11 +256,18 @@ public class JournalControl
public static void replay(Journal journal, DatasetGraphTDB dsg)
{
+ if ( journal.size() == 0 )
+ return ;
+
journal.position(0) ;
dsg.getLock().enterCriticalSection(Lock.WRITE) ;
try {
for ( JournalEntry e : journal )
replay(e, dsg) ;
+ // There is no point sync here.
+ // No writes via the DSG have been done
+ // so all internal flags "syncNeeded" are false.
+ //dsg.sync() ;
}
catch (RuntimeException ex)
{
@@ -268,6 +276,11 @@ public class JournalControl
throw ex ;
}
finally { dsg.getLock().leaveCriticalSection() ; }
+
+ Collection<BlockMgr> x = dsg.getConfig().blockMgrs.values() ;
+ for ( BlockMgr blkMgr : x )
+ blkMgr.syncForce() ;
+ // Must do a hard sync before this.
journal.truncate(0) ;
}
@@ -290,11 +303,6 @@ public class JournalControl
log.debug("Replay: {} {}",e.getFileRef(), blk) ;
blk.setModified(true) ;
blkMgr.overwrite(blk) ;
-
-// Block blk = blkMgr.getWrite(e.getBlock().getId()) ;
-// blk.getByteBuffer().rewind() ;
-// blk.getByteBuffer().put(e.getBlock().getByteBuffer()) ;
-// blkMgr.write(e.getBlock()) ;
return true ;
}
case Buffer:
Modified: jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestStoreConnections.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestStoreConnections.java?rev=1347666&r1=1347665&r2=1347666&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestStoreConnections.java (original)
+++ jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestStoreConnections.java Thu Jun 7 15:15:04 2012
@@ -115,8 +115,7 @@ public class TestStoreConnections exten
StoreConnection.release(sConn.getLocation()) ;
}
-
- //@Test
+ @Test
public void store_4()
{
StoreConnection sConn = getStoreConnection() ;