示例#1
0
 def signal(self, sig):
     assert self._compState, "Component has been removed"
     if not self._workerPxy:
         msg = "Component '%s' worker is not running" % self.label
         err = admerrs.OrphanComponentError(msg)
         return defer.fail(err)
     return self._workerPxy._callRemote("killJob", self._getAvatarId(), sig)
 def retrieveProfileNotifications(self, profData):
     try:
         assert isinstance(profData, ImmutableDataWrapper)
         d = profData._getData()
         assert isinstance(d, dataprops.ProfileData)
         result = []
         for req in d.notifyFailedRequests:
             if req:
                 result.append(_createReqNotif(profData, False, req))
         for req in d.notifyDoneRequests:
             if req:
                 result.append(_createReqNotif(profData, True, req))
         params = d.notifyParams
         for sql in d.notifyFailedSQL:
             if sql:
                 result.append(_createSQLNotif(profData, False, params, sql))
         for sql in d.notifyDoneSQL:
             if sql:
                 result.append(_createSQLNotif(profData, True, params, sql))
         recipientsLine = d.notifyFailedMailRecipients
         if recipientsLine:
             recipients = utils.splitMailRecipients(recipientsLine)
             notification = _createMailNotif(profData, False, recipients)
             result.append(notification)
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve profile notifications data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
示例#3
0
 def waitUIState(self, timeout=None):
     if not self.isRunning():
         error = errors.TranscoderError("Cannot retrieve UI state of "
                                        "a non-running component")
         return defer.fail(error)
     self.__retrieveUIState(timeout)
     d = self._waitUIState(timeout)
     d.addCallback(defer.overrideResult, self)
     return d
 def waitActive(self, timeout=None):
     """
     Gives a deferred that will be called when the element
     has been activated (added)
     """
     if self._active:
         return defer.succeed(self)
     if self._failure:
         return defer.fail(self._failure)
     return self._activeWaiters.wait(timeout)
 def delete(self, *data):
     try:
         for mutable in data:
             if not isinstance(mutable, MutableDataWrapper):
                 raise NotImplementedError()
             mutable._delete()
         return defer.succeed(self)
     except Exception, e:
         error = datasource.DeletionError(cause=e)
         return defer.fail(error)
 def retrieveCustomers(self):
     try:
         result = [ImmutableDataWrapper(c, k, hidden=['profiles'])
                   for k, c in self._customersData.items()
                   if c != None]
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve customers data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
 def retrieveCustomerInfo(self, custData):
     try:
         assert isinstance(custData, ImmutableDataWrapper)
         result = ImmutableWrapper((custData.identifier, "info"),
                                   CUST_INFO_TMPL)
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve customer info data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
 def retrieveTargets(self, profData):
     try:
         assert isinstance(profData, ImmutableDataWrapper)
         result = [ImmutableDataWrapper(t, k, hidden=['config', 'type'])
                   for k, t in profData._getData().targets.items()
                   if t != None]
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve targets data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
 def retrieveProfiles(self, custData):
     try:
         assert isinstance(custData, ImmutableDataWrapper)
         result = [ImmutableDataWrapper(p, k, hidden=['targets'])
                   for k, p in custData._getData().profiles.items()
                   if p != None]
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve profiles data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
示例#10
0
 def retrieveDefaults(self):
     try:
         result = ImmutableDataWrapper(self._adminData, "defaults",
                                       hidden=['customersDir',
                                               'activitiesDir',
                                               'name'])
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve default data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
示例#11
0
 def resume(self, timeout=None):
     if not (self._state in [TaskStateEnum.paused,
                             TaskStateEnum.resuming]):
         return defer.fail(errors.TranscoderError("Cannot resume %s if %s"
                                                  % (self.label,
                                                     self._state.name)))
     if self._state == TaskStateEnum.paused:
         self.log("Ready to resume task manager '%s'", self.label)
         self._state = TaskStateEnum.resuming
         self._pauseWaiters.reset()
         self._tryStartup()
     return self._startWaiters.wait(timeout)
 def _childWaitActive(self, timeout=None):
     """
     Diffrent than waitActive to ensure calling order.
     First the deffered added with waitActive and then
     the ones added by _childWaitActive.
     Should not be used by child classes, it's realy a private method.
     """
     if self._active:
         return defer.succeed(self)
     if self._failure:
         return defer.fail(self._failure)
     return self._activeChildWaiters.wait(timeout)
示例#13
0
 def pause(self, timeout=None):
     if not (self._state in [TaskStateEnum.started]):
         return defer.fail(errors.TranscoderError("Cannot pause %s if %s"
                                                  % (self.label,
                                                     self._state.name)))
     if self._state == TaskStateEnum.started:
         self.log("Pausing task manager '%s'", self.label)
         self._state = TaskStateEnum.pausing
         # No longer started
         self._startWaiters.reset()
         self.__pauseTaskManager()
     return self._pauseWaiters.wait(timeout)
