/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.globus.gram; import org.globus.io.gass.server.GassServer; import org.globus.util.deactivator.Deactivator; import org.ietf.jgss.GSSException; /** * Demonstration of Gram 1.5 protocol features. * <BR> */ public class Gram15Test { private static GramJobListener getListener(final String label) { GramJobListener l = ( new GramJobListener() { public void statusChanged(GramJob job) { System.out.println(label + " status change \n" + " ID : "+ job.getIDAsString() + "\n" + " Status : "+ job.getStatusAsString()); } }); return l; } public static boolean test1(String contact, boolean cancelCall) { GramJob job = new GramJob("&(executable=/bin/sleep)(arguments=100)(twoPhase=yes)"); job.addListener(getListener("Job Test 1")); System.out.println("Submitting job..."); try { job.request(contact); System.out.println("job submited: " + job.getIDAsString()); } catch(WaitingForCommitException e) { System.out.println("Two phase commit: sending COMMIT_REQUEST signal"); try { job.signal(GramJob.SIGNAL_COMMIT_REQUEST); } catch(Exception ee) { ee.printStackTrace(); return false; } } catch(GramException e) { e.printStackTrace(); return false; } catch(GSSException e) { e.printStackTrace(); return false; } System.out.println("Sleeping..."); try { Thread.sleep(2000); } catch(Exception e) { } try { if (cancelCall) { System.out.println("Canceling job... (cancel call)"); job.cancel(); } else { System.out.println("Canceling job... (cancel signal)"); job.signal(GramJob.SIGNAL_CANCEL, " "); } } catch(GramException e) { e.printStackTrace(); return false; } catch(GSSException e) { e.printStackTrace(); return false; } System.out.println("Two phase commit: sending COMMIT_END signal"); try { job.signal(GramJob.SIGNAL_COMMIT_END); } catch(Exception ee) { ee.printStackTrace(); return false; } return true; } public static boolean test2(String contact) { GramJob job = new GramJob("&(executable=/bin/sleep)(arguments=20)(twoPhase=yes)"); job.addListener(getListener("Job Test 2")); System.out.println("Submitting job..."); try { job.request(contact); System.out.println("job submited: " + job.getIDAsString()); } catch(WaitingForCommitException e) { System.out.println("Two phase commit: sending COMMIT_EXTEND signal"); try { job.signal(GramJob.SIGNAL_COMMIT_EXTEND, "30"); } catch(Exception ee) { ee.printStackTrace(); return false; } } catch(GramException e) { e.printStackTrace(); return false; } catch(GSSException e) { e.printStackTrace(); return false; } System.out.println("Waiting for timeout..."); try { Thread.sleep(75000); } catch(Exception e) { } if (job.getStatus() == job.STATUS_FAILED) { System.out.println("Error: Timeout expired!"); return false; } else if (job.getStatus() == job.STATUS_UNSUBMITTED) { return true; } return true; } /** * Restart example. */ public static boolean test3(String contact) { String rsl = "&(executable=/bin/sleep)(arguments=50)(saveState=yes)(twoPhase=yes)"; GramJob job = new GramJob(rsl); job.addListener(getListener("Job Test 3")); System.out.println("Submitting job..."); try { job.request(contact); System.out.println("job submited: " + job.getIDAsString()); } catch(WaitingForCommitException e) { System.out.println("Two phase commit: sending COMMIT_REQUEST signal"); try { job.signal(GramJob.SIGNAL_COMMIT_REQUEST); } catch(Exception ee) { ee.printStackTrace(); return false; } } catch(GramException e) { e.printStackTrace(); return false; } catch(GSSException e) { e.printStackTrace(); return false; } System.out.println("Stopping job manager..."); try { job.signal(GramJob.SIGNAL_STOP_MANAGER); } catch(Exception e) { e.printStackTrace(); return false; } System.out.println("Restarting the job..."); job = new GramJob(rsl + "(restart=" + job.getIDAsString() + ")"); job.addListener(getListener("Job Test 3")); try { job.request(contact); System.out.println("New job id: " + job.getIDAsString() ); } catch(WaitingForCommitException e) { System.out.println("Two phase commit: sending COMMIT_REQUEST signal"); try { job.signal(GramJob.SIGNAL_COMMIT_REQUEST); } catch(Exception ee) { ee.printStackTrace(); return false; } } catch(GramException e) { e.printStackTrace(); return false; } catch(GSSException e) { e.printStackTrace(); return false; } try { Thread.sleep(5000); System.out.println("Cancelling job..."); job.cancel(); } catch(Exception e) { e.printStackTrace(); return false; } System.out.println("Two phase commit: sending COMMIT_END signal"); try { job.signal(GramJob.SIGNAL_COMMIT_END); } catch(Exception ee) { ee.printStackTrace(); return false; } return true; } public static boolean test4(String contact) { boolean sendCommit = false; String url = null; GassServer s = null; try { s = new GassServer(); s.registerDefaultDeactivator(); url = s.getURL(); } catch(Exception e) { e.printStackTrace(); return false; } System.out.println("Gass server running at: " + url); String exe = url + "/" + System.getProperty("user.dir") + "/tests/test.sh"; System.out.println(exe); GramJob job = new GramJob("&(saveState=yes)(twoPhase=yes)(executable=" + exe + ")(stdout=" + url + "/dev/stdout)(stderr=" + url + "/dev/stderr)"); job.addListener(getListener("Job Test 4")); try { job.request(contact); System.out.println("job submitted : " + job.getIDAsString() ); } catch(WaitingForCommitException e) { System.out.println("Two phase commit: sending COMMIT_REQUEST signal"); try { job.signal(GramJob.SIGNAL_COMMIT_REQUEST); sendCommit = true; } catch(Exception ee) { ee.printStackTrace(); return false; } } catch(GramException e) { e.printStackTrace(); return false; } catch(GSSException e) { e.printStackTrace(); return false; } try { Thread.sleep(5000); } catch(Exception e) {} // what this should do? System.out.println("Checking stdio positions/sizes..."); try { job.signal(GramJob.SIGNAL_STDIO_SIZE, "1000 1000"); System.out.println("STDIO_SIZE signal should throw an error."); return false; } catch(Exception e) { e.printStackTrace(); } try { Thread.sleep(2000); } catch(Exception e) {} System.out.println("Cancelling job..."); try { job.cancel(); if (sendCommit) { System.out.println("Two phase commit: sending COMMIT_END signal"); job.signal(GramJob.SIGNAL_COMMIT_END); } } catch(Exception ee) { ee.printStackTrace(); return false; } return true; } public static boolean test5(String contact) { String url = null; GassServer s = null; try { s = new GassServer(); s.registerDefaultDeactivator(); url = s.getURL(); } catch(Exception e) { e.printStackTrace(); return false; } System.out.println("Gass server running at: " + url); String exe = url + "/" + System.getProperty("user.dir") + "/tests/test.sh"; System.out.println(exe); GramJob job = new GramJob("&(twoPhase=yes)(executable=" + exe + ")(stdout=" + url + "/dev/stdout)(stderr=" + url + "/dev/stderr)"); job.addListener(getListener("Job Test 4")); System.out.println("Submitting job..."); try { job.request(contact); System.out.println("job submitted : " + job.getIDAsString() ); } catch(WaitingForCommitException e) { System.out.println("Two phase commit: sending COMMIT_REQUEST signal"); try { job.signal(GramJob.SIGNAL_COMMIT_REQUEST); } catch(Exception ee) { ee.printStackTrace(); return false; } } catch(GramException e) { e.printStackTrace(); return false; } catch(GSSException e) { e.printStackTrace(); return false; } try { Thread.sleep(5000); } catch(Exception e) {} try { s.shutdown(); s = new GassServer(); s.registerDefaultDeactivator(); url = s.getURL(); System.out.println("new gass server: " + url); job.signal(GramJob.SIGNAL_STDIO_UPDATE, "&(stdout=" + url + "/dev/stdout)(stdoutPosition=4)(stderrPosition=0)"); } catch(Exception e) { e.printStackTrace(); return false; } return true; } public static void main(String [] args) { String contact = null; if (args.length == 0) { System.err.println("Usage: java GramTest [resource manager]"); System.exit(1); } contact = args[0]; System.out.println("TEST 1 : " + test1(contact, true)); System.out.println(); System.out.println("TEST 2 : " + test1(contact, false)); System.out.println(); System.out.println("TEST 3 : " + test3(contact)); System.out.println(); System.out.println("TEST 4 : " + test2(contact)); System.out.println(); System.out.println("TEST 5 : " + test4(contact)); System.out.println(); System.out.println("TEST 6 : " + test5(contact)); System.out.println(); try { while ( Gram.getActiveJobs() != 0 ) { Thread.sleep(2000); } } catch(Exception e) {} Deactivator.deactivateAll(); } }