Example #1
0
def test_migrate_scheduler(cephadm_module: CephadmOrchestrator):
    with with_host(cephadm_module, 'host1'):
        with with_host(cephadm_module, 'host2'):

            # emulate the old scheduler:
            c = cephadm_module.apply_rgw(
                ServiceSpec('rgw',
                            'r.z',
                            placement=PlacementSpec(host_pattern='*',
                                                    count=2)))
            assert wait(cephadm_module, c) == 'Scheduled rgw.r.z update...'

            cephadm_module._apply_all_services()
            out = {
                o.hostname
                for o in wait(cephadm_module, cephadm_module.list_daemons())
            }
            assert out == {'host1', 'host2'}

            c = cephadm_module.apply_rgw(
                ServiceSpec('rgw',
                            'r.z',
                            placement=PlacementSpec(host_pattern='host1',
                                                    count=2)))
            assert wait(cephadm_module, c) == 'Scheduled rgw.r.z update...'

            cephadm_module.migration_current = 0
            cephadm_module.migration.migrate()

            # assert we need all daemons.
            assert cephadm_module.migration_current == 0

            # Sorry, for this hack, but I need to make sure, Migration thinks,
            # we have updated all daemons already.
            cephadm_module.cache.last_daemon_update['host1'] = datetime.now()
            cephadm_module.cache.last_daemon_update['host2'] = datetime.now()

            cephadm_module.migration.migrate()
            assert cephadm_module.migration_current == 2

            out = [
                o.spec.placement for o in wait(
                    cephadm_module, cephadm_module.describe_service())
            ]
            assert out == [
                PlacementSpec(count=2,
                              hosts=[
                                  HostPlacementSpec(hostname='host1',
                                                    network='',
                                                    name=''),
                                  HostPlacementSpec(hostname='host2',
                                                    network='',
                                                    name='')
                              ])
            ]
Example #2
0
def test_migrate_scheduler(cephadm_module: CephadmOrchestrator):
    with with_host(cephadm_module, 'host1', refresh_hosts=False):
        with with_host(cephadm_module, 'host2', refresh_hosts=False):

            # emulate the old scheduler:
            c = cephadm_module.apply_rgw(
                ServiceSpec('rgw',
                            'r.z',
                            placement=PlacementSpec(host_pattern='*',
                                                    count=2)))
            assert wait(cephadm_module, c) == 'Scheduled rgw.r.z update...'

            # with pytest.raises(OrchestratorError, match="cephadm migration still ongoing. Please wait, until the migration is complete."):
            CephadmServe(cephadm_module)._apply_all_services()

            cephadm_module.migration_current = 0
            cephadm_module.migration.migrate()
            # assert we need all daemons.
            assert cephadm_module.migration_current == 0

            CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
            cephadm_module.migration.migrate()

            CephadmServe(cephadm_module)._apply_all_services()

            out = {
                o.hostname
                for o in wait(cephadm_module, cephadm_module.list_daemons())
            }
            assert out == {'host1', 'host2'}

            c = cephadm_module.apply_rgw(
                ServiceSpec('rgw',
                            'r.z',
                            placement=PlacementSpec(host_pattern='host1',
                                                    count=2)))
            assert wait(cephadm_module, c) == 'Scheduled rgw.r.z update...'

            # Sorry, for this hack, but I need to make sure, Migration thinks,
            # we have updated all daemons already.
            cephadm_module.cache.last_daemon_update['host1'] = datetime.now()
            cephadm_module.cache.last_daemon_update['host2'] = datetime.now()

            cephadm_module.migration_current = 0
            cephadm_module.migration.migrate()
            assert cephadm_module.migration_current == 2

            out = [
                o.spec.placement for o in wait(
                    cephadm_module, cephadm_module.describe_service())
            ]
            assert out == [
                PlacementSpec(count=2,
                              hosts=[
                                  HostPlacementSpec(hostname='host1',
                                                    network='',
                                                    name=''),
                                  HostPlacementSpec(hostname='host2',
                                                    network='',
                                                    name='')
                              ])
            ]