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 2011/11/05 13:02:41 UTC

svn commit: r1197941 - in /incubator/jena: Jena2/ARQ/trunk/ Jena2/SDB/trunk/ Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/ Jena2/TDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/ Scratch/AFS/Jena-Dev/trunk/src/dev/

Author: andy
Date: Sat Nov  5 12:02:40 2011
New Revision: 1197941

URL: http://svn.apache.org/viewvc?rev=1197941&view=rev
Log:
Notes for JENA-154

Added:
    incubator/jena/Jena2/SDB/trunk/L
Modified:
    incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt
    incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
    incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
    incubator/jena/Jena2/TDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/T_TransSystem.java
    incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/ReportJena154_GraphVarScope.java
    incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java

Modified: incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt?rev=1197941&r1=1197940&r2=1197941&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt (original)
+++ incubator/jena/Jena2/ARQ/trunk/ChangeLog.txt Sat Nov  5 12:02:40 2011
@@ -4,6 +4,7 @@ ChangeLog for ARQ
 ==== ARQ 2.8.9
 ** Java 6 is now required for running ARQ.
 
++ BUG FIX: Mis-execution of GRAPH ?g { .. } where ?g used inside { .. } (JENA-154)
 + REGEX now accepts xsd:string and literals with language tags in the first argument. 
 + Add function STRBEFORE, STRAFTER and REPLACE for SPARQL 1.1
 + Add function UUID  [ARQ language only]  

Added: incubator/jena/Jena2/SDB/trunk/L
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/SDB/trunk/L?rev=1197941&view=auto
==============================================================================
--- incubator/jena/Jena2/SDB/trunk/L (added)
+++ incubator/jena/Jena2/SDB/trunk/L Sat Nov  5 12:02:40 2011
@@ -0,0 +1,20 @@
+src/com/hp/hpl/jena/sdb/assembler/AssemblerVocab.java:    // ModeRDB graph name - on the connection
+src/com/hp/hpl/jena/sdb/assembler/AssemblerVocab.java:    public static final Property pRDBtype           = Vocab.property(NS, "rdbType") ;
+src/com/hp/hpl/jena/sdb/assembler/AssemblerVocab.java:    // ModeRDB graph name - on the layout
+src/com/hp/hpl/jena/sdb/assembler/AssemblerVocab.java:    public static final Property pModelRDBname      = Vocab.property(NS, "rdbModelName") ;
+src/com/hp/hpl/jena/sdb/assembler/SDBConnectionDescAssembler.java:        sDesc.setRdbType(  GraphUtils.getStringValue(root, AssemblerVocab.pRDBtype) ) ;
+src/com/hp/hpl/jena/sdb/assembler/StoreDescAssembler.java:        // ModelRDB special
+src/com/hp/hpl/jena/sdb/assembler/StoreDescAssembler.java:        storeDesc.rdbModelName = GraphUtils.getStringValue(root, AssemblerVocab.pModelRDBname) ;
+src/com/hp/hpl/jena/sdb/StoreDesc.java:    /** ModelRDB spefic */
+src/com/hp/hpl/jena/sdb/layout1/TableDescRDB.java:public class TableDescRDB extends TableDescTriples
+src/com/hp/hpl/jena/sdb/layout1/TableDescRDB.java:    public TableDescRDB()
+src/com/hp/hpl/jena/sdb/graph/PrefixMappingSDB.java:        // ModelRDB does not support prefixes in the same way as models/graphs over SDB stores. 
+src/com/hp/hpl/jena/sdb/sql/SDBConnectionDesc.java:    public String rdbType    = null ;    // ModelRDB specific
+src/com/hp/hpl/jena/sdb/store/Feature.java://    LayoutRDB          { public String getName() { return "RDB" ; } } ,          
+src/com/hp/hpl/jena/sdb/store/LayoutType.java:    public static final LayoutType LayoutRDB              = new LayoutType("layoutRDB") ;
+src/com/hp/hpl/jena/sdb/store/LayoutType.java:        register(LayoutRDB) ;
+src/sdb/sdbprint.java:        if ( storeDesc.getLayout() != LayoutType.LayoutRDB )
+src/sdb/sdbprint.java:            // Only fake the connection if not ModelRDB
+src-dev/dev/RDB.java:/** Setup RDB properties */ 
+src-dev/dev/RDB.java:public class RDB
+src-test/com/hp/hpl/jena/sdb/test/misc/TestRegistry.java:                                "layoutRDB" } ;

Modified: incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java?rev=1197941&r1=1197940&r2=1197941&view=diff
==============================================================================
--- incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java (original)
+++ incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java Sat Nov  5 12:02:40 2011
@@ -152,7 +152,7 @@ public class Transaction
                     abort() ;
                 }
                 break ;
-                default:
+            default:
         }
         
         state = TxnState.CLOSED ;
@@ -185,7 +185,63 @@ public class Transaction
     }
 
     public void addIterator(Iterator<?> iter)       { iterators.add(iter) ; }
-    public void removeIterator(Iterator<?> iter)    { iterators.remove(iter) ; }
+    //public void removeIterator(Iterator<?> iter)    { iterators.remove(iter) ; }
+    
+    private volatile StackTraceElement[] enteredThread      = null ;
+    private volatile String              previousThreadName = null ;
+    private static final int SLEN = 25 ;
+    private static final Object lock = new Object() ;
+    private static volatile int counter = 0 ;
+    private static volatile Transaction otherTransaction = null ;
+    /*package*/ volatile boolean flushed = false ;
+    
+    public void removeIterator(Iterator<? > iter)
+    {
+        if ( false )
+            iterators.remove(iter) ;
+        else
+        {
+            StackTraceElement[] previousThread = enteredThread ;
+            Transaction otherTransaction2 = otherTransaction ;
+            if (previousThread != null)
+            {
+                synchronized(lock)
+                {
+                    Thread currentThread = Thread.currentThread() ;
+                    System.out.println() ;
+                    System.out.println("2 threads accessing removeIterator at the same time in transaction") ;
+                    System.out.println("Previous: "+ otherTransaction2) ;
+                    System.out.println("Current: "+ this) ;
+                    System.out.println("Transaction flushed: "+flushed) ; 
+                    System.out.println("Iterator recorded: "+iterators.contains(iter)) ;
+    
+                    System.out.println("previous thread:" + previousThreadName) ;
+    
+                    for (int i = 0; i < Math.min(SLEN, previousThread.length); i++)
+                    {
+                        System.out.println("  "+previousThread[i].toString()) ;
+                    }
+                    System.out.println() ;
+                    System.out.println("current thread:" + currentThread.getName()) ;
+                    StackTraceElement[] currentStackTrace = currentThread.getStackTrace() ;
+                    for (int i = 0; i < Math.min(SLEN, currentStackTrace.length); i++)
+                    {
+                        System.out.println("  "+currentStackTrace[i].toString()) ;
+                    }
+                    counter ++ ;
+                    if ( counter >= 1 )
+                        System.exit(-99) ;
+                }
+            }
+            otherTransaction = this ;
+            enteredThread = Thread.currentThread().getStackTrace() ;
+            previousThreadName = Thread.currentThread().getName() ;
+            iterators.remove(iter) ;
+            enteredThread = null ;
+            otherTransaction = null ;
+        }
+    }
+    
     public List<Iterator<?>> iterators()            { return Collections.unmodifiableList(iterators) ; }
     
     public List<TransactionLifecycle> components()

Modified: incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java?rev=1197941&r1=1197940&r2=1197941&view=diff
==============================================================================
--- incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java (original)
+++ incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java Sat Nov  5 12:02:40 2011
@@ -381,6 +381,7 @@ public class TransactionManager
             x.commitEnact(transaction) ;
             x.commitClearup(transaction) ;
         }
+        transaction.flushed = true ;
     }
 
     void processDelayedReplayQueue(Transaction txn)

Modified: incubator/jena/Jena2/TDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/T_TransSystem.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/TDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/T_TransSystem.java?rev=1197941&r1=1197940&r2=1197941&view=diff
==============================================================================
--- incubator/jena/Jena2/TDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/T_TransSystem.java (original)
+++ incubator/jena/Jena2/TDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/T_TransSystem.java Sat Nov  5 12:02:40 2011
@@ -68,7 +68,7 @@ public class T_TransSystem
             log.error("**** Running with file mapped mode on MS Windows - expected test failure") ;
     }
     
-    static boolean MEM = false ;
+    static boolean MEM = true ;
     
     static final Location LOC = MEM ? Location.mem() : new Location(ConfigTest.getTestingDirDB()) ;
 
@@ -77,11 +77,6 @@ public class T_TransSystem
     static boolean inlineProgress           = true ; // (! log.isDebugEnabled()) && Iterations > 20 ;
     static boolean logging                  = ! inlineProgress ; // (! log.isDebugEnabled()) && Iterations > 20 ;
     
