def _check_capacity(self): import auto_balance from models.cluster_plan import get_balance_plan_by_addr if (eru_client is None or not self.details['stat'] or len(self.details['slots']) == 0 or self.details['slots_migrating']): return maxmem = self.details['mem'].get('maxmemory') if maxmem is None or maxmem == 0: return if self.details['mem']['used_memory'] < maxmem * 9 / 10: return host, port = self.addr.split(':') plan = get_balance_plan_by_addr(host, int(port)) if plan is None: return logging.info('Attempt to deploy node for %s due to memory drained;' ' used memory %d / %d max memory', self.addr, self.details['mem']['used_memory'], maxmem) auto_balance.add_node_to_balance_for( host, int(port), plan, self.details['slots'])
def _check_capacity(self): import auto_balance from models.cluster_plan import get_balance_plan_by_addr if (eru_client is None or not self.details['cluster_enabled'] or not self.details['stat'] or len(self.details['slots']) == 0 or self.details['slots_migrating']): return maxmem = self.details.get('maxmemory') if maxmem is None or maxmem == 0: return if self.details['used_memory'] < maxmem * 9 / 10: return host, port = self.addr.split(':') plan = get_balance_plan_by_addr(host, int(port)) if plan is None: return logging.info('Attempt to deploy node for %s due to memory drained;' ' used memory %d / %d max memory', self.addr, self.details['used_memory'], maxmem) auto_balance.add_node_to_balance_for( host, int(port), plan, self.details['slots'])
def test_get_plan(self): with self.app.test_client() as client: n0 = models.node.create_instance('10.0.0.1', 6301) n1 = models.node.create_instance('10.0.0.1', 6302) n2 = models.node.create_instance('10.0.0.2', 6301) c0 = models.cluster.create_cluster('the quick brown fox') c1 = models.cluster.create_cluster('the lazy dog') c0.nodes.append(n0) c0.nodes.append(n1) c1.nodes.append(n2) self.db.session.add(c0) self.db.session.add(c1) self.db.session.commit() r = client.post('/cluster/set_balance_plan', data={ 'cluster': c1.id, 'pod': 'pod', 'aof': '0', 'slave_count': 0, }) self.assertReqStatus(200, r) p = get_balance_plan_by_addr('10.0.0.1', 6301) self.assertIsNone(p) p = get_balance_plan_by_addr('10.0.0.1', 6302) self.assertIsNone(p) p = get_balance_plan_by_addr('10.0.0.1', 6303) self.assertIsNone(p) p = get_balance_plan_by_addr('10.0.0.2', 6301) self.assertIsNotNone(p) self.assertEqual('pod', p.pod) self.assertEqual(None, p.host) self.assertEqual([], p.slaves) self.assertEqual(False, p.aof) r = client.post('/cluster/set_balance_plan', data={ 'cluster': c0.id, 'pod': 'pod', 'aof': '1', 'master_host': '10.100.1.1', 'slave_count': 2, 'slaves': '10.100.1.2,', }) self.assertReqStatus(200, r) r = client.post('/cluster/del_balance_plan', data={ 'cluster': c1.id, }) self.assertReqStatus(200, r) p = get_balance_plan_by_addr('10.0.0.2', 6301) self.assertIsNone(p) p0 = get_balance_plan_by_addr('10.0.0.1', 6301) self.assertIsNotNone(p0) self.assertEqual('pod', p0.pod) self.assertEqual('10.100.1.1', p0.host) self.assertEqual([{'host': '10.100.1.2'}, {}], p0.slaves) self.assertEqual(True, p0.aof) p1 = get_balance_plan_by_addr('10.0.0.1', 6302) self.assertEqual(p0.id, p1.id)