/[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 2885 by torben, Sat Jan 30 19:20:43 2016 UTC revision 2903 by torben, Wed Feb 3 18:45:33 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    
# Line 34  public class LookupWorker implements Run Line 33  public class LookupWorker implements Run
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                            AtomicInteger antalBeregnet,
52                          Database db,                          Database db,
53                          boolean verbose,                          boolean verbose,
54                          Constants consts) {                          Constants consts) {
# 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 71  public class LookupWorker implements Run Line 73  public class LookupWorker implements Run
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");                                          System.out.println( "Worker/" + workerID + " aborting");
81                                          return;                                          break;
82                                  }                                  }
83    
84    
# Line 90  public class LookupWorker implements Run Line 92  public class LookupWorker implements Run
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() );                                          System.out.println("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                                                  throw e; // rethrow
141                                          }                                          }
# Line 142  public class LookupWorker implements Run Line 144  public class LookupWorker implements Run
144                                                  System.out.println("For stor afstand: " + qAddress + " > " + bedsteAfstand);                                                  System.out.println("For stor afstand: " + qAddress + " > " + bedsteAfstand);
145                                          }                                          }
146                                  }                                  }
147                                    
148                                    antalBeregnet.incrementAndGet();
149                          }                          }
150    
151                  } catch (Exception e) {                  } catch (Exception e) {
# Line 151  public class LookupWorker implements Run Line 154  public class LookupWorker implements Run
154                  }                  }
155    
156    
157                    
                 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);  
                 }  
   
158    
159                  System.out.println( "Worker/" + workerID + " stopping");                  System.out.println( "Worker/" + workerID + " stopping");
160          }          }
161            
162            
163            /**
164             * Makes sure the barrier is touched correctly no matter how the the current code block is exited.
165             * @author thn
166             *
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                    }
178            }
179    
180  }  }

Legend:
Removed from v.2885  
changed lines
  Added in v.2903

  ViewVC Help
Powered by ViewVC 1.1.20