示例#1
0
    def test_delete_snapshot_scrubbing_lock(self):
        """
        Tests the skip-if-scrubbed logic
        """
        snapshot_while_scrub_results = []

        def delete_snapshot_while_scrubbing(*args, **kwargs):
            _ = args, kwargs
            try:
                snapshot_while_scrub_results.append(VDiskController.delete_snapshot(vdisk_1.guid, vdisk_1.snapshot_ids[0]))
            except RuntimeError as ex:
                snapshot_while_scrub_results.append(ex)

        structure = DalHelper.build_dal_structure(
            {'vpools': [1],
             'vdisks': [(1, 1, 1, 1)],  # (<id>, <storagedriver_id>, <vpool_id>, <mds_service_id>)
             'mds_services': [(1, 1)],
             'storagerouters': [1],
             'storagedrivers': [(1, 1, 1)]}  # (<id>, <vpool_id>, <storagerouter_id>)
        )
        vdisks = structure['vdisks']
        vdisk_1 = vdisks[1]

        # Create automatic snapshot for both vDisks
        success, fail = GenericController.snapshot_all_vdisks()
        self.assertEqual(first=len(fail), second=0, msg='Expected 0 failed snapshots')
        self.assertEqual(first=len(success), second=1, msg='Expected 1 successful snapshots')
        self.assertEqual(first=len(vdisk_1.snapshot_ids), second=1, msg='Expected 1 snapshot ID for vDisk {0}'.format(vdisk_1.name))
        self.assertEqual(first=len(vdisk_1.snapshots), second=1, msg='Expected 1 snapshot for vDisk {0}'.format(vdisk_1.name))

        proxy_names, thread_names, vdisk_namespaces = self.generate_scrub_related_info(structure)
        LockedClient.scrub_controller = {'possible_threads': thread_names,
                                         'volumes': {},
                                         'waiter': Waiter(len(thread_names[0:1]))}  # only 1 disks -> 1 thread
        # Scrub all volumes
        for vdisk_id, vdisk in vdisks.iteritems():
            LockedClient.scrub_controller['volumes'][vdisk.volume_id] = {'success': True,
                                                                         'scrub_work': range(vdisk_id)}

        hooks = {'post_vdisk_scrub_registration': delete_snapshot_while_scrubbing}  # Make the scrubber wait
        ScrubShared._test_hooks.update(hooks)
        GenericController.execute_scrub()

        # Ensure delete snapshot fails for vdisk_1 because it is being scrubbed
        result_while_scrub = snapshot_while_scrub_results[0]
        self.assertIsInstance(result_while_scrub, Exception, 'Expected an exception to have occurred')
        self.assertEqual(str(result_while_scrub), 'VDisk is being scrubbed. Unable to remove snapshots at this time', 'Excpetion should be about disk being scrubbed')
        self.assertEqual(first=len(vdisk_1.snapshot_ids), second=1, msg='Expected 1 snapshot ID for vDisk {0}'.format(vdisk_1.name))
        self.assertEqual(first=len(vdisk_1.snapshots), second=1, msg='Expected 1 snapshot for vDisk {0}'.format(vdisk_1.name))
示例#2
0
    def test_snapshot_all_vdisks(self):
        """
        Tests GenericController.snapshot_all_vdisks functionality
        """
        structure = DalHelper.build_dal_structure({
            'vpools': [1],
            'vdisks': [
                (1, 1, 1, 1), (2, 1, 1, 1)
            ],  # (<id>, <storagedriver_id>, <vpool_id>, <mds_service_id>)
            'mds_services': [(1, 1)],
            'storagerouters': [1],
            'storagedrivers': [(1, 1, 1)]
        }  # (<id>, <vpool_id>, <storagerouter_id>)
                                                  )
        vdisk_1 = structure['vdisks'][1]
        vdisk_2 = structure['vdisks'][2]

        # Create automatic snapshot for both vDisks
        success, fail = GenericController.snapshot_all_vdisks()
        self.assertEqual(first=len(fail),
                         second=0,
                         msg='Expected 0 failed snapshots')
        self.assertEqual(first=len(success),
                         second=2,
                         msg='Expected 2 successful snapshots')
        self.assertEqual(first=len(vdisk_1.snapshot_ids),
                         second=1,
                         msg='Expected 1 snapshot ID for vDisk {0}'.format(
                             vdisk_1.name))
        self.assertEqual(first=len(vdisk_2.snapshot_ids),
                         second=1,
                         msg='Expected 1 snapshot ID for vDisk {0}'.format(
                             vdisk_2.name))
        self.assertEqual(first=len(vdisk_1.snapshots),
                         second=1,
                         msg='Expected 1 snapshot for vDisk {0}'.format(
                             vdisk_1.name))
        self.assertEqual(first=len(vdisk_2.snapshots),
                         second=1,
                         msg='Expected 1 snapshot for vDisk {0}'.format(
                             vdisk_2.name))

        # Ensure automatic snapshot fails for vdisk_1 and succeeds for vdisk_2
        vdisk_1.storagedriver_client._set_snapshot_in_backend(
            volume_id=vdisk_1.volume_id,
            snapshot_id=vdisk_1.snapshots[0]['guid'],
            in_backend=False)
        success, fail = GenericController.snapshot_all_vdisks()
        self.assertEqual(first=len(fail),
                         second=1,
                         msg='Expected 1 failed snapshot')
        self.assertEqual(first=fail[0],
                         second=vdisk_1.guid,
                         msg='Expected vDisk {0} to have failed'.format(
                             vdisk_1.name))
        self.assertEqual(first=len(success),
                         second=1,
                         msg='Expected 1 successful snapshot')
        self.assertEqual(first=success[0],
                         second=vdisk_2.guid,
                         msg='Expected vDisk {0} to have succeeded'.format(
                             vdisk_2.name))
        self.assertEqual(first=len(vdisk_1.snapshot_ids),
                         second=1,
                         msg='Expected 1 snapshot ID for vDisk {0}'.format(
                             vdisk_1.name))
        self.assertEqual(first=len(vdisk_2.snapshot_ids),
                         second=2,
                         msg='Expected 2 snapshot IDs for vDisk {0}'.format(
                             vdisk_2.name))
        self.assertEqual(first=len(vdisk_1.snapshots),
                         second=1,
                         msg='Expected 1 snapshot for vDisk {0}'.format(
                             vdisk_1.name))
        self.assertEqual(first=len(vdisk_2.snapshots),
                         second=2,
                         msg='Expected 2 snapshots for vDisk {0}'.format(
                             vdisk_2.name))