def test_load_calculation(self): """ Validates whether the load calculation works """ vpools, storagerouters, storagedrivers, services, mds_services, _ = self._build_service_structure( {'vpools': [1], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1)], # (<id>, <vpool_id>, <sr_id>) 'mds_services': [(1, 1)]} # (<id>, <sd_id>) ) mds_service = mds_services[1] self._create_vdisks_for_mds_service(2, 1, mds_service=mds_service) load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 20, 'There should be a 20% load. {0}'.format(load)) self.assertEqual(load_plus, 30, 'There should be a 30% plus load. {0}'.format(load_plus)) self._create_vdisks_for_mds_service(3, 3, mds_service=mds_service) load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 50, 'There should be a 50% load. {0}'.format(load)) self.assertEqual(load_plus, 60, 'There should be a 60% plus load. {0}'.format(load_plus)) self._create_vdisks_for_mds_service(5, 6, mds_service=mds_service) load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 100, 'There should be a 100% load. {0}'.format(load)) self.assertEqual(load_plus, 110, 'There should be a 110% plus load. {0}'.format(load_plus)) mds_service.capacity = -1 mds_service.save() load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 50, 'There should be a 50% load. {0}'.format(load)) self.assertEqual(load_plus, 50, 'There should be a 50% plus load. {0}'.format(load_plus)) mds_service.capacity = 0 mds_service.save() load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, float('inf'), 'There should be infinite load. {0}'.format(load)) self.assertEqual(load_plus, float('inf'), 'There should be infinite plus load. {0}'.format(load_plus))
def test_load_calculation(self): """ Validates whether the load calculation works """ vpools, storagerouters, storagedrivers, services, mds_services, _ = self._build_service_structure( { 'vpools': [1], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1)], # (<id>, <vpool_id>, <sr_id>) 'mds_services': [(1, 1)] } # (<id>, <sd_id>) ) mds_service = mds_services[1] self._create_vdisks_for_mds_service(2, 1, mds_service=mds_service) load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 20, 'There should be a 20% load. {0}'.format(load)) self.assertEqual( load_plus, 30, 'There should be a 30% plus load. {0}'.format(load_plus)) self._create_vdisks_for_mds_service(3, 3, mds_service=mds_service) load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 50, 'There should be a 50% load. {0}'.format(load)) self.assertEqual( load_plus, 60, 'There should be a 60% plus load. {0}'.format(load_plus)) self._create_vdisks_for_mds_service(5, 6, mds_service=mds_service) load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 100, 'There should be a 100% load. {0}'.format(load)) self.assertEqual( load_plus, 110, 'There should be a 110% plus load. {0}'.format(load_plus)) mds_service.capacity = -1 mds_service.save() load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, 50, 'There should be a 50% load. {0}'.format(load)) self.assertEqual( load_plus, 50, 'There should be a 50% plus load. {0}'.format(load_plus)) mds_service.capacity = 0 mds_service.save() load, load_plus = MDSServiceController.get_mds_load(mds_service) self.assertEqual(load, float('inf'), 'There should be infinite load. {0}'.format(load)) self.assertEqual( load_plus, float('inf'), 'There should be infinite plus load. {0}'.format(load_plus))
def get_stats_mds(cls): """ Retrieve how many vDisks each MDS service is serving, whether as master or slave """ if cls._config is None: cls.validate_and_retrieve_config() stats = [] environment = cls._config['environment'] service_type = ServiceTypeList.get_by_name('MetadataServer') if service_type is None: raise RuntimeError('MetadataServer service not found in the model') for service in service_type.services: slaves = 0 masters = 0 mds_service = service.mds_service for junction in mds_service.vdisks: if junction.is_master is True: masters += 1 else: slaves += 1 stats.append({'tags': {'vpool_name': mds_service.vpool.name, 'mds_number': mds_service.number, 'environment': environment, 'storagerouter_name': service.storagerouter.name}, 'fields': {'load': MDSServiceController.get_mds_load(mds_service)[0], 'capacity': mds_service.capacity if mds_service.capacity != -1 else 'infinite', 'masters': masters, 'slaves': slaves}, 'measurement': 'mds'}) return False, stats
def _generate_mds_service_load_repr(_mds_service): """ Generates a load representing thing for a given mds_service """ masters, slaves = 0, 0 for _junction in _mds_service.vdisks: if _junction.is_master: masters += 1 else: slaves += 1 capacity = _mds_service.capacity if capacity == -1: capacity = 'infinite' _load, _ = MDSServiceController.get_mds_load(_mds_service) if _load == float('inf'): _load = 'infinite' else: _load = round(_load, 2) return [_mds_service.service.storagerouter.ip, _mds_service.service.ports[0], masters, slaves, capacity, _load]
def _generate_mds_service_load_repr(_mds_service): """ Generates a load representing thing for a given mds_service """ masters, slaves = 0, 0 for _junction in _mds_service.vdisks: if _junction.is_master: masters += 1 else: slaves += 1 capacity = _mds_service.capacity if capacity == -1: capacity = 'infinite' _load, _ = MDSServiceController.get_mds_load(_mds_service) if _load == float('inf'): _load = 'infinite' else: _load = round(_load, 2) return [ _mds_service.service.storagerouter.ip, _mds_service.service.ports[0], masters, slaves, capacity, _load ]