def test_set_attribute_if_missing(self): client = self._factory.get_client() writing_signaller = Signaller(client, workflow='some_workflow', instance='123') self.assertFalse(writing_signaller.set_attribute_if_missing( Signal.ARCHIVE, Signal.TIMESTAMP_ATTR, 12345)) writing_signaller.set_action(Signal.ARCHIVE) self.assertTrue(writing_signaller.set_attribute_if_missing( Signal.ARCHIVE, Signal.TIMESTAMP_ATTR, 12345)) self.assertEqual(12345, writing_signaller.get_attribute( Signal.ARCHIVE, Signal.TIMESTAMP_ATTR)) self.assertFalse(writing_signaller.set_attribute_if_missing( Signal.ARCHIVE, Signal.TIMESTAMP_ATTR, 123456)) reading_signaller = Signaller(client, workflow='some_workflow', instance='123') self.assertEqual(12345, reading_signaller.get_attribute( Signal.ARCHIVE, Signal.TIMESTAMP_ATTR))
def test_set_attribute_if_missing(self): client = self._factory.get_client() writing_signaller = Signaller(client, workflow='some_workflow', instance='123') self.assertFalse( writing_signaller.set_attribute_if_missing(Signal.ARCHIVE, Signal.TIMESTAMP_ATTR, 12345)) writing_signaller.set_action(Signal.ARCHIVE) self.assertTrue( writing_signaller.set_attribute_if_missing(Signal.ARCHIVE, Signal.TIMESTAMP_ATTR, 12345)) self.assertEqual( 12345, writing_signaller.get_attribute(Signal.ARCHIVE, Signal.TIMESTAMP_ATTR)) self.assertFalse( writing_signaller.set_attribute_if_missing(Signal.ARCHIVE, Signal.TIMESTAMP_ATTR, 123456)) reading_signaller = Signaller(client, workflow='some_workflow', instance='123') self.assertEqual( 12345, reading_signaller.get_attribute(Signal.ARCHIVE, Signal.TIMESTAMP_ATTR))
def test_get_attribute(self): client = self._factory.get_client() writing_signaller = Signaller(client) writing_signaller.set_action(Signal.EXIT) self.assertEqual(PinballConfig.GENERATION, writing_signaller.get_attribute( Signal.EXIT, Signal.GENERATION_ATTR)) reading_signaller = Signaller(client) self.assertEqual(PinballConfig.GENERATION, reading_signaller.get_attribute( Signal.EXIT, Signal.GENERATION_ATTR))
def test_get_attribute(self): client = self._factory.get_client() writing_signaller = Signaller(client) writing_signaller.set_action(Signal.EXIT) self.assertEqual( PinballConfig.GENERATION, writing_signaller.get_attribute(Signal.EXIT, Signal.GENERATION_ATTR)) reading_signaller = Signaller(client) self.assertEqual( PinballConfig.GENERATION, reading_signaller.get_attribute(Signal.EXIT, Signal.GENERATION_ATTR))
def _process_signals(self, workflow, instance): """Process signals for a given workflow instance. Args: workflow: The workflow whose signals should be processed. instance: The instance whose signals should be processed. Returns: True if the worker should execute jobs in this instance. Otherwise False. """ signaller = Signaller(self._client, workflow, instance) archiver = Archiver(self._client, workflow, instance) if signaller.is_action_set(Signal.EXIT): return False if (signaller.is_action_set(Signal.ARCHIVE) and self._is_done(workflow, instance)): # TODO(pawel): enable this for all workflows after we gain # confidence that the master has enough memory to delay workflow # archiving. if workflow == 'indexing': ARCHIVE_DELAY_SEC = 7 * 24 * 60 * 60 # 7 days else: ARCHIVE_DELAY_SEC = 12 * 60 * 60 # 12 hours expiration_timestamp = int(time.time()) + ARCHIVE_DELAY_SEC if signaller.set_attribute_if_missing(Signal.ARCHIVE, Signal.TIMESTAMP_ATTR, expiration_timestamp): self._send_instance_end_email(workflow, instance) else: expiration_timestamp = signaller.get_attribute( Signal.ARCHIVE, Signal.TIMESTAMP_ATTR) archiver.archive_if_expired(expiration_timestamp) return False if signaller.is_action_set(Signal.ABORT): if archiver.archive_if_aborted(): self._send_instance_end_email(workflow, instance) return False if signaller.is_action_set(Signal.DRAIN): return False return True