Exemplo n.º 1
0
    def find_device(self):
        self.logger.info('Finding device.')
        device_name = None
        count = self.machine.increment_counter(self.state_name)
        request = data.request_config(self.machine.request_id)
        image_is_reusable = data.image_is_reusable(request['image'])

        free_devices = data.get_free_devices(
                environment=request['environment'],
                device_name=request['requested_device'])

        if free_devices:
            if image_is_reusable:
                devices_with_image = [x for x in free_devices
                                      if x['image'] == request['image'] and
                                         data.from_json(x['boot_config']) ==
                                         data.from_json(request['boot_config'])]
                if devices_with_image:
                    free_devices = devices_with_image

            # pick a device at random from the returned list
            device_name = random.choice(free_devices)['name']
            self.logger.info('Assigning device %s.' % device_name)
            if data.reserve_device(self.machine.request_id,
                                                device_name):
                self.logger.info('Request succeeded.')
                self.machine.goto_state(contacting_lifeguard)
        else:
            self.logger.warn('Request failed!')
            if request['requested_device'] == 'any':
                if count >= self.MAX_ANY_REQUESTS:
                    self.logger.warn('Hit maximum number of attempts to find '
                                     'a free device; giving up.')
                    self.machine.goto_state(device_not_found)
            else:
                if count >= self.MAX_SPECIFIC_REQUESTS:
                    self.logger.warn('Requested device %s is busy.' %
                                     device_name)
                    self.machine.goto_state(device_busy)
Exemplo n.º 2
0
    def find_device(self):
        # FIXME: refactor.
        device_name = None
        count = self.machine.increment_counter(self.state_name)
        request = data.dump_requests(self.machine.request_id)[0]
        if request['requested_device'] == 'any':
            free_devices = data.get_free_devices()
            if free_devices:
                device_id = random.randint(0, len(free_devices) - 1)
                device_name = free_devices[device_id]
                logs.request_logs.add(
                    self.machine.request_id,
                    'assigning device %s' % device_name)
            else:
                self.logger.info('no free devices')
        else:
            device_name = request['requested_device']
            self.logger.info('assigning requested device %s' % device_name)

        if device_name and data.reserve_device(self.machine.request_id,
                                               device_name):
            self.logger.info('request succeeded')
            self.machine.goto_state(contacting_lifeguard)
        else:
            self.logger.warn('request failed!')
            if request['requested_device'] == 'any':
                if count >= self.MAX_ANY_REQUESTS:
                    logs.request_logs.add(
                        self.machine.request_id,
                        'hit maximum number of attempts; giving up')
                    self.machine.goto_state(device_not_found)
            else:
                if count >= self.MAX_SPECIFIC_REQUESTS:
                    logs.request_logs.add(
                        self.machine.request_id,
                        'requested device %s is busy' % device_name)
                    self.machine.goto_state(device_busy)
Exemplo n.º 3
0
    def find_device(self):
        # FIXME: refactor.
        device_name = None
        count = self.machine.increment_counter(self.state_name)
        request = data.dump_requests(self.machine.request_id)[0]
        if request['requested_device'] == 'any':
            free_devices = data.get_free_devices()
            if free_devices:
                device_id = random.randint(0, len(free_devices) - 1)
                device_name = free_devices[device_id]
                logs.request_logs.add(self.machine.request_id,
                                      'assigning device %s' % device_name)
            else:
                self.logger.info('no free devices')
        else:
            device_name = request['requested_device']
            self.logger.info('assigning requested device %s' % device_name)

        if device_name and data.reserve_device(self.machine.request_id,
                                               device_name):
            self.logger.info('request succeeded')
            self.machine.goto_state(contacting_lifeguard)
        else:
            self.logger.warn('request failed!')
            if request['requested_device'] == 'any':
                if count >= self.MAX_ANY_REQUESTS:
                    logs.request_logs.add(
                        self.machine.request_id,
                        'hit maximum number of attempts; giving up')
                    self.machine.goto_state(device_not_found)
            else:
                if count >= self.MAX_SPECIFIC_REQUESTS:
                    logs.request_logs.add(
                        self.machine.request_id,
                        'requested device %s is busy' % device_name)
                    self.machine.goto_state(device_busy)