Exemple #1
0
    def _check(self, vrrp_api, instances):
        while True:
            while True:
                rep = vrrp_api.vrrp_list(self)
                if len(rep.instance_list) >= len(instances) * 2:
                    if any(i.state == vrrp_event.VRRP_STATE_INITIALIZE
                           for i in rep.instance_list):
                        continue
                    break
                print('%s / %s' % (len(rep.instance_list), len(instances) * 2))
                time.sleep(1)

#                for i in rep.instance_list:
#                    print('%s %s %s %s %s' % (i.instance_name,
#                          i.monitor_name,
#                          i.config,
#                          i.interface,
#                          i.state))
            assert len(rep.instance_list) == len(instances) * 2
            num_of_master = 0
            d = dict(((i.instance_name, i) for i in rep.instance_list))
            bad = 0
            for i in rep.instance_list:
                assert i.state in (vrrp_event.VRRP_STATE_MASTER,
                                   vrrp_event.VRRP_STATE_BACKUP)
                if i.state == vrrp_event.VRRP_STATE_MASTER:
                    num_of_master += 1

                vr = instances[i.config.vrid]
                if (vr[0].config.priority > vr[1].config.priority and
                        i.instance_name == vr[1].instance_name) or \
                   (vr[0].config.priority < vr[1].config.priority and
                        i.instance_name == vr[0].instance_name):
                    if i.state == vrrp_event.VRRP_STATE_MASTER:
                        print("bad master:")
                        print('%s %s' %
                              (d[vr[0].instance_name].state,
                               d[vr[0].instance_name].config.priority))
                        print('%s %s' %
                              (d[vr[1].instance_name].state,
                               d[vr[1].instance_name].config.priority))
                        bad += 1
#                       assert i.state != vrrp_event.VRRP_STATE_MASTER
            if bad > 0:
                # this could be a transient state
                print("%s bad masters" % bad)
                time.sleep(1)
                continue
            if num_of_master >= len(instances):
                assert num_of_master == len(instances)
                break
            print('%s / %s' % (num_of_master, len(instances)))
            time.sleep(1)
            continue
    def _check(self, vrrp_api, instances):
        while True:
            while True:
                rep = vrrp_api.vrrp_list(self)
                if len(rep.instance_list) >= len(instances) * 2:
                    if any(i.state == vrrp_event.VRRP_STATE_INITIALIZE
                           for i in rep.instance_list):
                        continue
                    break
                print('%s / %s' % (len(rep.instance_list), len(instances) * 2))
                time.sleep(1)

#                for i in rep.instance_list:
#                    print('%s %s %s %s %s' % (i.instance_name,
#                          i.monitor_name,
#                          i.config,
#                          i.interface,
#                          i.state))
            assert len(rep.instance_list) == len(instances) * 2
            num_of_master = 0
            d = dict(((i.instance_name, i) for i in rep.instance_list))
            bad = 0
            for i in rep.instance_list:
                assert i.state in (vrrp_event.VRRP_STATE_MASTER,
                                   vrrp_event.VRRP_STATE_BACKUP)
                if i.state == vrrp_event.VRRP_STATE_MASTER:
                    num_of_master += 1

                vr = instances[i.config.vrid]
                if (vr[0].config.priority > vr[1].config.priority and
                        i.instance_name == vr[1].instance_name) or \
                   (vr[0].config.priority < vr[1].config.priority and
                        i.instance_name == vr[0].instance_name):
                    if i.state == vrrp_event.VRRP_STATE_MASTER:
                        print("bad master:")
                        print('%s %s' % (d[vr[0].instance_name].state,
                                         d[vr[0].instance_name].config.priority))
                        print('%s %s' % (d[vr[1].instance_name].state,
                                         d[vr[1].instance_name].config.priority))
                        bad += 1
#                       assert i.state != vrrp_event.VRRP_STATE_MASTER
            if bad > 0:
                # this could be a transient state
                print("%s bad masters" % bad)
                time.sleep(1)
                continue
            if num_of_master >= len(instances):
                assert num_of_master == len(instances)
                break
            print('%s / %s' % (num_of_master, len(instances)))
            time.sleep(1)
            continue
 def _list(self, msgid, params):
     self.logger.debug('handle vrrp_list request')
     result = vrrp_api.vrrp_list(self)
     instance_list = result.instance_list
     ret_list = []
     for instance in instance_list:
         c = instance.config
         info_dict = {
             "instance_name": instance.instance_name,
             "vrid": c.vrid,
             "version": c.version,
             "advertisement_interval": c.advertisement_interval,
             "priority": c.priority,
             "virtual_ip_address": str(netaddr.IPAddress(c.ip_addresses[0]))
         }
         ret_list.append(info_dict)
     return ret_list
