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