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

Contents of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2722 - (show annotations) (download)
Mon Sep 28 19:47:17 2015 UTC (8 years, 7 months ago) by torben
File size: 3758 byte(s)
improve error handling
1 package dk.daoas.fulddaekning;
2
3 import java.sql.SQLException;
4 import java.util.Collection;
5 import java.util.Map;
6 import java.util.NoSuchElementException;
7 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 try {
65 while ( ! ikkeDaekkede.isEmpty() ) {
66
67 Adresse qAdresse = ikkeDaekkede.remove();
68
69 short ho = qAdresse.ho;
70 KdTree<Adresse> addressTree = hoTrees.get(ho);
71
72 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
78
79 Adresse bedsteAdr = res.iterator().next(); //Tag første element
80 double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
81
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 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 }
93
94
95
96
97
98 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 }
120
121 } catch (Exception e) {
122 logger.log( Level.SEVERE, "Worker/" + workerID, e);
123 }
124
125
126
127 try {
128 logger.info( "Worker/" + workerID + " afventer barrier");
129 barrier.await();
130 } catch (BrokenBarrierException e) {
131 logger.log(Level.SEVERE, e.getMessage(), e);
132 System.exit(-1);
133 } catch(InterruptedException e) {
134 logger.log(Level.SEVERE, e.getMessage(), e);
135 }
136
137
138 System.out.println( "Worker/" + workerID + " stopping");
139 }
140
141 }

  ViewVC Help
Powered by ViewVC 1.1.20