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

Annotation of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2263 - (hide annotations) (download)
Tue Feb 10 16:27:15 2015 UTC (9 years, 3 months ago) by torben
File size: 3016 byte(s)
1) Brug en CyclicBarrier til at kordinerer main + worker threads
2) Træk alle dækkede adresser ud til at starte med og lav in memory søgning ud fra BBox for at finde søge sættet over dækkede adresser
1 torben 2145 package dk.daoas.fulddaekning;
2    
3     import java.util.Map;
4 torben 2150 import java.util.Queue;
5 torben 2263 import java.util.concurrent.ConcurrentHashMap;
6     import java.util.concurrent.CyclicBarrier;
7     import java.util.concurrent.ThreadPoolExecutor;
8 torben 2145 import java.util.logging.Level;
9     import java.util.logging.Logger;
10    
11     import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException;
12    
13     public class Lookup {
14 torben 2158
15 torben 2145
16 torben 2195
17 torben 2241 final static Logger logger = Logger.getLogger( Lookup.class.toString() );
18 torben 2145
19 torben 2238 String postnr;
20 torben 2145 Database db;
21 torben 2150
22 torben 2207 Adresse daekkedeAdresser[];
23 torben 2150 Queue<Adresse> queue;
24 torben 2145
25     Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
26    
27 torben 2259 ThreadPoolExecutor threadPool;
28 torben 2263
29     CyclicBarrier barrier;
30 torben 2227
31 torben 2154
32    
33 torben 2259 public Lookup(String postnr, Database db, ThreadPoolExecutor threadPool) {
34 torben 2150 this.postnr = postnr;
35 torben 2145 this.db = db;
36 torben 2259 this.threadPool = threadPool;
37 torben 2145 }
38    
39 torben 2241
40 torben 2145
41     public void doLookup() throws BoundingBoxException {
42 torben 2150 logger.info("Starting for postnr=" + postnr);
43 torben 2145
44 torben 2154 Statistik stat = new Statistik();
45    
46 torben 2145 long start1 = System.currentTimeMillis();
47     long start2 = 0;
48    
49 torben 2263 barrier = new CyclicBarrier(LookupMain.max_workers + 1);
50    
51 torben 2145 try {
52 torben 2232
53     logger.info("Henter _ikke_ daekkede adresser i " + postnr);
54     queue = db.hentIkkedaekkedeAdresser(postnr);
55     if (queue.size() == 0) {
56     logger.info("Fandt ikke nogen _ikke_ daekkede adresser i " + postnr);
57 torben 2233 return;
58 torben 2232 }
59    
60 torben 2150 BoundingBox bbox = db.getBoundingbox(postnr);
61     bbox.validateBbox();
62    
63     logger.info("Bbox=" + bbox);
64     bbox.adjustToMargin();
65     logger.info("Bbox Adjusted=" + bbox);
66    
67     logger.info("Henter daekkede adresser i " + postnr);
68 torben 2263 daekkedeAdresser = db.hentDaekkedeAdresserCache(bbox);
69 torben 2150
70 torben 2263
71 torben 2154 stat.postnr = postnr;
72 torben 2207 stat.antalDaekkede = daekkedeAdresser.length;
73 torben 2154 stat.antalIkkeDaekkede = queue.size();
74 torben 2227 stat.totalDataset = stat.antalDaekkede * stat.antalIkkeDaekkede;
75    
76 torben 2150
77     logger.info("Starter beregning for " + postnr);
78 torben 2145 start2 = System.currentTimeMillis();
79    
80 torben 2241 for (int i =0; i < LookupMain.max_workers; i++) {
81 torben 2263 LookupWorker worker = new LookupWorker(i, this, barrier);
82 torben 2260 threadPool.submit(worker);
83 torben 2145 }
84    
85 torben 2263 barrier.await();
86 torben 2145
87 torben 2219 db.saveBatch();//Save any unsaved rows
88 torben 2145
89 torben 2219
90 torben 2145 } catch(Exception e) {
91     logger.log(Level.WARNING, "Exception during lookup", e);
92    
93     if (e instanceof BoundingBoxException) {
94     logger.severe( e.getMessage() );
95     System.exit(1);
96     }
97    
98     }
99     long now = System.currentTimeMillis();
100    
101 torben 2227 stat.forbrugtTid = (now-start1);
102 torben 2241 LookupMain.saveStatistics(stat);
103 torben 2154
104     logger.info( stat.toString() );
105 torben 2153 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr);
106 torben 2145 }
107    
108    
109     // Getters and setters
110    
111     ///////////////////////////
112     public Database getDb() {
113     return db;
114     }
115 torben 2150
116    
117    
118 torben 2207 public Adresse[] getDaekkedeAdresser() {
119 torben 2150 return daekkedeAdresser;
120 torben 2145 }
121    
122 torben 2150 public Queue<Adresse> getQueue() {
123     return queue;
124     }
125    
126    
127 torben 2145 }

  ViewVC Help
Powered by ViewVC 1.1.20