From ec0b90a6b0082ce31a134b92d075d7c6cde7bfd8 Mon Sep 17 00:00:00 2001 From: Anil Koyuncu Date: Wed, 18 Apr 2018 10:18:32 +0200 Subject: [PATCH] new without thread block --- FixPatternMiner.iml | 4 +- pom.xml | 7 +- .../cluster/AkkaTreeLoader.java | 32 ++-- .../cluster/CalculatePairs.java | 65 +++++--- .../cluster/ImportPairs2DB.java | 18 ++- .../FixPatternParser/cluster/StoreFile.java | 34 +++-- .../cluster/TreeLoaderClusterL1.java | 15 +- .../violations/CallShell.java | 41 +++++ .../violations/FixedViolationHunkParser.java | 70 ++++++--- .../MultiThreadTreeLoaderCluster.java | 6 +- .../MultiThreadTreeLoaderCluster3.java | 4 +- .../violations/TestHunkParser.java | 5 +- src/main/java/edu/lu/uni/serval/Launcher.java | 144 +++++++++++------- 13 files changed, 294 insertions(+), 151 deletions(-) create mode 100644 src/main/java/edu/lu/uni/serval/FixPatternParser/violations/CallShell.java diff --git a/FixPatternMiner.iml b/FixPatternMiner.iml index 76bff5b..98bff37 100644 --- a/FixPatternMiner.iml +++ b/FixPatternMiner.iml @@ -52,8 +52,8 @@ - - + + diff --git a/pom.xml b/pom.xml index 393feb7..b62a4ff 100644 --- a/pom.xml +++ b/pom.xml @@ -79,9 +79,14 @@ amqp-client 4.0.0 + + junit + junit + 4.11 + - + diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/AkkaTreeLoader.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/AkkaTreeLoader.java index 273c166..3158884 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/AkkaTreeLoader.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/AkkaTreeLoader.java @@ -4,6 +4,7 @@ import com.github.gumtreediff.tree.ITree; import com.github.gumtreediff.tree.Tree; import com.github.gumtreediff.tree.TreeContext; import edu.lu.uni.serval.FixPattern.utils.ASTNodeMap; +import edu.lu.uni.serval.FixPatternParser.violations.CallShell; import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,6 +16,7 @@ import java.util.*; import java.util.concurrent.Executors; import java.util.function.Consumer; import java.util.stream.Collectors; +import org.junit.Assert; /** * Created by anilkoyuncu on 19/03/2018. @@ -53,9 +55,9 @@ public class AkkaTreeLoader { StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(), System.out::println); Executors.newSingleThreadExecutor().submit(streamGobbler); -// int exitCode = process.waitFor(); -// assert exitCode == 0; - Thread.sleep(Integer.valueOf(serverWait)); + int exitCode = process.waitFor(); + assert exitCode == 0; +// Thread.sleep(Integer.valueOf(serverWait)); } catch (IOException e) { e.printStackTrace(); @@ -66,6 +68,8 @@ public class AkkaTreeLoader { log.info("Load done"); } + private static Consumer consumer = Assert::assertNotNull; + public static void loadRedisWait(String cmd){ Process process; @@ -77,7 +81,7 @@ public class AkkaTreeLoader { StreamGobbler streamGobbler = - new StreamGobbler(process.getInputStream(), System.out::println); + new StreamGobbler(process.getInputStream(), consumer); Executors.newSingleThreadExecutor().submit(streamGobbler); int exitCode = process.waitFor(); assert exitCode == 0; @@ -93,7 +97,7 @@ public class AkkaTreeLoader { } // public static void main(String[] args) { - public static void main(String portInner,String serverWait,String dbDir,String chunkName,String port, String dumpsName){ + public static void main(String portInner,String serverWait,String dbDir,String chunkName,String port, String dumpsName) throws Exception { // String inputPath; //// String outputPath; @@ -141,14 +145,15 @@ public class AkkaTreeLoader { // calculatePairs(inputPath, port); // log.info("Calculate pairs done"); // }else { + CallShell cs = new CallShell(); String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s"; String cmd1 = String.format(cmd, dbDir,dumpsName,Integer.valueOf(port)); - loadRedis(cmd1,serverWait); - +// loadRedis(cmd1,serverWait); + cs.runShell(cmd1,serverWait); String cmdInner = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s"; String cmd2 = String.format(cmdInner, dbDir,chunkName,Integer.valueOf(portInner)); - loadRedis(cmd2,serverWait); - +// loadRedis(cmd2,serverWait); + cs.runShell(cmd2,serverWait); JedisPool outerPool = new JedisPool(poolConfig, "127.0.0.1",Integer.valueOf(port),20000000); JedisPool innerPool = new JedisPool(poolConfig, "127.0.0.1",Integer.valueOf(portInner),20000000); @@ -158,12 +163,13 @@ public class AkkaTreeLoader { String stopServer = "bash "+dbDir + "/" + "stopServer.sh" +" %s"; String stopServer1 = String.format(stopServer,Integer.valueOf(portInner)); - loadRedis(stopServer1,serverWait); - +// loadRedis(stopServer1,serverWait); + cs.runShell(stopServer1,serverWait); stopServer = "bash "+dbDir + "/" + "stopServer.sh" +" %s"; String stopServer2 = String.format(stopServer,Integer.valueOf(port)); - loadRedis(stopServer2,serverWait); +// loadRedis(stopServer2,serverWait); // } + cs.runShell(stopServer2,serverWait); } @@ -181,7 +187,7 @@ public class AkkaTreeLoader { ScanParams sc = new ScanParams(); //150000000 sc.count(150000000); - sc.match("pair_*"); + sc.match("pair_[0-9]*"); scan = inner.scan("0", sc); int size = scan.getResult().size(); diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/CalculatePairs.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/CalculatePairs.java index 96b766c..dccc9a6 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/CalculatePairs.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/CalculatePairs.java @@ -1,6 +1,7 @@ package edu.lu.uni.serval.FixPatternParser.cluster; import com.github.gumtreediff.tree.ITree; +import edu.lu.uni.serval.FixPatternParser.violations.CallShell; import edu.lu.uni.serval.utils.FileHelper; import org.javatuples.Pair; import org.slf4j.Logger; @@ -10,10 +11,7 @@ import redis.clients.jedis.JedisPool; import redis.clients.jedis.ScanParams; import redis.clients.jedis.ScanResult; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.RandomAccessFile; +import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Files; @@ -30,7 +28,7 @@ import static edu.lu.uni.serval.FixPatternParser.cluster.TreeLoaderClusterL1.poo public class CalculatePairs { private static Logger log = LoggerFactory.getLogger(CalculatePairs.class); // public static void main(String[] args) { - public static void main(String serverWait,String dbDir,String chunkName,String port,String outputPath,String pjName){ + public static void main(String serverWait,String dbDir,String chunkName,String port,String outputPath,String pjName) throws Exception { // String inputPath; // String port; @@ -65,11 +63,11 @@ public class CalculatePairs { String parameters = String.format("\nport %s \nserverWait %s \nchunkName %s \ndbDir %s",port,serverWait,chunkName,dbDir); log.info(parameters); - + CallShell cs =new CallShell(); String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s"; cmd = String.format(cmd, dbDir,chunkName,Integer.valueOf(port)); - loadRedis(cmd,serverWait); - +// loadRedis(cmd,serverWait); + cs.runShell(cmd,serverWait); FileHelper.createDirectory(outputPath); @@ -98,10 +96,9 @@ public class CalculatePairs { byte [] buf = new byte[0]; String line = null; try { + FileOutputStream fos = new FileOutputStream(outputPath + "/" +pjName+".txt"); + DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos)); - FileChannel rwChannel = new RandomAccessFile(outputPath + "/" +pjName +".txt", "rw").getChannel(); - ByteBuffer wrBuf = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, Integer.MAX_VALUE); - int fileCounter = 0; for (int i = 0; i < result.size(); i++) { @@ -110,22 +107,38 @@ public class CalculatePairs { line = String.valueOf(i) +"\t" + String.valueOf(j) + "\t" + result.get(i) + "\t" + result.get(j)+"\n"; - buf = line.getBytes(); - if(wrBuf.remaining() > 500) { - wrBuf.put(buf); - }else{ - log.info("Next pair dump"); - fileCounter++; - rwChannel = new RandomAccessFile(outputPath+"/" +pjName+String.valueOf(fileCounter)+".txt", "rw").getChannel(); - wrBuf = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, Integer.MAX_VALUE); - } - - - + outStream.write(line.getBytes()); } } - rwChannel.close(); + outStream.close(); +// FileChannel rwChannel = new RandomAccessFile(outputPath + "/" +pjName +".txt", "rw").getChannel(); +// ByteBuffer wrBuf = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, Integer.MAX_VALUE); +// int fileCounter = 0; +// +// +// for (int i = 0; i < result.size(); i++) { +// for (int j = i + 1; j < result.size(); j++) { +// +// +// +// line = String.valueOf(i) +"\t" + String.valueOf(j) + "\t" + result.get(i) + "\t" + result.get(j)+"\n"; +// buf = line.getBytes(); +// if(wrBuf.remaining() > 500) { +// wrBuf.put(buf); +// }else{ +// log.info("Next pair dump"); +// fileCounter++; +// rwChannel = new RandomAccessFile(outputPath+"/" +pjName+String.valueOf(fileCounter)+".txt", "rw").getChannel(); +// wrBuf = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, Integer.MAX_VALUE); +// } +// +// +// +// +// } +// } +// rwChannel.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { @@ -136,6 +149,10 @@ public class CalculatePairs { e.printStackTrace(); } + String stopServer = "bash "+dbDir + "/" + "stopServer.sh" +" %s"; + String stopServer2 = String.format(stopServer,Integer.valueOf(port)); +// loadRedis(stopServer2,serverWait); + cs.runShell(stopServer2,serverWait); log.info("Done pairs"); } diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/ImportPairs2DB.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/ImportPairs2DB.java index 1287814..d4a5e1d 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/ImportPairs2DB.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/ImportPairs2DB.java @@ -1,5 +1,6 @@ package edu.lu.uni.serval.FixPatternParser.cluster; +import edu.lu.uni.serval.FixPatternParser.violations.CallShell; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,8 +11,8 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import static edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedis; -import static edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedisWait; +//import static edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedis; +//import static edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedisWait; /** @@ -21,7 +22,7 @@ public class ImportPairs2DB { private static Logger log = LoggerFactory.getLogger(ImportPairs2DB.class); // public static void main(String[] args) { - public static void main(String csvInputPath,String portInner,String serverWait,String dbDir,String numOfWorkers){ + public static void main(String csvInputPath,String portInner,String serverWait,String dbDir) throws Exception { // String inputPath; // String portInner; @@ -44,7 +45,7 @@ public class ImportPairs2DB { // dbDir = "/Users/anilkoyuncu/bugStudy/dataset/redis"; // numOfWorkers = "1"; // } - String parameters = String.format("\nInput path %s \nportInner %s \nserverWait %s \nnumOfWorks %s \ndbDir %s",csvInputPath,portInner,serverWait,numOfWorkers,dbDir); + String parameters = String.format("\nInput path %s \nportInner %s \nserverWait %s \ndbDir %s",csvInputPath,portInner,serverWait,dbDir); log.info(parameters); @@ -61,18 +62,21 @@ public class ImportPairs2DB { String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s"; cmd = String.format(cmd, dbDir,pj.getName() +".rdb", portInt); log.info(cmd); - loadRedisWait(cmd); + CallShell cs = new CallShell(); + cs.runShell(cmd); cmd = "bash "+dbDir + "/redisImportSingle.sh" +" %s %s"; cmd = String.format(cmd, pj.getPath(), portInt); log.info(cmd); - loadRedisWait(cmd); + cs.runShell(cmd); portInt++; - //TODO missing kill server script + String stopServer = "bash "+dbDir + "/" + "stopServer.sh" +" %s"; + String stopServer2 = String.format(stopServer,Integer.valueOf(portInner)); + cs.runShell(stopServer2); } diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/StoreFile.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/StoreFile.java index 560975b..d32bc63 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/StoreFile.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/StoreFile.java @@ -1,5 +1,6 @@ package edu.lu.uni.serval.FixPatternParser.cluster; +import edu.lu.uni.serval.FixPatternParser.violations.CallShell; import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +18,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import static edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedis; +import static edu.lu.uni.serval.FixPatternParser.cluster.TreeLoaderClusterL1.poolConfig; /** * Created by anilkoyuncu on 03/04/2018. @@ -26,7 +28,7 @@ public class StoreFile { private static Logger log = LoggerFactory.getLogger(StoreFile.class); // public static void main(String[] args) { - public static void main(String inputPath,String portInner,String serverWait,String dbDir,String chunkName){ + public static void main(String inputPath,String portInner,String serverWait,String dbDir,String chunkName,String operation) throws Exception { // String inputPath; // String portInner; // String serverWait; @@ -48,12 +50,13 @@ public class StoreFile { // dbDir = "/Users/anilkoyuncu/bugStudy/dataset/redis"; // numOfWorkers = "1"; // } - String parameters = String.format("\nInput path %s \nportInner %s \nserverWait %s \nchunkName %s \ndbDir %s",inputPath,portInner,serverWait,chunkName,dbDir); + String parameters = String.format("\nInput path %s \nportInner %s \nserverWait %s \nchunkName %s \ndbDir %s \noperation %s",inputPath,portInner,serverWait,chunkName,dbDir,operation); 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)); - loadRedis(cmd,serverWait); +// loadRedis(cmd,serverWait); + cs.runShell(cmd,serverWait); File folder = new File(inputPath); File[] subFolders = folder.listFiles(); @@ -67,40 +70,43 @@ public class StoreFile { File[] files = pj.listFiles(); Stream fileStream = Arrays.stream(files); List fs = fileStream - .filter(x -> x.getName().startsWith("ActionSetDumps")) + .filter(x -> x.getName().startsWith(operation)) .collect(Collectors.toList()); File[] dumps = fs.get(0).listFiles(); for (File f : dumps) { String name = f.getName(); - String key = pjName + "/"+ "ActionSetDumps/" + name; + String key = pjName + "/"+ operation+"/" + name; String result = key +","+f.getPath(); workList.add(result); } } + log.info(String.valueOf(workList.size())); + + JedisPool innerPool = new JedisPool(poolConfig, "127.0.0.1",Integer.valueOf(portInner),20000000); + workList.stream().parallel() - .forEach(m -> storeCore(portInner, m.split(",")[1],m.split(",")[0])); + .forEach(m -> storeCore(innerPool, m.split(",")[1],m.split(",")[0])); log.info(parameters); String stopServer = "bash "+dbDir + "/" + "stopServer.sh" +" %s"; String stopServer2 = String.format(stopServer,Integer.valueOf(portInner)); - loadRedis(stopServer2,serverWait); - +// loadRedis(stopServer2,serverWait); + cs.runShell(stopServer2,serverWait); } - public static void storeCore(String portInner,String path,String key){ + public static void storeCore(JedisPool innerPool,String path,String key){ try { - JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", Integer.valueOf(portInner), 20000000); - ScanResult scan; + HierarchicalActionSet actionSet = null; - HierarchicalActionSet NewactionSet = null; + try { FileInputStream fi = new FileInputStream(new File(path)); ObjectInputStream oi = new ObjectInputStream(fi); @@ -120,8 +126,8 @@ public class StoreFile { e.printStackTrace(); } + try (Jedis inner = innerPool.getResource()) { - try (Jedis inner = pool.getResource()) { inner.set(key,toString(actionSet)); } diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/TreeLoaderClusterL1.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/TreeLoaderClusterL1.java index 88454a9..431dc84 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/TreeLoaderClusterL1.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/cluster/TreeLoaderClusterL1.java @@ -5,6 +5,7 @@ import com.github.gumtreediff.actions.model.*; import com.github.gumtreediff.matchers.Matcher; import com.github.gumtreediff.matchers.Matchers; import com.github.gumtreediff.tree.ITree; +import edu.lu.uni.serval.FixPatternParser.violations.CallShell; import edu.lu.uni.serval.gumtree.GumTreeComparer; import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet; import edu.lu.uni.serval.gumtree.regroup.HierarchicalRegrouper; @@ -38,7 +39,7 @@ public class TreeLoaderClusterL1 { private static Logger log = LoggerFactory.getLogger(TreeLoaderClusterL1.class); // public static void main(String[] args){ - public static void main(String portInner,String serverWait,String port,String inputPath,String level1DB,String level1Path){ + public static void main(String portInner,String serverWait,String port,String inputPath,String level1DB,String level1Path) throws Exception { // String inputPath; // String outputPath; @@ -68,8 +69,9 @@ public class TreeLoaderClusterL1 { String cmd = "bash "+inputPath + "/" + "startServer.sh" +" %s %s %s"; cmd = String.format(cmd, inputPath,level1DB,Integer.valueOf(port)); - loadRedis(cmd,serverWait); - +// loadRedis(cmd,serverWait); + CallShell cs = new CallShell(); + cs.runShell(cmd,serverWait); JedisPool outerPool = new JedisPool(poolConfig, "127.0.0.1",Integer.valueOf(port),20000000); @@ -83,7 +85,8 @@ public class TreeLoaderClusterL1 { for (File db : dbs) { String cmdInner = "bash "+inputPath + "/" + "startServer.sh" +" %s %s %s"; cmdInner = String.format(cmdInner, inputPath,db.getName(),Integer.valueOf(portInner)); - loadRedis(cmdInner,serverWait); +// loadRedis(cmdInner,serverWait); + cs.runShell(cmdInner,serverWait); JedisPool innerPool = new JedisPool(poolConfig, "127.0.0.1",Integer.valueOf(portInner),20000000); Jedis inner = null; @@ -136,8 +139,8 @@ public class TreeLoaderClusterL1 { String stopServer = "bash "+level1Path + "/" + "stopServer.sh" +" %s"; stopServer = String.format(stopServer,Integer.valueOf(portInner)); - loadRedis(stopServer,serverWait); - +// loadRedis(stopServer,serverWait); + cs.runShell(stopServer,serverWait); } diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/CallShell.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/CallShell.java new file mode 100644 index 0000000..07e0398 --- /dev/null +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/CallShell.java @@ -0,0 +1,41 @@ +package edu.lu.uni.serval.FixPatternParser.violations; + +/** + * Created by anilkoyuncu on 17/04/2018. + */ +import java.io.*; +public class CallShell { + + + + + public void runShell(String command) throws Exception { + + Process process = Runtime.getRuntime().exec(command); + BufferedReader reader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + String s; + while ((s = reader.readLine()) != null) { + System.out.println("Script output: " + s); + } + + } + + public void runShell(String command,String serverWait) throws Exception { + + Process process = Runtime.getRuntime().exec(command); + BufferedReader reader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + String s; + while ((s = reader.readLine()) != null) { + System.out.println("Script output: " + s); + } + Thread.sleep(Integer.valueOf(serverWait)); + + } + + + + +} + diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java index 75057ed..0f51308 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java @@ -6,6 +6,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.github.gumtreediff.actions.model.Delete; +import com.github.gumtreediff.actions.model.Insert; +import com.github.gumtreediff.actions.model.Move; import com.github.gumtreediff.actions.model.Update; import com.github.gumtreediff.tree.ITree; @@ -40,35 +43,56 @@ public class FixedViolationHunkParser extends FixedViolationParser { @Override public void parseFixPatterns(File prevFile, File revFile, File diffentryFile) { List actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile); - -// boolean isUpdate = -// actionSets.stream().allMatch(p -> p.getAction() instanceof Update); - int hunkSet = 0; -// if(isUpdate){ - for (HierarchicalActionSet actionSet : actionSets) { + if (actionSets.size() != 0) { + boolean isUpdate = + actionSets.stream().allMatch(p -> p.getAction() instanceof Update); + boolean isInsert = + actionSets.stream().allMatch(p -> p.getAction() instanceof Insert); + boolean isDelete = + actionSets.stream().allMatch(p -> p.getAction() instanceof Delete); + boolean isMove = + actionSets.stream().allMatch(p -> p.getAction() instanceof Move); + int hunkSet = 0; + if (isUpdate || isInsert || isDelete || isMove) { + for (HierarchicalActionSet actionSet : actionSets) { + String folder = null; + if (isUpdate) { + folder = "/UPD/"; + } else if (isDelete) { + folder = "/DEL/"; + } else if (isInsert) { + folder = "/INS/"; + } else if (isMove) { + folder = "/MOV/"; + } - FileOutputStream f = null; + FileOutputStream f = null; - try { - String pj = diffentryFile.getParent().split("Defects4J")[1]; - String root = diffentryFile.getParent().split("Defects4J")[0]; - String hunkTreeFileName = root+"GumTreeOutputDefects4J/" +pj.replace("DiffEntries","ActionSetDumps/") + diffentryFile.getName() + "_" + String.valueOf(hunkSet); - f = new FileOutputStream(new File(hunkTreeFileName)); - ObjectOutputStream o = new ObjectOutputStream(f); - o.writeObject(actionSet); + try { +// String pj = diffentryFile.getParent().split("Defects4J")[1]; + String datasetName = diffentryFile.getParent().split("dataset/")[1].split("/")[0]; + String[] split1 = diffentryFile.getParent().split(datasetName); + String root = split1[0]; + String pj = split1[1].split("/")[1]; - o.close(); - f.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + String hunkTreeFileName = root + "GumTreeOutput" + datasetName + "/" + pj + folder + diffentryFile.getName() + "_" + String.valueOf(hunkSet); + f = new FileOutputStream(new File(hunkTreeFileName)); + ObjectOutputStream o = new ObjectOutputStream(f); + o.writeObject(actionSet); + + o.close(); + f.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + hunkSet++; } - hunkSet++; - } -// } + } + } } // public void parseFixPatterns(File prevFile, File revFile, File diffentryFile) { diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster.java index bc0bd5d..a7734f3 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster.java @@ -126,9 +126,9 @@ public class MultiThreadTreeLoaderCluster { edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedis(cmd1,"1000"); - String cmd2 = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s"; - cmd2 = String.format(cmd2, dbDir,dumpName,Integer.valueOf(port)); - edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedis(cmd2,"10000"); +// String cmd2 = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s"; +// cmd2 = String.format(cmd2, dbDir,dumpName,Integer.valueOf(port)); +// edu.lu.uni.serval.FixPatternParser.cluster.AkkaTreeLoader.loadRedis(cmd2,"10000"); String cmd3; diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster3.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster3.java index b8d499a..17c1639 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster3.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoaderCluster3.java @@ -779,7 +779,7 @@ orginal calculate pairs, from all dumps of the projects .filter(x -> !x.getName().startsWith(".")) .collect(Collectors.toList()); - FileHelper.createDirectory(outputPath + "pairs-2l/"); + FileHelper.createDirectory(outputPath + "/pairs-2l/"); for (File pj : pjs) { File[] files = pj.listFiles(); @@ -835,7 +835,7 @@ orginal calculate pairs, from all dumps of the projects // ByteBuffer wrBuf = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, 1000*treesFileNames.size()*treesFileNames.size()); // int fileCounter = 0; - FileOutputStream fos = new FileOutputStream(outputPath + "pairs-2l/" +filename+".txt"); + FileOutputStream fos = new FileOutputStream(outputPath + "/pairs-2l/" +filename+".txt"); DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos)); diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/TestHunkParser.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/TestHunkParser.java index 9b9ba0d..d13f7b4 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/TestHunkParser.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/TestHunkParser.java @@ -78,7 +78,10 @@ public class TestHunkParser { final String alarmTypesFilePath = GUM_TREE_OUTPUT + "alarmTypes.list"; - FileHelper.createDirectory(GUM_TREE_OUTPUT + "/ActionSetDumps"); + FileHelper.createDirectory(GUM_TREE_OUTPUT + "/UPD"); + FileHelper.createDirectory(GUM_TREE_OUTPUT + "/INS"); + FileHelper.createDirectory(GUM_TREE_OUTPUT + "/DEL"); + FileHelper.createDirectory(GUM_TREE_OUTPUT + "/MOV"); FileHelper.deleteDirectory(editScriptsFilePath); FileHelper.deleteDirectory(patchesSourceCodeFilePath); FileHelper.deleteDirectory(buggyTokensFilePath); diff --git a/src/main/java/edu/lu/uni/serval/Launcher.java b/src/main/java/edu/lu/uni/serval/Launcher.java index ec2dcf1..976afd7 100644 --- a/src/main/java/edu/lu/uni/serval/Launcher.java +++ b/src/main/java/edu/lu/uni/serval/Launcher.java @@ -25,72 +25,106 @@ public class Launcher { String dumpsName; String gumInput; String gumOutput; + String datasetPath; + String pjName; if (args.length > 0) { jobType = args[0]; - gumInput = args[1]; - portInner = args[2]; - serverWait = args[3]; - chunkName = args[4]; - numOfWorkers = args[5]; - dbDir = args[6]; - port = args[7]; - pairsPath = args[8]; - csvInputPath = args[9]; - dumpsName = args[10]; - gumOutput =args[12]; + portInner = args[1]; + serverWait = args[2]; + numOfWorkers = args[3]; + port = args[4]; + dumpsName = args[5]; + datasetPath = args[6]; + pjName = args[7]; +// gumInput = args[1]; +// chunkName = args[4]; +// dbDir = args[6]; +// pairsPath = args[8]; +// csvInputPath = args[9]; +// gumOutput =args[12]; } else { // inputPath = "/Users/anilkoyuncu/bugStudy/dataset/pairs"; - gumInput = "/Users/anilkoyuncu/bugStudy/dataset/Defects4J/"; +// gumInput = "/Users/anilkoyuncu/bugStudy/dataset/Defects4J/"; portInner = "6380"; - serverWait = "10000"; - chunkName = "textfile.txt.csv.rdb"; - dbDir = "/Users/anilkoyuncu/bugStudy/dataset/redis"; - numOfWorkers = "1"; - jobType = "L3PAIRDB"; + serverWait = "50000"; + chunkName = "Bug13April.txt.csv.rdb"; +// dbDir = "/Users/anilkoyuncu/bugStudy/dataset/redis"; + numOfWorkers = "10"; + jobType = "AKKA"; port = "6399"; - pairsPath = "/Users/anilkoyuncu/bugStudy/dataset/pairsImportDefects4J"; - gumOutput = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutputDefects4J"; - csvInputPath = "/Users/anilkoyuncu/bugStudy/dataset/pairsImportDefects4J-CSV"; - dumpsName = "dumpsDefect4J.rdb"; +// pairsPath = "/Users/anilkoyuncu/bugStudy/dataset/pairsImportDefects4J"; +// gumOutput = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutputDefects4J"; +// csvInputPath = "/Users/anilkoyuncu/bugStudy/dataset/pairsImportDefects4J-CSV"; + dumpsName = "dumps-Bug13April.rdb"; + datasetPath = "/Users/anilkoyuncu/bugStudy/dataset"; + pjName = "Bug13April"; } + gumInput = datasetPath +"/"+pjName+"/"; + gumOutput = datasetPath + "/GumTreeOutput" + pjName; + dbDir = datasetPath + "/redis"; + pairsPath = datasetPath + "/pairsImport"+pjName; + csvInputPath = datasetPath + "/pairsImport"+pjName+"-CSV"; // String parameters = String.format("\nJob %s \nInput path %s \nportInner %s \nserverWait %s \nchunkName %s \nnumOfWorks %s \ndbDir %s", jobType, inputPath, portInner, serverWait, chunkName, numOfWorkers, dbDir); + try { + switch (jobType) { + case "DUMPTREE": + TestHunkParser.main(gumInput, gumOutput, numOfWorkers); + break; + case "STORE": + StoreFile.main(gumOutput, portInner, serverWait, dbDir, "INS"+dumpsName,"INS"); + StoreFile.main(gumOutput, portInner, serverWait, dbDir, "DEL"+dumpsName,"DEL"); + StoreFile.main(gumOutput, portInner, serverWait, dbDir, "UPD"+dumpsName,"UPD"); + StoreFile.main(gumOutput, portInner, serverWait, dbDir, "MOV"+dumpsName,"MOV"); + break; + case "CALCPAIRS": + CalculatePairs.main(serverWait, dbDir, "INS"+dumpsName, portInner, pairsPath+"INS", pjName+"INS"); + CalculatePairs.main(serverWait, dbDir, "DEL"+dumpsName, portInner, pairsPath+"DEL", pjName+"DEL"); + CalculatePairs.main(serverWait, dbDir, "UPD"+dumpsName, portInner, pairsPath+"UPD", pjName+"UPD"); + CalculatePairs.main(serverWait, dbDir, "MOV"+dumpsName, portInner, pairsPath+"MOV", pjName+"MOV"); + break; + case "IMPORTPAIRS": + ImportPairs2DB.main(csvInputPath+"INS", portInner, serverWait, dbDir); + ImportPairs2DB.main(csvInputPath+"DEL", portInner, serverWait, dbDir); + ImportPairs2DB.main(csvInputPath+"MOV", portInner, serverWait, dbDir); + ImportPairs2DB.main(csvInputPath+"UPD", portInner, serverWait, dbDir); + break; + case "AKKA": + String chunk = pjName; + AkkaTreeLoader.main(portInner, serverWait, dbDir, chunk +"INS"+".txt.csv.rdb" , port, "INS"+dumpsName); + AkkaTreeLoader.main(portInner, serverWait, dbDir, chunk +"DEL"+".txt.csv.rdb", port, "DEL"+dumpsName); + AkkaTreeLoader.main(portInner, serverWait, dbDir, chunk +"UPD"+".txt.csv.rdb", port, "UPD"+dumpsName); + AkkaTreeLoader.main(portInner, serverWait, dbDir, chunk +"MOV"+".txt.csv.rdb", port, "MOV"+dumpsName); + break; + case "LEVEL1DB": + TreeLoaderClusterL1.main(portInner, serverWait, port, dbDir, "level1-BugsDotJar.rdb", dbDir + "/level1-BugsDotJar/"); + break; + //CALC python abstractPatch.py to from cluster folder + case "L2CALCPAIRS": + // MultiThreadTreeLoaderCluster.calculatePairsOfClusters("/Users/anilkoyuncu/bugStudy/code/python/clusterDefect4J","/Users/anilkoyuncu/bugStudy/dataset/"); + MultiThreadTreeLoaderCluster.calculatePairsOfClusters("/Users/anilkoyuncu/bugStudy/code/python/cluster", datasetPath); + break; + case "L2PAIRDB": + // MultiThreadTreeLoaderCluster.mainCompare("6300","/Users/anilkoyuncu/bugStudy/dataset/pairs-csv","/Users/anilkoyuncu/bugStudy/dataset/redisSingleImport.sh",dbDir,"clusterl1-d4j.rdb",dumpsName,"6301"); + MultiThreadTreeLoaderCluster.mainCompare("6300", datasetPath + "/pairs-csv", datasetPath + "/redisSingleImport.sh", dbDir, "clusterl1-13april.rdb", dumpsName, "6301"); + break; + case "L3CALCPAIRS": + // MultiThreadTreeLoaderCluster3.calculatePairsOfClusters("/Users/anilkoyuncu/bugStudy/code/python/clusterDefect4J-2l",datasetPath); + MultiThreadTreeLoaderCluster3.calculatePairsOfClusters("/Users/anilkoyuncu/bugStudy/code/python/cluster-2l", datasetPath); + break; + case "L3PAIRDB": + MultiThreadTreeLoaderCluster3.mainCompare("6300", datasetPath + "/pairs-2l-csv", datasetPath + "/redisSingleImport.sh", dbDir, "clusterl2-13april.rdb", dumpsName, "6301"); + break; + } + } catch (Exception e) { + e.printStackTrace(); + } + - switch (jobType){ - case "DUMPTREE": - TestHunkParser.main(gumInput,gumOutput,numOfWorkers); - break; - case "STORE": - StoreFile.main(gumOutput,portInner,serverWait,dbDir,dumpsName); - break; - case "CALCPAIRS": - CalculatePairs.main(serverWait,dbDir,dumpsName,port,pairsPath,"DEFECT4J"); - break; - case "IMPORTPAIRS": - ImportPairs2DB.main(csvInputPath,portInner,serverWait,dbDir,numOfWorkers); - break; - case "AKKA": - AkkaTreeLoader.main(portInner,serverWait,dbDir,chunkName,port,dumpsName); - break; - case "LEVEL1DB": - TreeLoaderClusterL1.main(portInner,serverWait,port,dbDir,"level1-defect4j.rdb",dbDir+"/level1-defect4j/"); - break; - //CALC python abstractPatch.py to from cluster folder - case "L2CALCPAIRS": - MultiThreadTreeLoaderCluster.calculatePairsOfClusters("/Users/anilkoyuncu/bugStudy/code/python/clusterDefect4J","/Users/anilkoyuncu/bugStudy/dataset/"); - break; - case "L2PAIRDB": - MultiThreadTreeLoaderCluster.mainCompare("6300","/Users/anilkoyuncu/bugStudy/dataset/pairs-csv","/Users/anilkoyuncu/bugStudy/dataset/redisSingleImport.sh",dbDir,"clusterl1-d4j.rdb",dumpsName,"6301"); - break; - case "L3CALCPAIRS": - MultiThreadTreeLoaderCluster3.calculatePairsOfClusters("/Users/anilkoyuncu/bugStudy/code/python/clusterDefect4J-2l","/Users/anilkoyuncu/bugStudy/dataset/"); - break; - case "L3PAIRDB": - MultiThreadTreeLoaderCluster3.mainCompare("6300","/Users/anilkoyuncu/bugStudy/dataset/pairs-2l-csv","/Users/anilkoyuncu/bugStudy/dataset/redisSingleImport.sh",dbDir,"clusterl2-d4j.rdb",dumpsName,"6301"); - break; } - } - +// System.exit(1); } + +