--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/AfstandAndenRuteTask.java 2016/01/31 22:45:03 2891
+++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/AfstandAndenRuteTask.java 2016/03/08 09:41:53 2972
@@ -11,31 +11,33 @@
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.FileHandler;
-import java.util.logging.Logger;
-import java.util.logging.SimpleFormatter;
import ags.utils.dataStructures.trees.thirdGenKD.KdTree;
+import dk.daoas.adressevedligehold.ReloadHelper;
import dk.daoas.adressevedligehold.ServiceConfig;
import dk.daoas.adressevedligehold.beans.Address;
import dk.daoas.adressevedligehold.db.DBConnection;
import dk.daoas.adressevedligehold.tasks.Task;
-import dk.daoas.adressevedligehold.util.HttpUtil;
+import dk.daoas.adressevedligehold.tasks.TaskLogger;
public class AfstandAndenRuteTask extends Task {
+
- final Logger logger = Logger.getLogger( AfstandAndenRuteTask.class.toString() );
+ private TaskLogger logger = TaskLogger.getInstance();
- final boolean verbose = false;//
+ final static boolean VERBOSE = false;//
+
+ public final static String INCREMENTAL = "INCREMENTAL";
+ public final static String FULL = "FULL";
static boolean test_mode;
String distributor;
- int antalIkkeDaekkede = -1;
+ int antalIkkeDaekkede = 0;
AtomicInteger antalBeregnet = new AtomicInteger();
@@ -43,26 +45,29 @@
ThreadPoolExecutor threadPool;
+ boolean isIncremental;
- public AfstandAndenRuteTask(String distributor) {
+ public AfstandAndenRuteTask(String distributor, String type) {
this.distributor = distributor;
+
+ type = type.toUpperCase();
+ switch(type) {
+ case FULL:
+ isIncremental = false;
+ break;
+ case INCREMENTAL:
+ isIncremental = true;
+ break;
+ default:
+ throw new RuntimeException("Unknown type" + type);
+ }
}
@Override
protected void taskRun() throws Exception {
-
-
-
-
- //Setup j.u.l Logger
- Logger root = Logger.getLogger("");
- FileHandler fhandler = new FileHandler("fulddaekning.log"); // Ingen max størrelse, ingen rotation og ingen append
- fhandler.setFormatter( new SimpleFormatter() );
- root.addHandler( fhandler );
-
-
+
Constants.init(distributor);
Constants consts = Constants.getInstance();
@@ -81,130 +86,141 @@
}
logger.info("Starting with MAX_WORKERS:" + max_workers);
setupThreadPool(max_workers);
+
+ logger.info("Starting with INCREMENTAL:" + isIncremental);
- try (Connection conn = DBConnection.getConnection() ) {
- Database db = new Database(conn);
-
- Queue
ikkeDaekkede = db.hentAlleIkkedaekkedeAdresser(consts.getMinPostnr(), consts.getMaxPostnr() );
- antalIkkeDaekkede = ikkeDaekkede.size();
- logger.info("Antal ikke-daekkede: " + antalIkkeDaekkede );
-
-
- boolean testRun= false;
-
- AtomicInteger antalFundne = new AtomicInteger(0);
-
- long beregnStart =0;
- long start = System.currentTimeMillis();
- int antalDaekkedeAdresser = -1;
-
- if (testRun == false) {
+
- logger.info("Finder postnumre");
- Set postnumre = db.hentPostnumreCache();
- // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen
- for(short postnr : postnumre) { //
- logger.info("Validerer BBox for " + postnr);
- BoundingBox bbox = db.getBoundingbox(postnr);
- bbox.validateBbox();
- }
-
-
- logger.info("Henter alle daekkede adresser");
- antalDaekkedeAdresser = db.hentAlleDaekkedeAdresser(distributor);
- logger.info( "AlleDaekkedeAdresser.length=" + antalDaekkedeAdresser );
-
- Map> addrHoList = db.getDaekkedeAdresserHO();
-
- Map> hoTrees = new HashMap>();
-
- for ( Map.Entry> entry : addrHoList.entrySet() ) {
- short ho = entry.getKey();
- List geopoints = entry.getValue();
-
- logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() );
-
- int bucketSize = 96*12;
-
- KdTree addressTree = new KdTree( 3, bucketSize );
- for(Address a: geopoints) {
- addressTree.addPoint(a.xyz, a);
- }
- hoTrees.put(ho, addressTree);
- }
+ AtomicInteger antalFundne = new AtomicInteger(0);
- db.resetResultTable();
+ long start = System.currentTimeMillis();
+ AtomicInteger antalDaekkedeAdresser = new AtomicInteger(-1);
- beregnStart = System.currentTimeMillis();
- logger.info("Starter beregning");
- //pre-check er ok - reset tmp tabel og start søgningen
+ // MAIN RUN START
- CyclicBarrier barrier = new CyclicBarrier(max_workers + 1);
+ logger.info("======================================================================");
+
+ mainRun(consts, isIncremental, "ruteMa", max_workers, antalFundne, antalDaekkedeAdresser);
+
+ logger.info("======================================================================");
+
+ mainRun(consts, true, "ruteLo", max_workers, antalFundne, antalDaekkedeAdresser);
+
+ logger.info("======================================================================");
+
+ mainRun(consts, true, "ruteSo", max_workers, antalFundne, antalDaekkedeAdresser);
+
+ logger.info("======================================================================");
- for (int i=0; i postnumre = db.hentPostnumreCache();
+
+ // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen
+ for(short postnr : postnumre) { //
+ logger.info("Validerer BBox for " + postnr);
+ BoundingBox bbox = db.getBoundingbox(postnr);
+ bbox.validateBbox();
+ }
+
+
+ logger.info("Henter alle daekkede adresser");
+ int tmpAntalDaekkede = db.hentAlleDaekkedeAdresser(distributor);
+ antalDaekkedeAdresser.set(tmpAntalDaekkede);
+ logger.info( "AlleDaekkedeAdresser.length=" + antalDaekkedeAdresser );
+
+ Map> addrHoList = db.getDaekkedeAdresserHO();
+
+ Map> hoTrees = new HashMap>();
+
+ for ( Map.Entry> entry : addrHoList.entrySet() ) {
+ short ho = entry.getKey();
+ List geopoints = entry.getValue();
+
+ logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() );
+
+ int bucketSize = 96*12;
+
+ KdTree addressTree = new KdTree( 3, bucketSize );
+ for(Address a: geopoints) {
+ addressTree.addPoint(a.xyz, a);
}
+
+ hoTrees.put(ho, addressTree);
+ }
+
+ db.resetResultTable();
+
-
-
+ logger.info("Starter beregning");
+
+ //pre-check er ok - reset tmp tabel og start søgningen
+
+ CyclicBarrier barrier = new CyclicBarrier(max_workers + 1);
+
+ for (int i=0; i