Exemple #4
0
 def _list(self, msgid, params):
     self.logger.debug('handle vrrp_list request')
     result = vrrp_api.vrrp_list(self)
     instance_list = result.instance_list
     ret_list = []
     for instance in instance_list:
         c = instance.config
         info_dict = {
             "instance_name": instance.instance_name,
             "vrid": c.vrid,
             "version": c.version,
             "advertisement_interval": c.advertisement_interval,
             "priority": c.priority,
             "virtual_ip_address": str(netaddr.IPAddress(c.ip_addresses[0]))
         }
         ret_list.append(info_dict)
     return ret_list
 def _lookup_instance(self, vrid):
     for instance in vrrp_api.vrrp_list(self).instance_list:
         if vrid == instance.config.vrid:
             return instance.instance_name
     return None
Exemple #6
0
 def _lookup_instance(self, vrid):
     for instance in vrrp_api.vrrp_list(self).instance_list:
         if vrid == instance.config.vrid:
             return instance.instance_name
     return None
    def _main_version_priority_sleep(self, vrrp_version, priority, do_sleep):
        app_mgr = app_manager.AppManager.get_instance()
        self.logger.debug('%s', app_mgr.applications)
        vrrp_mgr = app_mgr.applications['VRRPManager']

        step = 5
        instances = {}
        for vrid in range(1, 256, step):
            if vrid == _VRID:
                continue
            print("vrid %s" % vrid)
            l = {}
            prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN,
                       min(vrrp.VRRP_PRIORITY_BACKUP_MAX, vrid))
            rep0 = self._configure_vrrp_router(vrrp_version,
                                               prio,
                                               _PRIMARY_IP_ADDRESS0,
                                               self._IFNAME0,
                                               vrid)
            assert rep0.instance_name is not None
            l[0] = rep0
            prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN,
                       min(vrrp.VRRP_PRIORITY_BACKUP_MAX, 256 - vrid))
            rep1 = self._configure_vrrp_router(vrrp_version,
                                               prio,
                                               _PRIMARY_IP_ADDRESS1,
                                               self._IFNAME1,
                                               vrid)
            assert rep1.instance_name is not None
            l[1] = rep1
            instances[vrid] = l

        print("vrid %s" % _VRID)
        l = {}
        rep0 = self._configure_vrrp_router(vrrp_version, priority,
                                           _PRIMARY_IP_ADDRESS0,
                                           self._IFNAME0, _VRID)
        assert rep0.instance_name is not None
        l[0] = rep0
        rep1 = self._configure_vrrp_router(
            vrrp_version, vrrp.VRRP_PRIORITY_BACKUP_DEFAULT,
            _PRIMARY_IP_ADDRESS1, self._IFNAME1, _VRID)
        assert rep1.instance_name is not None
        l[1] = rep1
        instances[_VRID] = l

        self.logger.debug('%s', vrrp_mgr._instances)

        if do_sleep:
            print("priority %s" % priority)
            print("waiting for instances starting")

            self._check(vrrp_api, instances)

        for vrid in instances.keys():
            if vrid == _VRID:
                continue
            which = vrid & 1
            new_priority = int(random.uniform(vrrp.VRRP_PRIORITY_BACKUP_MIN,
                                              vrrp.VRRP_PRIORITY_BACKUP_MAX))
            i = instances[vrid][which]
            vrrp_api.vrrp_config_change(self, i.instance_name,
                                        priority=new_priority)
            i.config.priority = new_priority

        if do_sleep:
            print("priority shuffled")

            self._check(vrrp_api, instances)

        for vrid in instances.keys():
            if vrid == _VRID:
                continue
            which = vrid & 1
            vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name)
        vrrp_api.vrrp_shutdown(self, instances[_VRID][0].instance_name)

        if do_sleep:
            print("shutting down instances")
            while True:
                rep = vrrp_api.vrrp_list(self)
                if len(rep.instance_list) <= len(instances):
                    break
                print("left %s" % len(rep.instance_list))
                time.sleep(1)
            assert len(rep.instance_list) == len(instances)
            print("waiting for the rest becoming master")
            while True:
                rep = vrrp_api.vrrp_list(self)
                if all(i.state == vrrp_event.VRRP_STATE_MASTER
                       for i in rep.instance_list):
                    break
                time.sleep(1)

        vrrp_api.vrrp_shutdown(self, instances[_VRID][1].instance_name)
        for vrid in instances.keys():
            if vrid == _VRID:
                continue
            which = 1 - (vrid & 1)
            vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name)

        print("waiting for instances shutting down")
        while True:
            rep = vrrp_api.vrrp_list(self)
            if not rep.instance_list:
                break
            print("left %s" % len(rep.instance_list))
            time.sleep(1)
