Hello community, here is the log from the commit of package libstorage-ng for openSUSE:Factory checked in at 2020-07-24 09:53:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libstorage-ng (Old) and /work/SRC/openSUSE:Factory/.libstorage-ng.new.3592 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libstorage-ng" Fri Jul 24 09:53:02 2020 rev:90 rq:822214 version:4.3.37 Changes: -------- --- /work/SRC/openSUSE:Factory/libstorage-ng/libstorage-ng.changes 2020-07-21 15:48:23.576147498 +0200 +++ /work/SRC/openSUSE:Factory/.libstorage-ng.new.3592/libstorage-ng.changes 2020-07-24 09:54:04.429286501 +0200 @@ -1,0 +2,16 @@ +Wed Jul 22 10:49:43 UTC 2020 - [email protected] + +- merge gh#openSUSE/libstorage-ng#763 +- probe lvm logical volume type from segtype for origins +- use in-class member initialization +- 4.3.37 + +-------------------------------------------------------------------- +Tue Jul 21 14:45:48 UTC 2020 - [email protected] + +- merge gh#openSUSE/libstorage-ng#762 +- improve interface for pools +- coding style +- 4.3.36 + +-------------------------------------------------------------------- Old: ---- libstorage-ng-4.3.35.tar.xz New: ---- libstorage-ng-4.3.37.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libstorage-ng.spec ++++++ --- /var/tmp/diff_new_pack.usoIqf/_old 2020-07-24 09:54:05.797287947 +0200 +++ /var/tmp/diff_new_pack.usoIqf/_new 2020-07-24 09:54:05.801287951 +0200 @@ -18,7 +18,7 @@ %define libname %{name}1 Name: libstorage-ng -Version: 4.3.35 +Version: 4.3.37 Release: 0 Summary: Library for storage management License: GPL-2.0-only ++++++ libstorage-ng-4.3.35.tar.xz -> libstorage-ng-4.3.37.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/LIBVERSION new/libstorage-ng-4.3.37/LIBVERSION --- old/libstorage-ng-4.3.35/LIBVERSION 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/LIBVERSION 2020-07-22 12:49:43.000000000 +0200 @@ -1 +1 @@ -1.43.0 +1.44.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/VERSION new/libstorage-ng-4.3.37/VERSION --- old/libstorage-ng-4.3.35/VERSION 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/VERSION 2020-07-22 12:49:43.000000000 +0200 @@ -1 +1 @@ -4.3.35 +4.3.37 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/bindings/storage-template.i new/libstorage-ng-4.3.37/bindings/storage-template.i --- old/libstorage-ng-4.3.35/bindings/storage-template.i 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/bindings/storage-template.i 2020-07-22 12:49:43.000000000 +0200 @@ -103,3 +103,9 @@ %template(VectorSimpleEtcFstabEntry) std::vector<SimpleEtcFstabEntry>; %template(VectorSimpleEtcCrypttabEntry) std::vector<SimpleEtcCrypttabEntry>; +%template(VectorConstDevicegraphPtr) std::vector<const Devicegraph*>; +%template(MapStringConstDevicegraphPtr) std::map<std::string, const Devicegraph*>; + +%template(VectorConstPoolPtr) std::vector<const Pool*>; +%template(MapStringConstPoolPtr) std::map<std::string, const Pool*>; + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/integration-tests/pools/list.py new/libstorage-ng-4.3.37/integration-tests/pools/list.py --- old/libstorage-ng-4.3.35/integration-tests/pools/list.py 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/integration-tests/pools/list.py 2020-07-22 12:49:43.000000000 +0200 @@ -15,9 +15,8 @@ storage.generate_pools(probed) -for name in storage.get_pool_names(): +for name, pool in storage.get_pools().items(): print(name) - pool = storage.get_pool(name) 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.35/integration-tests/pools/max-size.py new/libstorage-ng-4.3.37/integration-tests/pools/max-size.py --- old/libstorage-ng-4.3.35/integration-tests/pools/max-size.py 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/integration-tests/pools/max-size.py 2020-07-22 12:49:43.000000000 +0200 @@ -17,7 +17,7 @@ pool = storage.get_pool("HDDs (512 B)") -for n in range(1, len(pool.get_devices(probed)) + 1): +for n in range(1, pool.size(probed) + 1): try: max_size = pool.max_partition_size(probed, n) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/Pool.cc new/libstorage-ng-4.3.37/storage/Pool.cc --- old/libstorage-ng-4.3.35/storage/Pool.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/Pool.cc 2020-07-22 12:49:43.000000000 +0200 @@ -46,6 +46,13 @@ } + size_t + Pool::size(const Devicegraph* devicegraph) const + { + return get_impl().size(devicegraph); + } + + void Pool::add_device(const Device* device) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/Pool.h new/libstorage-ng-4.3.37/storage/Pool.h --- old/libstorage-ng-4.3.35/storage/Pool.h 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/Pool.h 2020-07-22 12:49:43.000000000 +0200 @@ -103,6 +103,12 @@ void remove_device(const Device* device); /** + * Get the number of devices of the pool available in the devicegraph. It is no + * error if devices are not available in the devicegraph. + */ + size_t size(const Devicegraph* devicegraph) const; + + /** * Get the devices of the pool available in the devicegraph. It is no error if * devices are not available in the devicegraph. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/PoolImpl.cc new/libstorage-ng-4.3.37/storage/PoolImpl.cc --- old/libstorage-ng-4.3.35/storage/PoolImpl.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/PoolImpl.cc 2020-07-22 12:49:43.000000000 +0200 @@ -57,6 +57,17 @@ } + size_t + Pool::Impl::size(const Devicegraph* devicegraph) const + { + ST_CHECK_PTR(devicegraph); + + return count_if(devices.begin(), devices.end(), [devicegraph](sid_t sid) + { return devicegraph->device_exists(sid); } + ); + } + + vector<Device*> Pool::Impl::get_devices(Devicegraph* devicegraph) const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/PoolImpl.h new/libstorage-ng-4.3.37/storage/PoolImpl.h --- old/libstorage-ng-4.3.35/storage/PoolImpl.h 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/PoolImpl.h 2020-07-22 12:49:43.000000000 +0200 @@ -46,6 +46,8 @@ void add_device(const Device* device); void remove_device(const Device* device); + size_t size(const Devicegraph* devicegraph) const; + vector<Device*> get_devices(Devicegraph* devicegraph) const; vector<const Device*> get_devices(const Devicegraph* devicegraph) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/Storage.cc new/libstorage-ng-4.3.37/storage/Storage.cc --- old/libstorage-ng-4.3.35/storage/Storage.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/Storage.cc 2020-07-22 12:49:43.000000000 +0200 @@ -145,6 +145,13 @@ } + map<string, const Devicegraph*> + Storage::get_devicegraphs() const + { + return get_impl().get_devicegraphs(); + } + + Devicegraph* Storage::create_devicegraph(const string& name) { @@ -307,6 +314,13 @@ } + map<string, const Pool*> + Storage::get_pools() const + { + return get_impl().get_pools(); + } + + Pool* Storage::get_pool(const string& name) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/Storage.h new/libstorage-ng-4.3.37/storage/Storage.h --- old/libstorage-ng-4.3.35/storage/Storage.h 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/Storage.h 2020-07-22 12:49:43.000000000 +0200 @@ -310,7 +310,15 @@ /** * Get the names of all devicegraphs. */ - std::vector<std::string> get_devicegraph_names() const; + std::vector<std::string> get_devicegraph_names() const ST_DEPRECATED; + + /** + * Get all devicegraphs with their names. + * + * Note: There is no non-const version since that would provide non-const access + * to the probed devicegraph. + */ + std::map<std::string, const Devicegraph*> get_devicegraphs() const; /** * Return a devicegraph by name. @@ -495,7 +503,12 @@ /** * Get the names of all pools. */ - std::vector<std::string> get_pool_names() const; + std::vector<std::string> get_pool_names() const ST_DEPRECATED; + + /** + * Get all pools with their names. + */ + std::map<std::string, const Pool*> get_pools() const; /** * Return a pool by name. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/StorageImpl.cc new/libstorage-ng-4.3.37/storage/StorageImpl.cc --- old/libstorage-ng-4.3.35/storage/StorageImpl.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/StorageImpl.cc 2020-07-22 12:49:43.000000000 +0200 @@ -237,7 +237,7 @@ if (name == "probed") ST_THROW(Exception(sformat("invalid devicegraph name '%s'", name))); - map<string, Devicegraph>::iterator it = devicegraphs.find(name); + devicegraphs_t::iterator it = devicegraphs.find(name); if (it == devicegraphs.end()) ST_THROW(Exception(sformat("devicegraph '%s' not found", name))); @@ -248,7 +248,7 @@ const Devicegraph* Storage::Impl::get_devicegraph(const string& name) const { - map<string, Devicegraph>::const_iterator it = devicegraphs.find(name); + devicegraphs_t::const_iterator it = devicegraphs.find(name); if (it == devicegraphs.end()) ST_THROW(Exception(sformat("devicegraph '%s' not found", name))); @@ -296,8 +296,20 @@ { vector<string> ret; - for (const map<string, Devicegraph>::value_type& it : devicegraphs) - ret.push_back(it.first); + for (const devicegraphs_t::value_type& tmp : devicegraphs) + ret.push_back(tmp.first); + + return ret; + } + + + map<string, const Devicegraph*> + Storage::Impl::get_devicegraphs() const + { + map<string, const Devicegraph*> ret; + + for (const devicegraphs_t::value_type& tmp : devicegraphs) + ret[tmp.first] = &tmp.second; return ret; } @@ -316,13 +328,13 @@ { verify_devicegraph_name(name); - pair<map<string, Devicegraph>::iterator, bool> tmp = + pair<devicegraphs_t::iterator, bool> tmp = devicegraphs.emplace(piecewise_construct, forward_as_tuple(name), forward_as_tuple(&storage)); if (!tmp.second) ST_THROW(Exception(sformat("devicegraph '%s' already exists", name))); - map<string, Devicegraph>::iterator it = tmp.first; + devicegraphs_t::iterator it = tmp.first; return &it->second; } @@ -352,11 +364,11 @@ void Storage::Impl::restore_devicegraph(const string& name) { - map<string, Devicegraph>::iterator it1 = devicegraphs.find(name); + devicegraphs_t::iterator it1 = devicegraphs.find(name); if (it1 == devicegraphs.end()) ST_THROW(Exception(sformat("devicegraph '%s' not found", name))); - map<string, Devicegraph>::iterator it2 = devicegraphs.find("staging"); + devicegraphs_t::iterator it2 = devicegraphs.find("staging"); if (it2 == devicegraphs.end()) ST_THROW(Exception(sformat("devicegraph '%s' not found", name))); @@ -389,7 +401,7 @@ map<sid_t, set<string>> all_sids_with_types; - for (const map<string, Devicegraph>::value_type& key_value : devicegraphs) + for (const devicegraphs_t::value_type& key_value : devicegraphs) { const Devicegraph& devicegraph = key_value.second; @@ -459,13 +471,24 @@ { ST_CHECK_PTR(devicegraph); - // TODO more types, e.g. dasd, multipath, pmem, nvme? + // TODO more types, e.g. dasd, multipath, nvme? // TODO check partition table? // TODO do not add already existing devices for (const Disk* disk : Disk::get_all(devicegraph)) { - string name = disk->is_rotational() ? "HDDs" : "SSDs"; + // Ignore disks with size zero - maybe some card reader. + if (disk->get_size() == 0) + continue; + + string name; + if (disk->is_pmem()) + name = "PMEMs"; + else if (!disk->is_rotational()) + name = "SSDs"; + else + name = "HDDs"; + name += " (" + byte_to_humanstring(disk->get_region().get_block_size(), false, 2, true) + ")"; Pool* pool = exists_pool(name) ? get_pool(name) : create_pool(name); @@ -487,13 +510,13 @@ { verify_pool_name(name); - pair<map<string, Pool>::iterator, bool> tmp = + pair<pools_t::iterator, bool> tmp = pools.emplace(piecewise_construct, forward_as_tuple(name), forward_as_tuple()); if (!tmp.second) ST_THROW(Exception(sformat("pool '%s' already exists", name))); - map<string, Pool>::iterator it = tmp.first; + pools_t::iterator it = tmp.first; return &it->second; } @@ -519,8 +542,20 @@ { vector<string> ret; - for (const map<string, Pool>::value_type& it : pools) - ret.push_back(it.first); + for (const pools_t::value_type& tmp : pools) + ret.push_back(tmp.first); + + return ret; + } + + + map<string, const Pool*> + Storage::Impl::get_pools() const + { + map<string, const Pool*> ret; + + for (const pools_t::value_type& tmp : pools) + ret[tmp.first] = &tmp.second; return ret; } @@ -529,7 +564,7 @@ Pool* Storage::Impl::get_pool(const string& name) { - map<string, Pool>::iterator it = pools.find(name); + pools_t::iterator it = pools.find(name); if (it == pools.end()) ST_THROW(Exception(sformat("pool '%s' not found", name))); @@ -540,7 +575,7 @@ const Pool* Storage::Impl::get_pool(const string& name) const { - map<string, Pool>::const_iterator it = pools.find(name); + pools_t::const_iterator it = pools.find(name); if (it == pools.end()) ST_THROW(Exception(sformat("pool '%s' not found", name))); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/StorageImpl.h new/libstorage-ng-4.3.37/storage/StorageImpl.h --- old/libstorage-ng-4.3.35/storage/StorageImpl.h 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/StorageImpl.h 2020-07-22 12:49:43.000000000 +0200 @@ -76,7 +76,9 @@ bool equal_devicegraph(const string& lhs, const string& rhs) const; bool exist_devicegraph(const string& name) const; + vector<string> get_devicegraph_names() const; + map<string, const Devicegraph*> get_devicegraphs() const; Devicegraph* get_devicegraph(const string& name); const Devicegraph* get_devicegraph(const string& name) const; @@ -118,6 +120,7 @@ bool exists_pool(const string& name) const; vector<string> get_pool_names() const; + map<string, const Pool*> get_pools() const; Pool* get_pool(const string& name); const Pool* get_pool(const string& name) const; @@ -158,9 +161,11 @@ Lock lock; - map<string, Devicegraph> devicegraphs; + using devicegraphs_t = map<string, Devicegraph>; + devicegraphs_t devicegraphs; - map<string, Pool> pools; + using pools_t = map<string, Pool>; + pools_t pools; MountByType default_mount_by; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/SystemInfo/CmdLsscsi.h new/libstorage-ng-4.3.37/storage/SystemInfo/CmdLsscsi.h --- old/libstorage-ng-4.3.35/storage/SystemInfo/CmdLsscsi.h 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/SystemInfo/CmdLsscsi.h 2020-07-22 12:49:43.000000000 +0200 @@ -46,9 +46,7 @@ struct Entry { - Entry() : transport(Transport::UNKNOWN) {} - - Transport transport; + Transport transport = Transport::UNKNOWN; }; friend std::ostream& operator<<(std::ostream& s, const Lsscsi& lsscsi); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/SystemInfo/CmdLvm.cc new/libstorage-ng-4.3.37/storage/SystemInfo/CmdLvm.cc --- old/libstorage-ng-4.3.35/storage/SystemInfo/CmdLvm.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/SystemInfo/CmdLvm.cc 2020-07-22 12:49:43.000000000 +0200 @@ -211,10 +211,10 @@ case 't': lv.lv_type = LvType::THIN_POOL; break; case 'V': lv.lv_type = LvType::THIN; break; case 'r': lv.lv_type = LvType::RAID; break; - case 'o': lv.lv_type = LvType::NORMAL; break; case 's': lv.lv_type = LvType::SNAPSHOT; break; case 'm': lv.lv_type = LvType::MIRROR; break; + case 'o': case 'C': { string segtype; @@ -228,6 +228,12 @@ lv.lv_type = LvType::CACHE; else if (segtype == "writecache") lv.lv_type = LvType::WRITECACHE; + else if (segtype == "mirror") + lv.lv_type = LvType::MIRROR; + else if (boost::starts_with(segtype, "raid")) + lv.lv_type = LvType::RAID; + else if (segtype == "linear" || segtype == "striped") + lv.lv_type = LvType::NORMAL; } break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/SystemInfo/CmdLvm.h new/libstorage-ng-4.3.37/storage/SystemInfo/CmdLvm.h --- old/libstorage-ng-4.3.35/storage/SystemInfo/CmdLvm.h 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/SystemInfo/CmdLvm.h 2020-07-22 12:49:43.000000000 +0200 @@ -42,7 +42,7 @@ { protected: - virtual ~CmdLvm() {} + virtual ~CmdLvm() = default; void parse(const vector<string>& lines, const char* tag); virtual void parse(json_object* object) = 0; @@ -58,16 +58,14 @@ struct Pv { - Pv() : pv_name(), pv_uuid(), vg_name(), vg_uuid(), pe_start(0), missing(false), duplicate(false) {} - string pv_name; string pv_uuid; string vg_name; string vg_uuid; - unsigned long long pe_start; + unsigned long long pe_start = 0; - bool missing; - bool duplicate; + bool missing = false; + bool duplicate = false; }; friend std::ostream& operator<<(std::ostream& s, const CmdPvs& cmd_pvs); @@ -101,29 +99,22 @@ struct Segment { - Segment() : stripes(0), stripe_size(0), chunk_size(0) {} - - unsigned long stripes; - unsigned long long stripe_size; - unsigned long long chunk_size; + unsigned long stripes = 0; + unsigned long long stripe_size = 0; + unsigned long long chunk_size = 0; }; struct Lv { - Lv() : lv_name(), lv_uuid(), vg_name(), vg_uuid(), lv_type(LvType::UNKNOWN), - role(Role::PRIVATE), active(false), size(0), origin_size(0), pool_name(), - pool_uuid(), origin_name(), origin_uuid(), data_name(), data_uuid(), - metadata_name(), metadata_uuid() {} - string lv_name; string lv_uuid; string vg_name; string vg_uuid; - LvType lv_type; - Role role; - bool active; - unsigned long long size; - unsigned long long origin_size; + LvType lv_type = LvType::UNKNOWN; + Role role = Role::PRIVATE; + bool active = false; + unsigned long long size = 0; + unsigned long long origin_size = 0; string pool_name; string pool_uuid; string origin_name; @@ -165,13 +156,11 @@ struct Vg { - Vg() : vg_name(), vg_uuid(), extent_size(0), extent_count(0), free_extent_count(0) {} - string vg_name; string vg_uuid; - unsigned long extent_size; - unsigned long extent_count; - unsigned long free_extent_count; + unsigned long extent_size = 0; + unsigned long extent_count = 0; + unsigned long free_extent_count = 0; }; friend std::ostream& operator<<(std::ostream& s, const CmdVgs& cmd_vgs); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/SystemInfo/CmdUdevadm.cc new/libstorage-ng-4.3.37/storage/SystemInfo/CmdUdevadm.cc --- old/libstorage-ng-4.3.35/storage/SystemInfo/CmdUdevadm.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/SystemInfo/CmdUdevadm.cc 2020-07-22 12:49:43.000000000 +0200 @@ -42,8 +42,7 @@ CmdUdevadmInfo::CmdUdevadmInfo(const string& file) - : file(file), path(), name(), majorminor(0), device_type(DeviceType::UNKNOWN), - by_path_links(), by_id_links(), by_part_label_links(), by_part_uuid_links() + : file(file) { // Without emptying the udev queue 'udevadm info' can display old data // or even complain about unknown devices. Even during probing this @@ -94,7 +93,7 @@ if (boost::starts_with(line, "E: DEVTYPE=")) device_type = toValueWithFallback(line.substr(strlen("E: DEVTYPE=")), DeviceType::UNKNOWN); - for (Link link : links) + for (const Link& link : links) if (boost::starts_with(line, link.name)) link.variable.push_back(line.substr(strlen(link.name))); } @@ -107,7 +106,7 @@ majorminor = makedev(major, minor); - for (Link link : links) + for (const Link& link : links) sort(link.variable.begin(), link.variable.end()); y2mil(*this); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/storage/SystemInfo/CmdUdevadm.h new/libstorage-ng-4.3.37/storage/SystemInfo/CmdUdevadm.h --- old/libstorage-ng-4.3.35/storage/SystemInfo/CmdUdevadm.h 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/storage/SystemInfo/CmdUdevadm.h 2020-07-22 12:49:43.000000000 +0200 @@ -73,9 +73,9 @@ string path; string name; - dev_t majorminor; + dev_t majorminor = 0; - DeviceType device_type; + DeviceType device_type = DeviceType::UNKNOWN; vector<string> by_path_links; vector<string> by_id_links; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/testsuite/SystemInfo/lvs.cc new/libstorage-ng-4.3.37/testsuite/SystemInfo/lvs.cc --- old/libstorage-ng-4.3.35/testsuite/SystemInfo/lvs.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/testsuite/SystemInfo/lvs.cc 2020-07-22 12:49:43.000000000 +0200 @@ -179,13 +179,13 @@ }; vector<string> output = { - "lv:{ lv-name:[cache1-volume] lv-uuid:su0ZFA-ejBI-M3VL-gQDD-UNcu-W0o8-2aBdtj vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:unknown role:private active:true size:1073741824 segments:<stripes:1> }", + "lv:{ lv-name:[cache1-volume] lv-uuid:su0ZFA-ejBI-M3VL-gQDD-UNcu-W0o8-2aBdtj vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:normal role:private active:true size:1073741824 segments:<stripes:1> }", "lv:{ lv-name:[cache1_corig] lv-uuid:ZzFhN5-b2N6-dL4F-H42U-dAP9-laF2-EU1F3p vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:normal role:private active:true size:10737418240 segments:<stripes:1> }", "lv:{ lv-name:[cache2-pool] lv-uuid:DfS7Ct-j41n-oz2e-C8vE-RuSt-blac-NjJwkW vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:cache-pool role:private active:false size:1073741824 data-name:[cache2-pool_cdata] data-uuid:Rkyj1k-9Ahg-mBQP-n820-bKvE-ZAzU-fwXJ6Q metadata-name:[cache2-pool_cmeta] metadata-uuid:3b8V9E-3Scj-Ox8j-6pss-QZIM-80jx-hDXYEi segments:<stripes:1 chunk-size:65536> }", - "lv:{ lv-name:[cache2-pool_cdata] lv-uuid:Rkyj1k-9Ahg-mBQP-n820-bKvE-ZAzU-fwXJ6Q vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:unknown role:private active:true size:1073741824 segments:<stripes:1> }", + "lv:{ lv-name:[cache2-pool_cdata] lv-uuid:Rkyj1k-9Ahg-mBQP-n820-bKvE-ZAzU-fwXJ6Q vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:normal role:private active:true size:1073741824 segments:<stripes:1> }", "lv:{ lv-name:[cache2-pool_cmeta] lv-uuid:3b8V9E-3Scj-Ox8j-6pss-QZIM-80jx-hDXYEi vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:unknown role:private active:true size:8388608 segments:<stripes:1> }", "lv:{ lv-name:[cache2_corig] lv-uuid:qhafQi-Nznt-WJCP-bMpl-Hx1x-w8tb-kt0EEa vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:normal role:private active:true size:10737418240 segments:<stripes:1> }", - "lv:{ lv-name:[cache3-pool_cdata] lv-uuid:BnZkZ2-gkl8-7nL8-dsai-meu0-vhht-OYteZH vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:unknown role:private active:false size:1073741824 segments:<stripes:1> }", + "lv:{ lv-name:[cache3-pool_cdata] lv-uuid:BnZkZ2-gkl8-7nL8-dsai-meu0-vhht-OYteZH vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:normal role:private active:false size:1073741824 segments:<stripes:1> }", "lv:{ lv-name:[cache3-pool_cmeta] lv-uuid:fSwqC3-OCBQ-UYSF-hV5Z-6NRB-TQL0-y3wYzS vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:unknown role:private active:false size:8388608 segments:<stripes:1> }", "lv:{ lv-name:[lvol0_pmspare] lv-uuid:vLO1sd-Slsj-VY6P-sTzJ-ZEya-0hFZ-uAJTuq vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:unknown role:private active:false size:8388608 segments:<stripes:1> }", "lv:{ lv-name:cache1 lv-uuid:R3wAkS-5BJp-VwEe-DS9r-gBJG-jlgB-MvwUGG vg-name:test vg-uuid:55auVT-aQ8G-MPiA-uXy1-dvJa-XNOs-6BWsXC lv-type:cache role:public active:true size:10737418240 pool-name:[cache1-volume] pool-uuid:su0ZFA-ejBI-M3VL-gQDD-UNcu-W0o8-2aBdtj segments:<stripes:1 chunk-size:65536> }", @@ -298,4 +298,91 @@ }; check(input, output); +} + + +BOOST_AUTO_TEST_CASE(parse9) +{ + // Several logical volumes with snapshots that are reported as origin by lvs, so the + // type (normal, raid, cache, ...) depends on the segtype. + + vector<string> input = { + " {", + " \"report\": [", + " {", + " \"lv\": [", + " {\"lv_name\":\"cache1\", \"lv_uuid\":\"hOiWKM-Cy45-OTvw-d4vR-inXD-bol2-zw7ses\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,origin,thickorigin\", \"lv_attr\":\"owi-a-C---\", \"lv_size\":\"10737418240\", \"origin_size\":\"10737418240\", \"segtype\":\"cache\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"65536\", \"pool_lv\":\"[cache1-volume]\", \"pool_lv_uuid\":\"3Roi9q-GIIJ-yFvy-F5fc-wazU-kMdX-4CaVJh\", \"origin\":\"[cache1_corig]\", \"origin_uuid\":\"1Uy23z-t5Re-WfZX-c0B6-jHhR-JuF4-W7JbX4\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"cache1-snap\", \"lv_uuid\":\"BMgF2x-ft26-EuK4-PfPv-BHEr-MMAP-a9Uscw\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,snapshot,thicksnapshot\", \"lv_attr\":\"swi-a-s---\", \"lv_size\":\"1073741824\", \"origin_size\":\"10737418240\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"4096\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"cache1\", \"origin_uuid\":\"hOiWKM-Cy45-OTvw-d4vR-inXD-bol2-zw7ses\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[cache1-volume]\", \"lv_uuid\":\"3Roi9q-GIIJ-yFvy-F5fc-wazU-kMdX-4CaVJh\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private\", \"lv_attr\":\"Cwi-aoC---\", \"lv_size\":\"1073741824\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[cache1_corig]\", \"lv_uuid\":\"1Uy23z-t5Re-WfZX-c0B6-jHhR-JuF4-W7JbX4\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,cache,origin,cacheorigin\", \"lv_attr\":\"owi-aoC---\", \"lv_size\":\"10737418240\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"cache2\", \"lv_uuid\":\"kyQmHp-8HiZ-PtK0-7TxV-FcVV-iRWi-8nugzx\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,origin,thickorigin\", \"lv_attr\":\"owi-a-C---\", \"lv_size\":\"10737418240\", \"origin_size\":\"10737418240\", \"segtype\":\"cache\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"65536\", \"pool_lv\":\"[cache2-pool]\", \"pool_lv_uuid\":\"CAFMIn-I6Sf-MecC-Ml9y-8rHu-2e14-jkRfng\", \"origin\":\"[cache2_corig]\", \"origin_uuid\":\"pwFXSG-PJ9U-jTgO-PL3z-7SCZ-hZ0D-RlUFT6\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[cache2-pool]\", \"lv_uuid\":\"CAFMIn-I6Sf-MecC-Ml9y-8rHu-2e14-jkRfng\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private\", \"lv_attr\":\"Cwi---C---\", \"lv_size\":\"1073741824\", \"origin_size\":\"\", \"segtype\":\"cache-pool\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"65536\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"[cache2-pool_cdata]\", \"data_lv_uuid\":\"PyuiGz-CB7m-H81T-w4Am-7bM3-92O1-Ja391A\", \"metadata_lv\":\"[cache2-pool_cmeta]\", \"metadata_lv_uuid\":\"LOIc6h-R7ji-atV0-IcMz-1d0K-1vyw-cIbMj5\"},", + " {\"lv_name\":\"[cache2-pool_cdata]\", \"lv_uuid\":\"PyuiGz-CB7m-H81T-w4Am-7bM3-92O1-Ja391A\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,cache,pool,data\", \"lv_attr\":\"Cwi-ao----\", \"lv_size\":\"1073741824\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[cache2-pool_cmeta]\", \"lv_uuid\":\"LOIc6h-R7ji-atV0-IcMz-1d0K-1vyw-cIbMj5\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,cache,pool,metadata\", \"lv_attr\":\"ewi-ao----\", \"lv_size\":\"8388608\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"cache2-snap\", \"lv_uuid\":\"occp3W-hd5C-4Upb-MJ08-bj0W-6qSK-DEolsv\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,snapshot,thicksnapshot\", \"lv_attr\":\"swi-a-s---\", \"lv_size\":\"1073741824\", \"origin_size\":\"10737418240\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"4096\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"cache2\", \"origin_uuid\":\"kyQmHp-8HiZ-PtK0-7TxV-FcVV-iRWi-8nugzx\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[cache2_corig]\", \"lv_uuid\":\"pwFXSG-PJ9U-jTgO-PL3z-7SCZ-hZ0D-RlUFT6\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,cache,origin,cacheorigin\", \"lv_attr\":\"owi-aoC---\", \"lv_size\":\"10737418240\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"linear\", \"lv_uuid\":\"Uc5EDE-fVaz-9N6M-rkYh-iq4n-kHZu-3qOjxX\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,origin,thickorigin\", \"lv_attr\":\"owi-a-s---\", \"lv_size\":\"10737418240\", \"origin_size\":\"10737418240\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"linear-snap\", \"lv_uuid\":\"XNxQEY-xgXk-ztle-9vtN-ayma-tWVL-xEDNR5\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,snapshot,thicksnapshot\", \"lv_attr\":\"swi-a-s---\", \"lv_size\":\"1073741824\", \"origin_size\":\"10737418240\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"4096\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"linear\", \"origin_uuid\":\"Uc5EDE-fVaz-9N6M-rkYh-iq4n-kHZu-3qOjxX\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[lvol0_pmspare]\", \"lv_uuid\":\"c9k6dk-qgwV-ZUU1-et7J-jS6b-nKby-THgkio\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,pool,spare\", \"lv_attr\":\"ewi-------\", \"lv_size\":\"8388608\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"mirror\", \"lv_uuid\":\"iW0JIT-d1Dz-DEGS-b1uM-1d7h-gBx7-yLHVY9\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,origin,thickorigin\", \"lv_attr\":\"owi-a-m---\", \"lv_size\":\"2147483648\", \"origin_size\":\"2147483648\", \"segtype\":\"mirror\", \"stripes\":\"2\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"mirror-snap\", \"lv_uuid\":\"jv03Ag-gctg-E2lF-GtGZ-nNRe-7N3d-ZaEggG\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,snapshot,thicksnapshot\", \"lv_attr\":\"swi-a-s---\", \"lv_size\":\"1073741824\", \"origin_size\":\"2147483648\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"4096\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"mirror\", \"origin_uuid\":\"iW0JIT-d1Dz-DEGS-b1uM-1d7h-gBx7-yLHVY9\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[mirror_mimage_0]\", \"lv_uuid\":\"ey2DSj-J6ge-WQvp-MGvP-q6WB-G0ko-zwJb71\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,mirror,image\", \"lv_attr\":\"iwi-aom---\", \"lv_size\":\"2147483648\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[mirror_mimage_1]\", \"lv_uuid\":\"bl5iiI-iLz0-CgZJ-EoD2-vMvo-brhj-MbKzhq\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,mirror,image\", \"lv_attr\":\"iwi-aom---\", \"lv_size\":\"2147483648\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[mirror_mlog]\", \"lv_uuid\":\"Jgxglt-c14Y-l4cb-xOHI-fT50-Zm9n-cV8urT\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,mirror,log\", \"lv_attr\":\"lwi-aom---\", \"lv_size\":\"4194304\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"raid6\", \"lv_uuid\":\"n1rm7u-BtXa-srwK-pUaL-TZvf-9hZr-Jah84M\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,origin,thickorigin\", \"lv_attr\":\"owi-a-r---\", \"lv_size\":\"2151677952\", \"origin_size\":\"2151677952\", \"segtype\":\"raid6\", \"stripes\":\"5\", \"stripe_size\":\"65536\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"raid6-snap\", \"lv_uuid\":\"ylBCXu-Sm7u-8jbz-qHd8-lVsK-fq1T-ReBZUO\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,snapshot,thicksnapshot\", \"lv_attr\":\"swi-a-s---\", \"lv_size\":\"1073741824\", \"origin_size\":\"2151677952\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"4096\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"raid6\", \"origin_uuid\":\"n1rm7u-BtXa-srwK-pUaL-TZvf-9hZr-Jah84M\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rimage_0]\", \"lv_uuid\":\"1V6IID-fOXI-KeRv-ovjy-UzAC-wnST-rFv2ln\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,image\", \"lv_attr\":\"iwi-aor---\", \"lv_size\":\"717225984\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rimage_1]\", \"lv_uuid\":\"RWGZnn-g1Ju-iIHm-AwB5-9f8j-Y0Q8-c2TZKW\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,image\", \"lv_attr\":\"iwi-aor---\", \"lv_size\":\"717225984\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rimage_2]\", \"lv_uuid\":\"NfgHNx-k4YK-cW20-MKbK-9iQ3-NchX-psNNVt\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,image\", \"lv_attr\":\"iwi-aor---\", \"lv_size\":\"717225984\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rimage_3]\", \"lv_uuid\":\"pFymCC-OT6c-51wn-CaB7-Qr3h-87Sf-nns82A\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,image\", \"lv_attr\":\"iwi-aor---\", \"lv_size\":\"717225984\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rimage_4]\", \"lv_uuid\":\"S9pGmS-MKxJ-EJg4-1GHj-7Lvy-h7Ij-iCM61C\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,image\", \"lv_attr\":\"iwi-aor---\", \"lv_size\":\"717225984\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rmeta_0]\", \"lv_uuid\":\"TDZuIK-nm3E-N4Ug-VGuW-BVTt-0Q8y-YyZdgw\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,metadata\", \"lv_attr\":\"ewi-aor---\", \"lv_size\":\"4194304\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rmeta_1]\", \"lv_uuid\":\"8Ytd8Q-dZEs-8Fzo-TkIY-3w4N-A8SH-FArGcD\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,metadata\", \"lv_attr\":\"ewi-aor---\", \"lv_size\":\"4194304\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rmeta_2]\", \"lv_uuid\":\"LcgnBT-Hb5O-JsT9-rJn4-azZa-X9ln-0ZL22x\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,metadata\", \"lv_attr\":\"ewi-aor---\", \"lv_size\":\"4194304\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rmeta_3]\", \"lv_uuid\":\"cJGldu-kR6W-jN1t-4RkQ-vzsK-exDX-7XT2Mz\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,metadata\", \"lv_attr\":\"ewi-aor---\", \"lv_size\":\"4194304\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"[raid6_rmeta_4]\", \"lv_uuid\":\"9tnCbg-rhqO-P6RU-oycL-Lmw9-MT3z-17DYeU\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"private,raid,metadata\", \"lv_attr\":\"ewi-aor---\", \"lv_size\":\"4194304\", \"origin_size\":\"\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"striped\", \"lv_uuid\":\"wwaG9y-0eO6-YV8V-oodX-esnr-H6ou-14lrvj\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,origin,thickorigin\", \"lv_attr\":\"owi-a-s---\", \"lv_size\":\"10737418240\", \"origin_size\":\"10737418240\", \"segtype\":\"striped\", \"stripes\":\"2\", \"stripe_size\":\"65536\", \"chunk_size\":\"0\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"\", \"origin_uuid\":\"\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"},", + " {\"lv_name\":\"striped-snap\", \"lv_uuid\":\"sDdckH-L9qv-3s3B-90fY-236h-pjH5-41Ac07\", \"vg_name\":\"test\", \"vg_uuid\":\"hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz\", \"lv_role\":\"public,snapshot,thicksnapshot\", \"lv_attr\":\"swi-a-s---\", \"lv_size\":\"1073741824\", \"origin_size\":\"10737418240\", \"segtype\":\"linear\", \"stripes\":\"1\", \"stripe_size\":\"0\", \"chunk_size\":\"4096\", \"pool_lv\":\"\", \"pool_lv_uuid\":\"\", \"origin\":\"striped\", \"origin_uuid\":\"wwaG9y-0eO6-YV8V-oodX-esnr-H6ou-14lrvj\", \"data_lv\":\"\", \"data_lv_uuid\":\"\", \"metadata_lv\":\"\", \"metadata_lv_uuid\":\"\"}", + " ]", + " }", + " ]", + " }" + }; + + vector<string> output = { + "lv:{ lv-name:[cache1-volume] lv-uuid:3Roi9q-GIIJ-yFvy-F5fc-wazU-kMdX-4CaVJh vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:normal role:private active:true size:1073741824 segments:<stripes:1> }", + "lv:{ lv-name:[cache1_corig] lv-uuid:1Uy23z-t5Re-WfZX-c0B6-jHhR-JuF4-W7JbX4 vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:normal role:private active:true size:10737418240 segments:<stripes:1> }", + "lv:{ lv-name:[cache2-pool] lv-uuid:CAFMIn-I6Sf-MecC-Ml9y-8rHu-2e14-jkRfng vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:cache-pool role:private active:false size:1073741824 data-name:[cache2-pool_cdata] data-uuid:PyuiGz-CB7m-H81T-w4Am-7bM3-92O1-Ja391A metadata-name:[cache2-pool_cmeta] metadata-uuid:LOIc6h-R7ji-atV0-IcMz-1d0K-1vyw-cIbMj5 segments:<stripes:1 chunk-size:65536> }", + "lv:{ lv-name:[cache2-pool_cdata] lv-uuid:PyuiGz-CB7m-H81T-w4Am-7bM3-92O1-Ja391A vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:normal role:private active:true size:1073741824 segments:<stripes:1> }", + "lv:{ lv-name:[cache2-pool_cmeta] lv-uuid:LOIc6h-R7ji-atV0-IcMz-1d0K-1vyw-cIbMj5 vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:8388608 segments:<stripes:1> }", + "lv:{ lv-name:[cache2_corig] lv-uuid:pwFXSG-PJ9U-jTgO-PL3z-7SCZ-hZ0D-RlUFT6 vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:normal role:private active:true size:10737418240 segments:<stripes:1> }", + "lv:{ lv-name:[lvol0_pmspare] lv-uuid:c9k6dk-qgwV-ZUU1-et7J-jS6b-nKby-THgkio vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:false size:8388608 segments:<stripes:1> }", + "lv:{ lv-name:[mirror_mimage_0] lv-uuid:ey2DSj-J6ge-WQvp-MGvP-q6WB-G0ko-zwJb71 vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:2147483648 segments:<stripes:1> }", + "lv:{ lv-name:[mirror_mimage_1] lv-uuid:bl5iiI-iLz0-CgZJ-EoD2-vMvo-brhj-MbKzhq vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:2147483648 segments:<stripes:1> }", + "lv:{ lv-name:[mirror_mlog] lv-uuid:Jgxglt-c14Y-l4cb-xOHI-fT50-Zm9n-cV8urT vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:4194304 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rimage_0] lv-uuid:1V6IID-fOXI-KeRv-ovjy-UzAC-wnST-rFv2ln vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:717225984 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rimage_1] lv-uuid:RWGZnn-g1Ju-iIHm-AwB5-9f8j-Y0Q8-c2TZKW vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:717225984 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rimage_2] lv-uuid:NfgHNx-k4YK-cW20-MKbK-9iQ3-NchX-psNNVt vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:717225984 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rimage_3] lv-uuid:pFymCC-OT6c-51wn-CaB7-Qr3h-87Sf-nns82A vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:717225984 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rimage_4] lv-uuid:S9pGmS-MKxJ-EJg4-1GHj-7Lvy-h7Ij-iCM61C vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:717225984 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rmeta_0] lv-uuid:TDZuIK-nm3E-N4Ug-VGuW-BVTt-0Q8y-YyZdgw vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:4194304 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rmeta_1] lv-uuid:8Ytd8Q-dZEs-8Fzo-TkIY-3w4N-A8SH-FArGcD vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:4194304 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rmeta_2] lv-uuid:LcgnBT-Hb5O-JsT9-rJn4-azZa-X9ln-0ZL22x vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:4194304 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rmeta_3] lv-uuid:cJGldu-kR6W-jN1t-4RkQ-vzsK-exDX-7XT2Mz vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:4194304 segments:<stripes:1> }", + "lv:{ lv-name:[raid6_rmeta_4] lv-uuid:9tnCbg-rhqO-P6RU-oycL-Lmw9-MT3z-17DYeU vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:unknown role:private active:true size:4194304 segments:<stripes:1> }", + "lv:{ lv-name:cache1 lv-uuid:hOiWKM-Cy45-OTvw-d4vR-inXD-bol2-zw7ses vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:cache role:public active:true size:10737418240 origin-size:10737418240 pool-name:[cache1-volume] pool-uuid:3Roi9q-GIIJ-yFvy-F5fc-wazU-kMdX-4CaVJh origin-name:[cache1_corig] origin-uuid:1Uy23z-t5Re-WfZX-c0B6-jHhR-JuF4-W7JbX4 segments:<stripes:1 chunk-size:65536> }", + "lv:{ lv-name:cache1-snap lv-uuid:BMgF2x-ft26-EuK4-PfPv-BHEr-MMAP-a9Uscw vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:snapshot role:public active:true size:1073741824 origin-size:10737418240 origin-name:cache1 origin-uuid:hOiWKM-Cy45-OTvw-d4vR-inXD-bol2-zw7ses segments:<stripes:1 chunk-size:4096> }", + "lv:{ lv-name:cache2 lv-uuid:kyQmHp-8HiZ-PtK0-7TxV-FcVV-iRWi-8nugzx vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:cache role:public active:true size:10737418240 origin-size:10737418240 pool-name:[cache2-pool] pool-uuid:CAFMIn-I6Sf-MecC-Ml9y-8rHu-2e14-jkRfng origin-name:[cache2_corig] origin-uuid:pwFXSG-PJ9U-jTgO-PL3z-7SCZ-hZ0D-RlUFT6 segments:<stripes:1 chunk-size:65536> }", + "lv:{ lv-name:cache2-snap lv-uuid:occp3W-hd5C-4Upb-MJ08-bj0W-6qSK-DEolsv vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:snapshot role:public active:true size:1073741824 origin-size:10737418240 origin-name:cache2 origin-uuid:kyQmHp-8HiZ-PtK0-7TxV-FcVV-iRWi-8nugzx segments:<stripes:1 chunk-size:4096> }", + "lv:{ lv-name:linear lv-uuid:Uc5EDE-fVaz-9N6M-rkYh-iq4n-kHZu-3qOjxX vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:normal role:public active:true size:10737418240 origin-size:10737418240 segments:<stripes:1> }", + "lv:{ lv-name:linear-snap lv-uuid:XNxQEY-xgXk-ztle-9vtN-ayma-tWVL-xEDNR5 vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:snapshot role:public active:true size:1073741824 origin-size:10737418240 origin-name:linear origin-uuid:Uc5EDE-fVaz-9N6M-rkYh-iq4n-kHZu-3qOjxX segments:<stripes:1 chunk-size:4096> }", + "lv:{ lv-name:mirror lv-uuid:iW0JIT-d1Dz-DEGS-b1uM-1d7h-gBx7-yLHVY9 vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:mirror role:public active:true size:2147483648 origin-size:2147483648 segments:<stripes:2> }", + "lv:{ lv-name:mirror-snap lv-uuid:jv03Ag-gctg-E2lF-GtGZ-nNRe-7N3d-ZaEggG vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:snapshot role:public active:true size:1073741824 origin-size:2147483648 origin-name:mirror origin-uuid:iW0JIT-d1Dz-DEGS-b1uM-1d7h-gBx7-yLHVY9 segments:<stripes:1 chunk-size:4096> }", + "lv:{ lv-name:raid6 lv-uuid:n1rm7u-BtXa-srwK-pUaL-TZvf-9hZr-Jah84M vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:raid role:public active:true size:2151677952 origin-size:2151677952 segments:<stripes:5 stripe-size:65536> }", + "lv:{ lv-name:raid6-snap lv-uuid:ylBCXu-Sm7u-8jbz-qHd8-lVsK-fq1T-ReBZUO vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:snapshot role:public active:true size:1073741824 origin-size:2151677952 origin-name:raid6 origin-uuid:n1rm7u-BtXa-srwK-pUaL-TZvf-9hZr-Jah84M segments:<stripes:1 chunk-size:4096> }", + "lv:{ lv-name:striped lv-uuid:wwaG9y-0eO6-YV8V-oodX-esnr-H6ou-14lrvj vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:normal role:public active:true size:10737418240 origin-size:10737418240 segments:<stripes:2 stripe-size:65536> }", + "lv:{ lv-name:striped-snap lv-uuid:sDdckH-L9qv-3s3B-90fY-236h-pjH5-41Ac07 vg-name:test vg-uuid:hW15Gj-YaBO-Y7yK-Xdc0-L04A-UyJk-2cg3Wz lv-type:snapshot role:public active:true size:1073741824 origin-size:10737418240 origin-name:striped origin-uuid:wwaG9y-0eO6-YV8V-oodX-esnr-H6ou-14lrvj segments:<stripes:1 chunk-size:4096> }" + }; + + check(input, output); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libstorage-ng-4.3.35/testsuite/probe.cc new/libstorage-ng-4.3.37/testsuite/probe.cc --- old/libstorage-ng-4.3.35/testsuite/probe.cc 2020-07-17 10:03:20.000000000 +0200 +++ new/libstorage-ng-4.3.37/testsuite/probe.cc 2020-07-22 12:49:43.000000000 +0200 @@ -21,7 +21,7 @@ storage.probe(); storage.check(); - BOOST_CHECK_EQUAL(storage.get_devicegraph_names().size(), 3); + BOOST_CHECK_EQUAL(storage.get_devicegraphs().size(), 3); const Devicegraph* probed = storage.get_probed();
