diff --git a/pom.xml b/pom.xml
index 174b076..ebaa43d 100755
--- a/pom.xml
+++ b/pom.xml
@@ -102,11 +102,11 @@
1.3
-
- com.rabbitmq
- amqp-client
- 4.0.0
-
+
+
+
+
+
junit
junit
@@ -114,17 +114,17 @@
-
- org.apache.lucene
- lucene-core
- 4.8.0
-
+
+
+
+
+
-
- org.apache.lucene
- lucene-analyzers-common
- 4.8.0
-
+
+
+
+
+
org.apache.commons
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java b/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
index a0d0456..41160e0 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
@@ -22,7 +22,7 @@ public class Launcher {
Properties appProps = new Properties();
-// String appConfigPath = "/Users/haoyetian/Documents/Lu_code/FixMiner/fixminer_source/src/main/resource/app.properties";
+// String appConfigPath = "/Users/anil.koyuncu/projects/test/fixminerC/src/main/resource/app.properties";
String appConfigPath = args[0];
appProps.load(new FileInputStream(appConfigPath));
@@ -40,8 +40,12 @@ public class Launcher {
String parameter = args[2];
// String parameter = null;
+// String parameter = "decl";
+// String parameter = "L2";
String jobType = args[1];
// String jobType = "RICHEDITSCRIPT";
+// String jobType = "LOAD";
+// String jobType = "COMPARE";
// String parameters = String.format("\nportInner %s " +
// "\nnumOfWorkers %s " +
@@ -73,7 +77,11 @@ public class Launcher {
try {
switch (jobType) {
case "RICHEDITSCRIPT":
- EnhancedASTDiff.main(gumInput, numOfWorkers, pjName, eDiffTimeout,parallelism,portDumps, dbDir, actionType+dumpsName, srcMLPath);
+ EnhancedASTDiff.main(gumInput, numOfWorkers, pjName, eDiffTimeout,parallelism,portDumps, dbDir, actionType+dumpsName, srcMLPath,parameter);
+ break;
+
+ case "LOAD":
+ EnhancedASTDiff.load(gumInput, numOfWorkers, pjName, eDiffTimeout,parallelism,portDumps, dbDir, actionType+dumpsName, srcMLPath,parameter);
break;
case "COMPARE":
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
index d00ffbb..345ca70 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
@@ -7,6 +7,7 @@ import redis.clients.jedis.JedisPool;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -71,9 +72,38 @@ public class AkkaTreeParser {
}
- log.info("Getting results");
+// log.info("Getting results %d",fileMap.s);
return fileMap;
}
+ public static List files2compare(JedisPool innerPool){
+
+
+// HashMap fileMap =new HashMap();
+ List result = new ArrayList();
+ try (Jedis inner = innerPool.getResource()) {
+ while (!inner.ping().equals("PONG")){
+ log.info("wait");
+ }
+
+// inner.select(1);
+ Map filenames = inner.hgetAll("compare");
+
+
+ for (Map.Entry stringStringEntry : filenames.entrySet().stream().collect(Collectors.toList())) {
+// fileMap.put(stringStringEntry.getKey(),stringStringEntry.getValue());
+ result.add(stringStringEntry.getKey());
+ }
+
+
+
+
+
+ }
+
+ log.info("Getting results :" + result.size());
+ return result;
+ }
+
}
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 3d579e0..0b67c31 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
@@ -37,21 +37,22 @@ public class CompareTrees {
log.info(cmd);
cs.runShell(cmd, port);
- String cmdInner = "bash "+redisPath + "/" + "startServer.sh" +" %s %s %s";
- cmdInner = String.format(cmdInner, redisPath,compareDBName,Integer.valueOf(portInner));
- log.info(cmdInner);
- cs.runShell(cmdInner, portInner);
+// String cmdInner = "bash "+redisPath + "/" + "startServer.sh" +" %s %s %s";
+// cmdInner = String.format(cmdInner, redisPath,compareDBName,Integer.valueOf(portInner));
+// log.info(cmdInner);
+// cs.runShell(cmdInner, portInner);
String numOfWorkers = "100000000";//args[4];
String host = "localhost";//args[5];
// -Djava.util.concurrent.ForkJoinPool.common.parallelism=256
- final JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), host,Integer.valueOf(portInner),20000000);
+// final JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), host,Integer.valueOf(portInner),20000000);
final JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), host,Integer.valueOf(port),20000000);
- List listOfPairs = AkkaTreeParser.getMessages(innerPool,Integer.valueOf(numOfWorkers));
- HashMap filenames = AkkaTreeParser.filenames(innerPool);
+// List listOfPairs = AkkaTreeParser.getMessages(innerPool,Integer.valueOf(numOfWorkers));
+ HashMap filenames = AkkaTreeParser.filenames(outerPool);
+ List listOfPairs = AkkaTreeParser.files2compare(outerPool);
ArrayList samePairs = new ArrayList<>();
@@ -59,14 +60,15 @@ public class CompareTrees {
- listOfPairs.stream().parallel().forEach(m->coreCompare(m, job,innerPool, samePairs,errorPairs,filenames,outerPool));
+ listOfPairs.stream().parallel().forEach(m->coreCompare(m, job,null, samePairs,errorPairs,filenames,outerPool));
- try (Jedis jedis = innerPool.getResource()) {
+ try (Jedis jedis = outerPool.getResource()) {
jedis.select(0);
- jedis.flushDB();
+// jedis.flushDB();
+ jedis.del("compare");
for (String errorPair : errorPairs) {
- jedis.hset(errorPair, "0", "1");
+ jedis.hset("compare", errorPair, "1");
}
@@ -85,6 +87,8 @@ public class CompareTrees {
Pair newPair = null;
String matchKey = null;
+ innerPool = outerPool;
+
try {
String[] split = pairName.split("/");
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/DefaultKryoContext.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/DefaultKryoContext.java
index 7941ab1..3a71d4a 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/DefaultKryoContext.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/DefaultKryoContext.java
@@ -5,6 +5,8 @@ import java.io.ByteArrayOutputStream;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.io.UnsafeInput;
+import com.esotericsoftware.kryo.io.UnsafeOutput;
import com.esotericsoftware.kryo.pool.KryoFactory;
import com.esotericsoftware.kryo.pool.KryoPool;
import org.objenesis.strategy.SerializingInstantiatorStrategy;
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java
index 5316137..425643a 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffActor.java
@@ -54,7 +54,7 @@ public class EDiffActor extends UntypedActor {
int toIndex = (i + 1) * average + counter;
List filesOfWorkers = files.subList(fromIndex, toIndex);
- final EDiffMessage workMsg = new EDiffMessage(i + 1, filesOfWorkers,((EDiffMessage) message).getSECONDS_TO_WAIT(),((EDiffMessage) message).getInnerPool(),((EDiffMessage) message).getSrcMLPath());
+ final EDiffMessage workMsg = new EDiffMessage(i + 1, filesOfWorkers,((EDiffMessage) message).getSECONDS_TO_WAIT(),((EDiffMessage) message).getInnerPool(),((EDiffMessage) message).getSrcMLPath(),((EDiffMessage) message).getRootType());
mineRouter.tell(workMsg, getSelf());
logger.info("Assign {} task to worker #" + (i + 1) ,filesOfWorkers.size());
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
index d6bcdd6..81d8fe0 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
@@ -1,6 +1,7 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
import edu.lu.uni.serval.utils.EDiffHelper;
+import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -24,7 +25,7 @@ public class EDiffHunkParser extends EDiffParser {
private static Logger logger = LoggerFactory.getLogger(EDiffHunkParser.class);
@Override
- public void parseFixPatterns(File prevFile, File revFile, File diffentryFile, String project, JedisPool innerPool,String srcMLPath) {
+ public void parseFixPatterns(File prevFile, File revFile, File diffentryFile, String project, JedisPool innerPool,String srcMLPath,String rootType) {
List actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile,srcMLPath);
if (actionSets.size() != 0) {
@@ -38,6 +39,9 @@ public class EDiffHunkParser extends EDiffParser {
try {
String astNodeType = actionSet.getAstNodeType();
+ if (astNodeType.equals(rootType)){
+
+ }
actionSet.toString();
int size = actionSet.getActionSize();
@@ -49,15 +53,15 @@ public class EDiffHunkParser extends EDiffParser {
String key = astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
- try (Jedis inner = innerPool.getResource()) {
+// try (Jedis inner = innerPool.getResource()) {
+//
+// inner.hset("dump".getBytes(),key.getBytes(),EDiffHelper.kryoSerialize(actionSet));
+// }
+ File f = new File(root+"dumps/"+astNodeType+"/"+String.valueOf(size)+"/");
+ f.mkdirs();
+ f = new File(root+"dumps/"+key);
- inner.hset("dump".getBytes(),key.getBytes(),EDiffHelper.kryoSerialize(actionSet));
- }
-// File f = new File(root+"dumps/"+astNodeType+"/"+String.valueOf(size)+"/");
-// f.mkdirs();
-// f = new File(root+"dumps/"+key);
-//
-//
+ FileUtils.writeByteArrayToFile(f,EDiffHelper.kryoSerialize(actionSet));
// FileOutputStream fos = new FileOutputStream(f);
// ObjectOutputStream oos = new ObjectOutputStream(fos);
// oos.writeObject(EDiffHelper.kryoSerialize(actionSet));
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java
index b70960c..e8bbbb0 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffMessage.java
@@ -27,15 +27,22 @@ public class EDiffMessage extends BaseMessage{
private String srcMLPath;
+ public String getRootType() {
+ return rootType;
+ }
+
+ private String rootType;
+
- public EDiffMessage(int id, List msgFiles,String eDiffTimeout,JedisPool pool,String srcMLPath) {
+ public EDiffMessage(int id, List msgFiles,String eDiffTimeout,JedisPool pool,String srcMLPath,String rootType) {
super(id,new Long(eDiffTimeout));
this.msgFiles = msgFiles;
this.innerPool = pool;
this.srcMLPath = srcMLPath;
+ this.rootType = rootType;
}
public EDiffMessage(int id, List msgFiles,Long eDiffTimeout,JedisPool pool) {
super(id,eDiffTimeout);
@@ -44,12 +51,13 @@ public class EDiffMessage extends BaseMessage{
}
- public EDiffMessage(int id, List filesOfWorkers, long seconds_to_wait, JedisPool innerPool, String srcMLPath) {
+ public EDiffMessage(int id, List filesOfWorkers, long seconds_to_wait, JedisPool innerPool, String srcMLPath,String rootType) {
super(id,seconds_to_wait);
this.msgFiles = filesOfWorkers;
this.innerPool = innerPool;
this.srcMLPath = srcMLPath;
+ this.rootType = rootType;
}
public List getMsgFiles() {
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java
index 2d2cf35..4856b1f 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffParser.java
@@ -81,7 +81,7 @@ public class EDiffParser extends Parser {
}
@Override
- public void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool, String srcMLPath) {
+ public void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool, String srcMLPath,String rootType) {
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java
index 960a770..b1ee053 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffWorker.java
@@ -44,6 +44,7 @@ public class EDiffWorker extends UntypedActor {
int counter = 0;
JedisPool innerPool = msg.getInnerPool();
String srcMLPath = msg.getSrcMLPath();
+ String rootType = msg.getRootType();
for (MessageFile msgFile : files) {
File revFile = msgFile.getRevFile();
@@ -58,7 +59,7 @@ public class EDiffWorker extends UntypedActor {
// schedule the work
- final Future> future = executor.submit(new RunnableParser(prevFile, revFile, diffentryFile, parser,project,msg.getInnerPool(),srcMLPath));
+ final Future> future = executor.submit(new RunnableParser(prevFile, revFile, diffentryFile, parser,project,msg.getInnerPool(),srcMLPath,rootType));
try {
// wait for task to complete
future.get(msg.getSECONDS_TO_WAIT(), TimeUnit.SECONDS);
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HunkParserTest.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HunkParserTest.java
index ffdb4c6..1df607a 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HunkParserTest.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HunkParserTest.java
@@ -1,10 +1,18 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
import edu.lu.uni.serval.fixminer.akka.ediff.EDiffHunkParser;
+import edu.lu.uni.serval.utils.EDiffHelper;
+import edu.lu.uni.serval.utils.PoolBuilder;
+import org.apache.commons.io.FileUtils;
import org.junit.Test;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
import java.io.File;
import java.io.IOException;
+import java.lang.instrument.Instrumentation;
+import java.time.Duration;
+import java.time.Instant;
public class HunkParserTest {
@@ -12,12 +20,20 @@ public class HunkParserTest {
public void testSimple() throws IOException {
// String input = "/Users/anil.koyuncu/projects/test/fixminer-core/python/data/gumInputLinux/revFiles/7f52f3_3845d29_drivers#pci#host#pcie-altera.c";
- String root = "/Users/anilkoyuncu/projects/gumInputLinux/linux/";
+ String root = "/Users/anil.koyuncu/projects/test/fixminer-core/python/data/gumInputLinux/linux/";
-// String filename = "8dd302_c4ef85_net#core#dev_ioctl.c";
- String filename = "6a28fd_93ad867_drivers#tty#goldfish.c";
+// String filename = "8dd302_c4ef85_net#core#dev_ioctl.c"; //ok
+// String filename = "1e793f6_77f18a_drivers#scsi#megaraid#megaraid_sas_base.c"; //OK
+// String filename = "6a28fd_93ad867_drivers#tty#goldfish.c"; //m,issing
+// String filename = "b90f7c_ff51ff_kernel#sched#fair.c"; //wrong and wired
+// String filename = "ed8f68_b1c8047_fs#ext3#dir.c";//ok
+
+// String filename = "bc3d12_9a26653_drivers#scsi#libfc#fc_disc.c"; //okish
+ String filename = "118154_0c5f81_arch#x86#kvm#svm.c";
+// String filename = "bcbd94f_43e43c9_drivers#md#dm-crypt.c"; //emin degilim
+// String filename = "f1727b4_6c1e7e_arch#x86#kvm#vmx#nested.c"; //komplex not sure
// String filename = "5924f17_5925a05_net#ipv4#tcp.c";
-// String filename = "bd0b9ac_b237721_drivers#irqchip#irq-dw-apb-ictl.c";
+// String filename = "bd0b9ac_b237721_drivers#irqchip#irq-dw-apb-ictl.c"; //missing
// String filename = "052831_3985e8_include#net#ip_tunnels.h";
// String filename = "e76019_28647b_drivers#gpu#drm#i915#i915_drv.h";
// String filename = "4cbe4d_b124f4_include#linux#mlx4#device.h"; //enum case stops at block
@@ -26,10 +42,11 @@ public class HunkParserTest {
File prevFile =new File(root + "prevFiles/prev_"+filename);
EDiffHunkParser parser = new EDiffHunkParser();
- String srcMLPath = "/Users/anilkoyuncu/Downloads/srcML2/src2srcml";
+ String srcMLPath = "/Users/anil.koyuncu/Downloads/srcML/src2srcml";
parser.parseChangedSourceCodeWithGumTree2(prevFile, revFile, srcMLPath);
// ITree t = new SrcmlCppTreeGenerator().generateFromFile(input).getRoot();
// Assert.assertEquals(148, t.getSize());
+
}
@Test
@@ -42,7 +59,7 @@ public class HunkParserTest {
File prevFile =new File(root + "prevFiles/prev_"+filename);
File diffFile = new File(root + "DiffEntries/"+filename+".txt");
EDiffHunkParser parser = new EDiffHunkParser();
- parser.parseFixPatterns(prevFile,revFile,diffFile,"gumInputLinux",null,srcMLPath);
+ parser.parseFixPatterns(prevFile,revFile,diffFile,"gumInputLinux",null,srcMLPath,null);
}
@@ -64,4 +81,46 @@ public class HunkParserTest {
// Assert.assertEquals(148, t.getSize());
}
+
+
+ @Test
+ public void rich() throws IOException {
+ Instant start = Instant.now();
+ final JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "localhost",Integer.valueOf("6399"),20000000);
+
+ EDiffHunkParser parser = new EDiffHunkParser();
+ String root = "/Users/anil.koyuncu/projects/test/fixminer-core/python/data/gumInputLinux/linux/";
+ String filename = "bb67dd_0922c7_sound#soc#sof#intel#hda.c";
+ File revFile = new File(root + "revFiles/"+ filename);
+ File prevFile =new File(root + "prevFiles/prev_"+filename);
+ File diffFile = new File(root + "DiffEntries/"+filename+".txt");
+ String srcMLPath = "/Users/anil.koyuncu/Downloads/srcML/src2srcml";
+ parser.parseFixPatterns(prevFile,revFile,diffFile,"gumInputLinux",outerPool,srcMLPath,"if");
+ String key = "if/3/linux_bb67dd_0922c7_sound#soc#sof#intel#hda.c.txt_0";
+ File file2load = new File("/Users/anil.koyuncu/projects/test/fixminer-core/python/data/dumps/"+ key);
+ byte[] dump = FileUtils.readFileToByteArray(file2load);
+
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.kryoDeseerialize(dump);
+ actionSet.toString();
+
+
+// CODE HERE
+ Instant finish = Instant.now();
+ long timeElapsed = Duration.between(start, finish).toMillis();
+ System.out.println(timeElapsed);
+
+// try (Jedis outer = outerPool.getResource()) {
+// try {
+//
+//
+//
+// byte[] s = outer.hget("dump".getBytes(), key.getBytes());
+// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.kryoDeseerialize(s);
+// actionSet.getActionSize();
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+ }
+
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java
index a738898..91c68e6 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/Parser.java
@@ -20,7 +20,7 @@ public abstract class Parser implements ParserInterface {
protected String originalTree = ""; // Guide of generating patches.
protected String actionSets = ""; // Guide of generating patches.
- public abstract void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool, String srcMLPath);
+ public abstract void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool, String srcMLPath,String rootType);
@Override
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java
index 4c23d50..d0ee8ab 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/RunnableParser.java
@@ -13,7 +13,8 @@ public class RunnableParser implements Runnable {
private String project;
private JedisPool pool;
private String srcMLPath;
-
+ private String rootType;
+
public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser) {
this.prevFile = prevFile;
this.revFile = revFile;
@@ -30,7 +31,7 @@ public class RunnableParser implements Runnable {
this.pool = innerPool;
}
- public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser, String project, JedisPool innerPool,String srcMLPath) {
+ public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser, String project, JedisPool innerPool,String srcMLPath,String rootType) {
this.prevFile = prevFile;
this.revFile = revFile;
this.diffentryFile = diffentryFile;
@@ -38,10 +39,11 @@ public class RunnableParser implements Runnable {
this.project = project;
this.pool = innerPool;
this.srcMLPath = srcMLPath;
+ this.rootType = rootType;
}
@Override
public void run() {
- parser.parseFixPatterns(prevFile, revFile, diffentryFile,project,pool,srcMLPath);
+ parser.parseFixPatterns(prevFile, revFile, diffentryFile,project,pool,srcMLPath,rootType);
}
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
index 7ed5b90..d96a6c7 100755
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
@@ -2,18 +2,20 @@ package edu.lu.uni.serval.fixminer.jobs;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
-import edu.lu.uni.serval.fixminer.akka.ediff.EDiffActor;
-import edu.lu.uni.serval.fixminer.akka.ediff.EDiffHunkParser;
-import edu.lu.uni.serval.fixminer.akka.ediff.EDiffMessage;
-import edu.lu.uni.serval.fixminer.akka.ediff.MessageFile;
+import edu.lu.uni.serval.fixminer.akka.ediff.*;
import edu.lu.uni.serval.utils.CallShell;
+import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
+import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
-import java.io.File;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -24,7 +26,7 @@ public class EnhancedASTDiff {
private static Logger log = LoggerFactory.getLogger(EnhancedASTDiff.class);
- public static void main(String inputPath, String numOfWorkers, String project, String eDiffTimeout, String parallelism, String portInner, String dbDir, String chunkName,String srcMLPath) throws Exception {
+ public static void main(String inputPath, String numOfWorkers, String project, String eDiffTimeout, String parallelism, String portInner, String dbDir, String chunkName,String srcMLPath,String rootType) throws Exception {
String parameters = String.format("\nInput path %s",inputPath);
@@ -32,7 +34,11 @@ public class EnhancedASTDiff {
CallShell cs = new CallShell();
String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
- cmd = String.format(cmd, dbDir,chunkName,Integer.valueOf(portInner));
+ if (rootType == null){
+ cmd = String.format(cmd, dbDir,chunkName,Integer.valueOf(portInner));
+ }else{
+ cmd = String.format(cmd, dbDir,rootType+chunkName,Integer.valueOf(portInner));
+ }
cs.runShell(cmd, portInner);
@@ -64,7 +70,7 @@ public class EnhancedASTDiff {
ActorSystem system = null;
ActorRef parsingActor = null;
- final EDiffMessage msg = new EDiffMessage(0, allMessageFiles,eDiffTimeout,innerPool,srcMLPath);
+ final EDiffMessage msg = new EDiffMessage(0, allMessageFiles,eDiffTimeout,innerPool,srcMLPath,rootType);
try {
log.info("Akka begins...");
log.info("{} files to process ...", allMessageFiles.size());
@@ -88,7 +94,7 @@ public class EnhancedASTDiff {
forEach(m ->
{
EDiffHunkParser parser = new EDiffHunkParser();
- parser.parseFixPatterns(m.getPrevFile(),m.getRevFile(), m.getDiffEntryFile(),project,innerPool,"/Users/anilkoyuncu/Downloads/srcML2/src2srcml");
+ parser.parseFixPatterns(m.getPrevFile(),m.getRevFile(), m.getDiffEntryFile(),project,innerPool,"/Users/anilkoyuncu/Downloads/srcML2/src2srcml",null);
if (counter % 10 == 0) {
log.info("Finalized parsing " + counter + " files... remaining " + (allMessageFiles.size() - counter));
}
@@ -141,5 +147,69 @@ public class EnhancedASTDiff {
}
}
+ public static void load(String inputPath, String numOfWorkers, String project, String eDiffTimeout, String parallelism, String portInner, String dbDir, String chunkName,String srcMLPath,String rootType) throws Exception {
+
+
+ String parameters = String.format("\nInput path %s",inputPath);
+ log.info(parameters);
+
+ CallShell cs = new CallShell();
+ String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
+ cmd = String.format(cmd, dbDir,chunkName,Integer.valueOf(portInner));
+// if (rootType == null){
+// cmd = String.format(cmd, dbDir,chunkName,Integer.valueOf(portInner));
+// }else{
+// cmd = String.format(cmd, dbDir,rootType+chunkName,Integer.valueOf(portInner));
+// }
+
+ cs.runShell(cmd, portInner);
+
+ JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
+ try (Jedis inner = innerPool.getResource()) {
+ inner.flushAll();
+ }
+ File folder = new File(new File(inputPath).getParent() + "/dumps/" + rootType);
+ File[] listOfFiles = folder.listFiles();
+ Stream stream = Arrays.stream(listOfFiles);
+ List folders = stream
+ .filter(x -> !x.getName().startsWith("."))
+ .collect(Collectors.toList());
+ List allMessageFiles = new ArrayList<>();
+
+ for (File target : folders) {
+ if(target.getName().startsWith("."))
+ continue;
+ List files = Arrays.asList(target.listFiles());
+ if (files.size() > 1){
+ allMessageFiles.addAll(files);
+ }
+ }
+
+ log.info("Message size: "+allMessageFiles.size());
+
+ allMessageFiles.stream().
+ parallel().
+ forEach(x-> loadCore(x,innerPool));
+
+ }
+
+ public static void loadCore(File file2load, JedisPool innerPool){
+ try (Jedis inner = innerPool.getResource()) {
+
+// byte[] dump = Files.readAllBytes(Paths.get(file2load.getPath()));
+ byte[] dump = FileUtils.readFileToByteArray(file2load);
+// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.kryoDeseerialize(dump);
+ String key = file2load.getPath().split("/dumps/")[1];
+ inner.hset("dump".getBytes(),key.getBytes(),dump);
+// actionSet.toString();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
}
diff --git a/src/main/resource/app.properties b/src/main/resource/app.properties
index 62363bb..a6ab30f 100755
--- a/src/main/resource/app.properties
+++ b/src/main/resource/app.properties
@@ -3,11 +3,11 @@ pjName = gumInput
portInner = 6380
portDumps = 6399
parallelism = AKKA
-numOfWorkers = 1
+numOfWorkers = 14
-inputPath = /Users/anilkoyuncu/projects/gumInputLinux/
-redisPath = /Users/anilkoyuncu/projects/fixminer/fixminer-core/python/data/redis
-srcMLPath= /Users/anilkoyuncu/Downloads/srcML2/src2srcml
+inputPath = /Users/anil.koyuncu/projects/test/fixminer-core/python/data/gumInputLinux
+redisPath = /Users/anil.koyuncu/projects/test/fixminer-core/python/data/redis
+srcMLPath= /Users/anil.koyuncu/Downloads/srcML/src2srcml
actionType =ALL
eDiffTimeout = 900