def _coordinateCallback( self, data ): sql = "SELECT public_ip, local_ip, port FROM `%s` WHERE created > '%s'" % ( self.aws_sdb_coordination_domain, sdb_now_add( self.peer_check_interval * -2, offset=self.time_offset) ) #logger.debug( "Querying SimpleDB, \"%s\"" % sql ) d = self.sdb.select( sql ) d.addCallback( self._coordinateCallback2 ) d.addErrback( self._coordinateErrback )
def _queryCallback2(self, data): for uuid in data: if uuid in self.active_jobs: logger.error("Skipping %s" % uuid) continue kwargs_raw = {} reserved_arguments = {} for key in data[ uuid ]: if key in self.reserved_arguments: reserved_arguments[ key ] = data[ uuid ][key][0] else: kwargs_raw[key] = data[ uuid ][key][0] if "reservation_function_name" not in reserved_arguments: logger.error( "Reservation %s does not have a function name." % uuid ) self.deleteReservation( uuid ) continue function_name = reserved_arguments["reservation_function_name"] if function_name not in self.functions: logger.error( "Unable to process function %s for UUID: %s" % (function_name, uuid) ) # self.deleteReservation( uuid, function_name=function_name ) continue if "reservation_created" not in reserved_arguments: logger.error( "Reservation %s, %s does not have a created time." % (function_name, uuid) ) self.deleteReservation( uuid, function_name=function_name ) continue if "reservation_next_request" not in reserved_arguments: logger.error( "Reservation %s, %s does not have a next request time." % (function_name, uuid) ) self.deleteReservation( uuid, function_name=function_name ) continue if "reservation_error" not in reserved_arguments: logger.error( "Reservation %s, %s does not have an error flag." % (function_name, uuid) ) self.deleteReservation( uuid, function_name=function_name ) continue if reserved_arguments["reservation_function_name"] in self.functions: exposed_function = self.functions[ function_name ] else: logger.error( "Could not find resource %s." % function_name ) continue d = self.sdb.putAttributes( self.aws_sdb_reservation_domain, uuid, {"reservation_next_request":sdb_now_add(exposed_function["interval"], offset=self.time_offset) }, replace=["reservation_next_request"] ) d.addCallback( self._setNextRequestCallback, function_name, uuid) d.addErrback( self._setNextRequestErrback, function_name, uuid ) kwargs = {} for key in kwargs_raw: if key in exposed_function["required_arguments"]: kwargs[ key ] = kwargs_raw[ key ] if key in exposed_function["optional_arguments"]: kwargs[ key ] = kwargs_raw[ key ] has_reqiured_arguments = True for key in exposed_function["required_arguments"]: if key not in kwargs: has_reqiured_arguments = False logger.error( "%s, %s does not have required argument %s." % (function_name, uuid, key) ) if not has_reqiured_arguments: self.setReservationError( uuid ) continue self.active_jobs[uuid] = True reactor.callInThread(self.callExposedFunction, exposed_function["function"], kwargs, function_name, uuid)