def __init__(self, binroot=None, **kwargs): if binroot != None: binary = os.path.join(binroot, SSD_BIN) else: binary = None EnvOSProcess.__init__(self, binary=binary, **kwargs) self.ready_deferred = defer.Deferred()
def spawn(self, binary=None, args=[]): """ Calls the baseclass spawn but returns a deferred that's fired when the daemon announces it is ready. Then it can be used in a chain. """ EnvOSProcess.spawn(self, binary, args) return self.ready_deferred
def outReceived(self, data): EnvOSProcess.outReceived(self, data) if (SSD_READY_STRING in data): # must simulate processEnded callback value cba = { 'exitcode' : 0, 'outlines' : self.outlines, 'errlines' : self.errlines } self.ready_deferred.callback(cba)
def outReceived(self, data): EnvOSProcess.outReceived(self, data) if (SSD_READY_STRING in data): # must simulate processEnded callback value cba = { 'exitcode': 0, 'outlines': self.outlines, 'errlines': self.errlines } self.ready_deferred.callback(cba)
def processEnded(self, reason): # Process ended override. # This override is to signal ready deferred if we never did, just in case. if self.ready_deferred and not self.ready_deferred.called: # must simulate processEnded callback value cba = { 'exitcode' : 0, 'outlines' : self.outlines, 'errlines' : self.errlines } self.ready_deferred.callback(cba) EnvOSProcess.processEnded(self, reason)
def processEnded(self, reason): # Process ended override. # This override is to signal ready deferred if we never did, just in case. if self.ready_deferred and not self.ready_deferred.called: # must simulate processEnded callback value cba = { 'exitcode': 0, 'outlines': self.outlines, 'errlines': self.errlines } self.ready_deferred.callback(cba) EnvOSProcess.processEnded(self, reason)
def __init__(self, binroot=None, sqlcommands=None, **kwargs): """ @param sqlcommands SQL commands to run in the client. May be None, which leaves stdin open. @param binroot Root path to prepend on the binary name. """ self.sqlcommands = sqlcommands if binroot != None: binary = os.path.join(binroot, SSC_BIN) else: binary=None EnvOSProcess.__init__(self, binary=binary, **kwargs) self.temp_file = None
def __init__(self, binroot=None, sqlcommands=None, **kwargs): """ @param sqlcommands SQL commands to run in the client. May be None, which leaves stdin open. @param binroot Root path to prepend on the binary name. """ self.sqlcommands = sqlcommands if binroot != None: binary = os.path.join(binroot, SSC_BIN) else: binary = None EnvOSProcess.__init__(self, binary=binary, **kwargs) self.temp_file = None
def spawn(self, binary=None, args=[]): """ Spawns the sqllineClient process. This override is to dump our sqlcommands into a file and tell sqllineClient to run that file. We modify the args keyword arg and send it up to the baseclass spawn implementation. """ newargs = args[:] # XXX must copy becuase otherwise, args keep appending to some # shared args var?!?! makes no sense if len(args) == 0: newargs.extend(self.spawnargs) if self.sqlcommands != None: # dump sqlcommands into a temporary file f = tempfile.NamedTemporaryFile( delete=False) # TODO: requires python 2.6 f.write(self.sqlcommands) f.close() self.temp_file = f.name newargs.insert(0, "--run=%s" % self.temp_file) return EnvOSProcess.spawn(self, binary, newargs)
def spawn(self, binary=None, args=[]): """ Spawns the sqllineClient process. This override is to dump our sqlcommands into a file and tell sqllineClient to run that file. We modify the args keyword arg and send it up to the baseclass spawn implementation. """ newargs = args[:] # XXX must copy becuase otherwise, args keep appending to some # shared args var?!?! makes no sense if len(args) == 0: newargs.extend(self.spawnargs) if self.sqlcommands != None: # dump sqlcommands into a temporary file f = tempfile.NamedTemporaryFile(delete=False) # TODO: requires python 2.6 f.write(self.sqlcommands) f.close() self.temp_file = f.name newargs.insert(0, "--run=%s" % self.temp_file) return EnvOSProcess.spawn(self, binary, newargs)
def processEnded(self, reason): EnvOSProcess.processEnded(self, reason) # remove temp file if we created one earlier if self.temp_file != None: os.unlink(self.temp_file)
def close(self, force=False, timeout=30): """ Shut down the SQLstream daemon. This override exists simply to change the timeout param's default value. """ return EnvOSProcess.close(self, force, timeout)
def create_fsm(self, target, ssid): """ Creates a FSM for SQLstream instance state/transitions. The entry for its SSID must be defined in the target's sqlstreams dict. """ fsm = AsyncFSM(SSStates.S_INIT, None) # extract SSID from kwargs, set up vars needed for install/uninstall sdpport = target.sqlstreams[ssid]['sdpport'] hsqldbport = target.sqlstreams[ssid]['hsqldbport'] dirname = target.sqlstreams[ssid]['dirname'] seismic_jar = resource_filename(__name__, "data/ucsd-seismic.jar") installerbin = resource_filename(__name__, "data/install_sqlstream.sh") log.debug(installerbin) # 1. INIT <-> INSTALLED proc_installer = EnvOSProcess( binary=installerbin, spawnargs=[sdpport, hsqldbport, seismic_jar, dirname]) forward_task = proc_installer.spawn backward_task = lambda: shutil.rmtree(dirname) fsm.add_transition(SSStates.E_INSTALL, SSStates.S_INIT, forward_task, SSStates.S_INSTALLED) fsm.add_transition(SSStates.E_UNINSTALL, SSStates.S_INSTALLED, backward_task, SSStates.S_INIT) # 2. INSTALLED <-> READY proc_server = OSSSServerProcess( binroot=dirname, extraenv={"JAVA_HOME": "/usr/local/JDK1.6"}) proc_server.addCallback(target._sqlstream_ended, sqlstreamid=ssid) proc_server.addReadyCallback(target._sqlstream_started, sqlstreamid=ssid) target.sqlstreams[ssid][ '_serverproc'] = proc_server # store it here, it still runs forward_task = proc_server.spawn backward_task = proc_server.close fsm.add_transition(SSStates.E_RUNDAEMON, SSStates.S_INSTALLED, forward_task, SSStates.S_READY) fsm.add_transition(SSStates.E_STOPDAEMON, SSStates.S_READY, backward_task, SSStates.S_INSTALLED) # 3. READY <-> DEFINED proc_loaddefs = OSSSClientProcess( spawnargs=[sdpport], sqlcommands=target.sqlstreams[ssid]['_sql_defs'], binroot=dirname, extraenv={"JAVA_HOME": "/usr/local/JDK1.6"}) forward_task = proc_loaddefs.spawn # 18 Jan 2011 - Disabled due to lack of ability to turn consumer off - will freeze sqllineClient #proc_unloaddefs = OSSSClientProcess(spawnargs=[sdpport], sqlcommands="DROP SCHEMA UCSD CASCADE;", binroot=dirname, extraenv={"JAVA_HOME": "/usr/local/JDK1.6"}) #backward_task = proc_unloaddefs.spawn backward_task = lambda: False # can't do pass here? fsm.add_transition(SSStates.E_LOADDEFS, SSStates.S_READY, forward_task, SSStates.S_DEFINED) fsm.add_transition(SSStates.E_UNLOADDEFS, SSStates.S_DEFINED, backward_task, SSStates.S_READY) # 4. DEFINED <-> RUNNING proc_pumpson = OSSSClientProcess( spawnargs=[sdpport], sqlcommands=target._get_sql_pumps_on(), binroot=dirname, extraenv={"JAVA_HOME": "/usr/local/JDK1.6"}) forward_task = proc_pumpson.spawn proc_pumpsoff = OSSSClientProcess( spawnargs=[sdpport], sqlcommands=target._get_sql_pumps_off(), binroot=dirname, extraenv={"JAVA_HOME": "/usr/local/JDK1.6"}) backward_task = proc_pumpsoff.spawn fsm.add_transition(SSStates.E_PUMPSON, SSStates.S_DEFINED, forward_task, SSStates.S_RUNNING) fsm.add_transition(SSStates.E_PUMPSOFF, SSStates.S_RUNNING, backward_task, SSStates.S_DEFINED) return fsm