From 263eb579ac7179a19157004ed2de294085dc4a63 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Wed, 16 Dec 2015 12:36:47 +0100 Subject: [PATCH] tests: ceph-disk workunit increase verbosity So that reading the teuthology log is enough in most cases to figure out the cause of the error. Signed-off-by: Loic Dachary (cherry picked from commit fd7fe8c4977658f66651dad5efb0d816ae71b38b) Conflicts: qa/workunits/ceph-disk/ceph-disk-test.py: trivial, because destroy/deactivate are not implemented in infernalis. The existing destroy_osd function has to be modified so the id returned by sh() does not have a trailing newline. --- qa/workunits/ceph-disk/ceph-disk-test.py | 72 +++++++++++++++--------- qa/workunits/ceph-disk/ceph-disk.sh | 2 +- qa/workunits/ceph-helpers-root.sh | 2 + 3 files changed, 48 insertions(+), 28 deletions(-) diff --git a/qa/workunits/ceph-disk/ceph-disk-test.py b/qa/workunits/ceph-disk/ceph-disk-test.py index a4cb5620a6ce3..522f727610e95 100644 --- a/qa/workunits/ceph-disk/ceph-disk-test.py +++ b/qa/workunits/ceph-disk/ceph-disk-test.py @@ -16,7 +16,7 @@ # When debugging these tests (must be root), here are a few useful commands: # # export PATH=..:$PATH -# ln -sf /home/ubuntu/ceph/src/ceph-disk /usr/sbin/ceph-disk +# ln -sf /home/ubuntu/ceph/src/ceph-disk $(which ceph-disk) # ln -sf /home/ubuntu/ceph/udev/95-ceph-osd.rules /lib/udev/rules.d/95-ceph-osd.rules # ln -sf /home/ubuntu/ceph/systemd/ceph-disk@.service /usr/lib/systemd/system/ceph-disk@.service # ceph-disk.conf will be silently ignored if it is a symbolic link or a hard link /var/log/upstart for logs @@ -59,9 +59,25 @@ class CephDisk: @staticmethod def sh(command): - output = subprocess.check_output(command, shell=True) - LOG.debug("sh: " + command + ": " + output) - return output.strip() + LOG.debug(":sh: " + command) + proc = subprocess.Popen( + args=command, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + shell=True, + bufsize=1) + lines = [] + with proc.stdout: + for line in iter(proc.stdout.readline, b''): + line = line.decode('utf-8') + lines.append(line) + LOG.debug(str(line.strip())) + if proc.wait() != 0: + raise subprocess.CalledProcessError( + returncode=proc.returncode, + cmd=command + ) + return "".join(lines) def unused_disks(self, pattern='[vs]d.'): names = filter(lambda x: re.match(pattern, x), os.listdir("/sys/block")) @@ -111,7 +127,7 @@ class CephDisk: raise Exception("journal for uuid = " + uuid + " not found in " + str(disks)) def destroy_osd(self, uuid): - id = self.sh("ceph osd create " + uuid) + id = self.sh("ceph osd create " + uuid).strip() self.helper("control_osd stop " + id + " || true") self.wait_for_osd_down(uuid) try: @@ -181,7 +197,7 @@ class TestCephDisk(object): def setup_class(self): logging.basicConfig(level=logging.DEBUG) c = CephDisk() - if c.sh("lsb_release -si") == 'CentOS': + if c.sh("lsb_release -si").strip() == 'CentOS': c.helper("install multipath-tools device-mapper-multipath") c.conf['global']['osd journal size'] = 100 c.save_conf() @@ -197,13 +213,13 @@ class TestCephDisk(object): c = CephDisk() disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk prepare --osd-uuid " + osd_uuid + " " + disk) + c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) partition = c.get_osd_partition(osd_uuid) assert partition['type'] == 'data' assert partition['state'] == 'active' c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + disk) + c.sh("ceph-disk --verbose zap " + disk) def test_activate_dmcrypt_plain(self): c = CephDisk() @@ -221,7 +237,7 @@ class TestCephDisk(object): disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) journal_uuid = str(uuid.uuid1()) - c.sh("ceph-disk zap " + disk) + c.sh("ceph-disk --verbose zap " + disk) c.sh("ceph-disk --verbose prepare " + " --osd-uuid " + osd_uuid + " --journal-uuid " + journal_uuid + @@ -234,16 +250,16 @@ class TestCephDisk(object): journal_partition = c.get_journal_partition(osd_uuid) assert journal_partition c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + disk) + c.sh("ceph-disk --verbose zap " + disk) def test_activate_no_journal(self): c = CephDisk() disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk zap " + disk) + c.sh("ceph-disk --verbose zap " + disk) c.conf['global']['osd objectstore'] = 'memstore' c.save_conf() - c.sh("ceph-disk prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + disk))[0] @@ -254,15 +270,15 @@ class TestCephDisk(object): assert 'journal_dev' not in partition c.helper("pool_read_write") c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + disk) + c.sh("ceph-disk --verbose zap " + disk) c.save_conf() def test_activate_with_journal(self): c = CephDisk() disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk zap " + disk) - c.sh("ceph-disk prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose zap " + disk) + c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + disk))[0] @@ -274,7 +290,7 @@ class TestCephDisk(object): assert journal_partition c.helper("pool_read_write") c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + disk) + c.sh("ceph-disk --verbose zap " + disk) def test_activate_separated_journal(self): c = CephDisk() @@ -284,12 +300,12 @@ class TestCephDisk(object): osd_uuid = self.activate_separated_journal(data_disk, journal_disk) c.helper("pool_read_write 1") # 1 == pool size c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + data_disk + " " + journal_disk) + c.sh("ceph-disk --verbose zap " + data_disk + " " + journal_disk) def activate_separated_journal(self, data_disk, journal_disk): c = CephDisk() osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + data_disk + " " + journal_disk) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + data_disk))[0] @@ -323,7 +339,8 @@ class TestCephDisk(object): c.helper("pool_read_write 2") # 2 == pool size c.destroy_osd(osd_uuid) c.destroy_osd(other_osd_uuid) - c.sh("ceph-disk zap " + data_disk + " " + journal_disk + " " + other_data_disk) + c.sh("ceph-disk --verbose zap " + data_disk + " " + + journal_disk + " " + other_data_disk) # # Create an OSD and reuse an existing journal partition @@ -340,12 +357,12 @@ class TestCephDisk(object): journal_partition = c.get_journal_partition(osd_uuid) journal_path = journal_partition['path'] c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + data_disk) + c.sh("ceph-disk --verbose zap " + data_disk) osd_uuid = str(uuid.uuid1()) # # Create another OSD with the journal partition of the previous OSD # - c.sh("ceph-disk prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + data_disk + " " + journal_path) c.helper("pool_read_write 1") # 1 == pool size c.wait_for_osd_up(osd_uuid) @@ -360,12 +377,13 @@ class TestCephDisk(object): # assert journal_partition['path'] == journal_path c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + data_disk + " " + journal_disk) + c.sh("ceph-disk --verbose zap " + data_disk + " " + journal_disk) def test_activate_multipath(self): c = CephDisk() - if c.sh("lsb_release -si") != 'CentOS': - pytest.skip("see issue https://bugs.launchpad.net/ubuntu/+source/multipath-tools/+bug/1488688") + if c.sh("lsb_release -si").strip() != 'CentOS': + pytest.skip( + "see issue https://bugs.launchpad.net/ubuntu/+source/multipath-tools/+bug/1488688") c.ensure_sd() # # Figure out the name of the multipath device @@ -381,8 +399,8 @@ class TestCephDisk(object): # Prepare the multipath device # osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk zap " + multipath) - c.sh("ceph-disk prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose zap " + multipath) + c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + multipath) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + multipath))[0] @@ -394,7 +412,7 @@ class TestCephDisk(object): assert journal_partition c.helper("pool_read_write") c.destroy_osd(osd_uuid) - c.sh("ceph-disk zap " + multipath) + c.sh("ceph-disk --verbose zap " + multipath) c.sh("udevadm settle") c.sh("multipath -F") c.unload_scsi_debug() diff --git a/qa/workunits/ceph-disk/ceph-disk.sh b/qa/workunits/ceph-disk/ceph-disk.sh index 044517db8615d..1406c9ee74752 100755 --- a/qa/workunits/ceph-disk/ceph-disk.sh +++ b/qa/workunits/ceph-disk/ceph-disk.sh @@ -27,7 +27,7 @@ if ! which py.test > /dev/null; then exit 1 fi -sudo env PATH=$(dirname $0)/..:$PATH py.test -v $(dirname $0)/ceph-disk-test.py +sudo env PATH=$(dirname $0)/..:$PATH py.test -s -v $(dirname $0)/ceph-disk-test.py result=$? # own whatever was created as a side effect of the py.test run diff --git a/qa/workunits/ceph-helpers-root.sh b/qa/workunits/ceph-helpers-root.sh index 200452d9fe36b..a622bd5ab96e2 100755 --- a/qa/workunits/ceph-helpers-root.sh +++ b/qa/workunits/ceph-helpers-root.sh @@ -86,4 +86,6 @@ function pool_read_write() { ####################################################################### +set -x + "$@" -- 2.39.5