Author: j16sdiz
Date: 2008-12-18 04:26:32 +0000 (Thu, 18 Dec 2008)
New Revision: 24505
Modified:
trunk/plugins/XMLSpider/XMLSpider.java
Log:
faster startup: store MaxPageId explicitly
Modified: trunk/plugins/XMLSpider/XMLSpider.java
===================================================================
--- trunk/plugins/XMLSpider/XMLSpider.java 2008-12-18 04:26:22 UTC (rev
24504)
+++ trunk/plugins/XMLSpider/XMLSpider.java 2008-12-18 04:26:32 UTC (rev
24505)
@@ -29,7 +29,6 @@
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -94,7 +93,24 @@
/** For simplicity, running is also mark as QUEUED */
QUEUED, SUCCEEDED, FAILED
};
+
+ static class MaxPageId {
+ volatile long v;
+ MaxPageId() {
+ }
+
+ MaxPageId(long v) {
+ this.v = v;
+ }
+ }
+
+ public synchronized long getNextPageId() {
+ long x = ++(maxPageId.v);
+ db.store(maxPageId);
+ return x;
+ }
+
static class Page {
/** Page Id */
long id;
@@ -167,7 +183,7 @@
protected Map<Page, ClientGetter> runningFetch =
Collections.synchronizedMap(new HashMap<Page, ClientGetter>());
long tProducedIndex;
- protected AtomicLong maxPageId;
+ protected MaxPageId maxPageId;
private Vector<String> indices;
private int match;
@@ -250,7 +266,7 @@
if (page == null) {
page = new Page();
page.uri = uri.toString();
- page.id = maxPageId.incrementAndGet();
+ page.id = getNextPageId();
page.comment = comment;
db.store(page);
@@ -1068,13 +1084,21 @@
// Find max Page ID
{
Query query = db.query();
- query.constrain(Page.class);
- query.descend("id").orderDescending();
- ObjectSet<Page> set = query.execute();
+ query.constrain(MaxPageId.class);
+ ObjectSet<MaxPageId> set = query.execute();
+
if (set.hasNext())
- maxPageId = new AtomicLong(set.next().id);
- else
- maxPageId = new AtomicLong(0);
+ maxPageId = set.next();
+ else {
+ query = db.query();
+ query.constrain(Page.class);
+ query.descend("id").orderDescending();
+ ObjectSet<Page> set2 = query.execute();
+ if (set2.hasNext())
+ maxPageId = new
MaxPageId(set2.next().id);
+ else
+ maxPageId = new MaxPageId(0);
+ }
}
pr.getNode().executor.execute(new Runnable() {
@@ -1450,13 +1474,13 @@
return PRIORITY_CLASS;
}
+ protected ObjectContainer db;
+
/**
* Initializes DB4O.
*
* @return db4o's connector
*/
- protected ObjectContainer db;
-
private ObjectContainer initDB4O() {
Configuration cfg = Db4o.newConfiguration();
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs