fix for interrupted thread during has() property check

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6370 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 16 years ago
parent 5bd1c1d205
commit 3e38035389

@ -376,6 +376,18 @@ public class SplitTable implements ObjectIndex {
this.challenge = challenge;
this.objectIndex = objectIndex;
}
public void executeOrder() {
try {
if (this.objectIndex.has(this.challenge.getKey())) {
this.challenge.commitDiscovery(this.objectIndex);
} else {
this.challenge.commitNoDiscovery();
}
} catch (Exception e) {
Log.logSevere("SplitTable", "", e);
this.challenge.commitNoDiscovery();
}
}
}
private static final DiscoverOrder poisonDiscoverOrder = new DiscoverOrder();
@ -402,16 +414,7 @@ public class SplitTable implements ObjectIndex {
}
if (order == poisonDiscoverOrder) break;
// check if in the given objectIndex is the key as given in the order
try {
if (order.objectIndex.has(order.challenge.getKey())) {
order.challenge.commitDiscovery(order.objectIndex);
} else {
order.challenge.commitNoDiscovery();
}
} catch (Exception e) {
Log.logSevere("SplitTable", "", e);
order.challenge.commitNoDiscovery();
}
order.executeOrder();
}
}
}
@ -424,11 +427,16 @@ public class SplitTable implements ObjectIndex {
// submit discover orders to the processing units
final Iterator<ObjectIndex> i = tables.values().iterator();
DiscoverOrder order;
boolean offered;
while (i.hasNext()) {
try {
this.orderQueue.put(new DiscoverOrder(challenge, i.next()));
} catch (InterruptedException e) {
Log.logSevere("SplitTable", "", e);
order = new DiscoverOrder(challenge, i.next());
offered = this.orderQueue.offer(order);
if (!offered) {
// for some reason the queue did not accept the order
// so we execute the order here
order.executeOrder();
Log.logWarning("SplitTable", "executed a challenge order without concurrency. queue size = " + this.orderQueue.size());
}
}
}

Loading…
Cancel
Save