-    /*
-     * 5/0/5 blocks. with 50/50 pause, 50R/ 20W
-     * Others?
-     */
-
     static final int numReaderTasks         = 5 ;
     static final int numWriterTasksA        = 2 ; 
     static final int numWriterTasksC        = 5 ;
@@ -137,9 +132,11 @@ public class T_TransSystem
     
     private static void clean()
     {
-        StoreConnection.release(LOC) ;
         if ( ! LOC.isMem() )
+        {
+            StoreConnection.release(LOC) ;
             FileOps.clearDirectory(LOC.getDirectoryPath()) ;
+        }
     }
 
     static class Reader implements Callable<Object>
@@ -154,7 +151,7 @@ public class T_TransSystem
             this.maxpause = pause ;
             this.sConn = sConn ;
         }
-    
+
         @Override
         public Object call()
         {
@@ -205,7 +202,7 @@ public class T_TransSystem
             this.sConn = sConn ;
             this.commit = commit ;
         }
-        
+
         @Override
         public Object call()
         {
@@ -333,9 +330,9 @@ public class T_TransSystem
             }
         } ;
 
-        submit(execService, procR,   numReaderTasks) ;
-        submit(execService, procW_c, numWriterTasksC) ;
-        submit(execService, procW_a, numWriterTasksA) ;
+        submit(execService, procR,   numReaderTasks, "READ-") ;
+        submit(execService, procW_c, numWriterTasksC, "COMMIT-") ;
+        submit(execService, procW_a, numWriterTasksA, "ABORT-") ;
         
         try
         {
@@ -347,10 +344,24 @@ public class T_TransSystem
         } 
     }
 
-    private void submit(ExecutorService execService2, Callable<?> proc, int numTasks)
+    static class Callable2Runnable<T> implements Runnable
+    {
+        private Callable<T> callable ;
+
+        Callable2Runnable(Callable<T> callable) { this.callable = callable ; }
+        
+        @Override public void run() { try { callable.call() ; } catch (Exception ex) {} }
+    }
+    
+    private static int counter = 0 ;
+    private <T> void submit(ExecutorService execService, Callable<T> proc, int numTasks, String label)
     {
         for ( int i = 0 ; i < numTasks ; i++ )
-            execService.submit(proc) ;
+        {
+            //execService.submit(proc) ;
+            counter++ ;
+            new Thread(new Callable2Runnable<T>(proc), label+counter).start() ;
+        }
     }
 
     static int changeProc(DatasetGraphTxn dsg, int id, int i)

Modified: incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/ReportJena154_GraphVarScope.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/ReportJena154_GraphVarScope.java?rev=1197941&r1=1197940&r2=1197941&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/ReportJena154_GraphVarScope.java (original)
+++ incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/ReportJena154_GraphVarScope.java Sat Nov  5 12:02:40 2011
@@ -22,20 +22,10 @@ import java.util.List ;
 
 import org.openjena.atlas.logging.Log ;
 
-import com.hp.hpl.jena.query.ARQ ;
-import com.hp.hpl.jena.query.DatasetFactory ;
-import com.hp.hpl.jena.query.Query ;
-import com.hp.hpl.jena.query.QueryExecution ;
-import com.hp.hpl.jena.query.QueryExecutionFactory ;
-import com.hp.hpl.jena.query.QueryFactory ;
-import com.hp.hpl.jena.query.ResultSet ;
-import com.hp.hpl.jena.query.ResultSetFactory ;
-import com.hp.hpl.jena.query.ResultSetFormatter ;
+import com.hp.hpl.jena.query.* ;
 import com.hp.hpl.jena.sparql.algebra.Algebra ;
 import com.hp.hpl.jena.sparql.algebra.Op ;
 import com.hp.hpl.jena.sparql.algebra.OpVars ;
-import com.hp.hpl.jena.sparql.algebra.optimize.Optimize ;
-import com.hp.hpl.jena.sparql.algebra.optimize.TransformFilterPlacement ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
 import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
 import com.hp.hpl.jena.sparql.core.Quad ;
@@ -54,10 +44,55 @@ public class ReportJena154_GraphVarScope
     static { Log.setLog4j() ; }
     
     static String queryStr =
