示例#1
0
    def test_induce_holes_thenfixlayout(self):

        # pylint: disable=too-many-statements
        m_point = self.mounts[0].mountpoint
        command = 'mkdir -p ' + m_point + '/testdir'
        ret, _, _ = g.run(self.clients[0], command)
        self.assertEqual(ret, 0, "mkdir failed")
        g.log.info("mkdir is successful")

        # DHT Layout validation
        g.log.debug("Verifying hash layout values %s:%s", self.clients[0],
                    self.mounts[0].mountpoint)
        ret = validate_files_in_dir(self.clients[0],
                                    self.mounts[0].mountpoint,
                                    test_type=LAYOUT_IS_COMPLETE,
                                    file_type=FILETYPE_DIRS)
        self.assertTrue(ret, "LAYOUT_IS_COMPLETE: FAILED")
        g.log.info("LAYOUT_IS_COMPLETE: PASS")

        # Log Volume Info and Status before shrinking the volume.
        g.log.info("Logging volume info and Status before shrinking volume")
        log_volume_info_and_status(self.mnode, self.volname)

        # Shrinking volume by removing bricks
        g.log.info("Start removing bricks from volume")
        ret, _, _ = remove_brick(self.mnode, self.volname,
                                 self.remove_brick_list, "force")
        self.assertFalse(ret, "Remove-brick with force: FAIL")
        g.log.info("Remove-brick with force: PASS")

        # Check the layout
        ret = is_layout_complete(self.mnode, self.volname, dirpath='/testdir')
        self.assertFalse(ret, "Volume %s: Layout is complete")
        g.log.info("Volume %s: Layout has some holes")

        # Start Rebalance fix-layout
        g.log.info("Volume %s: Start fix-layout", self.volname)
        ret, _, _ = rebalance_start(self.mnode, self.volname, fix_layout=True)
        self.assertEqual(ret, 0, ("Volume %s: fix-layout start failed"
                                  "%s", self.volname))
        g.log.info("Volume %s: fix-layout start success", self.volname)

        # Wait for fix-layout to complete
        g.log.info("Waiting for fix-layout to complete")
        ret = wait_for_fix_layout_to_complete(self.mnode, self.volname)
        self.assertTrue(ret, ("Volume %s: Fix-layout is either failed or "
                              "in-progress", self.volname))
        g.log.info("Volume %s: Fix-layout completed successfully",
                   self.volname)

        # DHT Layout validation
        g.log.debug("Verifying hash layout values %s:%s", self.clients[0],
                    self.mounts[0].mountpoint)
        ret = validate_files_in_dir(self.clients[0],
                                    self.mounts[0].mountpoint,
                                    test_type=LAYOUT_IS_COMPLETE,
                                    file_type=FILETYPE_DIRS)
        self.assertTrue(ret, "LAYOUT_IS_COMPLETE: FAILED")
        g.log.info("LAYOUT_IS_COMPLETE: PASS")
 def _check_layout_of_bricks(self):
     """Check the layout of bricks"""
     ret = is_layout_complete(self.mnode, self.volname, "/")
     self.assertTrue(ret,
                     ("Volume %s: Layout is not complete", self.volname))
     g.log.info("Volume %s: Layout is complete", self.volname)
    def test_induce_holes_then_lookup(self):

        # pylint: disable=too-many-statements
        m_point = self.mounts[0].mountpoint
        command = 'mkdir -p ' + m_point + '/testdir'
        ret, _, _ = g.run(self.clients[0], command)
        self.assertEqual(ret, 0, "mkdir failed")
        g.log.info("mkdir is successful")

        # DHT Layout validation
        g.log.debug("Verifying hash layout values %s:%s", self.clients[0],
                    self.mounts[0].mountpoint)
        ret = validate_files_in_dir(self.clients[0],
                                    self.mounts[0].mountpoint,
                                    test_type=LAYOUT_IS_COMPLETE,
                                    file_type=FILETYPE_DIRS)
        self.assertTrue(ret, "LAYOUT_IS_COMPLETE: FAILED")
        g.log.info("LAYOUT_IS_COMPLETE: PASS")

        # Log Volume Info and Status before shrinking the volume.
        g.log.info("Logging volume info and Status before shrinking volume")
        log_volume_info_and_status(self.mnode, self.volname)

        # Shrinking volume by removing bricks
        g.log.info("Start removing bricks from volume")
        ret, _, _ = remove_brick(self.mnode, self.volname,
                                 self.remove_brick_list, "force")
        self.assertFalse(ret, "Remove-brick with force: FAIL")
        g.log.info("Remove-brick with force: PASS")

        # Check the layout
        dirpath = '/testdir'
        ret = is_layout_complete(self.mnode, self.volname, dirpath)
        self.assertFalse(ret, "Volume %s: Layout is complete")
        g.log.info("Volume %s: Layout has some holes")

        # Mount the volume on a new mount point
        mount_point = tempfile.mkdtemp()
        ret, _, _ = mount_volume(self.volname,
                                 mtype='glusterfs',
                                 mpoint=mount_point,
                                 mserver=self.mnode,
                                 mclient=self.mnode)
        self.assertEqual(
            ret, 0, ("Failed to do gluster mount on volume %s", self.volname))
        g.log.info("Volume %s: mount success", self.mnode)

        # Send a look up on the directory
        cmd = 'ls %s%s' % (mount_point, dirpath)
        ret, _, err = g.run(self.mnode, cmd)
        self.assertEqual(ret, 0,
                         ("Lookup failed on %s with error %s", (dirpath, err)))
        g.log.info("Lookup sent successfully on %s", dirpath)

        # DHT Layout validation
        g.log.debug("Verifying hash layout values %s:%s", self.clients[0],
                    self.mounts[0].mountpoint)
        ret = validate_files_in_dir(self.clients[0],
                                    self.mounts[0].mountpoint,
                                    test_type=LAYOUT_IS_COMPLETE,
                                    file_type=FILETYPE_DIRS)
        self.assertTrue(ret, "LAYOUT_IS_COMPLETE: FAILED")
        g.log.info("LAYOUT_IS_COMPLETE: PASS")
