Exemplo n.º 1
0
    def test_restart_with_lock(self):
        command = RestartCommand()

        jobkey = AuroraJobKey("cluster", "role", "env", "job")
        mock_options = mock_verb_options(command)
        mock_options.instance_spec = TaskInstanceKey(jobkey, [])

        fake_context = FakeAuroraCommandContext()
        fake_context.set_options(mock_options)

        mock_api = fake_context.get_api("test")
        mock_api.restart.return_value = AuroraClientCommandTest.create_blank_response(
            ResponseCode.LOCK_ERROR, "Error.")

        with pytest.raises(Context.CommandError):
            command.execute(fake_context)

        updater_config = UpdaterConfig(mock_options.batch_size,
                                       mock_options.restart_threshold,
                                       mock_options.watch_secs,
                                       mock_options.max_per_instance_failures,
                                       mock_options.max_total_failures)

        mock_api.restart.assert_called_once_with(
            jobkey,
            mock_options.instance_spec.instance,
            updater_config,
            mock_options.healthcheck_interval_seconds,
            config=None)
        self.assert_lock_message(fake_context)
Exemplo n.º 2
0
 def test_pulse_interval_unset(self):
     config = UpdaterConfig(
         UpdateConfig(batch_size=1,
                      watch_secs=1,
                      max_per_shard_failures=1,
                      max_total_failures=1))
     assert config.to_thrift_update_settings(
     ).blockIfNoPulsesAfterMs is None
Exemplo n.º 3
0
 def test_pulse_interval_too_low(self):
   threshold = UpdaterConfig.MIN_PULSE_INTERVAL_SECONDS
   with raises(ValueError) as e:
     UpdaterConfig(UpdateConfig(batch_size=1,
                                watch_secs=1,
                                max_per_shard_failures=1,
                                max_total_failures=1,
                                pulse_interval_secs=threshold - 1))
   assert 'Pulse interval seconds must be at least %s seconds.' % threshold in e.value.message
Exemplo n.º 4
0
    def test_batch_size_and_update_strategy(self):
        """Test setting a batch size along with an update strategy.
       This combination should result in a fast fail.
    """

        with raises(ValueError) as e:
            UpdaterConfig(
                UpdateConfig(batch_size=2,
                             update_strategy=self.UPDATE_STRATEGIES(
                                 PystachioBatchUpdateStrategy(batch_size=3))))

        assert ('Ambiguous update configuration. Cannot combine '
                'update strategy with batch size. Please set batch'
                'size inside of update strategy instead.' in e.value.message)
Exemplo n.º 5
0
    def test_wait_for_batch_completion_and_update_strategy(self):
        """Test setting wait_for_batch_completion along with an update strategy.
       This combination should result in a fast fail.
    """

        with raises(ValueError) as e:
            UpdaterConfig(
                UpdateConfig(wait_for_batch_completion=True,
                             update_strategy=self.UPDATE_STRATEGIES(
                                 PystachioBatchUpdateStrategy(batch_size=3))))

        assert ('Ambiguous update configuration. Cannot combine '
                'wait_batch_completion with an '
                'explicit update strategy.' in e.value.message)
Exemplo n.º 6
0
    def test_to_thrift_update_settings_no_strategy_queue(self):
        """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object that doesn't include an update strategy.

       The configuration in this test should be converted to a
       QueueJobUpdateStrategy.
    """

        config = UpdaterConfig(UpdateConfig())

        thrift_update_config = config.to_thrift_update_settings()

        update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)
        update_settings.updateStrategy = JobUpdateStrategy(
            batchStrategy=None,
            queueStrategy=QueueJobUpdateStrategy(groupSize=1),
            varBatchStrategy=None)

        assert thrift_update_config == update_settings
Exemplo n.º 7
0
    def test_to_thrift_update_settings_no_strategy_batch(self):
        """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object that doesn't include an update strategy.

       The configuration in this test should be converted to a
       BatchJobUpdateStrategy.
    """

        config = UpdaterConfig(UpdateConfig(wait_for_batch_completion=True))

        thrift_update_config = config.to_thrift_update_settings()

        update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)
        update_settings.updateStrategy = JobUpdateStrategy(
            batchStrategy=BatchJobUpdateStrategy(groupSize=1,
                                                 autopauseAfterBatch=False),
            queueStrategy=None,
            varBatchStrategy=None)
        update_settings.waitForBatchCompletion = True

        assert thrift_update_config == update_settings
Exemplo n.º 8
0
    def test_to_thrift_update_settings_strategy(self):
        """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object.
    """

        config = UpdaterConfig(
            UpdateConfig(update_strategy=self.UPDATE_STRATEGIES(
                PystachioVariableBatchUpdateStrategy(
                    batch_sizes=[1, 2, 3, 4], autopause_after_batch=True))))

        thrift_update_config = config.to_thrift_update_settings()

        update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)

        update_settings.updateStrategy = JobUpdateStrategy(
            batchStrategy=None,
            queueStrategy=None,
            varBatchStrategy=VariableBatchJobUpdateStrategy(
                groupSizes=(1, 2, 3, 4), autopauseAfterBatch=True))

        assert thrift_update_config == update_settings
 def test_pulse_interval_too_low(self):
     threshold = UpdaterConfig.MIN_PULSE_INTERVAL_SECONDS
     with raises(ValueError) as e:
         UpdaterConfig(1, 1, 1, 1, 1, pulse_interval_secs=threshold - 1)
     assert 'Pulse interval seconds must be at least %s seconds.' % threshold in e.value.message
 def test_pulse_interval_unset(self):
     config = UpdaterConfig(1, 1, 1, 1, 1)
     assert config.to_thrift_update_settings(
     ).blockIfNoPulsesAfterMs is None
 def test_pulse_interval_secs(self):
     config = UpdaterConfig(1, 1, 1, 1, 1, pulse_interval_secs=60)
     assert 60000 == config.to_thrift_update_settings(
     ).blockIfNoPulsesAfterMs