Ejemplo n.º 1
0
def run(host, port, seed) :
  smds.initialize(False, seed=seed)

  # Connect to parent
  parent.connect((host,port))

  while (True) :
    mx.acquire()
    (r,w,e) = select([parent],[],[],0)
    if len(r) :
      packet = smds.recvMsg(parent)
      if not packet :
        mx.release()
        parent.close()
        smds.shutdown()
        exit("Error reading from parent.")
      (msg, args) = packet
      if (msg > maxHandler) :
        h = nullHandler
        args = (msg,)+args
      else : h = handlers[msg]
      h(*args)
    checkTime()
    mx.release()
    sleep(1)
Ejemplo n.º 2
0
def run() :
  global theSocket, theThread
  from atexit import register
  from sys import exit
  from signal import signal, SIGTERM
  register(shutdown)
  signal(SIGTERM, lambda x,y: exit() )
  try :
    from signal import SIGBREAK
    signal(SIGBREAK, lambda x,y : exit())
  except :
    pass
                
  loadHosts()
  s = theSocket
  s.bind(('', FOUNDRY_PORT))
  s.listen(5)
  
  theThread = threading.Thread(None, bkg, "SMDS Foundry Background Thread")
  theThread.setDaemon(True)
  theThread.start()

  while True:
    try : (c, addr) = s.accept()
    except : pass
    else :			# got a new connection
      c.setblocking(1)
      packet = smds.recvMsg(c)
      if packet :
        (msg, args) = packet
        if msg == smds.messages['QUIT'] : quit()
        if msg == 3 or msg == 7 : args = (c,)+args
        if msg > maxHandler :
          h = nullHandler
          args = (msg,)+args
        else : h = handlers[msg]
        try :
          h(*args)
        except :
          smds.msg("Bad message from %s" % addr[0], smds.MSG_WARN)
          from traceback import format_exc
          print format_exc() 
        if msg == smds.messages['RELEASE'] : quit()
      else :
        smds.msg("Bad connection from %s" % addr[0], smds.MSG_WARN)
    
    if len(myMasters) : work.set()
    else              : work.clear()
    if platform != 'win32' : cleanChildren()
Ejemplo n.º 3
0
def processMessages() :
  (r,w,e) = select([theFoundry]+[ b['socket'] for b in bees ], [],[], 1.0)
  for s in r :
    packet = smds.recvMsg(s)
    b = None
    if s != theFoundry : b = [ b for b in bees if b['socket'] == s ][0]
    if not packet :
      if s == theFoundry :
        raise "Local foundry went down!"
      else :
        remoteDead(b)
      continue
    (msg, args) = packet
    if msg > maxHandler :
      h = nullHandler
      args = (msg,)+args
    else :
      h = handlers[msg]
      if b : args = (b,)+args
    h(*args)
Ejemplo n.º 4
0
def retrieveData(name) :
  smds.msg("Requesting <%s> from parent." % name, smds.MSG_DBUG)
  try :
    smds.sendMsg(theSocket, smds.messages['INTENS'], name)
    packet = smds.recvMsg(theSocket)
    if not packet :
      theSocket.close()
      exit("Error reading from parent.")
    (msg, args) = packet
    if msg == smds.messages['QUIT'] : quit()
    if msg != smds.messages['INTENS'] :
      smds.msg("Unknown message from parent: %s.\nGiving up." 
      			% str(msg, args), smds.MSG_WARN)
      quit()
    if args[0] != name :
      smds.msg("Unknown data <%s> from parent.  Giving up.", smds.MSG_WARN)
      quit()
  except :
    from traceback import format_exc
    smds.msg("Error retrieving data <%s> from master." % name, smds.MSG_WARN)
    print format_exc()
    exit()
  return args[1]
Ejemplo n.º 5
0
def run(host, port) :
  global theSocket
  if platform == 'win32' :
    from win32process import GetCurrentProcess, SetPriorityClass, \
  				IDLE_PRIORITY_CLASS
    SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS)
  else :
    from os import nice
    nice(15)

  from atexit import register
  from signal import signal, SIGTERM
  from sys import exit
  register(shutdown)
  signal(SIGTERM, lambda x,y : exit() )
  if platform == 'win32' :
    from signal import SIGBREAK
    signal(SIGBREAK, lambda x,y : exit() )

  # Connect to parent
  smds.verbosity = smds.MSG_DBUG
  theSocket = socket.socket()
  theSocket.connect((host,port))

  while (True) :
    (r,w,e) = select([theSocket],[],[],0)
    if len(r) :
      packet = smds.recvMsg(theSocket)
      if not packet :
        theSocket.close()
        exit("Error reading from parent.")
      (msg, args) = packet
      if (msg > maxRemoteHandler) :
        h = nullHandler
        args = (msg,)+args
      else : h = remoteHandlers[msg]
      h(*args)
Ejemplo n.º 6
0
def processMessages() :
  activity = False
  while 1 :
    (r,w,e) = select([theFoundry]+[ b['socket'] for b in bees ], [],[],0)
    for s in r :
      packet = smds.recvMsg(s)
      b = None
      if s != theFoundry :
        try : b = [ b for b in bees if b['socket'] == s ][0]
        except :
          smds.msg("Trashing message from %s." % s.getpeername()[0],
          		smds.MSG_WARN)
          continue
      if not packet :
        if s == theFoundry :
          smds.msg("Local foundry went down!", smds.MSG_WARN)
          from thread import interrupt_main
          interrupt_main()
          clear.set()
          halt.set()
          mx.release()
          raise "Local foundry went down!"
        else :
          remoteDead(b)
        continue
      (msg, args) = packet
      if msg > maxHandler :
        h = nullHandler
        args = (msg,)+args
      else :
        h = handlers[msg]
        if b : args = (b,)+args
      h(*args)
    if len(r) : activity = True
    else      : break
  return activity