--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/LookupWorker.java 2016/01/30 14:05:53 2878
+++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/LookupWorker.java 2016/02/13 13:16:34 2946
@@ -4,11 +4,9 @@
import java.util.ArrayList;
import java.util.Map;
import java.util.Queue;
-import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
-import java.util.logging.Logger;
import ags.utils.dataStructures.MaxHeap;
import ags.utils.dataStructures.trees.thirdGenKD.DistanceFunction;
@@ -17,23 +15,25 @@
import dk.daoas.adressevedligehold.ServiceConfig;
import dk.daoas.adressevedligehold.beans.Address;
import dk.daoas.adressevedligehold.tasks.Task;
+import dk.daoas.adressevedligehold.tasks.TaskLogger;
public class LookupWorker implements Runnable {
static final int MAX_RESULTS = 99;
- final static Logger logger = Logger.getLogger( LookupWorker.class.toString() );
+ private TaskLogger logger = TaskLogger.getInstance();
OSRMHelper osrmHelper = new OSRMHelper();
CyclicBarrier barrier;
Queue
ikkeDaekkede;
Map> hoTrees;
- Database db;
+ DatabaseRouteDistance db;
Constants consts;
AtomicInteger antalFundne;
+ AtomicInteger antalBeregnet;
int workerID;
boolean verbose;
@@ -48,7 +48,8 @@
Queue ikkeDaekkede,
Map> hoTrees,
AtomicInteger antalFundne,
- Database db,
+ AtomicInteger antalBeregnet,
+ DatabaseRouteDistance db,
boolean verbose,
Constants consts) {
@@ -58,6 +59,7 @@
this.ikkeDaekkede = ikkeDaekkede;
this.hoTrees = hoTrees;
this.antalFundne = antalFundne;
+ this.antalBeregnet = antalBeregnet;
this.db = db;
this.verbose = verbose;
this.consts = consts;
@@ -67,16 +69,16 @@
@Override
public void run() {
- System.out.println( "Worker/" + workerID + " starting");
+ logger.info( "Worker/" + workerID + " starting");
ServiceConfig conf = ServiceConfig.getInstance();
- try {
+ try (BarrierMarker marker = new BarrierMarker() ) {
while ( ! ikkeDaekkede.isEmpty() ) {
if (task.isAborted()) {
- System.out.println( "Worker/" + workerID + " aborting");
- return;
+ logger.info( "Worker/" + workerID + " aborting");
+ break;
}
@@ -89,8 +91,8 @@
//Collection res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAddress);
int size = res.size();
if (size > MAX_RESULTS ) {
- System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );
- System.exit(0);
+ logger.info("Returnerede mere end MAX_RESULTS> " + res.size() );
+ throw new Exception("Returnerede mere end MAX_RESULTS> " + res.size());
}
ArrayList adrList = new ArrayList();
@@ -133,37 +135,46 @@
try {
db.gemResultat(qAddress, bedsteAdr, bedsteAfstand);
} catch (SQLException e) {
- logger.log(Level.WARNING, "Error saving result", e);
+ logger.warning("Error saving result", e);
logger.warning("Shutting down");
-
- System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme
+ throw e; // rethrow
}
} else {
if (verbose == true) {
- System.out.println("For stor afstand: " + qAddress + " > " + bedsteAfstand);
+ logger.fine("For stor afstand: " + qAddress + " > " + bedsteAfstand);
}
}
-
+
+ antalBeregnet.incrementAndGet();
}
} catch (Exception e) {
logger.log( Level.SEVERE, "Worker/" + workerID, e);
+ task.doAbort();
}
+
- try {
- logger.info( "Worker/" + workerID + " afventer barrier");
- barrier.await();
- } catch (BrokenBarrierException e) {
- logger.log(Level.SEVERE, e.getMessage(), e);
- System.exit(-1);
- } catch(InterruptedException e) {
- logger.log(Level.SEVERE, e.getMessage(), e);
+ logger.info( "Worker/" + workerID + " stopping");
+ }
+
+
+ /**
+ * Makes sure the barrier is touched correctly no matter how the the current code block is exited.
+ * @author thn
+ *
+ */
+ public class BarrierMarker implements AutoCloseable {
+ @Override
+ public void close() {
+ try {
+ logger.info( "Worker/" + workerID + " afventer barrier");
+ barrier.await();
+ } catch (Exception e) {
+ logger.log(Level.SEVERE, e.getMessage(), e);
+ }
}
-
-
- System.out.println( "Worker/" + workerID + " stopping");
}
}