/[projects]/dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java
ViewVC logotype

Annotation of /dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2722 - (hide annotations) (download)
Mon Sep 28 19:47:17 2015 UTC (8 years, 8 months ago) by torben
Original Path: dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java
File size: 3758 byte(s)
improve error handling
1 torben 2711 package dk.daoas.fulddaekning;
2    
3     import java.sql.SQLException;
4     import java.util.Collection;
5     import java.util.Map;
6 torben 2719 import java.util.NoSuchElementException;
7 torben 2711 import java.util.Queue;
8     import java.util.concurrent.BrokenBarrierException;
9     import java.util.concurrent.CyclicBarrier;
10     import java.util.concurrent.atomic.AtomicInteger;
11     import java.util.logging.Level;
12     import java.util.logging.Logger;
13    
14     import com.jwetherell.algorithms.data_structures.KdTree;
15    
16     import dk.daoas.fulddaekning.osrm.OSRMHelper;
17    
18     public class LookupWorker implements Runnable {
19    
20     static final int MAX_RESULTS = 100;
21    
22    
23    
24     final static Logger logger = Logger.getLogger( LookupWorker.class.toString() );
25    
26     OSRMHelper osrmHelper = new OSRMHelper();
27    
28     CyclicBarrier barrier;
29     Queue<Adresse> ikkeDaekkede;
30     Map<Short, KdTree<Adresse>> hoTrees;
31     Database db;
32     Constants consts;
33    
34     AtomicInteger antalFundne;
35    
36     int workerID;
37     boolean verbose;
38    
39     public LookupWorker(int workerID,
40     CyclicBarrier barrier,
41     Queue<Adresse> ikkeDaekkede,
42     Map<Short, KdTree<Adresse>> hoTrees,
43     AtomicInteger antalFundne,
44     Database db,
45     boolean verbose,
46     Constants consts) {
47    
48     this.workerID = workerID;
49     this.barrier = barrier;
50     this.ikkeDaekkede = ikkeDaekkede;
51     this.hoTrees = hoTrees;
52     this.antalFundne = antalFundne;
53     this.db = db;
54     this.verbose = verbose;
55     this.consts = consts;
56    
57     }
58    
59    
60     @Override
61     public void run() {
62     System.out.println( "Worker/" + workerID + " starting");
63    
64 torben 2722 try {
65     while ( ! ikkeDaekkede.isEmpty() ) {
66 torben 2713
67 torben 2722 Adresse qAdresse = ikkeDaekkede.remove();
68 torben 2711
69 torben 2722 short ho = qAdresse.ho;
70     KdTree<Adresse> addressTree = hoTrees.get(ho);
71 torben 2711
72 torben 2722 Collection<Adresse> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse);
73     if (res.size() > MAX_RESULTS ) {
74     System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );
75     System.exit(0);
76     }
77 torben 2711
78    
79 torben 2718 Adresse bedsteAdr = res.iterator().next(); //Tag første element
80 torben 2711 double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
81 torben 2718
82     //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen
83     if (bedsteAfstand <= consts.getMaxDistance()) {
84 torben 2722 Adresse bedsteAdr2 = osrmHelper.getNearestViaTable(qAdresse, res);
85    
86     if (bedsteAdr2 != null) {
87     bedsteAdr = bedsteAdr2;
88     bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
89     } else {
90     logger.info("NearestViaTable returned null for " + qAdresse);
91     }
92 torben 2718 }
93    
94 torben 2711
95 torben 2718
96 torben 2711
97 torben 2718
98 torben 2711 if (bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
99     if (verbose == true) {
100     logger.fine("(" +workerID + ") Bedste: " + qAdresse + "==>" + bedsteAdr + " ::: " + bedsteAfstand );
101     }
102    
103     antalFundne.incrementAndGet();
104    
105     try {
106     db.gemResultat(qAdresse, bedsteAdr, bedsteAfstand);
107     } catch (SQLException e) {
108     logger.log(Level.WARNING, "Error saving result", e);
109     logger.warning("Shutting down");
110    
111     System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme
112     }
113     } else {
114     if (verbose == true) {
115     System.out.println("For stor afstand: " + qAdresse + " > " + bedsteAfstand);
116     }
117     }
118    
119 torben 2722 }
120    
121     } catch (Exception e) {
122     logger.log( Level.SEVERE, "Worker/" + workerID, e);
123 torben 2711 }
124    
125 torben 2722
126    
127 torben 2711 try {
128 torben 2722 logger.info( "Worker/" + workerID + " afventer barrier");
129 torben 2711 barrier.await();
130     } catch (BrokenBarrierException e) {
131     logger.log(Level.SEVERE, e.getMessage(), e);
132     System.exit(-1);
133     } catch(InterruptedException e) {
134 torben 2719 logger.log(Level.SEVERE, e.getMessage(), e);
135 torben 2711 }
136    
137    
138     System.out.println( "Worker/" + workerID + " stopping");
139     }
140    
141     }

  ViewVC Help
Powered by ViewVC 1.1.20