示例#14
0
 def process(self):
     try:
         result = self._doProcessing()
         if defer.isDeferred(result):
             result.addCallbacks(defer.dropResult, self._targetFailed, callbackArgs=(self._targetDone,))
             return result
         else:
             self._targetDone()
             return defer.succeed(self)
     except:
         f = Failure()
         self._targetFailed(f)
         return defer.fail(f)
示例#15
0
 def resume(self, timeout=None):
     if self._state == TaskStateEnum.terminated:
         # If terminated, a task can be rpaused and resume silently
         return defer.succeed(self)
     if not (self._state in [TaskStateEnum.paused,
                             TaskStateEnum.resuming]):
         return defer.fail(admerrs.TranscoderError("Cannot resume %s task '%s'"
                                           % (self._state.name,
                                              self.label)))
     if self._state == TaskStateEnum.paused:
         self.log("Ready to resume admin task '%s'", self.label)
         self._state = TaskStateEnum.resuming
         self.__startup()
     # Resuming and starting is the same for now
     return self._startWaiters.wait(timeout)
示例#16
0
 def pause(self, timeout=None):
     if self._state == TaskStateEnum.terminated:
         # If terminated, a task can be paused and resume silently
         return defer.succeed(self)
     if not (self._state in [TaskStateEnum.started]):
         return defer.fail(admerrs.TranscoderError("Cannot pause %s task '%s'"
                                           % (self._state.name,
                                              self.label)))
     self.log("Pausing admin task '%s'", self.label)
     self._state = TaskStateEnum.paused
     # No longer have associated worker
     self._workerPxy = None
     # No longer started
     self._startWaiters.reset()
     return defer.succeed(self)
示例#17
0
 def retrieveActivities(self, type, states=None):
     try:
         assert type in ActivityTypeEnum
         states = states and set(states)
         result = []
         tmpl = _activityTemplateLookup.get(type)
         result = [MutableDataWrapper(self, tmpl, p, f, a)
                   for f, (p, a) in self._activitiesData.items()
                   if a.type == type]
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve activities data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
示例#18
0
 def start(self, paused=False, timeout=None):
     if not (self._state in [TaskStateEnum.stopped,
                             TaskStateEnum.starting]):
         return defer.fail(admerrs.TranscoderError("Cannot start %s task '%s'"
                                           % (self._state.name,
                                              self.label)))
     if self._state == TaskStateEnum.stopped:
         if paused:
             self.log("Starting already paused admin task '%s'",
                      self.label)
             self._state = TaskStateEnum.paused
             return defer.succeed(self)
         else:
             self.log("Ready to start admin task '%s'", self.label)
             self._state = TaskStateEnum.starting
             self.__startup()
     return self._startWaiters.wait(timeout)
示例#19
0
 def retrieveTargetConfig(self, targData):
     try:
         assert isinstance(targData, ImmutableDataWrapper)
         data = targData._getData()
         conf = data.config
         if not conf:
             # Build a dummy config container. It's only to not have
             # an empty config section for identity targets
             conf = DummyIdentityConfig()
         result = ImmutableDataWrapper(conf, (data.name, "config"),
                                       readonly=['type'])
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve target config data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
示例#20
0
 def retrieveTargetNotifications(self, targData):
     try:
         assert isinstance(targData, ImmutableDataWrapper)
         d = targData._getData()
         assert isinstance(d, dataprops.TargetData)
         result = []
         for req in d.notifyDoneRequests:
             if req:
                 result.append(_createReqNotif(targData, True, req))
         params = d.notifyParams
         for sql in d.notifyDoneSQL:
             if sql:
                 result.append(_createSQLNotif(targData, True, params, sql))
         return defer.succeed(result)
     except Exception, e:
         msg = "Failed to retrieve target notifications data"
         ex = datasource.RetrievalError(msg, cause=e)
         f = failure.Failure(ex)
         return defer.fail(f)
示例#21
0
 def stop(self, timeout=None):
     """
     Relieve the selected component, and return a deferred that
     will be callback with the list of all the components
     for the caller to take responsability of.
     After this, no component will/should be added or removed.
     """
     if self._state in [TaskStateEnum.stopped]:
         return defer.fail(admerrs.TranscoderError("Cannot stop %s task '%s'"
                                           % (self._state.name,
                                              self.label)))
     self.log("Stopping admin task '%s'", self.label)
     self._state = TaskStateEnum.terminated
     self.__relieveComponent()
     for compPxy in self._compPxys:
         self._onComponentRemoved(compPxy)
     result = self._compPxys.keys()
     self._compPxys.clear()
     return defer.succeed(result)