In order to make some of the condor patches more palatable
to upstream, they requested that we stop using the phone-home
capability of condor to refresh our classads.  Since we don't
expect condor to restart very often, it should be sufficient to
just advertise classads to condor every 15 minutes or when it
is kicked.  This patch just puts the socket in a select with
a timeout and wakes up every 15 minutes to re-advertise.

Signed-off-by: Chris Lalancette <[email protected]>
---
 src/condor_refreshd/condor_refreshd |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/condor_refreshd/condor_refreshd 
b/src/condor_refreshd/condor_refreshd
index 74dbb82..4f1b93c 100755
--- a/src/condor_refreshd/condor_refreshd
+++ b/src/condor_refreshd/condor_refreshd
@@ -31,6 +31,7 @@ help = false
 daemon = true
 refreshd_log_dir = "/var/log/deltacloud-aggregator"
 refreshd_pid_dir = "/var/run/deltacloud-aggregator"
+timeout = 15
 
 optparse = OptionParser.new do |opts|
 
@@ -50,6 +51,9 @@ BANNER
   opts.on( '-p', '--port PORT', 'Use PORT (default: 7890)') do |newport|
     port = newport
   end
+  opts.on( '-t', '--timeout TIMEOUT', 'Automatically refresh classads after 
TIMEOUT minutes') do |newtime|
+    timeout = newtime
+  end
 end
 
 begin
@@ -77,7 +81,7 @@ logger.level = Logger::DEBUG
 
 logger.info "Starting condor_refreshd..."
 socket = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
-in_addr = Socket.pack_sockaddr_in(port, '0.0.0.0')
+in_addr = Socket.pack_sockaddr_in(port, '127.0.0.1')
 socket.bind(in_addr)
 
 # daemonize
@@ -94,9 +98,17 @@ begin
 
   while true
     begin
-      packet = socket.recvfrom(1024)
-      logger.info "Doing classad sync"
       condormatic_classads_sync
+      results = select([socket], nil, nil, timeout * 60)
+
+      # if results was nil, we timed out waiting, and we need to do a sync
+      # but not read from the socket
+      if not results.nil? and results[0][0] == socket
+        socket.recvfrom(1024)
+        logger.info "Doing classad sync after getting data from the socket"
+      else
+        logger.info "Doing classad sync after timeout"
+      end
     rescue => e
       logger.error "#{e.backtrace.shift}: #{e.message}"
       e.backtrace.each do |step|
-- 
1.7.3.1

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to