Beispiel #1
0
    def test_to_json_string(self):
        scaling_response = DynamiteScalingResponse()
        scaling_response.command = DynamiteScalingCommand.SCALE_DOWN
        scaling_response.failure_counter = 4
        scaling_response.service_instance_name = "apache_service_instance_name"
        scaling_response.service_name = "apache_service_name"
        scaling_response.success = False
        scaling_response.message_processed_callback = lambda: None

        result_json = scaling_response.to_json_string()
        result_response = DynamiteScalingResponse.from_json_string(
            result_json, scaling_response.message_processed_callback)
        assert result_response == scaling_response
    def test_to_json_string(self):
        scaling_response = DynamiteScalingResponse()
        scaling_response.command = DynamiteScalingCommand.SCALE_DOWN
        scaling_response.failure_counter = 4
        scaling_response.service_instance_name = "apache_service_instance_name"
        scaling_response.service_name = "apache_service_name"
        scaling_response.success = False
        scaling_response.message_processed_callback = lambda: None

        result_json = scaling_response.to_json_string()
        result_response = DynamiteScalingResponse.from_json_string(result_json, scaling_response.message_processed_callback)
        assert result_response == scaling_response
Beispiel #3
0
    def test_message_processed_with_callback(self):

        callback = Mock()
        scaling_response = DynamiteScalingResponse.from_json_string(
            self.test_json, message_processed_callback=callback)
        scaling_response.message_processed()
        callback.assert_called_once_with()
 def test_from_json_string(self):
     scaling_response = DynamiteScalingResponse.from_json_string(self.test_json)
     assert scaling_response.command == DynamiteScalingCommand.SCALE_DOWN
     assert scaling_response.service_instance_name == "apache_service_instance_name"
     assert scaling_response.service_name == "apache_service_name"
     assert scaling_response.failure_counter == 4
     assert scaling_response.success is True
    def _process_received_request(self, scaling_request, fail_count=0):
        scaling_success = False
        created_service_instance = None
        
        self._logger.info("Received request: %s", scaling_request)

        try:
            if scaling_request.command == DynamiteScalingCommand.SCALE_UP:
                service_name = scaling_request.service_name
                created_service_instance = self._dynamite_service_handler.add_new_fleet_service_instance(service_name)
            elif scaling_request.command == DynamiteScalingCommand.SCALE_DOWN:
                service_name = scaling_request.service_name
                service_instance_name = scaling_request.service_instance_name
                self._dynamite_service_handler.remove_fleet_service_instance(service_name, service_instance_name)
            scaling_success = True
        except FleetSubmissionError as fse:
            self._logger.error("Submitting fleet file failed!")
            raise FleetSubmissionError("Submission error on unit: {}" + service_name) from fse
        except FleetStartError as fse:
            self._logger.error("Starting fleet service failed!")
            if created_service_instance is not None:
                self._unload_unit(created_service_instance)
            raise FleetStartError ("Unit start error on unit: {}" + service_name) from fse
        except FleetDestroyError as fde:
            self._logger.error("Destroying fleet service failed!")
            raise FleetDestroyError ("Failed destroying unit: {}" + service_name) from fde
        except FleetCommunicationError as fce:
            self._logger.error("Communication with fleet failed!")
            raise FleetCommunicationError("Fleet communication error working on unit: {}" + service_name) from fce
        except:
            self._logger.exception("Unexpected error")

        scaling_response = DynamiteScalingResponse.from_scaling_request(scaling_request, scaling_success)
        self._scaling_response_sender.send_response(scaling_response)
        scaling_response.message_processed()
Beispiel #6
0
 def test_from_json_string(self):
     scaling_response = DynamiteScalingResponse.from_json_string(
         self.test_json)
     assert scaling_response.command == DynamiteScalingCommand.SCALE_DOWN
     assert scaling_response.service_instance_name == "apache_service_instance_name"
     assert scaling_response.service_name == "apache_service_name"
     assert scaling_response.failure_counter == 4
     assert scaling_response.success is True
    def test_from_scaling_request(self):
        scaling_request = DynamiteScalingRequest()
        scaling_request.command = DynamiteScalingCommand.SCALE_DOWN
        scaling_request.failure_counter = 4
        scaling_request.service_instance_name = "apache_service_instance_name"
        scaling_request.service_name = "apache_service_name"

        scaling_response = DynamiteScalingResponse.from_scaling_request(scaling_request, True)
        assert scaling_response.command == scaling_request.command
        assert scaling_response.service_instance_name == scaling_request.service_instance_name
        assert scaling_response.service_name == scaling_request.service_name
        assert scaling_response.failure_counter == scaling_request.failure_counter
        assert scaling_response.success is True
