diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java index 37a886d..210dd89 100755 --- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java +++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java @@ -14,7 +14,11 @@ import redis.clients.jedis.JedisPool; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; /** @@ -52,37 +56,72 @@ public class CompareTrees { // List listOfPairs = AkkaTreeParser.getMessages(innerPool,Integer.valueOf(numOfWorkers)); HashMap filenames = AkkaTreeParser.filenames(outerPool); - List listOfPairs = AkkaTreeParser.files2compare(outerPool); +// List listOfPairs = AkkaTreeParser.files2compare(outerPool); ArrayList samePairs = new ArrayList<>(); ArrayList errorPairs = new ArrayList<>(); + final ExecutorService executor = Executors.newWorkStealingPool(); + // schedule the work + + final Future future = executor.submit( new RunnableCompare( job,errorPairs,filenames,outerPool)); + + try { + // wait for task to complete + future.get(); + + } catch (InterruptedException e) { + + e.printStackTrace(); + } catch (ExecutionException e) { + + e.printStackTrace(); + } finally { + executor.shutdownNow(); + } + -// listOfPairs.stream().parallel().forEach(m->coreCompare(m, job,null, samePairs,errorPairs,filenames,outerPool)); - listOfPairs.stream().parallel().forEach(m->newCoreCompare(m, job, samePairs,errorPairs,filenames,outerPool)); -// try (Jedis jedis = outerPool.getResource()) { -// jedis.select(2); -// for (String samePair : samePairs) { -//// jedis.hset("compare", errorPair, "1"); -// jedis.set(samePair, "1"); -// } -// jedis.select(0); -//// jedis.flushDB(); -// jedis.del("compare"); -// for (String errorPair : errorPairs) { -// jedis.hset("compare", errorPair, "1"); -// } -// -// -// } log.info("End process"); } - public static void newCoreCompare(String pairName, String treeType,ArrayList samePairs,ArrayList errorPairs, HashMap filenames,JedisPool outerPool ) { + public static class RunnableCompare implements Runnable { + String job; + ArrayList errorPairs; + HashMap filenames; + JedisPool outerPool; + + public RunnableCompare(String treeType,ArrayList errorPairs, HashMap filenames,JedisPool outerPool) { + this.job = treeType; + this.errorPairs = errorPairs; + this.filenames = filenames; + this.outerPool = outerPool; + } + + @Override + public void run() { + int dbsize = 1; + while(dbsize>0) { + try (Jedis outer = outerPool.getResource()) { + dbsize = Math.toIntExact(outer.scard("compare")); + } + if (dbsize != 0){ + newCoreCompare(job, errorPairs, filenames, outerPool); + } + } + } + } + + + public static void newCoreCompare( String treeType,ArrayList errorPairs, HashMap filenames,JedisPool outerPool ) { + + String pairName; + try (Jedis outer = outerPool.getResource()) { + pairName = outer.spop("compare"); + } String matchKey = null; try { @@ -101,14 +140,17 @@ public class CompareTrees { if (matchKey == null){ System.out.println(); } - String oldShapeTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames, "shapeTree"); - String newShapeTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames, "shapeTree"); + Map oldTreeString = EDiffHelper.getTreeString(keyName, i, outerPool, filenames); + Map newTreeString = EDiffHelper.getTreeString(keyName, j, outerPool, filenames); - String oldActionTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames, "actionTree"); - String newActionTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames, "actionTree"); + String oldShapeTree =oldTreeString.get("shapeTree"); + String newShapeTree =newTreeString.get("shapeTree"); - String oldTargetTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames, "targetTree"); - String newTargetTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames, "targetTree"); + String oldActionTree = oldTreeString.get("actionTree"); + String newActionTree = newTreeString.get("actionTree"); + + String oldTargetTree = oldTreeString.get("targetTree"); + String newTargetTree = newTreeString.get("targetTree"); if (oldShapeTree.equals(newShapeTree)) { @@ -170,23 +212,23 @@ public class CompareTrees { switch (treeType) { case "single": - String oldShapeTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames,"shapeTree"); - String newShapeTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames,"shapeTree"); - - String oldActionTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames,"actionTree"); - String newActionTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames,"actionTree"); - - String oldTargetTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames,"targetTree"); - String newTargetTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames,"targetTree"); - - - if(oldShapeTree.equals(newShapeTree)){ - if(oldActionTree.equals(newActionTree)){ - if(oldTargetTree.equals(newTargetTree)){ - samePairs.add(matchKey); - } - } - } +// String oldShapeTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames,"shapeTree"); +// String newShapeTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames,"shapeTree"); +// +// String oldActionTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames,"actionTree"); +// String newActionTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames,"actionTree"); +// +// String oldTargetTree = EDiffHelper.getTreeString(keyName, i, outerPool, filenames,"targetTree"); +// String newTargetTree = EDiffHelper.getTreeString(keyName, j, outerPool, filenames,"targetTree"); +// +// +// if(oldShapeTree.equals(newShapeTree)){ +// if(oldActionTree.equals(newActionTree)){ +// if(oldTargetTree.equals(newTargetTree)){ +// samePairs.add(matchKey); +// } +// } +// } return; // break;