示例#1
0
    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()
    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
示例#3
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
示例#4
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()