Beispiel #8
0
    def test_from_scaling_request(self):
        scaling_request = DynamiteScalingRequest()
        scaling_request.command = DynamiteScalingCommand.SCALE_DOWN
        scaling_request.failure_counter = 4
        scaling_request.service_instance_name = "apache_service_instance_name"
        scaling_request.service_name = "apache_service_name"

        scaling_response = DynamiteScalingResponse.from_scaling_request(
            scaling_request, True)
        assert scaling_response.command == scaling_request.command
        assert scaling_response.service_instance_name == scaling_request.service_instance_name
        assert scaling_response.service_name == scaling_request.service_name
        assert scaling_response.failure_counter == scaling_request.failure_counter
        assert scaling_response.success is True
    def receive(self):
        messages = ()

        if self._process_queue.empty():
            return messages

        received_scaling_response_string = self._process_queue.get()

        scaling_response = DynamiteScalingResponse.from_json_string(
            received_scaling_response_string,
            message_processed_callback=lambda: None)
        self._logger.info("Received scaling response %s",
                          repr(scaling_response))
        messages = (scaling_response, )
        return messages + self.receive()
    def receive(self):
        messages = ()

        if self._process_queue.empty():
            return messages

        received_scaling_response_string = self._process_queue.get()

        scaling_response = DynamiteScalingResponse.from_json_string(
            received_scaling_response_string,
            message_processed_callback=lambda: None
        )
        self._logger.info("Received scaling response %s", repr(scaling_response))
        messages = (scaling_response,)
        return messages + self.receive()
    def receive(self):
        messages = ()
        method_frame, header_frame, message_body = self._queue_channel.basic_get(queue=self._queue_name, no_ack=False)
        if self._no_message_delivered(method_frame, header_frame):
            self._logger.debug("Received no message from executor response queue")
            return messages

        received_scaling_response_string = message_body.decode("utf-8")
        message_processed_callback = lambda: self._on_message_processed(method_frame.delivery_tag)
        scaling_response = DynamiteScalingResponse.from_json_string(
            received_scaling_response_string,
            message_processed_callback=message_processed_callback
        )
        self._logger.info("Received scaling response %s", repr(scaling_response))
        messages = (scaling_response,)
        return messages + self.receive()
    def receive(self):
        messages = ()
        method_frame, header_frame, message_body = self._queue_channel.basic_get(
            queue=self._queue_name, no_ack=False)
        if self._no_message_delivered(method_frame, header_frame):
            self._logger.debug(
                "Received no message from executor response queue")
            return messages

        received_scaling_response_string = message_body.decode("utf-8")
        message_processed_callback = lambda: self._on_message_processed(
            method_frame.delivery_tag)
        scaling_response = DynamiteScalingResponse.from_json_string(
            received_scaling_response_string,
            message_processed_callback=message_processed_callback)
        self._logger.info("Received scaling response %s",
                          repr(scaling_response))
        messages = (scaling_response, )
        return messages + self.receive()
Beispiel #13
0
    def _process_received_request(self, scaling_request, fail_count=0):
        scaling_success = False
        created_service_instance = None

        try:
            if scaling_request.command == DynamiteScalingCommand.SCALE_UP:
                service_name = scaling_request.service_name
                created_service_instance = self._dynamite_service_handler.add_new_fleet_service_instance(service_name)
            elif scaling_request.command == DynamiteScalingCommand.SCALE_DOWN:
                service_name = scaling_request.service_name
                service_instance_name = scaling_request.service_instance_name
                self._dynamite_service_handler.remove_fleet_service_instance(service_name, service_instance_name)
            scaling_success = True
        except FleetSubmissionError:
            self._logger.exception("Submitting fleet file failed!")
            retry_success = self._retry_processing_request(scaling_request, fail_count)
            if retry_success:
                return
        except FleetStartError:
            self._logger.exception("Starting fleet service failed!")
            if created_service_instance is not None:
                self._unload_unit(created_service_instance)
            retry_success = self._retry_processing_request(scaling_request, fail_count)
            if retry_success:
                return
        except FleetDestroyError:
            self._logger.exception("Destroying fleet service failed!")
            retry_success = self._retry_processing_request(scaling_request, fail_count)
            if retry_success:
                return
        except FleetCommunicationError:
            self._logger.exception("Communication with fleet failed!")

        scaling_response = DynamiteScalingResponse.from_scaling_request(scaling_request, scaling_success)
        self._scaling_response_sender.send_response(scaling_response)
        scaling_response.message_processed()
Beispiel #14
0
    def test_message_processed_without_callback(self):

        scaling_response = DynamiteScalingResponse.from_json_string(
            self.test_json)
        scaling_response.message_processed()
    def test_message_processed_with_callback(self):

        callback = Mock()
        scaling_response = DynamiteScalingResponse.from_json_string(self.test_json, message_processed_callback=callback)
        scaling_response.message_processed()
        callback.assert_called_once_with()
    def test_message_processed_without_callback(self):

        scaling_response = DynamiteScalingResponse.from_json_string(self.test_json)
        scaling_response.message_processed()
    def create_content(self):
        content = []

        response = DynamiteScalingResponse()
        response.command = DynamiteScalingCommand.SCALE_DOWN
        response.failure_counter = 2
        response.service_instance_name = "apache_service_instance_name"
        response.service_name = "apache_service_name"
        response.success = True
        content.append(response)

        response = DynamiteScalingResponse()
        response.command = DynamiteScalingCommand.SCALE_UP
        response.failure_counter = 0
        response.service_instance_name = "apache_service_instance_name"
        response.service_name = "apache_service_name"
        response.success = False
        content.append(response)
        return content
    def create_content(self):
        content = []

        response = DynamiteScalingResponse()
        response.command = DynamiteScalingCommand.SCALE_DOWN
        response.failure_counter = 2
        response.service_instance_name = "apache_service_instance_name"
        response.service_name = "apache_service_name"
        response.success = True
        content.append(response)

        response = DynamiteScalingResponse()
        response.command = DynamiteScalingCommand.SCALE_UP
        response.failure_counter = 0
        response.service_instance_name = "apache_service_instance_name"
        response.service_name = "apache_service_name"
        response.success = False
        content.append(response)
        return content