Author: j16sdiz
Date: 2009-01-01 11:21:00 +0000 (Thu, 01 Jan 2009)
New Revision: 24864

Modified:
   trunk/plugins/XMLSpider/IndexWriter.java
   trunk/plugins/XMLSpider/XMLSpider.java
Log:
use thread transaction

Modified: trunk/plugins/XMLSpider/IndexWriter.java
===================================================================
--- trunk/plugins/XMLSpider/IndexWriter.java    2009-01-01 11:20:50 UTC (rev 
24863)
+++ trunk/plugins/XMLSpider/IndexWriter.java    2009-01-01 11:21:00 UTC (rev 
24864)
@@ -50,7 +50,6 @@
 
        public synchronized void makeIndex() throws Exception {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
-               
                try {
                        time_taken = System.currentTimeMillis();
 

Modified: trunk/plugins/XMLSpider/XMLSpider.java
===================================================================
--- trunk/plugins/XMLSpider/XMLSpider.java      2009-01-01 11:20:50 UTC (rev 
24863)
+++ trunk/plugins/XMLSpider/XMLSpider.java      2009-01-01 11:21:00 UTC (rev 
24864)
@@ -107,6 +107,8 @@
         * @param uri the new uri that needs to be fetched for further indexing
         */
        public void queueURI(FreenetURI uri, String comment, boolean force) {
+               db.beginThreadTransaction(Storage.EXCLUSIVE_TRANSACTION);
+               boolean dbTransactionEnded = false;
                try {
                        String sURI = uri.toString();
                        for (String ext : 
root.getConfig().getBadlistedExtensions())
@@ -129,10 +131,11 @@
                                page.setComment(comment);
                        }
                        
-                       db.commit();
-               } catch (RuntimeException e) {
-                       db.rollback();
-                       throw e;
+                       db.endThreadTransaction();
+                       dbTransactionEnded = true;
+               } finally {
+                       if (!dbTransactionEnded)
+                               db.rollbackThreadTransaction();
                }
        }
 
@@ -150,6 +153,7 @@
 
                                // Prepare to start
                                toStart = new 
ArrayList<ClientGetter>(maxParallelRequests - running);
+                               
db.beginThreadTransaction(Storage.COOPERATIVE_TRANSACTION);
                                root.sharedLockPages(Status.QUEUED);
                                try {
                                        Iterator<Page> it = 
root.getPages(Status.QUEUED);
@@ -172,6 +176,7 @@
                                        }
                                } finally {
                                        root.unlockPages(Status.QUEUED);
+                                       db.endThreadTransaction();
                                }
                        }
                }
@@ -378,6 +383,8 @@
                Bucket data = result.asBucket();
                String mimeType = cm.getMIMEType();
                
+               boolean dbTransactionEnded = false;
+               db.beginThreadTransaction(Storage.EXCLUSIVE_TRANSACTION);
                try {
                        /*
                         * instead of passing the current object, the 
pagecallback object for every page is
@@ -391,33 +398,37 @@
                        ContentFilter.filter(data, new NullBucketFactory(), 
mimeType, uri.toURI("http://127.0.0.1:8888/";),
                                pageCallBack);
                        page.setStatus(Status.SUCCEEDED);
-                       db.commit();
-
+                       db.endThreadTransaction();
+                       dbTransactionEnded  = true;
+                       
                        Logger.minor(this, "Filtered " + uri + " : " + 
page.getId());
                } catch (UnsafeContentTypeException e) {
                        page.setStatus(Status.SUCCEEDED);
-                       db.commit();
+                       db.endThreadTransaction();
+                       dbTransactionEnded = true;
 
                        Logger.minor(this, "UnsafeContentTypeException " + uri 
+ " : " + page.getId(), e);
                        return; // Ignore
                } catch (IOException e) {
-                       db.rollback();
                        Logger.error(this, "Bucket error?: " + e, e);
                } catch (URISyntaxException e) {
-                       db.rollback();
                        Logger.error(this, "Internal error: " + e, e);          
        
                } catch (RuntimeException e) {
-                       db.rollback();
                        Logger.error(this, "Runtime Exception: " + e, e);       
        
                        throw e;
                } finally {
-                       data.free();
+                       try {
+                               data.free();
 
-                       synchronized (this) {
-                               runningFetch.remove(page);
+                               synchronized (this) {
+                                       runningFetch.remove(page);
+                               }
+                               if (!stopped)
+                                       startSomeRequests();
+                       } finally {
+                               if (!dbTransactionEnded)
+                                       db.rollbackThreadTransaction();
                        }
-                       if (!stopped)
-                               startSomeRequests();
                }
        }
 
@@ -427,7 +438,10 @@
                synchronized (this) {
                        if (stopped)
                                return;
-                       
+               }
+
+               boolean dbTransactionEnded = false;
+               db.beginThreadTransaction(Storage.EXCLUSIVE_TRANSACTION);
                        try {
                                synchronized (page) {
                                        if (fe.newURI != null) {
@@ -442,14 +456,13 @@
                                                page.setStatus(Status.QUEUED);
                                        }
                                }
-                               db.commit();
-                       } catch (RuntimeException e) {
-                               db.rollback();
-                               throw e;
+                               db.endThreadTransaction();
+                               dbTransactionEnded = true;
                        } finally {
                                runningFetch.remove(page);
+                               if (!dbTransactionEnded)
+                                       db.rollbackThreadTransaction();
                        }
-               }
 
                startSomeRequests();
        } 

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to