Exemple #8
0
    def _main_version_priority_sleep(self, vrrp_version, priority, do_sleep):
        app_mgr = app_manager.AppManager.get_instance()
        self.logger.debug('%s', app_mgr.applications)
        vrrp_mgr = app_mgr.applications['VRRPManager']

        step = 5
        instances = {}
        for vrid in xrange(1, 256, step):
            if vrid == _VRID:
                continue
            print "vrid", vrid
            l = {}
            prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN,
                       min(vrrp.VRRP_PRIORITY_BACKUP_MAX, vrid))
            rep0 = self._configure_vrrp_router(vrrp_version, prio,
                                               _PRIMARY_IP_ADDRESS0,
                                               self._IFNAME0, vrid)
            assert not rep0.instance_name is None
            l[0] = rep0
            prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN,
                       min(vrrp.VRRP_PRIORITY_BACKUP_MAX, 256 - vrid))
            rep1 = self._configure_vrrp_router(vrrp_version, prio,
                                               _PRIMARY_IP_ADDRESS1,
                                               self._IFNAME1, vrid)
            assert not rep1.instance_name is None
            l[1] = rep1
            instances[vrid] = l

        print "vrid", _VRID
        l = {}
        rep0 = self._configure_vrrp_router(vrrp_version, priority,
                                           _PRIMARY_IP_ADDRESS0, self._IFNAME0,
                                           _VRID)
        assert not rep0.instance_name is None
        l[0] = rep0
        rep1 = self._configure_vrrp_router(vrrp_version,
                                           vrrp.VRRP_PRIORITY_BACKUP_DEFAULT,
                                           _PRIMARY_IP_ADDRESS1, self._IFNAME1,
                                           _VRID)
        assert not rep1.instance_name is None
        l[1] = rep1
        instances[_VRID] = l

        self.logger.debug('%s', vrrp_mgr._instances)

        if do_sleep:
            print "priority", priority
            print "waiting for instances starting"

            self._check(vrrp_api, instances)

        for vrid in instances.keys():
            if vrid == _VRID:
                continue
            which = vrid & 1
            new_priority = int(
                random.uniform(vrrp.VRRP_PRIORITY_BACKUP_MIN,
                               vrrp.VRRP_PRIORITY_BACKUP_MAX))
            i = instances[vrid][which]
            vrrp_api.vrrp_config_change(self,
                                        i.instance_name,
                                        priority=new_priority)
            i.config.priority = new_priority

        if do_sleep:
            print "priority shuffled"

            self._check(vrrp_api, instances)

        for vrid in instances.keys():
            if vrid == _VRID:
                continue
            which = vrid & 1
            vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name)
        vrrp_api.vrrp_shutdown(self, instances[_VRID][0].instance_name)

        if do_sleep:
            print "shutting down instances"
            while True:
                rep = vrrp_api.vrrp_list(self)
                if len(rep.instance_list) <= len(instances):
                    break
                print "left", len(rep.instance_list)
                time.sleep(1)
            assert len(rep.instance_list) == len(instances)
            print "waiting for the rest becoming master"
            while True:
                rep = vrrp_api.vrrp_list(self)
                if all(i.state == vrrp_event.VRRP_STATE_MASTER
                       for i in rep.instance_list):
                    break
                time.sleep(1)

        vrrp_api.vrrp_shutdown(self, instances[_VRID][1].instance_name)
        for vrid in instances.keys():
            if vrid == _VRID:
                continue
            which = 1 - (vrid & 1)
            vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name)

        print "waiting for instances shutting down"
        while True:
            rep = vrrp_api.vrrp_list(self)
            if not rep.instance_list:
                break
            print "left", len(rep.instance_list)
            time.sleep(1)