-        "SELECT ?g WHERE { GRAPH ?g { ?s ?p ?o FILTER (str(?g) = 'graphURI') } }";
+        "SELECT ?g WHERE { GRAPH ?g { ?s ?p ?o } FILTER (str(?g) = 'graphURI') }";
         //"SELECT ?g WHERE { GRAPH ?g { ?s ?p ?o . } }";
     
     public static void main(String[] args) {
+        Op op1 = SSE.parseOp("(quadpattern (quad ?g ?s ?p ?o))") ; 
+        Op op2 = SSE.parseOp("(quadpattern (quad ?g ?s ?p ?o))") ; 
+        
+        System.out.println(op1.equals(op2)) ;
+        
+        //execute() ;
+    }
+
+    public static void print()
+    {
+        String tests[] = {
+            null
+            , "{ GRAPH ?g { ?s ?p ?o } }"
+            // Not nested
+            , "{ GRAPH ?g { ?s ?p ?o } GRAPH ?g1 { ?s1 ?p1 ?o1 }  }"
+            , "{ GRAPH ?g { ?s ?p ?o } GRAPH ?g { ?s1 ?p1 ?o1 }  }"
+            // Nested
+            , "{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 }  } }"
+            , "{ GRAPH ?g { ?s ?p ?o GRAPH ?g { ?s1 ?p1 ?o1 }  } }"
+            // Filters
+            , "{ GRAPH ?g { ?s ?p ?o FILTER (str(?g) = 'graphURI') } }"
+            , "{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 FILTER (str(?g) = 'graphURI') } } }"
+            , "{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 FILTER (str(?g1) = 'graphURI') } } }"
+            // Tricky pattern ... twice.
+            , "{ GRAPH ?g { ?s ?p ?o FILTER (str(?g) = 'graphURI') } " +
+              "  GRAPH ?g { ?s ?p ?o FILTER (str(?g) = 'graphURI') }" 
+            + "}" 
+            
+        } ;
+            
+        for ( String qs : tests )
+        {
+            if ( qs == null ) continue ;
+            Query q = QueryFactory.create("SELECT * WHERE "+qs) ;
+            System.out.print(q) ;
+            Op op = Algebra.compile(q) ;
+            System.out.print(op) ;
+            op = Algebra.optimize(op) ;
+            op = Algebra.toQuadForm(op) ;
+            System.out.print(op) ;
+            System.out.println("------------------------------------------------") ;
+        }
+    }
+    
+    public static void execute() {
         if ( false ) 
             ARQ.setExecutionLogging(Explain.InfoLevel.ALL) ;
         
@@ -67,32 +102,6 @@ public class ReportJena154_GraphVarScope
         
         if ( true )
         {
-            // See AlgebraQuad.TransformQuadGraph.transform(OpGraph, Op)
-            
-            Query q = QueryFactory.create(queryStr) ; 
-            System.out.println(q) ;
-            Op op1 = Algebra.compile(q) ;
-            
-            //Op op1a = Algebra.optimize(op1) ;
-            //System.out.println(op1a) ;
-            //Op op2a = Algebra.toQuadForm(op1a) ;
-            
-            Op op2 = Algebra.toQuadForm(op1) ;
-            System.out.println(op2) ;
-            System.exit(0) ;
-            
-            
-            Op op3 = Optimize.apply(new TransformFilterPlacement(), op2) ;
-            
-            execute(op2) ;
-            System.out.println() ;
-            execute(op3) ;
-
-            System.exit(0) ;
-        }
-        
-        if ( true )
-        {
             System.out.println("Plain ARQ") ;
             DatasetGraph dsg = DatasetGraphFactory.createMem() ; 
             setup(dsg) ;
@@ -100,8 +109,6 @@ public class ReportJena154_GraphVarScope
             System.out.println() ;
         }
         
-        System.exit(0) ;
-        
         if ( true )
         {
             System.out.println("Plain TDB") ;

Modified: incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java?rev=1197941&r1=1197940&r2=1197941&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java (original)
+++ incubator/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Run.java Sat Nov  5 12:02:40 2011
@@ -64,7 +64,6 @@ public class Run
         String DIR = "tmp/DB" ;
         FileOps.ensureDir("tmp") ;
         FileOps.ensureDir(DIR) ;
-
         
         String qs = "PREFIX f: <"+ns+"> SELECT * { ?s ?p ?o }" ;
         
@@ -81,8 +80,6 @@ public class Run
         
         t1.join() ;
         t2.join() ;
-        
-        
     }
     
     static class Killer implements Runnable