/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/LookupWorker.java
ViewVC logotype

Diff of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/LookupWorker.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2878 by torben, Sat Jan 30 14:05:53 2016 UTC revision 2946 by torben, Sat Feb 13 13:16:34 2016 UTC
# Line 4  import java.sql.SQLException; Line 4  import java.sql.SQLException;
4  import java.util.ArrayList;  import java.util.ArrayList;
5  import java.util.Map;  import java.util.Map;
6  import java.util.Queue;  import java.util.Queue;
 import java.util.concurrent.BrokenBarrierException;  
7  import java.util.concurrent.CyclicBarrier;  import java.util.concurrent.CyclicBarrier;
8  import java.util.concurrent.atomic.AtomicInteger;  import java.util.concurrent.atomic.AtomicInteger;
9  import java.util.logging.Level;  import java.util.logging.Level;
 import java.util.logging.Logger;  
10    
11  import ags.utils.dataStructures.MaxHeap;  import ags.utils.dataStructures.MaxHeap;
12  import ags.utils.dataStructures.trees.thirdGenKD.DistanceFunction;  import ags.utils.dataStructures.trees.thirdGenKD.DistanceFunction;
# Line 17  import ags.utils.dataStructures.trees.th Line 15  import ags.utils.dataStructures.trees.th
15  import dk.daoas.adressevedligehold.ServiceConfig;  import dk.daoas.adressevedligehold.ServiceConfig;
16  import dk.daoas.adressevedligehold.beans.Address;  import dk.daoas.adressevedligehold.beans.Address;
17  import dk.daoas.adressevedligehold.tasks.Task;  import dk.daoas.adressevedligehold.tasks.Task;
18    import dk.daoas.adressevedligehold.tasks.TaskLogger;
19    
20  public class LookupWorker implements Runnable {  public class LookupWorker implements Runnable {
21    
22          static final int MAX_RESULTS = 99;          static final int MAX_RESULTS = 99;
23    
24    
25          final static Logger logger = Logger.getLogger( LookupWorker.class.toString() );          private TaskLogger logger = TaskLogger.getInstance();
26    
27          OSRMHelper osrmHelper = new OSRMHelper();          OSRMHelper osrmHelper = new OSRMHelper();
28    
29          CyclicBarrier barrier;          CyclicBarrier barrier;
30          Queue<Address> ikkeDaekkede;          Queue<Address> ikkeDaekkede;
31          Map<Short, KdTree<Address>> hoTrees;          Map<Short, KdTree<Address>> hoTrees;
32          Database db;          DatabaseRouteDistance db;
33          Constants consts;          Constants consts;
34    
35          AtomicInteger antalFundne;          AtomicInteger antalFundne;
36            AtomicInteger antalBeregnet;
37    
38          int workerID;          int workerID;
39          boolean verbose;          boolean verbose;
# Line 48  public class LookupWorker implements Run Line 48  public class LookupWorker implements Run
48                          Queue<Address> ikkeDaekkede,                          Queue<Address> ikkeDaekkede,
49                          Map<Short, KdTree<Address>> hoTrees,                          Map<Short, KdTree<Address>> hoTrees,
50                          AtomicInteger antalFundne,                          AtomicInteger antalFundne,
51                          Database db,                          AtomicInteger antalBeregnet,
52                            DatabaseRouteDistance db,
53                          boolean verbose,                          boolean verbose,
54                          Constants consts) {                          Constants consts) {
55    
# Line 58  public class LookupWorker implements Run Line 59  public class LookupWorker implements Run
59                  this.ikkeDaekkede = ikkeDaekkede;                  this.ikkeDaekkede = ikkeDaekkede;
60                  this.hoTrees = hoTrees;                  this.hoTrees = hoTrees;
61                  this.antalFundne = antalFundne;                  this.antalFundne = antalFundne;
62                    this.antalBeregnet = antalBeregnet;
63                  this.db = db;                  this.db = db;
64                  this.verbose = verbose;                  this.verbose = verbose;
65                  this.consts = consts;                  this.consts = consts;
# Line 67  public class LookupWorker implements Run Line 69  public class LookupWorker implements Run
69    
70          @Override          @Override
71          public void run() {          public void run() {
72                  System.out.println( "Worker/" + workerID + " starting");                  logger.info( "Worker/" + workerID + " starting");
73    
74                  ServiceConfig conf = ServiceConfig.getInstance();                  ServiceConfig conf = ServiceConfig.getInstance();
75    
76                  try {                  try (BarrierMarker marker = new BarrierMarker() ) {
77                          while ( ! ikkeDaekkede.isEmpty() ) {                          while ( ! ikkeDaekkede.isEmpty() ) {
78    
79                                  if (task.isAborted()) {                                  if (task.isAborted()) {
80                                          System.out.println( "Worker/" + workerID + " aborting");                                          logger.info( "Worker/" + workerID + " aborting");
81                                          return;                                          break;
82                                  }                                  }
83    
84    
# Line 89  public class LookupWorker implements Run Line 91  public class LookupWorker implements Run
91                                  //Collection<Address> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAddress);                                  //Collection<Address> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAddress);
92                                  int size = res.size();                                  int size = res.size();
93                                  if (size > MAX_RESULTS ) {                                  if (size > MAX_RESULTS ) {
94                                          System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );                                          logger.info("Returnerede mere end MAX_RESULTS> " + res.size() );
95                                          System.exit(0);                                          throw new Exception("Returnerede mere end MAX_RESULTS> " + res.size());
96                                  }                                  }
97    
98                                  ArrayList<Address> adrList = new ArrayList<Address>();                                  ArrayList<Address> adrList = new ArrayList<Address>();
# Line 133  public class LookupWorker implements Run Line 135  public class LookupWorker implements Run
135                                          try {                                          try {
136                                                  db.gemResultat(qAddress, bedsteAdr, bedsteAfstand);                                                  db.gemResultat(qAddress, bedsteAdr, bedsteAfstand);
137                                          } catch (SQLException e) {                                          } catch (SQLException e) {
138                                                  logger.log(Level.WARNING, "Error saving result", e);                                                  logger.warning("Error saving result", e);
139                                                  logger.warning("Shutting down");                                                  logger.warning("Shutting down");
140                                                    throw e; // rethrow
                                                 System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme  
141                                          }                                          }
142                                  } else {                                  } else {
143                                          if (verbose == true) {                                          if (verbose == true) {
144                                                  System.out.println("For stor afstand: " + qAddress + " > " + bedsteAfstand);                                                  logger.fine("For stor afstand: " + qAddress + " > " + bedsteAfstand);
145                                          }                                          }
146                                  }                                  }
147                                    
148                                    antalBeregnet.incrementAndGet();
149                          }                          }
150    
151                  } catch (Exception e) {                  } catch (Exception e) {
152                          logger.log( Level.SEVERE, "Worker/" + workerID, e);                          logger.log( Level.SEVERE, "Worker/" + workerID, e);
153                            task.doAbort();
154                  }                  }
155    
156    
157                    
158    
159                  try {                  logger.info( "Worker/" + workerID + " stopping");
160                          logger.info( "Worker/" + workerID + " afventer barrier");          }
161                          barrier.await();          
162                  } catch (BrokenBarrierException e) {          
163                          logger.log(Level.SEVERE, e.getMessage(), e);          /**
164                          System.exit(-1);           * Makes sure the barrier is touched correctly no matter how the the current code block is exited.
165                  } catch(InterruptedException e) {           * @author thn
166                          logger.log(Level.SEVERE, e.getMessage(), e);           *
167             */
168            public class BarrierMarker implements AutoCloseable {
169                    @Override
170                    public void close() {
171                            try {
172                                    logger.info( "Worker/" + workerID + " afventer barrier");
173                                    barrier.await();
174                            } catch (Exception e) {
175                                    logger.log(Level.SEVERE, e.getMessage(), e);
176                            }
177                  }                  }
   
   
                 System.out.println( "Worker/" + workerID + " stopping");  
178          }          }
179    
180  }  }

Legend:
Removed from v.2878  
changed lines
  Added in v.2946

  ViewVC Help
Powered by ViewVC 1.1.20