You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by ti...@apache.org on 2013/07/23 08:10:30 UTC

svn commit: r1505905 - /incubator/vxquery/trunk/vxquery/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java

Author: tillw
Date: Tue Jul 23 06:10:30 2013
New Revision: 1505905

URL: http://svn.apache.org/r1505905
Log:
add option to write results to files on the node controllers
(should be replace by Hyracks' result distribution framework soon)

Modified:
    incubator/vxquery/trunk/vxquery/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java?rev=1505905&r1=1505904&r2=1505905&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java Tue Jul 23 06:10:30 2013
@@ -157,11 +157,10 @@ public class VXQuery {
                     }
                 }
             };
-            File result = createTempFile("test");
+            FileSplit[] fileSplits = getFileSplits(opts.outfileSplits);
             XMLQueryCompiler compiler = new XMLQueryCompiler(listener);
             CompilerControlBlock ccb = new CompilerControlBlock(new StaticContextImpl(
-                    RootStaticContextImpl.INSTANCE), new FileSplit[] { new FileSplit("nc1",
-                            result.getAbsolutePath()) });
+                    RootStaticContextImpl.INSTANCE), fileSplits);
             compiler.compile(query, new StringReader(qStr), ccb, opts.optimizationLevel);
             if (opts.compileOnly) {
                 continue;
@@ -174,15 +173,41 @@ public class VXQuery {
             js.setGlobalJobDataFactory(new VXQueryGlobalDataFactory(dCtx.createFactory()));
 
             for (int i = 0; i < opts.repeatExec; ++i) {
-                runInProcess(js, result);
+                runJob(js, fileSplits);
             }
         }
     }
+    
+    private FileSplit[] getFileSplits(String arg) throws IOException {
+        if (arg == null) {
+            File result = createTempFile("test");
+            return new FileSplit[] {
+                new FileSplit("nc1", result.getAbsolutePath())
+            };
+        } else {
+            String[] fileIds = arg.split(",");
+            FileSplit[] splits = new FileSplit[fileIds.length];
+            for (int i = 0; i < fileIds.length; ++i) {
+                String[] components = fileIds[i].split(":");
+                System.err.println(components);
+                splits[i] = new FileSplit(components[0], components[1]);
+            }
+            return splits;
+        }
+    }
 
-    private void runInProcess(JobSpecification spec, File result) throws Exception {
+    private void runJob(JobSpecification spec, FileSplit[] fileSplits) throws Exception {
         JobId jobId = hcc.startJob(spec, EnumSet.of(JobFlag.PROFILE_RUNTIME));
         hcc.waitForCompletion(jobId);
-        dumpOutputFiles(result);
+        if (opts.outfileSplits == null) {
+            File result = fileSplits[0].getLocalFile().getFile();
+            dumpOutputFiles(result);
+        } else {
+            System.err.println("Results in:");
+            for (FileSplit fs : fileSplits) {
+                System.out.println(fs.getNodeName() + ":" + fs.getLocalFile().toString());
+            }
+        }
     }
 
     private void dumpOutputFiles(File f) throws IOException {
@@ -257,6 +282,9 @@ public class VXQuery {
         @Option(name = "-client-net-port", usage = "Port of the ClusterController (default 1098)")
         public int clientNetPort = 1098;
 
+        @Option(name = "-outfile-splits", usage = "Output file splits (e.g. \"nc1:/tmp/foo,nc2:/tmp/bar\"")
+        public String outfileSplits;
+
         @Option(name = "-O", usage = "Optimization Level. Default: Full Optimization")
         private int optimizationLevel = Integer.MAX_VALUE;