示例#4
0
    def test_induce_holes_then_lookup(self):
        """
        Test Script to induce holes in layout by using remove-brick force
        and then performing lookup in order to fix the layout.

        Steps :
        1) Create a volume and mount it using FUSE.
        2) Create a directory "testdir" on mount point.
        3) Check if the layout is complete.
        4) Log volume info and status before remove-brick operation.
        5) Form a list of bricks to be removed.
        6) Start remove-brick operation using 'force'.
        7) Let remove-brick complete and check layout.
        8) Mount the volume on a new mount.
        9) Send a lookup on mount point.
        10) Check if the layout is complete.

        """
        # pylint: disable=too-many-statements
        # Create a directory on mount point
        m_point = self.mounts[0].mountpoint
        dirpath = '/testdir'
        command = 'mkdir -p ' + m_point + dirpath
        ret, _, _ = g.run(self.clients[0], command)
        self.assertEqual(ret, 0, "mkdir failed")
        g.log.info("mkdir is successful")

        # DHT Layout validation
        g.log.debug("Verifying hash layout values %s:%s", self.clients[0],
                    m_point)
        ret = validate_files_in_dir(self.clients[0],
                                    m_point,
                                    test_type=LAYOUT_IS_COMPLETE,
                                    file_type=FILETYPE_DIRS)
        self.assertTrue(ret, "LAYOUT_IS_COMPLETE: FAILED")
        g.log.info("LAYOUT_IS_COMPLETE: PASS")

        # Log Volume Info and Status before shrinking the volume.
        g.log.info("Logging volume info and Status before shrinking volume")
        log_volume_info_and_status(self.mnode, self.volname)

        # Form bricks list for Shrinking volume
        self.remove_brick_list = form_bricks_list_to_remove_brick(self.mnode,
                                                                  self.volname,
                                                                  subvol_num=1)
        self.assertNotEqual(self.remove_brick_list, None,
                            ("Volume %s: Failed to form bricks list for volume"
                             " shrink", self.volname))
        g.log.info("Volume %s: Formed bricks list for volume shrink",
                   self.volname)

        # Shrinking volume by removing bricks
        g.log.info("Start removing bricks from volume")
        ret, _, _ = remove_brick(self.mnode, self.volname,
                                 self.remove_brick_list, "force")
        self.assertFalse(ret, "Remove-brick with force: FAIL")
        g.log.info("Remove-brick with force: PASS")

        # Check the layout
        ret = is_layout_complete(self.mnode, self.volname, dirpath)
        self.assertFalse(ret, ("Volume %s: Layout is complete", self.volname))
        g.log.info("Volume %s: Layout has some holes", self.volname)

        # Mount the volume on a new mount point
        ret, _, _ = mount_volume(self.volname,
                                 mtype='glusterfs',
                                 mpoint=m_point,
                                 mserver=self.mnode,
                                 mclient=self.clients[1])
        self.assertEqual(ret, 0,
                         ("Failed to do gluster mount of volume %s"
                          " on client node %s", self.volname, self.clients[1]))
        g.log.info("Volume %s mounted successfullly on %s", self.volname,
                   self.clients[1])

        # Send a look up on the directory
        cmd = 'ls %s%s' % (m_point, dirpath)
        ret, _, err = g.run(self.clients[1], cmd)
        self.assertEqual(ret, 0,
                         ("Lookup failed on %s with error %s", (dirpath, err)))
        g.log.info("Lookup sent successfully on %s", m_point + dirpath)

        # DHT Layout validation
        g.log.info("Checking layout after new mount")
        g.log.debug("Verifying hash layout values %s:%s", self.clients[1],
                    m_point + dirpath)
        ret = validate_files_in_dir(self.clients[1],
                                    m_point + dirpath,
                                    test_type=LAYOUT_IS_COMPLETE,
                                    file_type=FILETYPE_DIRS)
        self.assertTrue(ret, "LAYOUT_IS_COMPLETE: FAILED")
        g.log.info("LAYOUT_IS_COMPLETE: PASS")