CONDOR_CHIRP=`condor_config_val LIBEXEC`/condor_chirp +get_job_attr_blocking() { + while /bin/true + do + JobServerAddress=`$CONDOR_CHIRP get_job_attr $1` + if [ $? -ne 0 ]; then + echo "Chirp is broken!" 1>&2 + exit 1 + fi + if [ "$JobServerAddress" != "UNDEFINED" ]; then + echo "$JobServerAddress" + exit 0 + fi + sleep 2 + done +} + +HOSTNAME=`hostname` + +echo "I am $HOSTNAME, node $_CONDOR_PROCNO" + if [[ $_CONDOR_PROCNO = "0" ]] then + echo "I'm the server" - # I'm the server - - # Start netcat listening on an ephemeral port (0 means kernels picks port) + # Start netcat listening on an ephemeral port (0 means kernel picks port) # It will wait for a connection, then write that data to output_file nc -l 0 > output_file & @@ -117,45 +136,39 @@ awk -F: '{print $2}' | awk '{print $1}' ` - # grab the hostname - HOSTNAME=`hostname` + echo "Listening on $HOSTNAME $NCPORT" $CONDOR_CHIRP set_job_attr JobServerAddress \"${HOSTNAME}\ ${NCPORT}\" # Do other server things here... - sleep 3600 + sleep 60 + echo "Here's the output:" + cat output_file exit 0 fi if [[ $_CONDOR_PROCNO = "1" ]] then + echo "I'm the client" - # I'm the client - - sleep 20 - # Poll until the job attribute appears in the ad - - until $CONDOR_CHIRP get_job_attr JobServerAddress > /tmp/null 2>&1 - do - sleep 2 - done - - JobServerAddress=`$CONDOR_CHIRP get_job_attr JobServerAddress` + JobServerAddress=`get_job_attr_blocking JobServerAddress` + if [ $? -ne 0 ]; then + echo "Chirp is broken" + exit 1 + fi + echo "JobServerAddress: $JobServerAddress"; host=`echo $JobServerAddress | tr -d '"' | awk '{print $1}'` port=`echo $JobServerAddress | tr -d '"' | awk '{print $2}'` - # Send the /etc/hosts file to the other side + echo "Sending to $host $port" nc $host $port < /etc/hosts + echo "Sent $?" # Don't do any other client stuff, just exit exit 0 fi exit 0 - - - - {endcode}