--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2014/04/30 12:53:01 2147 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2015/02/10 16:27:15 2263 @@ -1,59 +1,90 @@ package dk.daoas.fulddaekning; -import java.io.File; -import java.io.FileReader; import java.util.Map; -import java.util.Properties; +import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.ThreadPoolExecutor; import java.util.logging.Level; import java.util.logging.Logger; import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException; public class Lookup { - static int max_workers; - static boolean verbose; + - static Properties conf; - static Logger logger = Logger.getLogger( Lookup.class.toString() ); - + final static Logger logger = Logger.getLogger( Lookup.class.toString() ); + + String postnr; Database db; - WorkSet workset; + + Adresse daekkedeAdresser[]; + Queue queue; Map workers = new ConcurrentHashMap(); + ThreadPoolExecutor threadPool; + CyclicBarrier barrier; + + - public Lookup(WorkSet workset, Database db) { + public Lookup(String postnr, Database db, ThreadPoolExecutor threadPool) { + this.postnr = postnr; this.db = db; - this.workset = workset; + this.threadPool = threadPool; } - + public void doLookup() throws BoundingBoxException { - logger.info("Starting for postnr=" + workset.postnr); + logger.info("Starting for postnr=" + postnr); + Statistik stat = new Statistik(); + long start1 = System.currentTimeMillis(); long start2 = 0; + barrier = new CyclicBarrier(LookupMain.max_workers + 1); + try { - - logger.info("Starter beregning for " + workset.postnr); + + logger.info("Henter _ikke_ daekkede adresser i " + postnr); + queue = db.hentIkkedaekkedeAdresser(postnr); + if (queue.size() == 0) { + logger.info("Fandt ikke nogen _ikke_ daekkede adresser i " + postnr); + return; + } + + BoundingBox bbox = db.getBoundingbox(postnr); + bbox.validateBbox(); + + logger.info("Bbox=" + bbox); + bbox.adjustToMargin(); + logger.info("Bbox Adjusted=" + bbox); + + logger.info("Henter daekkede adresser i " + postnr); + daekkedeAdresser = db.hentDaekkedeAdresserCache(bbox); + + + stat.postnr = postnr; + stat.antalDaekkede = daekkedeAdresser.length; + stat.antalIkkeDaekkede = queue.size(); + stat.totalDataset = stat.antalDaekkede * stat.antalIkkeDaekkede; + + + logger.info("Starter beregning for " + postnr); start2 = System.currentTimeMillis(); - for (int i =0; i 0) { - Thread.sleep(10);//wait for worker threads - } + barrier.await(); + + db.saveBatch();//Save any unsaved rows } catch(Exception e) { @@ -67,16 +98,13 @@ } long now = System.currentTimeMillis(); + stat.forbrugtTid = (now-start1); + LookupMain.saveStatistics(stat); - logger.info("Antal daekkede:" + workset.daekkedeAdresser.size() ); - logger.info("Antal ikke-daekkede:" + workset.queueSize ); - logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) ); + logger.info( stat.toString() ); + logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr); } - public void shutdownWorker(int workerid) { - logger.info("Shutting down worker: " + workerid); - workers.remove(workerid); - } // Getters and setters @@ -84,84 +112,16 @@ public Database getDb() { return db; } - - public WorkSet getWorkSet() { - return workset; - } - - - ///////////////////////////// - // Static functions - - public static void main(String[] args) throws Exception { - - File confFile = new File("fulddaekning.properties"); - if (! confFile.exists() ) { - logger.warning("Config file not found"); - System.exit(1); - } - - conf = new Properties(); - conf.load( new FileReader(confFile) ); - - max_workers = Integer.parseInt( conf.getProperty("MAX_WORKERS") ); - logger.info("Starting with MAX_WORKERS:" + max_workers); - - verbose = Boolean.parseBoolean( conf.getProperty("VERBOSE") ); - logger.info("Starting with VERBOSE:" + verbose); - - Database db = new Database(conf); - db.resetResultTable(); + public Adresse[] getDaekkedeAdresser() { + return daekkedeAdresser; + } - - InputWorker inputWorker = new InputWorker(db); - Thread inputThread = new Thread(inputWorker); - inputThread.start(); - - - long start = System.currentTimeMillis(); - boolean doContinue = true; - - while (inputWorker.queue.isEmpty() == true) { - Thread.sleep(3); //Vent indtil at første arbejds sæt er på plads - } - - - while ( doContinue == true ) { - WorkSet set = inputWorker.queue.poll(); - - if (set != null) { - Lookup lookup = new Lookup(set, db); - lookup.doLookup(); - } else { - System.out.println("Buffer underrun"); - Thread.sleep(10); - } - - if ( inputWorker.isDone == true && inputWorker.queue.isEmpty() == true) - doContinue = false; - } - - /*logger.info("Finder postnumre"); - List postnumre = db.hentPostnumre(); - - for(Integer postnr : postnumre) { - Lookup lookup = new Lookup(postnr, db); - lookup.doLookup(); - }*/ - - long now = System.currentTimeMillis(); - - logger.info("Fuld load done : " + (now-start) ); - - - //Lookup lookup = new Lookup(7400, db); - //lookup.doLookup(); + public Queue getQueue() { + return queue; } - - + }