Hello community, here is the log from the commit of package libstorage-ng for openSUSE:Factory checked in at 2020-07-09 13:16:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libstorage-ng (Old) and /work/SRC/openSUSE:Factory/.libstorage-ng.new.3060 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libstorage-ng" Thu Jul 9 13:16:18 2020 rev:88 rq:819128 version:4.3.34 Changes: -------- --- /work/SRC/openSUSE:Factory/libstorage-ng/libstorage-ng.changes 2020-07-01 14:26:08.342664124 +0200 +++ /work/SRC/openSUSE:Factory/.libstorage-ng.new.3060/libstorage-ng.changes 2020-07-09 13:16:20.520695864 +0200 @@ -1,0 +2,18 @@ +Tue Jul 7 07:02:14 UTC 2020 - [email protected] + +- merge gh#openSUSE/libstorage-ng#760 +- minor code improvements +- 4.3.34 + +-------------------------------------------------------------------- +Mon Jul 6 11:12:00 UTC 2020 - [email protected] + +- merge gh#openSUSE/libstorage-ng#759 +- experimental support for RAID journal device +- extended documentation +- added unit test +- extended integration tests +- coding style +- 4.3.33 + +-------------------------------------------------------------------- Old: ---- libstorage-ng-4.3.32.tar.xz New: ---- libstorage-ng-4.3.34.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libstorage-ng.spec ++++++ --- /var/tmp/diff_new_pack.uezmRv/_old 2020-07-09 13:16:21.076697621 +0200 +++ /var/tmp/diff_new_pack.uezmRv/_new 2020-07-09 13:16:21.080697633 +0200 @@ -18,7 +18,7 @@ %define libname %{name}1 Name: libstorage-ng -Version: 4.3.32 +Version: 4.3.34 Release: 0 Summary: Library for storage management License: GPL-2.0-only ++++++ libstorage-ng-4.3.32.tar.xz -> libstorage-ng-4.3.34.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/LIBVERSION new/libstorage-ng-4.3.34/LIBVERSION --- old/libstorage-ng-4.3.32/LIBVERSION 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/LIBVERSION 2020-07-07 09:02:14.000000000 +0200 @@ -1 +1 @@ -1.41.0 +1.42.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/VERSION new/libstorage-ng-4.3.34/VERSION --- old/libstorage-ng-4.3.32/VERSION 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/VERSION 2020-07-07 09:02:14.000000000 +0200 @@ -1 +1 @@ -4.3.32 +4.3.34 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/bindings/storage-catches.i new/libstorage-ng-4.3.34/bindings/storage-catches.i --- old/libstorage-ng-4.3.32/bindings/storage-catches.i 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/bindings/storage-catches.i 2020-07-07 09:02:14.000000000 +0200 @@ -298,6 +298,9 @@ %catches(storage::Exception) storage::MdMember::get_md_container() const; %catches(storage::HolderAlreadyExists) storage::MdSubdevice::create(Devicegraph *devicegraph, const Device *source, const Device *target); %catches(storage::HolderAlreadyExists) storage::MdUser::create(Devicegraph *devicegraph, const Device *source, const Device *target); +%catches(storage::Exception) storage::MdUser::set_faulty(bool faulty); +%catches(storage::Exception) storage::MdUser::set_journal(bool journal); +%catches(storage::Exception) storage::MdUser::set_spare(bool spare); %catches(storage::InvalidMountPointPath) storage::MountPoint::create(Devicegraph *devicegraph, const std::string &path); %catches(storage::Exception) storage::MountPoint::get_filesystem(); %catches(storage::Exception) storage::MountPoint::get_filesystem() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/doc/status.md new/libstorage-ng-4.3.34/doc/status.md --- old/libstorage-ng-4.3.32/doc/status.md 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/doc/status.md 2020-07-07 09:02:14.000000000 +0200 @@ -89,7 +89,6 @@ * LUKS2 integrity (experimental in cryptsetup). - MD RAID ------- @@ -101,6 +100,10 @@ * Handling of /etc/mdadm.conf. * IMSM and DDF. +Missing: + +* Journal device (untested). + DM RAID ------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/integration-tests/pools/create-raid5.py new/libstorage-ng-4.3.34/integration-tests/pools/create-raid5.py --- old/libstorage-ng-4.3.32/integration-tests/pools/create-raid5.py 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/integration-tests/pools/create-raid5.py 2020-07-07 09:02:14.000000000 +0200 @@ -1,6 +1,6 @@ #!/usr/bin/python3 -# requirements: at least three HDDs with free space +# requirements: at least three HDDs and one SSD with free space from storage import * @@ -16,23 +16,29 @@ storage.generate_pools(storage.get_probed()) -pool = storage.get_pool("HDDs (512 B)") +hdds_pool = storage.get_pool("HDDs (512 B)") +ssds_pool = storage.get_pool("SSDs (512 B)") staging = storage.get_staging() try: - devices = pool.create_partitions(staging, 3, 2 * GiB) + devices = hdds_pool.create_partitions(staging, 3, 2 * GiB) + journal = ssds_pool.create_partitions(staging, 1, 128 * MiB)[0] except PoolOutOfSpace as exception: print(exception.what()) exit(1) md = Md.create(staging, Md.find_free_numeric_name(staging)) md.set_md_level(MdLevel_RAID5) +md.set_metadata("1.2") for device in devices: md.add_device(device) device.set_id(ID_RAID) +md.add_device(journal).set_journal(True) +journal.set_id(ID_RAID) + print(staging) commit(storage) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/integration-tests/pools/list.py new/libstorage-ng-4.3.34/integration-tests/pools/list.py --- old/libstorage-ng-4.3.32/integration-tests/pools/list.py 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/integration-tests/pools/list.py 2020-07-07 09:02:14.000000000 +0200 @@ -11,11 +11,13 @@ storage = Storage(environment) storage.probe() -storage.generate_pools(storage.get_probed()) +probed = storage.get_probed() + +storage.generate_pools(probed) for name in storage.get_pool_names(): print(name) pool = storage.get_pool(name) - for device in pool.get_devices(storage.get_probed()): + for device in pool.get_devices(probed): print(" " + device.get_displayname()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/integration-tests/pools/max-size.py new/libstorage-ng-4.3.34/integration-tests/pools/max-size.py --- old/libstorage-ng-4.3.32/integration-tests/pools/max-size.py 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/integration-tests/pools/max-size.py 2020-07-07 09:02:14.000000000 +0200 @@ -11,15 +11,18 @@ storage = Storage(environment) storage.probe() -storage.generate_pools(storage.get_probed()) +probed = storage.get_probed() + +storage.generate_pools(probed) pool = storage.get_pool("HDDs (512 B)") -try: - max_size = pool.max_partition_size(storage.get_probed(), 2) -except PoolOutOfSpace as exception: - print(exception.what()) - exit(1) +for n in range(1, len(pool.get_devices(probed)) + 1): + + try: + max_size = pool.max_partition_size(probed, n) + except PoolOutOfSpace as exception: + print(exception.what()) + exit(1) -print(max_size) -print(byte_to_humanstring(max_size, False, 2, True)) + print(n, max_size, byte_to_humanstring(max_size, False, 2, True)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/ActiongraphImpl.cc new/libstorage-ng-4.3.34/storage/ActiongraphImpl.cc --- old/libstorage-ng-4.3.32/storage/ActiongraphImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/ActiongraphImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -482,7 +482,7 @@ if (mounts.size() > 1) { // TODO correct sort - sort(mounts.begin(), mounts.end(), [this, &mounts](vertex_descriptor l, vertex_descriptor r) { + sort(mounts.begin(), mounts.end(), [this](vertex_descriptor l, vertex_descriptor r) { const Action::Mount* ml = dynamic_cast<const Action::Mount*>(graph[l].get()); const Action::Mount* mr = dynamic_cast<const Action::Mount*>(graph[r].get()); return ml->get_path(*this) <= mr->get_path(*this); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/CompoundAction/Formatter.cc new/libstorage-ng-4.3.34/storage/CompoundAction/Formatter.cc --- old/libstorage-ng-4.3.32/storage/CompoundAction/Formatter.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/CompoundAction/Formatter.cc 2020-07-07 09:02:14.000000000 +0200 @@ -44,9 +44,6 @@ } - CompoundAction::Formatter::~Formatter() {} - - string CompoundAction::Formatter::string_representation() const { @@ -66,9 +63,9 @@ if (create_action) { - const Device * device = create_action->get_device(_compound_action->get_actiongraph()->get_impl()); + const Device* device = create_action->get_device(_compound_action->get_actiongraph()->get_impl()); - if (device && device->get_impl().get_classname() == device_classname) + if (device && device->get_impl().get_classname() == device_classname) return true; } } @@ -89,9 +86,9 @@ if (delete_action) { - Device * device = delete_action->get_device(_compound_action->get_actiongraph()->get_impl()); + const Device* device = delete_action->get_device(_compound_action->get_actiongraph()->get_impl()); - if (device && device->get_impl().get_classname() == device_classname) + if (device && device->get_impl().get_classname() == device_classname) return true; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/CompoundAction/Formatter.h new/libstorage-ng-4.3.34/storage/CompoundAction/Formatter.h --- old/libstorage-ng-4.3.32/storage/CompoundAction/Formatter.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/CompoundAction/Formatter.h 2020-07-07 09:02:14.000000000 +0200 @@ -55,7 +55,8 @@ Formatter(const CompoundAction::Impl* compound_action, const string & device_classname = string() ); - virtual ~Formatter(); + + virtual ~Formatter() {} string string_representation() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/CompoundActionImpl.cc new/libstorage-ng-4.3.34/storage/CompoundActionImpl.cc --- old/libstorage-ng-4.3.32/storage/CompoundActionImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/CompoundActionImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -49,44 +49,13 @@ { CompoundAction::Impl::Impl(const Actiongraph* actiongraph) - : actiongraph(actiongraph), target_device(nullptr), commit_actions(0) - {} - - - CompoundAction::Impl::~Impl() {} - - - const Actiongraph* - CompoundAction::Impl::get_actiongraph() const + : actiongraph(actiongraph), target_device(nullptr), commit_actions() { - return actiongraph; } - void CompoundAction::Impl::set_target_device(const Device* device) - { - this->target_device = device; - } - - - const Device* CompoundAction::Impl::get_target_device() const - { - return target_device; - } - - void CompoundAction::Impl::set_commit_actions(vector<const Action::Base*> actions) - { - this->commit_actions = actions; - } - - - vector<const Action::Base*> CompoundAction::Impl::get_commit_actions() const - { - return commit_actions; - } - - - void CompoundAction::Impl::add_commit_action(const Action::Base* action) + void + CompoundAction::Impl::add_commit_action(const Action::Base* action) { commit_actions.push_back(action); } @@ -256,7 +225,6 @@ try { return action->get_device(actiongraph->get_impl(), RHS); - } catch(const DeviceNotFound& exception) { @@ -294,4 +262,3 @@ } } - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/CompoundActionImpl.h new/libstorage-ng-4.3.34/storage/CompoundActionImpl.h --- old/libstorage-ng-4.3.32/storage/CompoundActionImpl.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/CompoundActionImpl.h 2020-07-07 09:02:14.000000000 +0200 @@ -33,7 +33,7 @@ namespace storage { - + using std::vector; using std::string; @@ -48,18 +48,17 @@ public: Impl(const Actiongraph* actiongraph); - ~Impl(); - const Actiongraph* get_actiongraph() const; + const Actiongraph* get_actiongraph() const { return actiongraph; } - void set_target_device(const Device* device); - const Device* get_target_device() const; + const Device* get_target_device() const { return target_device; } + void set_target_device(const Device* target_device) { Impl::target_device = target_device; } - void set_commit_actions(vector<const Action::Base*> actions); - vector<const Action::Base*> get_commit_actions() const; + vector<const Action::Base*> get_commit_actions() const { return commit_actions; } + void set_commit_actions(vector<const Action::Base*> commit_actions) { Impl::commit_actions = commit_actions; } void add_commit_action(const Action::Base* action); - + vector<string> get_commit_actions_as_strings() const; string sentence() const; @@ -83,16 +82,15 @@ static const CompoundAction* find_by_target_device(const Actiongraph* actiongraph, const Device* device); private: - + const Actiongraph* actiongraph; const Device* target_device; vector<const Action::Base*> commit_actions; - + }; } #endif - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Devices/DiskImpl.cc new/libstorage-ng-4.3.34/storage/Devices/DiskImpl.cc --- old/libstorage-ng-4.3.32/storage/Devices/DiskImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Devices/DiskImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -24,8 +24,6 @@ #include <ctype.h> #include "storage/Devices/DiskImpl.h" -#include "storage/Devices/MdImpl.h" -#include "storage/Devices/BcacheImpl.h" #include "storage/Devicegraph.h" #include "storage/Action.h" #include "storage/Storage.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Devices/Md.h new/libstorage-ng-4.3.34/storage/Devices/Md.h --- old/libstorage-ng-4.3.32/storage/Devices/Md.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Devices/Md.h 2020-07-07 09:02:14.000000000 +0200 @@ -184,13 +184,13 @@ void set_uuid(const std::string& uuid); /** - * A string like "1.0" for Linux RAID, "imsm" or "ddf" for BIOS RAID + * A string like "1.0" or "1.2" for Linux RAID, "imsm" or "ddf" for BIOS RAID * containers and empty for BIOS RAID members. */ const std::string& get_metadata() const; /** - * Currently create always uses metadata 1.0. + * Currently only creating metadata 1.0 is supported. Although others might work. */ void set_metadata(const std::string& metadata); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Devices/MdImpl.cc new/libstorage-ng-4.3.34/storage/Devices/MdImpl.cc --- old/libstorage-ng-4.3.32/storage/Devices/MdImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Devices/MdImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -458,6 +458,7 @@ MdUser* md_user = MdUser::create(system, a, b); md_user->set_spare(device.spare); md_user->set_faulty(device.faulty); + md_user->set_journal(device.journal); }); } } @@ -793,7 +794,7 @@ return std::count_if(devices.begin(), devices.end(), [](const BlkDevice* blk_device) { const MdUser* md_user = blk_device->get_impl().get_single_out_holder_of_type<const MdUser>(); - return !md_user->is_spare(); + return !md_user->is_spare() && !md_user->is_journal(); }); } @@ -842,6 +843,7 @@ const MdUser* md_user = blk_device->get_impl().get_single_out_holder_of_type<const MdUser>(); bool spare = md_user->is_spare(); + bool journal = md_user->is_journal(); // metadata for version 1.0 is 4 KiB block at end aligned to 4 KiB, // https://raid.wiki.kernel.org/index.php/RAID_superblock_formats @@ -859,13 +861,16 @@ if (rest > 0) size -= rest; - if (!spare) + if (!spare && !journal) { number++; sum += size; } - smallest = min(smallest, size); + if (!journal) + { + smallest = min(smallest, size); + } } unsigned long long size = 0; @@ -959,47 +964,59 @@ // Note: Changing any parameter to "mdadm --create' requires the // function calculate_region_and_topology() to be checked! - string cmd_line = MDADM_BIN " --create " + quote(get_name()) + " --run --level=" + - boost::to_lower_copy(toString(md_level), locale::classic()) + " --metadata=1.0" - " --homehost=any"; - - if (md_level == MdLevel::RAID1 || md_level == MdLevel::RAID4 || - md_level == MdLevel::RAID5 || md_level == MdLevel::RAID6 || - md_level == MdLevel::RAID10) - cmd_line += " --bitmap=internal"; - - if (chunk_size > 0) - cmd_line += " --chunk=" + to_string(chunk_size / KiB); - - if (md_parity != MdParity::DEFAULT) - cmd_line += " --parity=" + toString(md_parity); - // place devices in multimaps to sort them according to the sort-key multimap<unsigned int, string> devices; multimap<unsigned int, string> spares; + vector<string> journals; for (const BlkDevice* blk_device : get_devices()) { const MdUser* md_user = blk_device->get_impl().get_single_out_holder_of_type<const MdUser>(); - if (!md_user->is_spare()) - devices.insert(make_pair(md_user->get_sort_key(), blk_device->get_name())); - else + if (md_user->is_spare()) spares.insert(make_pair(md_user->get_sort_key(), blk_device->get_name())); + else if (md_user->is_journal()) + journals.push_back(blk_device->get_name()); + else + devices.insert(make_pair(md_user->get_sort_key(), blk_device->get_name())); } + if (devices.empty()) + ST_THROW(Exception("no devices")); + + if (journals.size() > 1) + ST_THROW(Exception("only one journal device allowed")); + + string cmd_line = MDADM_BIN " --create " + quote(get_name()) + " --run --level=" + + boost::to_lower_copy(toString(md_level), locale::classic()) + " --metadata=" + + (metadata.empty() ? "1.0" : metadata) + " --homehost=any"; + + if ((md_level == MdLevel::RAID1 || md_level == MdLevel::RAID4 || + md_level == MdLevel::RAID5 || md_level == MdLevel::RAID6 || + md_level == MdLevel::RAID10) && journals.empty()) + cmd_line += " --bitmap=internal"; + + if (chunk_size > 0) + cmd_line += " --chunk=" + to_string(chunk_size / KiB); + + if (md_parity != MdParity::DEFAULT) + cmd_line += " --parity=" + toString(md_parity); + cmd_line += " --raid-devices=" + to_string(devices.size()); if (!spares.empty()) cmd_line += " --spare-devices=" + to_string(spares.size()); - for (const pair<unsigned int, string>& value : devices) + for (const pair<const unsigned int, string>& value : devices) cmd_line += " " + quote(value.second); - for (const pair<unsigned int, string>& value : spares) + for (const pair<const unsigned int, string>& value : spares) cmd_line += " " + quote(value.second); + if (!journals.empty()) + cmd_line += " --write-journal=" + quote(journals.front()); + wait_for_devices(std::add_const<const Md::Impl&>::type(*this).get_devices()); // wait_for_devices(std::as_const(*this).get_devices()); // C++17 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Devices/PlainEncryptionImpl.cc new/libstorage-ng-4.3.34/storage/Devices/PlainEncryptionImpl.cc --- old/libstorage-ng-4.3.32/storage/Devices/PlainEncryptionImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Devices/PlainEncryptionImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -25,7 +25,6 @@ #include "storage/Devices/PlainEncryptionImpl.h" #include "storage/Holders/User.h" #include "storage/Devicegraph.h" -#include "storage/StorageImpl.h" #include "storage/SystemInfo/SystemInfo.h" #include "storage/UsedFeatures.h" #include "storage/EtcCrypttab.h" @@ -98,7 +97,7 @@ CmdDmsetupTable::const_iterator it2 = cmd_dmsetup_table.find_using(majorminor); if (it2 != cmd_dmsetup_table.end() && it2->second[0].target != "crypt") - it2 == cmd_dmsetup_table.end(); + it2 = cmd_dmsetup_table.end(); const CrypttabEntry* crypttab_entry = etc_crypttab.find_by_any_block_device(system_info, "", "", majorminor); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Filesystems/MountPointImpl.h new/libstorage-ng-4.3.34/storage/Filesystems/MountPointImpl.h --- old/libstorage-ng-4.3.32/storage/Filesystems/MountPointImpl.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Filesystems/MountPointImpl.h 2020-07-07 09:02:14.000000000 +0200 @@ -48,8 +48,10 @@ * Class to identify an entry in /etc/fstab including the corresponding * blk device (via the id of FilesystemUser). */ - struct FstabAnchor + class FstabAnchor { + public: + FstabAnchor() : name(), id(0) {} FstabAnchor(const string& name, unsigned int id) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/GraphvizImpl.cc new/libstorage-ng-4.3.34/storage/GraphvizImpl.cc --- old/libstorage-ng-4.3.32/storage/GraphvizImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/GraphvizImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -46,7 +46,6 @@ #include "storage/Filesystems/MountPoint.h" #include "storage/Utils/StorageDefines.h" #include "storage/Utils/HumanString.h" -#include "storage/ActiongraphImpl.h" #include "storage/EnvironmentImpl.h" @@ -166,7 +165,7 @@ else if (is_md_user(holder)) { const MdUser* md_user = to_md_user(holder); - if (md_user->is_spare() || md_user->is_faulty()) + if (md_user->is_spare() || md_user->is_faulty() || md_user->is_journal()) ret["style"] = "dotted"; else ret["style"] = "dashed"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/GraphvizImpl.h new/libstorage-ng-4.3.34/storage/GraphvizImpl.h --- old/libstorage-ng-4.3.32/storage/GraphvizImpl.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/GraphvizImpl.h 2020-07-07 09:02:14.000000000 +0200 @@ -25,8 +25,8 @@ #include "storage/Graphviz.h" -#include "storage/DevicegraphImpl.h" -#include "storage/ActiongraphImpl.h" +#include "storage/Devicegraph.h" +#include "storage/Actiongraph.h" namespace storage diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Holders/MdUser.cc new/libstorage-ng-4.3.34/storage/Holders/MdUser.cc --- old/libstorage-ng-4.3.32/storage/Holders/MdUser.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Holders/MdUser.cc 2020-07-07 09:02:14.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2016-2017] SUSE LLC + * Copyright (c) [2016-2020] SUSE LLC * * All Rights Reserved. * @@ -100,6 +100,20 @@ } + bool + MdUser::is_journal() const + { + return get_impl().is_journal(); + } + + + void + MdUser::set_journal(bool journal) + { + get_impl().set_journal(journal); + } + + unsigned int MdUser::get_sort_key() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Holders/MdUser.h new/libstorage-ng-4.3.34/storage/Holders/MdUser.h --- old/libstorage-ng-4.3.32/storage/Holders/MdUser.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Holders/MdUser.h 2020-07-07 09:02:14.000000000 +0200 @@ -53,23 +53,63 @@ virtual MdUser* clone() const override; + /** + * Return whether the target device is a spare device. + */ bool is_spare() const; + + /** + * Set the target device to be a spare device. + * + * @see is_spare() + * + * @throw Exception + */ void set_spare(bool spare); + /** + * Return whether the target device is a faulty device. + */ bool is_faulty() const; + + /** + * Set the target device to be a faulty device. + * + * @see is_faulty() + * + * @throw Exception + */ void set_faulty(bool faulty); /** + * Return whether the target device is a journal device. Only one device of an MD + * RAID can be a journal device. Only for RAID levels 4, 5 and 6. + */ + bool is_journal() const; + + /** + * Set the target device to be a journal device. + * + * Changing the value is not supported for RAIDs already created on-disk. Does + * not work with metadata version 1.0. + * + * @see is_journal() + * + * @throw Exception + */ + void set_journal(bool journal); + + /** * Return the sort key. * - * When creating a MD RAID the device list passed to the mdadm - * command is sorted according to the sort-key. For use-cases - * see https://fate.suse.com/313521/. - * - * The RAID devices and spare devices are sorted - * independently. Sorting of devices with the same sort-key is - * undefined. Any value is allowed but 0 should mean - * unknown/unspecified. + * When creating a MD RAID the device list passed to the mdadm command is sorted + * according to the sort-key. For use-cases see https://fate.suse.com/313521/. + * + * The RAID devices, spare and journal devices are sorted independently. Sorting + * of devices with the same sort-key is undefined. Any value is allowed but 0 + * should mean unknown/unspecified. + * + * @see set_sort_key() */ unsigned int get_sort_key() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Holders/MdUserImpl.cc new/libstorage-ng-4.3.34/storage/Holders/MdUserImpl.cc --- old/libstorage-ng-4.3.32/storage/Holders/MdUserImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Holders/MdUserImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2016-2017] SUSE LLC + * Copyright (c) [2016-2020] SUSE LLC * * All Rights Reserved. * @@ -33,10 +33,11 @@ MdUser::Impl::Impl(const xmlNode* node) - : User::Impl(node), spare(false), faulty(false), sort_key(0) + : User::Impl(node), spare(false), faulty(false), journal(false), sort_key(0) { getChildValue(node, "spare", spare); getChildValue(node, "faulty", faulty); + getChildValue(node, "journal", journal); getChildValue(node, "sort-key", sort_key); } @@ -49,6 +50,7 @@ setChildValueIf(node, "spare", spare, spare); setChildValueIf(node, "faulty", faulty, faulty); + setChildValueIf(node, "journal", journal, journal); setChildValueIf(node, "sort-key", sort_key, sort_key != 0); } @@ -62,7 +64,7 @@ if (!User::Impl::equal(rhs)) return false; - return spare == rhs.spare && faulty == rhs.faulty && sort_key == rhs.sort_key; + return spare == rhs.spare && faulty == rhs.faulty && journal == rhs.journal && sort_key == rhs.sort_key; } @@ -75,6 +77,7 @@ storage::log_diff(log, "spare", spare, rhs.spare); storage::log_diff(log, "faulty", faulty, rhs.faulty); + storage::log_diff(log, "journal", journal, rhs.journal); storage::log_diff(log, "sort-key", sort_key, rhs.sort_key); } @@ -91,6 +94,9 @@ if (faulty) out << " faulty"; + if (journal) + out << " journal"; + if (sort_key != 0) out << " sort-key:" << sort_key; } @@ -104,8 +110,7 @@ Impl::spare = spare; - Md* md = to_md(get_target()); - md->get_impl().calculate_region_and_topology(); + recalculate(); } @@ -117,6 +122,25 @@ Impl::faulty = faulty; + recalculate(); + } + + + void + MdUser::Impl::set_journal(bool journal) + { + if (Impl::journal == journal) + return; + + Impl::journal = journal; + + recalculate(); + } + + + void + MdUser::Impl::recalculate() + { Md* md = to_md(get_target()); md->get_impl().calculate_region_and_topology(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/Holders/MdUserImpl.h new/libstorage-ng-4.3.34/storage/Holders/MdUserImpl.h --- old/libstorage-ng-4.3.32/storage/Holders/MdUserImpl.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/Holders/MdUserImpl.h 2020-07-07 09:02:14.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) [2016-2017] SUSE LLC + * Copyright (c) [2016-2020] SUSE LLC * * All Rights Reserved. * @@ -39,7 +39,7 @@ public: Impl() - : User::Impl(), spare(false), faulty(false), sort_key(0) {} + : User::Impl(), spare(false), faulty(false), journal(false), sort_key(0) {} Impl(const xmlNode* node); @@ -60,18 +60,29 @@ bool is_faulty() const { return faulty; } void set_faulty(bool faulty); + bool is_journal() const { return journal; } + void set_journal(bool journal); + unsigned int get_sort_key() const { return sort_key; } void set_sort_key(unsigned int sort_key) { Impl::sort_key = sort_key; } private: + // TODO is an enum instead of three booleans more appropriate? bool spare; bool faulty; + bool journal; unsigned int sort_key; + void recalculate(); + }; + + static_assert(!std::is_abstract<MdUser>(), "MdUser ought not to be abstract."); + static_assert(!std::is_abstract<MdUser::Impl>(), "MdUser::Impl ought not to be abstract."); + } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/PoolImpl.cc new/libstorage-ng-4.3.34/storage/PoolImpl.cc --- old/libstorage-ng-4.3.32/storage/PoolImpl.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/PoolImpl.cc 2020-07-07 09:02:14.000000000 +0200 @@ -229,7 +229,7 @@ vector<Partition*> partitions; - for (const Candidate candidate : candidates) + for (const Candidate& candidate : candidates) { Region region = candidate.region; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/SystemInfo/CmdDmraid.cc new/libstorage-ng-4.3.34/storage/SystemInfo/CmdDmraid.cc --- old/libstorage-ng-4.3.32/storage/SystemInfo/CmdDmraid.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/SystemInfo/CmdDmraid.cc 2020-07-07 09:02:14.000000000 +0200 @@ -145,7 +145,7 @@ std::ostream& operator<<(std::ostream& s, const CmdDmraid& cmd_dmraid) { - for (const pair<string, CmdDmraid::Entry>& entry : cmd_dmraid) + for (const pair<const string, CmdDmraid::Entry>& entry : cmd_dmraid) s << "data[" << entry.first << "] -> " << entry.second << '\n'; return s; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/SystemInfo/CmdMultipath.cc new/libstorage-ng-4.3.34/storage/SystemInfo/CmdMultipath.cc --- old/libstorage-ng-4.3.32/storage/SystemInfo/CmdMultipath.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/SystemInfo/CmdMultipath.cc 2020-07-07 09:02:14.000000000 +0200 @@ -182,7 +182,7 @@ std::ostream& operator<<(std::ostream& s, const CmdMultipath& cmd_multipath) { - for (const pair<string, CmdMultipath::Entry>& entry : cmd_multipath) + for (const pair<const string, CmdMultipath::Entry>& entry : cmd_multipath) s << "data[" << entry.first << "] -> " << entry.second << '\n'; return s; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/SystemInfo/ProcMdstat.cc new/libstorage-ng-4.3.34/storage/SystemInfo/ProcMdstat.cc --- old/libstorage-ng-4.3.32/storage/SystemInfo/ProcMdstat.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/SystemInfo/ProcMdstat.cc 2020-07-07 09:02:14.000000000 +0200 @@ -125,10 +125,12 @@ else d = normalizeDevice(tmp); + // TODO can there be several of the flags? bool is_spare = boost::ends_with(tmp, "(S)"); bool is_faulty = boost::ends_with(tmp, "(F)"); + bool is_journal = boost::ends_with(tmp, "(J)"); - entry.devices.emplace_back(d, is_spare, is_faulty); + entry.devices.emplace_back(d, is_spare, is_faulty, is_journal); line.erase( 0, tmp.length() ); if( (pos=line.find_first_not_of( app_ws ))!=string::npos && pos!=0 ) @@ -277,7 +279,7 @@ std::ostream& operator<<(std::ostream& s, const ProcMdstat& proc_mdstat) { - for (const pair<string, ProcMdstat::Entry>& entry : proc_mdstat.data) + for (const pair<const string, ProcMdstat::Entry>& entry : proc_mdstat.data) s << "data[" << entry.first << "] -> " << entry.second << '\n'; return s; @@ -328,6 +330,8 @@ s << "(S)"; if (device.faulty) s << "(F)"; + if (device.journal) + s << "(J)"; return s; } @@ -480,7 +484,7 @@ s << "devices:" << mdadm_examine.devices << " metadata:" << mdadm_examine.metadata << " uuid:" << mdadm_examine.uuid << '\n'; - for (const pair<string, MdadmExamine::Entry>& entry : mdadm_examine) + for (const pair<const string, MdadmExamine::Entry>& entry : mdadm_examine) s << "data[" << entry.first << "] -> " << entry.second << '\n'; return s; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/storage/SystemInfo/ProcMdstat.h new/libstorage-ng-4.3.34/storage/SystemInfo/ProcMdstat.h --- old/libstorage-ng-4.3.32/storage/SystemInfo/ProcMdstat.h 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/storage/SystemInfo/ProcMdstat.h 2020-07-07 09:02:14.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (c) [2004-2014] Novell, Inc. - * Copyright (c) [2017,2019] SUSE LLC + * Copyright (c) [2017-2020] SUSE LLC * * All Rights Reserved. * @@ -47,12 +47,13 @@ struct Device { - Device(const string& name, bool spare, bool faulty) - : name(name), spare(spare), faulty(faulty) {} + Device(const string& name, bool spare, bool faulty, bool journal) + : name(name), spare(spare), faulty(faulty), journal(journal) {} string name; bool spare; bool faulty; + bool journal; bool operator<(const Device& rhs) const { return name < rhs.name; } @@ -126,8 +127,8 @@ MdLevel level; /** - * Mapping from device name to role (a number or - * spare). Faulty devices are also marked as spare by mdadm here. + * Mapping from device name to role (a number or spare). Faulty and journal + * devices are also marked as spare by mdadm here (that might be a bug). */ map<string, string> roles; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/testsuite/SystemInfo/proc-mdstat.cc new/libstorage-ng-4.3.34/testsuite/SystemInfo/proc-mdstat.cc --- old/libstorage-ng-4.3.32/testsuite/SystemInfo/proc-mdstat.cc 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/testsuite/SystemInfo/proc-mdstat.cc 2020-07-07 09:02:14.000000000 +0200 @@ -115,7 +115,7 @@ }; vector<string> output = { - "data[md0] -> md-level:RAID5 md-parity:left-symmetric super:1.2 chunk-size:524288 size:34326183936 devices:</dev/sda /dev/sdb /dev/sdc /dev/sdd(F)>", + "data[md0] -> md-level:RAID5 md-parity:left-symmetric super:1.2 chunk-size:524288 size:34326183936 devices:</dev/sda /dev/sdb /dev/sdc /dev/sdd(F)>" }; check(input, output); @@ -133,12 +133,31 @@ }; vector<string> output = { - "data[md_test] -> md-level:RAID0 super:1.2 chunk-size:524288 size:8192524288 devices:</dev/sda1 /dev/sdb1>", + "data[md_test] -> md-level:RAID0 super:1.2 chunk-size:524288 size:8192524288 devices:</dev/sda1 /dev/sdb1>" }; check(input, output); } + +BOOST_AUTO_TEST_CASE(parse6) +{ + vector<string> input = { + "Personalities : [raid6] [raid5] [raid4] ", + "md0 : active raid5 sdd1[4] sde1[3] sdf1[1] sdb1[0](J)", + " 4190208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]", + " ", + "unused devices: <none>" + }; + + vector<string> output = { + "data[md0] -> md-level:RAID5 md-parity:left-symmetric super:1.2 chunk-size:524288 size:4290772992 devices:</dev/sdb1(J) /dev/sdd1 /dev/sde1 /dev/sdf1>" + }; + + check(input, output); +} + + BOOST_AUTO_TEST_CASE(parse_inactive_noncontainer) { vector<string> input = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/testsuite/dependencies/md/Makefile.am new/libstorage-ng-4.3.34/testsuite/dependencies/md/Makefile.am --- old/libstorage-ng-4.3.32/testsuite/dependencies/md/Makefile.am 2020-06-30 14:38:47.000000000 +0200 +++ new/libstorage-ng-4.3.34/testsuite/dependencies/md/Makefile.am 2020-07-07 09:02:14.000000000 +0200 @@ -8,7 +8,7 @@ -lboost_unit_test_framework check_PROGRAMS = \ - create1.test reduce1.test extend1.test + create1.test create2.test reduce1.test extend1.test AM_DEFAULT_SOURCE_EXT = .cc @@ -16,6 +16,7 @@ EXTRA_DIST = \ create1-probed.xml create1-staging.xml create1-expected.txt create1-mockup.xml \ + create2-probed.xml create2-staging.xml create2-expected.txt create2-mockup.xml \ reduce1-probed.xml reduce1-staging.xml reduce1-expected.txt reduce1-mockup.xml \ extend1-probed.xml extend1-staging.xml extend1-expected.txt extend1-mockup.xml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-expected.txt new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-expected.txt --- old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-expected.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-expected.txt 2020-07-07 09:02:14.000000000 +0200 @@ -0,0 +1 @@ +1 - Create MD RAID5 /dev/md0 (3.94 GiB) from /dev/sdb1 (128.00 MiB), /dev/sdd1 (2.00 GiB), /dev/sde1 (2.00 GiB) and /dev/sdf1 (2.00 GiB) -> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-mockup.xml new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-mockup.xml --- old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-mockup.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-mockup.xml 2020-07-07 09:02:14.000000000 +0200 @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<Mockup> + <Commands> + <Command> + <name>/usr/bin/udevadm settle --timeout=20</name> + </Command> + <Command> + <name>/sbin/mdadm --create '/dev/md0' --run --level=raid5 --metadata=1.2 --homehost=any --raid-devices=3 '/dev/sdd1' '/dev/sde1' '/dev/sdf1' --write-journal='/dev/sdb1'</name> + </Command> + <Command> + <name>/sbin/mdadm --detail '/dev/md0' --export</name> + <stdout>MD_LEVEL=raid5</stdout> + <stdout>MD_DEVICES=3</stdout> + <stdout>MD_METADATA=1.2</stdout> + <stdout>MD_UUID=549de5a7:46144f48:df2706c3:f6ad1f85</stdout> + <stdout>MD_NAME=any:0</stdout> + <stdout>MD_DEVICE_dev_sdf1_ROLE=0</stdout> + <stdout>MD_DEVICE_dev_sdf1_DEV=/dev/sdf1</stdout> + <stdout>MD_DEVICE_dev_sde1_ROLE=2</stdout> + <stdout>MD_DEVICE_dev_sde1_DEV=/dev/sde1</stdout> + <stdout>MD_DEVICE_dev_sdd1_ROLE=1</stdout> + <stdout>MD_DEVICE_dev_sdd1_DEV=/dev/sdd1</stdout> + <stdout>MD_DEVICE_dev_sdb1_ROLE=spare</stdout> + <stdout>MD_DEVICE_dev_sdb1_DEV=/dev/sdb1</stdout> + </Command> + <Command> + <name>/usr/bin/cat /proc/mdstat</name> + </Command> + </Commands> +</Mockup> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-probed.xml new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-probed.xml --- old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-probed.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-probed.xml 2020-07-07 09:02:14.000000000 +0200 @@ -0,0 +1,223 @@ +<?xml version="1.0"?> +<Devicegraph> + <Devices> + <Disk> + <sid>42</sid> + <name>/dev/sdf</name> + <sysfs-name>sdf</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata7/host6/target6:0:0/6:0:0:0/block/sdf</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-7</udev-path> + <udev-path>pci-0000:00:0d.0-ata-7.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Disk> + <sid>43</sid> + <name>/dev/sdd</name> + <sysfs-name>sdd</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdd</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-5</udev-path> + <udev-path>pci-0000:00:0d.0-ata-5.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Disk> + <sid>44</sid> + <name>/dev/sdb</name> + <sysfs-name>sdb</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sdb</sysfs-path> + <region> + <length>16777216</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-3</udev-path> + <udev-path>pci-0000:00:0d.0-ata-3.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <range>256</range> + </Disk> + <Disk> + <sid>45</sid> + <name>/dev/sde</name> + <sysfs-name>sde</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0/block/sde</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-6</udev-path> + <udev-path>pci-0000:00:0d.0-ata-6.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Disk> + <sid>46</sid> + <name>/dev/sdc</name> + <sysfs-name>sdc</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdc</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-4</udev-path> + <udev-path>pci-0000:00:0d.0-ata-4.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Gpt> + <sid>48</sid> + </Gpt> + <Gpt> + <sid>49</sid> + </Gpt> + <Gpt> + <sid>50</sid> + </Gpt> + <Gpt> + <sid>51</sid> + </Gpt> + <Gpt> + <sid>52</sid> + </Gpt> + <Partition> + <sid>58</sid> + <name>/dev/sdf1</name> + <sysfs-name>sdf1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata7/host6/target6:0:0/6:0:0:0/block/sdf/sdf1</sysfs-path> + <region> + <start>2048</start> + <length>4194304</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-7-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-7.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + <Partition> + <sid>59</sid> + <name>/dev/sdd1</name> + <sysfs-name>sdd1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdd/sdd1</sysfs-path> + <region> + <start>2048</start> + <length>4194304</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-5-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-5.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + <Partition> + <sid>60</sid> + <name>/dev/sde1</name> + <sysfs-name>sde1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0/block/sde/sde1</sysfs-path> + <region> + <start>2048</start> + <length>4194304</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-6-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-6.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + <Partition> + <sid>61</sid> + <name>/dev/sdb1</name> + <sysfs-name>sdb1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sdb/sdb1</sysfs-path> + <region> + <start>2048</start> + <length>262144</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-3-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-3.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + </Devices> + <Holders> + <User> + <source-sid>42</source-sid> + <target-sid>48</target-sid> + </User> + <User> + <source-sid>43</source-sid> + <target-sid>49</target-sid> + </User> + <User> + <source-sid>44</source-sid> + <target-sid>50</target-sid> + </User> + <User> + <source-sid>45</source-sid> + <target-sid>51</target-sid> + </User> + <User> + <source-sid>46</source-sid> + <target-sid>52</target-sid> + </User> + <Subdevice> + <source-sid>48</source-sid> + <target-sid>58</target-sid> + </Subdevice> + <Subdevice> + <source-sid>49</source-sid> + <target-sid>59</target-sid> + </Subdevice> + <Subdevice> + <source-sid>51</source-sid> + <target-sid>60</target-sid> + </Subdevice> + <Subdevice> + <source-sid>50</source-sid> + <target-sid>61</target-sid> + </Subdevice> + </Holders> +</Devicegraph> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-staging.xml new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-staging.xml --- old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2-staging.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2-staging.xml 2020-07-07 09:02:14.000000000 +0200 @@ -0,0 +1,260 @@ +<?xml version="1.0"?> +<Devicegraph> + <Devices> + <Disk> + <sid>42</sid> + <name>/dev/sdf</name> + <sysfs-name>sdf</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata7/host6/target6:0:0/6:0:0:0/block/sdf</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-7</udev-path> + <udev-path>pci-0000:00:0d.0-ata-7.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB66a741fa-8159d3bb</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Disk> + <sid>43</sid> + <name>/dev/sdd</name> + <sysfs-name>sdd</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdd</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-5</udev-path> + <udev-path>pci-0000:00:0d.0-ata-5.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB842c10df-262af403</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Disk> + <sid>44</sid> + <name>/dev/sdb</name> + <sysfs-name>sdb</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sdb</sysfs-path> + <region> + <length>16777216</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-3</udev-path> + <udev-path>pci-0000:00:0d.0-ata-3.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB80113007-2670a94a</udev-id> + <range>256</range> + </Disk> + <Disk> + <sid>45</sid> + <name>/dev/sde</name> + <sysfs-name>sde</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0/block/sde</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-6</udev-path> + <udev-path>pci-0000:00:0d.0-ata-6.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB91e98460-bfba3037</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Disk> + <sid>46</sid> + <name>/dev/sdc</name> + <sysfs-name>sdc</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdc</sysfs-path> + <region> + <length>67108864</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-4</udev-path> + <udev-path>pci-0000:00:0d.0-ata-4.0</udev-path> + <udev-id>ata-VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VBc267c561-c12b81c7</udev-id> + <range>256</range> + <rotational>true</rotational> + </Disk> + <Gpt> + <sid>48</sid> + </Gpt> + <Gpt> + <sid>49</sid> + </Gpt> + <Gpt> + <sid>50</sid> + </Gpt> + <Gpt> + <sid>51</sid> + </Gpt> + <Gpt> + <sid>52</sid> + </Gpt> + <Partition> + <sid>58</sid> + <name>/dev/sdf1</name> + <sysfs-name>sdf1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata7/host6/target6:0:0/6:0:0:0/block/sdf/sdf1</sysfs-path> + <region> + <start>2048</start> + <length>4194304</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-7-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-7.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB66a741fa-8159d3bb-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + <Partition> + <sid>59</sid> + <name>/dev/sdd1</name> + <sysfs-name>sdd1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdd/sdd1</sysfs-path> + <region> + <start>2048</start> + <length>4194304</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-5-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-5.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB842c10df-262af403-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + <Partition> + <sid>60</sid> + <name>/dev/sde1</name> + <sysfs-name>sde1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0/block/sde/sde1</sysfs-path> + <region> + <start>2048</start> + <length>4194304</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-6-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-6.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB91e98460-bfba3037-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + <Partition> + <sid>61</sid> + <name>/dev/sdb1</name> + <sysfs-name>sdb1</sysfs-name> + <sysfs-path>/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sdb/sdb1</sysfs-path> + <region> + <start>2048</start> + <length>262144</length> + <block-size>512</block-size> + </region> + <udev-path>pci-0000:00:0d.0-ata-3-part1</udev-path> + <udev-path>pci-0000:00:0d.0-ata-3.0-part1</udev-path> + <udev-id>ata-VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <udev-id>scsi-0ATA_VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <udev-id>scsi-1ATA_VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <udev-id>scsi-SATA_VBOX_HARDDISK_VB80113007-2670a94a-part1</udev-id> + <type>primary</type> + <id>253</id> + </Partition> + <Md> + <sid>62</sid> + <name>/dev/md0</name> + <sysfs-name>md0</sysfs-name> + <sysfs-path>/devices/virtual/block/md0</sysfs-path> + <region> + <length>8255488</length> + <block-size>512</block-size> + </region> + <topology> + <optimal-io-size>1048576</optimal-io-size> + </topology> + <range>256</range> + <md-level>RAID5</md-level> + <metadata>1.2</metadata> + <in-etc-mdadm>false</in-etc-mdadm> + </Md> + </Devices> + <Holders> + <User> + <source-sid>42</source-sid> + <target-sid>48</target-sid> + </User> + <User> + <source-sid>43</source-sid> + <target-sid>49</target-sid> + </User> + <User> + <source-sid>44</source-sid> + <target-sid>50</target-sid> + </User> + <User> + <source-sid>45</source-sid> + <target-sid>51</target-sid> + </User> + <User> + <source-sid>46</source-sid> + <target-sid>52</target-sid> + </User> + <Subdevice> + <source-sid>48</source-sid> + <target-sid>58</target-sid> + </Subdevice> + <Subdevice> + <source-sid>49</source-sid> + <target-sid>59</target-sid> + </Subdevice> + <Subdevice> + <source-sid>51</source-sid> + <target-sid>60</target-sid> + </Subdevice> + <Subdevice> + <source-sid>50</source-sid> + <target-sid>61</target-sid> + </Subdevice> + <MdUser> + <source-sid>58</source-sid> + <target-sid>62</target-sid> + <sort-key>3</sort-key> + </MdUser> + <MdUser> + <source-sid>59</source-sid> + <target-sid>62</target-sid> + <sort-key>1</sort-key> + </MdUser> + <MdUser> + <source-sid>60</source-sid> + <target-sid>62</target-sid> + <sort-key>2</sort-key> + </MdUser> + <MdUser> + <source-sid>61</source-sid> + <target-sid>62</target-sid> + <journal>true</journal> + </MdUser> + </Holders> +</Devicegraph> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2.cc new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2.cc --- old/libstorage-ng-4.3.32/testsuite/dependencies/md/create2.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/libstorage-ng-4.3.34/testsuite/dependencies/md/create2.cc 2020-07-07 09:02:14.000000000 +0200 @@ -0,0 +1,22 @@ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE libstorage + +#include <boost/test/unit_test.hpp> + +#include "storage/Utils/Logger.h" +#include "testsuite/helpers/TsCmp.h" + + +using namespace storage; + + +// Check that mdadm is called with the correct parameters. + +BOOST_AUTO_TEST_CASE(actions) +{ + set_logger(get_stdout_logger()); + + TsCmpActiongraph cmp("create2", true); + BOOST_CHECK_MESSAGE(cmp.ok(), cmp); +}
