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() ;