public void Run(string[] args) { SubmissionWorker w = new SubmissionWorker(IntPtr.Zero, 0); w.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); w.WorkerReportsProgress = true; w.WorkerSupportsCancellation = false; Configuration config; if (args.Count() == 1) { if (args[0] == "-h" || args[0] == "--help" || args[0] == "/?") { Console.WriteLine("Usage: ClusterSubmit [config-file]"); return; } else { config = new Configuration(args[0]); } } else { config = new Configuration("config.xml"); } string executable = findBinary(config.z3_drop_dir, config.z3_release_dir, config.z3_exe); if (executable == "") { Console.WriteLine(now() + ": Z3 not found."); return; } else if (File.Exists("last_binary")) { FileStream lf = File.OpenRead("last_binary"); StreamReader sr = new StreamReader(lf); long last = Convert.ToInt64(sr.ReadLine()); if (last >= File.GetLastWriteTime(executable).ToFileTimeUtc()) { Console.WriteLine(now() + ": No new binary."); return; } sr.Close(); lf.Close(); } bool haveBinId = false; int binId = 0; try { string bestCluster = SubmissionWorker.FindCluster(config.cluster, config.alternativeClusters); Console.WriteLine(now() + ": Submitting job to " + bestCluster + " with the following binary: " + executable); w.UploadBinary(config.db, executable, ref haveBinId, ref binId); string sExecutor = ""; int jid = w.SetupExperiment(config.db, config.category, config.sharedDir, config.memout, config.timeout, config.executor, config.parameters, bestCluster, config.nodegroup, config.locality, config.minResources, config.maxResources, config.username, config.priority, config.extension, config.note, config.jobTemplate, config.jobTimeout, config.taskTimeout, ref haveBinId, ref binId, ref sExecutor); w.SubmitHPCJob(config.db, true, jid, config.cluster, config.nodegroup, config.priority, config.locality, config.minResources, config.maxResources, config.sharedDir, sExecutor, config.jobTemplate, config.jobTimeout, config.taskTimeout); saveBinaryDate(executable); uint retries = 0; if (File.Exists(config.fuzzer_target)) { retry: if (File.GetLastWriteTime(executable) > File.GetLastWriteTime(config.fuzzer_target)) { try { File.Copy(executable, config.fuzzer_target, true); } catch (Exception ex) { retries++; if (retries < config.fuzzer_max_retries) { goto retry; } else { throw ex; } } } } } catch (Exception ex) { Console.WriteLine(now() + ": Exception caught: " + ex.Message); } }
private void worker_DoWork(object sender, DoWorkEventArgs e) { SubmissionWorker w = (SubmissionWorker)sender; Object[] args = (Object[])e.Argument; string cmd = (string)args[0]; try { if (cmd == "Connect") { returnSQL = w.Connect((string)args[1]); } else if (cmd == "Disconnect") { w.Disconnect((SqlConnection)args[1]); } else if (cmd == "Upload") { w.UploadBinary((string)args[1], (string)args[2], ref haveBinId, ref binId); } else if (cmd == "Submit") { string sExecutor = ""; int jobid = w.SetupExperiment((string)args[1], (string)args[2], (string)args[3], (string)args[4], (string)args[5], (string)args[6], (string)args[7], (string)args[8], (string)args[9], (string)args[10], (string)args[11], (string)args[12], (string)args[13], (int)args[14], (string)args[15], (string)args[16], (string)args[17], (int)args[18], (int)args[19], ref haveBinId, ref binId, ref sExecutor); w.SubmitHPCJob((string)args[1], true, jobid, (string)args[8], (string)args[9], (int)args[14], (string)args[10], (string)args[11], (string)args[12], (string)args[3], sExecutor, (string)args[17], (int)args[18], (int)args[19]); // e.Result = "1 experiment with " + jobs + " jobs submitted."; } else if (cmd == "Copy") { w.Copy((string)args[1], (string)args[2], (string)args[3], ((string)args[4] == "True")); } else if (cmd == "Reinforce") { w.Reinforce((string)args[1], (int)args[2], (string)args[3], (int)args[4], (int)args[5], (string)args[6], (int)args[7], (int)args[8]); } else if (cmd == "Recovery") { w.SubmitHPCRecoveryJob((string)args[1], (int)args[2], (string)args[3], (int)args[4], (int)args[5], (string)args[6], (string)args[7], (int)args[8], (int)args[9]); } else if (cmd == "Catchall") { w.SubmitCatchall((string)args[1], (string)args[2], (string)args[3], (int)args[4], (string)args[5], (string)args[6], (string)args[7], (string)args[8], (string)args[9], (int)args[10], (int)args[11]); } else { throw new Exception("Unknown submission operation: " + cmd); } } catch (Exception ex) { lastError = ex; } }