Compare commits

...
Sign in to create a new pull request.

110 commits

Author SHA1 Message Date
Marian Csontos
010e823bf0 Update to version 1.3.1 2025-12-02 12:17:27 +01:00
Marian Csontos
af8fbf5a50 Update to version 1.3.0 2025-10-22 16:56:52 +02:00
Marian Csontos
6e75527416 Update to version 1.2.1 2025-09-04 16:09:00 +02:00
Fedora Release Engineering
f5a75df400 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-23 19:13:00 +00:00
Marian Csontos
f8b6ae0ff5 Fix tarball links 2025-06-26 13:53:30 +02:00
Marian Csontos
6eaa83f886 Update README 2025-06-16 15:20:46 +02:00
Marian Csontos
afa261551b Update README
Describe Cargo.toml patching.
And explain the notes to greater detail.
2025-06-11 15:23:22 +02:00
Fedora Release Engineering
cfc9435230 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-16 15:37:25 +00:00
Zbigniew Jędrzejewski-Szmek
42f0442c76 Rebuilt for the bin-sbin merge (2nd attempt)
https://fedoraproject.org/wiki/Changes/Unify_bin_and_sbin
2025-01-12 14:26:13 +01:00
Marian Csontos
a540c7b432 Update to version 1.1.0 2024-09-02 15:28:34 +02:00
Fedora Release Engineering
4bace50fd1 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-17 20:51:53 +00:00
Zbigniew Jędrzejewski-Szmek
d830fc9808 Rebuilt for the bin-sbin merge
https://fedoraproject.org/wiki/Changes/Unify_bin_and_sbin
2024-07-09 12:59:45 +02:00
Zbigniew Jędrzejewski-Szmek
226ede080b Fix build when %_bindir==%_sbindir
Preparation for https://fedoraproject.org/wiki/Changes/Unify_bin_and_sbin.
%install was putting files in the wrong directory.

Also, move %install above %test, because %install happens first, and %test
after that.
2024-04-17 23:26:03 +02:00
Marian Csontos
e10017f376 Update to version 1.0.12 2024-02-27 10:42:12 +01:00
Marian Csontos
7ccc70d06b SPDX: Add licenses for vendored libraries. 2024-02-27 10:41:23 +01:00
Marian Csontos
36f16d6703 SPDX migration. 2024-02-13 10:19:16 +01:00
Yaakov Selkowitz
e9706a7124 Update Rust macro usage
The rust-toolset macros in RHEL 10 are now compatible with Fedora's
in terms of handling vendoring and automatic generation of license
information and bundled provides.
2024-02-08 12:26:19 -05:00
Marian Csontos
32537c977f Update to version 1.0.11 2024-02-08 15:07:20 +01:00
Fedora Release Engineering
c1fa90d775 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-24 09:20:18 +00:00
Fedora Release Engineering
62ab60b959 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-19 17:03:28 +00:00
Marian Csontos
8f47f1dde7 Fix some compatibility issues with Python3 2024-01-18 13:36:46 +01:00
Marian Csontos
fc4e1a8529 Use make_install macro in spec 2024-01-18 13:36:46 +01:00
Filip Suba
0ee1026718 Backport function tests from centos stream 2024-01-18 13:08:38 +01:00
Filip Suba
d37efc8796 Change expected result of thin_rmap test with negatine number in region
Related: #2227208
(cherry picked from commit fb7da57375717002f0cc4af5676175e9b996a6b6)
2024-01-16 16:08:19 +01:00
Filip Suba
e3c64593c6 Fix dmpd_functions test
Related: #2175198
(cherry picked from commit 6daf341749b4830d1e00d5ebedee62c8fb2fcac1)
2024-01-16 16:08:16 +01:00
Marian Csontos
b76b7df037 Fix test incompatibility with python-3.7+
platform.linux_distribution was removed in python-3.7.

Related: #2175198
(cherry picked from commit a517fa496c7a947b0d943fdf90a70b9d6eb312a8)
2024-01-16 16:08:10 +01:00
Marian Csontos
c950fe5f28 Update to version 1.0.9 2023-12-13 10:05:34 +01:00
Marian Csontos
a6ab2577d8 Fix ioctl call on ppc64le breaking installation. 2023-08-31 11:44:12 +02:00
Marian Csontos
80bd16a715 Update to version 1.0.6 2023-08-09 14:32:11 +02:00
Marian Csontos
74d27c1f25 Fix previous commit 2023-07-27 12:27:19 +02:00
Marian Csontos
9ca4681979 Update to version 1.0.5 2023-07-27 12:16:23 +02:00
Fedora Release Engineering
e1a1e8841f Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-19 17:19:36 +00:00
Yaakov Selkowitz
ee730faf27 Use rust-toolset in RHEL builds
RHEL provides a minimal set of macros compared to Fedora.
2023-05-30 16:15:15 -04:00
Marian Csontos
db577ef350 Update to version 1.0.4 2023-04-28 16:41:15 +02:00
Marian Csontos
8d2c47ae1c Update to version 1.0.2 2023-03-02 14:42:42 +01:00
Fabio Valentini
804560ae46
Rebuild for fixed frame pointer compiler flags in Rust RPM macros 2023-02-05 19:06:07 +01:00
Fedora Release Engineering
eb7bb8b343 Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-19 01:17:27 +00:00
Fedora Release Engineering
20de387ada Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-21 00:21:07 +00:00
Marian Csontos
99369c4f67 tests: Fix compatibility with Python3
xrange was renamed to range in Python3.
2022-06-24 14:45:25 +02:00
Fedora Release Engineering
126554fe2a - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-20 00:33:44 +00:00
Marian Csontos
60cbba5ee8 Fix build issue 2021-07-22 11:47:33 +02:00
Fedora Release Engineering
c6ef39964e - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-21 20:41:22 +00:00
Marian Csontos
266ea5b3cf Fix issues found by static analysis 2021-06-10 15:05:05 +02:00
Marian Csontos
c8a7f0ad3e Fix gating tests 2021-06-10 14:49:17 +02:00
Fedora Release Engineering
04960e2a1e - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-26 03:17:52 +00:00
Tom Stellard
d369cfa3c5 Add BuildRequires: make
https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot
2020-12-19 06:06:36 +00:00
Marian Csontos
9537e3e84a Fix build on non x86 architectures 2020-09-21 14:26:43 +02:00
Marian Csontos
17d784aa7f Update to ustrream release 0.9.0 2020-09-17 17:23:28 +02:00
Marian Csontos
00ee8c1bd2 Update to upstream release 0.9.0 2020-09-17 17:23:28 +02:00
Fedora Release Engineering
3a6c7c6f8e - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-27 15:17:54 +00:00
Fedora Release Engineering
8049d4672f - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-01-28 15:43:34 +00:00
Fedora Release Engineering
421e6526f6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-07-24 21:53:02 +00:00
Marian Csontos
fbb64262ce New upstream release v0.8.5 2019-06-04 14:49:44 +02:00
Marian Csontos
b2f4dd907c New upstream release v0.8.1 2019-05-04 21:37:19 +02:00
Marian Csontos
95fb81b412 New upstream release v0.8.0 2019-04-29 14:42:51 +02:00
Fedora Release Engineering
63039122dd - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-01-31 17:07:35 +00:00
Igor Gnatenko
b31f85ac26 Remove unneeded %clean section
It is the behavior since EPEL5.

Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
2019-01-29 05:45:40 +01:00
Igor Gnatenko
731228e5f9 Remove obsolete Group tag
References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag
2019-01-28 20:23:59 +01:00
Jonathan Wakely
790a1dc624 Rebuilt for Boost 1.69 2019-01-25 14:54:45 +00:00
Fedora Release Engineering
c01e369f7e - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-07-12 22:48:28 +00:00
Marian Csontos
88778300c5 New upstream release v0.7.6 2018-04-24 19:11:56 +02:00
Marian Csontos
a19342ade3 Add gcc-c++ to BuildRequires 2018-02-20 15:41:25 +01:00
Fedora Release Engineering
c327b607fe - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-02-07 06:43:05 +00:00
Jonathan Wakely
40e854a10a Rebuilt for Boost 1.66 2018-01-23 22:31:29 +00:00
Marian Csontos
e2f2093885 New upstream release v0.7.5
This fixes an mportant bug in cache_restore.
The rest is mostly changing tests.
2017-11-14 11:50:42 +01:00
Bruno Goncalves
651216ed6a Add CI tests using the standard test interface 2017-10-19 10:48:24 +02:00
Marian Csontos
5d5ebcb425 New upstream release v0.7.3 2017-10-06 16:40:45 +02:00
Marian Csontos
7d940d6bd5 New upstream release v0.7.2 2017-09-22 09:05:47 +02:00
Fedora Release Engineering
76f23150c1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild 2017-08-02 19:33:14 +00:00
Fedora Release Engineering
a3db74c795 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild 2017-07-26 06:07:19 +00:00
Jonathan Wakely
b557b0f646 Rebuilt for Boost 1.64 2017-07-03 17:54:45 +01:00
Marian Csontos
a9f94b0fd5 Fix previous commit missed to increment Release 2017-05-23 11:10:49 +02:00
Marian Csontos
4378ae0980 Rebuild to undo mass rebuild mess 2017-05-23 10:49:41 +02:00
Fedora Release Engineering
db4dc6b746 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild 2017-05-15 19:52:39 +00:00
Peter Rajnoha
4cd2a32be9 New upstream release v0.7.0-rc6. 2017-03-27 17:10:25 +02:00
Peter Rajnoha
157df5df7d New upstream release v0.7.0-rc5. 2017-03-22 08:44:21 +01:00
Peter Rajnoha
f95d0a67cc New upstream release v0.7.0-rc4. 2017-03-21 12:49:42 +01:00
Peter Rajnoha
de968c0e8c Fixes and cleanups. 2017-03-16 15:24:13 +01:00
Peter Rajnoha
bbce189d61 New upstream release v0.7.0-rc2. 2017-03-09 11:40:12 +01:00
Peter Rajnoha
d295f18b54 New upstream release v0.7.0-rc2. 2017-03-09 11:36:39 +01:00
Fedora Release Engineering
0a96e398ab - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild 2017-02-10 08:19:52 +00:00
Jonathan Wakely
702f380fa3 Rebuilt for Boost 1.63 2017-01-27 03:19:35 +00:00
Peter Rajnoha
9e7d28d253 New upstream release v0.6.3. 2016-09-22 14:47:56 +02:00
Peter Rajnoha
413d274654 New upstream release v0.6.2. 2016-07-11 11:33:15 +02:00
Peter Rajnoha
635d3473dc New upstream release v0.6.2-rc8. 2016-04-11 14:14:03 +02:00
Peter Rajnoha
5c01a0ad21 New upstream release v0.6.2-rc7. 2016-03-22 09:33:08 +01:00
Peter Rajnoha
0e6c2c5e66 New upstream release v0.6.2-rc6. 2016-03-09 08:58:22 +01:00
Peter Rajnoha
9e4b69ab08 New upstream release v0.6.2-rc6. 2016-03-09 08:49:37 +01:00
Peter Rajnoha
90fbaa7a9d New upstream release v0.6.2-rc5. 2016-02-18 16:35:29 +01:00
Peter Rajnoha
18f5b7e6e1 New upstream release v0.6.2-rc4. 2016-02-17 12:58:16 +01:00
Peter Rajnoha
99ea430f9d New upstream release v0.6.2-rc3. 2016-02-16 19:41:50 +01:00
Dennis Gilmore
dc1e2176c5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild 2016-02-03 18:39:21 +00:00
Peter Rajnoha
8579281e34 New upstream release v0.6.0. 2016-01-20 17:35:15 +01:00
Peter Rajnoha
bcbdabcaa4 New upstream release v0.6.0. 2016-01-20 17:00:10 +01:00
Peter Rajnoha
44d4734254 New upstream release v0.5.6. 2016-01-20 13:54:28 +01:00
Jonathan Wakely
ac257c3d7b Rebuilt for Boost 1.60 2016-01-15 04:20:45 +00:00
Jonathan Wakely
70a39d44f8 Rebuilt for Boost 1.59 2015-08-27 21:20:04 +01:00
Peter Rajnoha
7b3b0cf9d9 New upstream release v0.5.5. 2015-08-13 16:19:38 +02:00
Dennis Gilmore
4653be1d64 - Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159 2015-07-29 12:09:12 -05:00
David Tardon
3fb2f8386a rebuild for Boost 1.58 2015-07-22 18:22:02 +02:00
Peter Rajnoha
854d454495 Update to version 0.5.4 containing a bug fix. 2015-07-17 15:43:18 +02:00
Peter Rajnoha
fc57c16ec9 Update to version 0.5.3. 2015-07-07 16:01:32 +02:00
Peter Rajnoha
20c2ae43f9 Update to version 0.5.2 containing a bug fix. 2015-07-03 14:19:48 +02:00
Peter Rajnoha
86a94835f6 Update to version 0.5.1 containing a bug fix. 2015-06-25 13:42:53 +02:00
Peter Rajnoha
66641de0f9 Fix link to source. 2015-06-22 14:39:17 +02:00
Peter Rajnoha
cc79a1927d New upstream release. 2015-06-22 14:37:58 +02:00
Dennis Gilmore
1812d33a51 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild 2015-06-17 03:58:15 +00:00
Peter Rajnoha
5f5f0e1228 New upstream release. 2015-06-10 13:32:28 +02:00
Peter Rajnoha
2f00308a6f New upstream release. 2015-06-10 12:58:22 +02:00
Kalev Lember
6e89b7444e Rebuilt for GCC 5 C++11 ABI change 2015-05-02 13:19:05 +02:00
28 changed files with 4454 additions and 1753 deletions

56
.gitignore vendored
View file

@ -5,3 +5,59 @@
/thin-provisioning-tools-v0.2.8.tar.bz2
/thin-provisioning-tools-v0.3.0.tar.bz2
/thin-provisioning-tools-v0.3.2.tar.bz2
/thin-provisioning-tools-0.5.0.tar.gz
/thin-provisioning-tools-0.5.1.tar.gz
/thin-provisioning-tools-0.5.2.tar.gz
/thin-provisioning-tools-0.5.3.tar.gz
/thin-provisioning-tools-0.5.4.tar.gz
/thin-provisioning-tools-0.5.5.tar.gz
/thin-provisioning-tools-0.5.6.tar.gz
/thin-provisioning-tools-0.6.0.tar.gz
/thin-provisioning-tools-0.6.2-rc3.tar.gz
/thin-provisioning-tools-0.6.2-rc4.tar.gz
/thin-provisioning-tools-0.6.2-rc5.tar.gz
/thin-provisioning-tools-0.6.2-rc6.tar.gz
/thin-provisioning-tools-0.6.2-rc7.tar.gz
/thin-provisioning-tools-0.6.2-rc8.tar.gz
/thin-provisioning-tools-0.6.2.tar.gz
/thin-provisioning-tools-0.6.3.tar.gz
/thin-provisioning-tools-0.7.0-rc2.tar.gz
/thin-provisioning-tools-0.7.0-rc3.tar.gz
/thin-provisioning-tools-0.7.0-rc4.tar.gz
/thin-provisioning-tools-0.7.0-rc5.tar.gz
/thin-provisioning-tools-0.7.0-rc6.tar.gz
/v0.7.2.tar.gz
/v0.7.3.tar.gz
/v0.7.5.tar.gz
/v0.7.6.tar.gz
/v0.8.0.tar.gz
/v0.8.1.tar.gz
/v0.8.5.tar.gz
/v0.9.0-rc2.tar.gz
/device-mapper-persistent-data-0.9.0-rc2-vendor.tar.gz
/v0.9.0.tar.gz
/dmpd090-vendor.tar.gz
/dmpd090-vendor2.tar.gz
/dmpd090-vendor3.tar.gz
/v1.0.2.tar.gz
/dmpd102-vendor.tar.gz
/v1.0.4.tar.gz
/dmpd104-vendor.tar.gz
/v1.0.5.tar.gz
/dmpd105-vendor.tar.gz
/v1.0.6.tar.gz
/dmpd106-vendor.tar.gz
/v1.0.9.tar.gz
/dmpd109-vendor.tar.gz
/v1.0.11.tar.gz
/dmpd1011-vendor.tar.gz
/v1.0.12.tar.gz
/dmpd1012-vendor.tar.gz
/v1.1.0.tar.gz
/dmpd110-vendor.tar.gz
/v1.2.1.tar.gz
/dmpd121-vendor.tar.gz
/v1.3.0.tar.gz
/dmpd130-vendor.tar.gz
/v1.3.1.tar.gz
/dmpd131-vendor.tar.gz

54
README.md Normal file
View file

@ -0,0 +1,54 @@
# Packaging device-mapper-persitent-data (AKA dmpd)
This is rust package using *vendor* file for dependencies. (Vendor file is an archive of dependencies' sources.)
For most of simple fixes, there is nothing special,
to add a patches simply add them to dist-git,
add a corresponding `PatchN: 000N-...` lines,
increase `Release:` or `release_suffix` for Z-stream (or for test build use suffix like `.bzNNNNNN`),
add to `%changelog`,
commit,
push,
and build the package using `fedpkg build`.
Alternatively before committing anything use `fedpkg srpm` and `fedpkg scratch-build --srpm $SRPM [--arches x86_64]` to create a scratch build.
However when building a new version of dmpd or when updating a dependency is
needed (e.g. because of CVE in the dependency) vendor file
has to be regenerated.
## Updating vendor file
To build a new version of the package following tooling is needed:
- `rust >= 1.35`
- `cargo` providing vendor subcommand (now upstream, included in latest Fedora and RHEL8+)
To create the vendor file:
In the upstream directory:
1. Run `cargo vendor` in the directory with upstream sources to create *vendor*
directory with sources.
- TODO: There is a *cargo-vendor-filterer* project used by *stratisd* to
filter out unnecessary dependencies for other operating systems.
2. Run `tar czf device-mapper-persistent-data-vendor-$VERSION.tar.gz ./vendor` to create a tarball.
3. Copy the vendor file to dist git directory.
In the dist-git directory:
1. Get the upstream tarball `wget https://github.com/jthornber/thin-provisioning-tools/archive/v$VERSION.tar.gz`
- NOTE: Migration to `https://github.com/device-mapper-utils/thin-provisioning-tools` is coming.
2. Update *Source0* and *Source1* to correct values.
3. Add the tarballs to koji/brew lookaside:
- `fedpkg new-sources v$VERSION.tar.gz device-mapper-persistent-data-vendor-$VERSION.tar.gz`
## TODO/NOTES
Some of the dependencies are already packaged by Fedora. Can we instruct *cargo vendor* to include only those which are not provided by Fedora?
It would be possible to include these as submodules, and the rest could be used from Fedora.
For RHEL and CentOS Stream using vendor file is the recommended way.
*%cargo_install* installs by default in */usr/bin* but the package expects */usr/sbin*. For now I run *make install-rust-tools*.
Now Fedora unified the */usr/sbin* and */usr/bin* directories, to this can be "fixed" in Fedora and later in CentOS Stream.

View file

@ -1,160 +0,0 @@
diff --git a/man8/thin_dump.8 b/man8/thin_dump.8
index b26cc2c..4827e1a 100644
--- a/man8/thin_dump.8
+++ b/man8/thin_dump.8
@@ -5,30 +5,37 @@ thin_dump \- dump thin provisioning metadata from device or file to standard out
.SH SYNOPSIS
.B thin_dump
.RB [options]
-.I {metadata device|file}
+.I {device|file}
.SH DESCRIPTION
.B thin_dump
dumps binary thin provisioning metadata (optionally from alternate block;
see option \-\-metadata-snap) created by the device-mapper
-thin provisioning target on a device or file to standard output for
+thin provisioning target on a
+.I device
+or
+.I file
+to standard output for
analysis or postprocessing in either XML or human readable format.
XML formated metadata can be fed into thin_restore (see
.BR thin_restore(8) )
-in order to put it back onto a metadata device (to process by
-the device-mapper target) or file.
+in order to put it back onto a metadata
+.I device
+(to process by the device-mapper target) or
+.I file.
.IP "\fB\-f, \-\-format\fP \fI{xml|human_readable}\fP".
Print output in XML or human readable format.
.IP "\fB\-r, \-\-repair\fP".
+Repair the metadata whilst dumping it.
.IP "\fB\-m, \-\-metadata_snap\fP [block#]".
Dump metadata snapshot created by device-mapper thin provisioning target.
If block is not provided, access the default metadata snapshot created by
the thin provisioning device-mapper target, else try the one at block#.
See the thin provisioning target documentation on how to create or release
-a metadata snapshot.
+a metadata snapshot and retrieve the block number from the kernel.
.IP "\fB\-h, \-\-help\fP".
Print help and exit.
diff --git a/man8/thin_metadata_size.8 b/man8/thin_metadata_size.8
index 6b00e73..80e572f 100644
--- a/man8/thin_metadata_size.8
+++ b/man8/thin_metadata_size.8
@@ -27,7 +27,7 @@ Default is in sectors without a pool size unit specifier.
.IP "\fB\-m, \-\-max-thins\fP \fI#[bskKmMgGtTpPeEzZyY]\fP"
Maximum sum of all thin provisioned devices and snapshots.
Unit identifier supported to allow for convenient entry of large quantities, eg. 1000000 = 1M.
-Default is absolut quantity without a number unit specifier.
+Default is absolute quantity without a number unit specifier.
.IP "\fB\-u, \-\-unit\fP \fI{bskKmMgGtTpPeEzZyY}\fP"
Output unit specifier in units of bytes,sectors,kilobytes,kibibytes,... respectively.
@@ -43,7 +43,7 @@ Print help and exit.
Output version information and exit.
.SH EXAMPLES
-Calculates the thin privisioning metadata device size for block size 64 kilobytes,
+Calculates the thin provisioning metadata device size for block size 64 kilobytes,
pool size 1 terabytes and maximum number of thin provisioned devices and snapshots of 1000
in units of sectors with long output:
.sp
diff --git a/man8/thin_repair.8 b/man8/thin_repair.8
index 69cddea..1048de5 100644
--- a/man8/thin_repair.8
+++ b/man8/thin_repair.8
@@ -12,9 +12,18 @@ thin_repair \- repair thin provisioning binary metadata from device/file to devi
.SH DESCRIPTION
.B thin_repair
-repairs binary thin provisioning metadata created by the
-respective device-mapper target processing to another device or file.
-If repaired to a metadata device, the metadata can be processed
+reads binary thin provisioning metadata created by the
+respective device-mapper target from one
+.I device
+or
+.I file
+, repairs it and writes it to another
+.I device
+or
+.I file.
+If written to a metadata
+.I device
+, the metadata can be processed
by the device-mapper target.
.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP"
@@ -30,10 +39,10 @@ Print help and exit.
Output version information and exit.
.SH EXAMPLE
-Repairs the binary thin provisioning metadata on file
+Reads the binary thin provisioning metadata from file
.B metadata
-to logical volume /dev/vg/metadata for further processing by the
-respective device-mapper target:
+, repairs it and writes it to logical volume /dev/vg/metadata
+for further processing by the respective device-mapper target:
.sp
.B thin_repair -i metadata -o /dev/vg/metadata
diff --git a/man8/thin_restore.8 b/man8/thin_restore.8
index 8ab2976..dc7eb90 100644
--- a/man8/thin_restore.8
+++ b/man8/thin_restore.8
@@ -15,9 +15,14 @@ thin_restore \- restore thin provisioning metadata file to device or file
restores thin provisioning metadata created by the
respective device-mapper target dumped into an XML formatted (see
.BR thin_dump(8) )
-file, which optionally can be preprocessed to another device or file.
-If restored to a metadata device, the metadata can be processed
-by the device-mapper target.
+.I file
+, which optionally can be preprocessed before the restore to another
+.I device
+or
+.I file.
+If restored to a metadata
+.I device
+, the metadata can be processed by the device-mapper target.
.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP"
Input file or device with metadata.
diff --git a/man8/thin_rmap.8 b/man8/thin_rmap.8
index d68defb..4d74520 100644
--- a/man8/thin_rmap.8
+++ b/man8/thin_rmap.8
@@ -1,16 +1,20 @@
.TH THIN_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
.SH NAME
-thin_rmap \- output reverse map of a thin provisioned region of blocks
+thin_rmap \- output reverse map of a thin provisioned region of blocks from metadata device or file
.SH SYNOPSIS
.B thin_rmap
.RB [options]
-.I {metadata device|file}
+.I {device|file}
.SH DESCRIPTION
.B thin_rmap
-outputs the reverse mapping for a region of thin provisioned pool blocks
-to the respective thin provisioned devices.
+outputs the reverse mapping stored in the metadata on a
+.I device
+or
+.I file
+between a region of thin provisioned pool blocks
+and the associated thin provisioned devices.
.IP "\fB\\-\-region\fP \fI<block range>\fP".
output reverse map

View file

@ -1,281 +0,0 @@
diff --git a/Makefile.in b/Makefile.in
index 1e7bd54..b44cbd7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -264,7 +264,10 @@ install: $(PROGRAMS)
$(INSTALL_DIR) $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8
+ $(INSTALL_DATA) man8/thin_repair.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_restore.8 $(MANPATH)/man8
+ $(INSTALL_DATA) man8/thin_rmap.8 $(MANPATH)/man8
+ $(INSTALL_DATA) man8/thin_metadata_size.8 $(MANPATH)/man8
.PHONY: install
diff --git a/man8/thin_check.8 b/man8/thin_check.8
index f9606e0..1489078 100644
--- a/man8/thin_check.8
+++ b/man8/thin_check.8
@@ -55,7 +55,10 @@ returns an exit code of 0 for success or 1 for error.
.SH SEE ALSO
.B thin_dump(8)
+.B thin_repair(8)
.B thin_restore(8)
+.B thin_rmap(8)
+.B thin_metadata_size(8)
.SH AUTHOR
Joe Thornber <ejt@redhat.com>
diff --git a/man8/thin_dump.8 b/man8/thin_dump.8
index 697df83..e60a6e5 100644
--- a/man8/thin_dump.8
+++ b/man8/thin_dump.8
@@ -9,7 +9,8 @@ thin_dump \- dump thin provisioning metadata from device or file to standard out
.SH DESCRIPTION
.B thin_dump
-dumps thin provisioning metadata created by the device-mapper
+dumps binary thin provisioning metadata (optionally from alternate block;
+see option \-\-metadata-snap) created by the device-mapper
thin provisioning target on a device or file to standard output for
analysis or postprocessing in either XML or human readable format.
XML formated metadata can be fed into thin_restore (see
@@ -22,6 +23,10 @@ Print output in XML or human readable format.
.IP "\fB\-r, \-\-repair\fP".
+.IP "\fB\-m, \-\-metadata_snap\fP block#".
+Dump metadata snapshot created by device-mapper thin provisioning target at block#
+
+
.IP "\fB\-h, \-\-help\fP".
Print help and exit.
@@ -45,8 +50,10 @@ returns an exit code of 0 for success or 1 for error.
.SH SEE ALSO
.B thin_check(8)
+.B thin_repair(8)
.B thin_restore(8)
-
+.B thin_rmap(8)
+.B thin_metadata_size(8)
.SH AUTHOR
Joe Thornber <ejt@redhat.com>
.br
diff --git a/man8/thin_metadata_size.8 b/man8/thin_metadata_size.8
new file mode 100644
index 0000000..33b36b3
--- /dev/null
+++ b/man8/thin_metadata_size.8
@@ -0,0 +1,77 @@
+.TH THIN_METADATA_SIZE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+thin_metadata_size \- thin provisioning metadata file/device size calculator.
+
+.SH SYNOPSIS
+.B thin_metadata_size
+.RB [ options ]
+
+.SH DESCRIPTION
+.B thin_metadata_size
+calculates the size of the thin provisioning metadata based on the block size
+of the thin provisioned devices, the size of the thin provisioning pool and
+the maximum number of all thin prisioned devices and snapshots. Size/number
+option arguments can be followed by unit specifiers in short one character
+and long form (eg. -b1m or -b1megabytes).
+
+.IP "\fB\-b, \-\-block-size\fP \fIBLOCKSIZE[bskKmMgGtTpPeEzZyY]\fP"
+Block size of thin provisioned devices in units of bytes,sectors,kilobytes,kibibytes,... respectively.
+Default is in sectors without a block size unit specifier.
+
+.IP "\fB\-s, \-\-pool-size\fP \fIPOOLSIZE[bskKmMgGtTpPeEzZyY]\fP"
+Thin provisioning pool size in units of bytes,sectors,kilobytes,kibibytes,... respectively.
+Default is in sectors without a pool size unit specifier.
+
+.IP "\fB\-m, \-\-max-thins\fP \fI#[bskKmMgGtTpPeEzZyY]\fP"
+Maximum sum of all thin provisioned devices and snapshots.
+Unit identifier supported to allow for convenient entry of large quantities, eg. 1000000 = 1M.
+Default is absolut quantity without a number unit specifier.
+
+.IP "\fB\-u, \-\-unit\fP \fI{bskKmMgGtTpPeEzZyY}\fP"
+Output unit specifier in units of bytes,sectors,kilobytes,kibibytes,... respectively.
+Default is in sectors without an output unit specifier.
+
+.IP "\fB\-n, \-\-numeric-only [short|long]\fP"
+Limit output to just the size number with the optional unit specifier character/string.
+
+.IP "\fB\-h, \-\-help\fP"
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
+
+.SH EXAMPLES
+Calculates the thin privisioning metadata device size for block size 64 kilobytes,
+pool size 1 terabytes and maximum number of thin provisioned devices and snapshots of 1000
+in units of sectors with long output:
+.sp
+.B thin_metadata_size -b64k -s1t -m1000
+
+Or (using the long options instead) for block size 1 gigabyte, pool size 1 petabytes and maximum number of thin provisioned devices
+and snapshots of 1 million with numeric only output in units of gigabytes:
+.sp
+.B thin_metadata_size --block-size=1g --pool-size=1p --max-thins=1M --unit=g --numeric-only
+
+Same as before (1g,1p,1M,numeric-only) but with unit specifier character appended:
+.sp
+.B thin_metadata_size --block-size=1giga --pool-size=1petabytes --max-thins=1mebi --unit=g --numeric-only=short
+
+Or with unit specifier string appended:
+.sp
+.B thin_metadata_size --block-size=1giga --pool-size=1petabytes --max-thins=1mebi --unit=g -nlong
+
+.SH DIAGNOSTICS
+.B thin_metadata_size
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B thin_dump(8)
+.B thin_check(8)
+.B thin_repair(8)
+.B thin_restore(8)
+.B thin_rmap(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>
diff --git a/man8/thin_repair.8 b/man8/thin_repair.8
new file mode 100644
index 0000000..69cddea
--- /dev/null
+++ b/man8/thin_repair.8
@@ -0,0 +1,54 @@
+.TH THIN_REPAIR 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+thin_repair \- repair thin provisioning binary metadata from device/file to device/file
+
+.SH SYNOPSIS
+.B thin_repair
+.RB [ options ]
+.RB -i
+.I {device|file}
+.RB -o
+.I {device|file}
+
+.SH DESCRIPTION
+.B thin_repair
+repairs binary thin provisioning metadata created by the
+respective device-mapper target processing to another device or file.
+If repaired to a metadata device, the metadata can be processed
+by the device-mapper target.
+
+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP"
+Input file or device with binary metadata.
+
+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP"
+Output file or device for repaired binary metadata.
+
+.IP "\fB\-h, \-\-help\fP"
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
+
+.SH EXAMPLE
+Repairs the binary thin provisioning metadata on file
+.B metadata
+to logical volume /dev/vg/metadata for further processing by the
+respective device-mapper target:
+.sp
+.B thin_repair -i metadata -o /dev/vg/metadata
+
+.SH DIAGNOSTICS
+.B thin_repair
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B thin_dump(8)
+.B thin_check(8)
+.B thin_restore(8)
+.B thin_rmap(8)
+.B thin_metadata_size(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>
diff --git a/man8/thin_restore.8 b/man8/thin_restore.8
index b4a07aa..8ab2976 100644
--- a/man8/thin_restore.8
+++ b/man8/thin_restore.8
@@ -40,12 +40,15 @@ respective device-mapper target:
.B thin_restore -i metadata -o /dev/vg/metadata
.SH DIAGNOSTICS
-.B thin_dump
+.B thin_restore
returns an exit code of 0 for success or 1 for error.
.SH SEE ALSO
.B thin_dump(8)
.B thin_check(8)
+.B thin_repair(8)
+.B thin_rmap(8)
+.B thin_metadata_size(8)
.SH AUTHOR
Joe Thornber <ejt@redhat.com>
diff --git a/man8/thin_rmap.8 b/man8/thin_rmap.8
new file mode 100644
index 0000000..d68defb
--- /dev/null
+++ b/man8/thin_rmap.8
@@ -0,0 +1,44 @@
+.TH THIN_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+thin_rmap \- output reverse map of a thin provisioned region of blocks
+
+.SH SYNOPSIS
+.B thin_rmap
+.RB [options]
+.I {metadata device|file}
+
+.SH DESCRIPTION
+.B thin_rmap
+outputs the reverse mapping for a region of thin provisioned pool blocks
+to the respective thin provisioned devices.
+
+.IP "\fB\\-\-region\fP \fI<block range>\fP".
+output reverse map
+
+.IP "\fB\-h, \-\-help\fP".
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP".
+Output version information and exit.
+
+.SH EXAMPLES
+output reverse map for pool blocks 5..45 (denotes blocks 5 to 44 inclusive, but not block 45)
+
+.sp
+.B thin_rmap -r 5..45 /dev/vg/pool
+
+.SH DIAGNOSTICS
+.B thin_rmap
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B thin_check(8)
+.B thin_dump(8)
+.B thin_repair(8)
+.B thin_restore(8)
+.B thin_metadata_size(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>

View file

@ -1,494 +0,0 @@
diff --git a/Makefile.in b/Makefile.in
index a82ff67..1e7bd54 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -24,7 +24,8 @@ PROGRAMS=\
thin_dump \
thin_restore \
thin_repair \
- thin_rmap
+ thin_rmap \
+ thin_metadata_size
all: $(PROGRAMS)
@@ -64,7 +65,7 @@ SOURCE=\
PDATA_OBJECTS=$(subst .cc,.o,$(SOURCE))
-PROGRAM_SOURCE=\
+CXX_PROGRAM_SOURCE=\
cache/check.cc \
\
thin-provisioning/thin_check.cc \
@@ -73,10 +74,15 @@ PROGRAM_SOURCE=\
thin-provisioning/thin_repair.cc \
thin-provisioning/thin_rmap.cc
+C_PROGRAM_SOURCE=\
+ thin-provisioning/thin_metadata_size.c
+
+CC:=@CC@
CXX:=@CXX@
OBJECTS:=$(subst .cc,.o,$(SOURCE))
TOP_DIR:=@top_srcdir@
TOP_BUILDDIR:=@top_builddir@
+CFLAGS+=-g -Wall -O3
CXXFLAGS+=-std=c++11 -g -Wall -fno-strict-aliasing
CXXFLAGS+=@CXXOPTIMISE_FLAG@
CXXFLAGS+=@CXXDEBUG_FLAG@
@@ -104,6 +110,14 @@ endif
.SUFFIXES: .d
+%.o: %.c
+ @echo " [CC] $<"
+ $(V) $(CC) -c $(INCLUDES) $(CFLAGS) -o $@ $<
+ @echo " [DEP] $<"
+ $(V) $(CC) -MM -MT $(subst .c,.o,$<) $(INCLUDES) $(CFLAGS) $< > $*.$$$$; \
+ sed 's,\([^ :]*\)\.o[ :]*,\1.o \1.gmo $* : Makefile ,g' < $*.$$$$ > $*.d; \
+ $(RM) $*.$$$$
+
%.o: %.cc
@echo " [CXX] $<"
$(V) $(CXX) -c $(INCLUDES) $(CXXFLAGS) -o $@ $<
@@ -195,6 +209,10 @@ thin_rmap: $(THIN_RMAP_OBJECTS) thin-provisioning/thin_rmap.o
@echo " [LD] $@"
$(V) $(CXX) $(CXXFLAGS) -o $@ $+ $(LIBS)
+thin_metadata_size: thin-provisioning/thin_metadata_size.o
+ @echo " [LD] $@"
+ $(V) $(CC) $(CFLAGS) -o $@ $+ -lm
+
#----------------------------------------------------------------
# Cache tools
@@ -221,29 +239,33 @@ cache_check: $(CACHE_CHECK_OBJECTS) cache/check.o
DEPEND_FILES=\
$(subst .cc,.d,$(SOURCE)) \
$(subst .cc,.d,$(TEST_SOURCE)) \
- $(subst .cc,.d,$(PROGRAM_SOURCE))
+ $(subst .cc,.d,$(CXX_PROGRAM_SOURCE)) \
+ $(subst .c,.d,$(C_PROGRAM_SOURCE))
.PHONY: clean distclean
clean:
find . -name \*.o -delete
find . -name \*.gmo -delete
- $(RM) $(DEPEND_FILES) $(TEST_PROGRAMS) $(PROGRAMS) $(GMOCK_OBJECTS) lib/*.a
+ find . -name \*.d -delete
+ $(RM) $(TEST_PROGRAMS) $(PROGRAMS) $(GMOCK_OBJECTS) lib/*.a
distclean: clean
$(RM) config.cache config.log config.status configure.h version.h Makefile unit-tests/Makefile
install: $(PROGRAMS)
$(INSTALL_DIR) $(BINDIR)
- $(INSTALL_PROGRAM) thin_check $(BINDIR)
- $(INSTALL_PROGRAM) thin_dump $(BINDIR)
- $(INSTALL_PROGRAM) thin_repair $(BINDIR)
- $(INSTALL_PROGRAM) thin_restore $(BINDIR)
- $(INSTALL_PROGRAM) thin_rmap $(BINDIR)
+ $(INSTALL_PROGRAM) thin_check $(BINDIR)
+ $(INSTALL_PROGRAM) thin_dump $(BINDIR)
+ $(INSTALL_PROGRAM) thin_repair $(BINDIR)
+ $(INSTALL_PROGRAM) thin_restore $(BINDIR)
+ $(INSTALL_PROGRAM) thin_rmap $(BINDIR)
+ $(INSTALL_PROGRAM) thin_metadata_size $(BINDIR)
$(INSTALL_DIR) $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_restore.8 $(MANPATH)/man8
+
.PHONY: install
ifeq ("@TESTING@", "yes")
diff --git a/configure.in b/configure.in
index 78d88c1..8f25002 100644
--- a/configure.in
+++ b/configure.in
@@ -30,6 +30,7 @@ dnl -- Setup the directory where autoconf has auxilary files
AC_CONFIG_AUX_DIR(autoconf)
AC_CANONICAL_TARGET([])
AC_PROG_CXX([g++])
+AC_PROG_CC([gcc])
AC_LANG(C++)
################################################################
diff --git a/thin-provisioning/thin_metadata_size.c b/thin-provisioning/thin_metadata_size.c
new file mode 100755
index 0000000..1f52d51
--- /dev/null
+++ b/thin-provisioning/thin_metadata_size.c
@@ -0,0 +1,370 @@
+/*
+ * Copyright (C) 2013 Red Hat, GmbH
+ *
+ * Calculates device-mapper thin privisioning
+ * metadata device size based on pool, block size and
+ * maximum expected thin provisioned devices and snapshots.
+ *
+ * This file is part of the thin-provisioning-tools source.
+ *
+ * thin-provisioning-tools is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * thin-provisioning-tools is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with thin-provisioning-tools. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <getopt.h>
+#include <libgen.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "version.h"
+
+#include <search.h>
+
+/*----------------------------------------------------------------*/
+
+enum numeric_options { BLOCKSIZE, POOLSIZE, MAXTHINS, NUMERIC, OPT_END};
+enum return_units { RETURN_BYTES, RETURN_SECTORS };
+enum numeric_type { NO_NUMBER, NUMBER, NUMBER_SHORT, NUMBER_LONG };
+typedef unsigned bool;
+enum bool_value { false = 0, true = 1};
+struct global {
+ char *prg; /* program name */
+
+ /* Unit representations in characters, strings and numeric factors. */
+ struct {
+ char *chars;
+ char **strings;
+ unsigned long long *factors;
+ } unit;
+
+ /* Command line option properties. */
+ struct options {
+ unsigned unit_idx;
+ char *s[OPT_END];
+ unsigned long long n[OPT_END];
+ } options;
+};
+
+static void exit_prg(struct global *g, int ret)
+{
+ if (g) {
+ unsigned u = OPT_END;
+
+ while (u--) {
+ if (g->options.s[u])
+ free (g->options.s[u]);
+ }
+
+ free(g);
+ }
+
+ exit(ret);
+}
+
+static void abort_prg(struct global *g, const char *msg)
+{
+ fprintf(stderr, "%s - %s\n", g ? g->prg : "fatal", msg);
+ exit_prg(g, 1);
+}
+
+static int unit_index(struct global *g, char *unit_string)
+{
+ unsigned len;
+
+ if (!unit_string)
+ return unit_index(g, "sectors");
+
+ len = strlen(unit_string);
+ if (len == 1) {
+ char *o = strchr(g->unit.chars, *unit_string);
+
+ if (o)
+ return o - g->unit.chars;
+
+ } else {
+ char **s;
+
+ for (s = g->unit.strings; *s; s++)
+ if (!strncmp(*s, unit_string, len))
+ return s - g->unit.strings;
+ }
+
+ return -1;
+}
+
+#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
+static struct global *init_prg(char *prg_path)
+{
+ unsigned u;
+ static char *unit_chars = "bskKmMgGtTpPeEzZyY";
+ static char *unit_strings[] = { "bytes", "sectors",
+ "kilobytes", "kibibytes", "megabytes", "mebibytes",
+ "gigabytes", "gibibytes", "terabytes", "tebibytes",
+ "petabytes", "pebibytes", "exabytes", "ebibytes",
+ "zetabytes", "zebibytes", "yottabytes", "yobibytes", NULL };
+ static unsigned long long unit_factors[ARRAY_SIZE(unit_strings) - 1] = { 1, 512, 1024, 1000 };
+ struct global *r = malloc(sizeof(*r));
+
+ if (!r)
+ abort_prg(r, "failed to allocate global context!");
+
+ memset(r, 0, sizeof(*r));
+
+ for (u = 4; unit_strings[u]; u += 2) {
+ unit_factors[u] = unit_factors[u-2] * unit_factors[2];
+ unit_factors[u+1] = unit_factors[u-1] * unit_factors[3];
+ }
+
+ r->prg = basename(prg_path);
+ r->unit.chars = unit_chars;
+ r->unit.strings = unit_strings;
+ r->unit.factors = unit_factors;
+ r->options.unit_idx = unit_index(r, NULL);
+
+ return r;
+}
+
+static unsigned long long bytes_per_sector(struct global *g)
+{
+ return g->unit.factors[unit_index(g, "sectors")];
+}
+
+static void check_opts(struct global *g)
+{
+ struct options *o = &g->options;
+
+ if (!o->n[BLOCKSIZE])
+ abort_prg(g, "block size required!");
+ else if (!o->n[POOLSIZE])
+ abort_prg(g, "pool size required!");
+ else if (!o->n[MAXTHINS])
+ abort_prg(g, "max thins required!");
+ else if (o->n[BLOCKSIZE] & (o->n[BLOCKSIZE] - 1))
+ abort_prg(g, "block size must be 2^^N");
+ else if (o->n[POOLSIZE] <= o->n[BLOCKSIZE])
+ abort_prg(g, "pool size must be larger than block size");
+}
+
+static unsigned long long to_bytes(struct global *g, char *sz, enum return_units unit, int *index)
+{
+ int idx;
+ unsigned long long r;
+ char *us = sz;
+
+ /* Get pointer to unit identifier. */
+ us += strspn(sz, "0123456789");
+ if (*us) {
+ idx = unit_index(g, us);
+ if (idx < 0)
+ abort_prg(g, "Invalid unit specifier!");
+
+ *us = 0;
+ *index = idx;
+ } else {
+ idx = unit_index(g, NULL);
+ us = NULL;
+ *index = -1;
+ }
+
+ r = atoll(sz) * g->unit.factors[idx];
+ return (!us || unit == RETURN_SECTORS) ? r / bytes_per_sector(g) : r;
+}
+
+static void printf_aligned(struct global *g, char *a, char *b, char *c, bool units, bool mandatory)
+{
+ char buf[80];
+
+ strcpy(buf, b);
+ if (units)
+ strcat(buf, mandatory ? "{" :"["), strcat(buf, g->unit.chars), strcat(buf, mandatory ? "}" : "]");
+
+ printf("\t%-4s%-44s%s\n", a, buf, c);
+}
+
+static void help(struct global *g)
+{
+ printf ("Thin Provisioning Metadata Device Size Calculator.\nUsage: %s [options]\n", g->prg);
+ printf_aligned(g, "-b", "--block-size BLOCKSIZE", "Block size of thin provisioned devices.", true, false);
+ printf_aligned(g, "-s", "--pool-size SIZE", "Size of pool device.", true, false);
+ printf_aligned(g, "-m", "--max-thins #MAXTHINS", "Maximum sum of all thin devices and snapshots.", true, false);
+ printf_aligned(g, "-u", "--unit ", "Output unit specifier.", true, true);
+ printf_aligned(g, "-n", "--numeric-only [short|long]", "Output numeric value only (optionally with short/long unit identifier).", false, false);
+ printf_aligned(g, "-h", "--help", "This help.", false, false);
+ printf_aligned(g, "-V", "--version", "Print thin provisioning tools version.", false, false);
+ exit_prg(g, 0);
+}
+
+static void version(struct global *g)
+{
+ printf("%s\n", THIN_PROVISIONING_TOOLS_VERSION);
+ exit_prg(g, 1);
+}
+
+static void check_unit(struct global *g, char *arg)
+{
+ int idx = unit_index(g, arg);
+
+ if (idx < 0)
+ abort_prg(g, "output unit specifier invalid!");
+
+ g->options.unit_idx = idx;
+}
+
+static void check_numeric_option(struct global *g, char *arg)
+{
+ if (g->options.n[NUMERIC] != NO_NUMBER)
+ abort_prg(g, "-n already given!");
+
+ g->options.n[NUMERIC] = NUMBER;
+
+ if (arg) {
+ bool unit_long = !strncmp("long", arg, strlen(arg));
+
+ if (!*arg || (strncmp("short", arg, strlen(arg)) && !unit_long))
+ abort_prg(g, "-n invalid option argument");
+
+ g->options.n[NUMERIC] = unit_long ? NUMBER_LONG : NUMBER_SHORT;
+ }
+}
+
+static void check_size(struct global *g, enum numeric_options o, char *arg)
+{
+ int idx;
+ bool valid_index = true;
+
+ if (g->options.n[o])
+ abort_prg(g, "option already given!");
+
+ g->options.n[o] = to_bytes(g, arg, o == MAXTHINS ? RETURN_BYTES : RETURN_SECTORS, &idx);
+ if (idx < 0) {
+ valid_index = false;
+ idx = g->options.unit_idx;
+ }
+
+ g->options.s[o] = malloc(strlen(arg) + strlen(g->unit.strings[idx]) + 1);
+ if (!g->options.s[o])
+ abort_prg(g, "failed to allocate string!");
+
+ strcpy(g->options.s[o], arg);
+ if (o != MAXTHINS || valid_index)
+ strcat(g->options.s[o], g->unit.strings[idx]);
+
+}
+
+static void parse_command_line(struct global *g, int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"block-size", required_argument, NULL, 'b' },
+ {"pool-size", required_argument, NULL, 's' },
+ {"max-thins", required_argument, NULL, 'm' },
+ {"unit", required_argument, NULL, 'u' },
+ {"numeric-only",optional_argument, NULL, 'n' },
+ {"help", no_argument, NULL, 'h' },
+ {"version", no_argument, NULL, 'V' },
+ {NULL, 0, NULL, 0 }
+ };
+
+ while ((c = getopt_long(argc, argv, "b:s:m:u:n::hV", long_options, NULL)) != -1) {
+ switch (c) {
+ case 'b':
+ check_size(g, BLOCKSIZE, optarg);
+ break;
+ case 's':
+ check_size(g, POOLSIZE, optarg);
+ break;
+ case 'm':
+ check_size(g, MAXTHINS, optarg);
+ break;
+ case 'u':
+ check_unit(g, optarg);
+ break;
+ case 'n':
+ check_numeric_option(g, optarg);
+ break;
+ case 'h':
+ help(g); /* exits */
+ case 'V':
+ version(g); /* exits */
+ default:
+ exit_prg(g, 1);
+ }
+ }
+
+ check_opts(g);
+}
+
+static const unsigned mappings_per_block(void)
+{
+ const struct {
+ const unsigned node;
+ const unsigned node_header;
+ const unsigned entry;
+ } btree_size = { 4096, 64, 16 };
+
+ return (btree_size.node - btree_size.node_header) / btree_size.entry;
+}
+
+static void print_precision(struct global *g, double r, unsigned idx)
+{
+ bool full = g->options.n[NUMERIC] == NO_NUMBER;
+ double rtrunc = truncl(r);
+
+ if (full)
+ printf("%s - ", g->prg);
+
+ if (r == rtrunc)
+ printf("%llu", (unsigned long long) r);
+ else
+ printf(r - rtrunc < 1E-2 ? "%0.2e" : "%0.2f", r);
+
+ if (full)
+ printf(" %s", g->unit.strings[idx]);
+ else if (g->options.n[NUMERIC] > NUMBER) {
+ if (g->options.n[NUMERIC] == NUMBER_SHORT)
+ printf("%c", g->unit.chars[idx]);
+ else
+ printf("%s", g->unit.strings[idx]);
+ }
+
+ if (full)
+ printf(" estimated metadata area size for \"--block-size=%s --pool-size=%s --max-thins=%s\"",
+ g->options.s[BLOCKSIZE], g->options.s[POOLSIZE], g->options.s[MAXTHINS]);
+
+ putchar('\n');
+}
+
+static void print_estimated_result(struct global *g)
+{
+ double r;
+
+ /* double-fold # of nodes, because they aren't fully populated in average */
+ r = (1.0 + (2 * g->options.n[POOLSIZE] / g->options.n[BLOCKSIZE] / mappings_per_block() + g->options.n[MAXTHINS])); /* in 4k blocks */
+ r *= 8 * bytes_per_sector(g); /* in bytes! */
+ r /= g->unit.factors[g->options.unit_idx]; /* in requested unit */
+
+ print_precision(g, r, g->options.unit_idx);
+}
+
+int main(int argc, char **argv)
+{
+ struct global *g = init_prg(*argv);
+
+ parse_command_line(g, argc, argv);
+ print_estimated_result(g);
+ exit_prg(g, 0);
+ return 0; /* Doesn't get here... */
+}

View file

@ -1,20 +0,0 @@
diff -up thin-provisioning-tools-0.2.1/Makefile.in~ thin-provisioning-tools-0.2.1/Makefile.in
--- thin-provisioning-tools-0.2.1/Makefile.in~ 2013-07-10 18:43:45.000000000 +0300
+++ thin-provisioning-tools-0.2.1/Makefile.in 2013-07-15 22:32:36.294852451 +0300
@@ -235,11 +235,11 @@ distclean: clean
install: $(PROGRAMS)
$(INSTALL_DIR) $(BINDIR)
- $(INSTALL_PROGRAM) -s thin_check $(BINDIR)
- $(INSTALL_PROGRAM) -s thin_dump $(BINDIR)
- $(INSTALL_PROGRAM) -s thin_repair $(BINDIR)
- $(INSTALL_PROGRAM) -s thin_restore $(BINDIR)
- $(INSTALL_PROGRAM) -s thin_rmap $(BINDIR)
+ $(INSTALL_PROGRAM) thin_check $(BINDIR)
+ $(INSTALL_PROGRAM) thin_dump $(BINDIR)
+ $(INSTALL_PROGRAM) thin_repair $(BINDIR)
+ $(INSTALL_PROGRAM) thin_restore $(BINDIR)
+ $(INSTALL_PROGRAM) thin_rmap $(BINDIR)
$(INSTALL_DIR) $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8

View file

@ -1,166 +0,0 @@
diff --git a/man8/thin_dump.8 b/man8/thin_dump.8
index e60a6e5..b26cc2c 100644
--- a/man8/thin_dump.8
+++ b/man8/thin_dump.8
@@ -23,9 +23,12 @@ Print output in XML or human readable format.
.IP "\fB\-r, \-\-repair\fP".
-.IP "\fB\-m, \-\-metadata_snap\fP block#".
-Dump metadata snapshot created by device-mapper thin provisioning target at block#
-
+.IP "\fB\-m, \-\-metadata_snap\fP [block#]".
+Dump metadata snapshot created by device-mapper thin provisioning target.
+If block is not provided, access the default metadata snapshot created by
+the thin provisioning device-mapper target, else try the one at block#.
+See the thin provisioning target documentation on how to create or release
+a metadata snapshot.
.IP "\fB\-h, \-\-help\fP".
Print help and exit.
@@ -44,6 +47,13 @@ to standard output in XML format:
.sp
.B thin_dump /dev/vg/metadata
+Dumps the thin provisioning metadata snapshot on logical volume /dev/vg/metadata
+to standard output in human readable format (not processable by
+.B thin_restore(8)
+):
+.sp
+.B thin_dump --format human_readable --metadata-snap /dev/vg/metadata
+
.SH DIAGNOSTICS
.B thin_dump
returns an exit code of 0 for success or 1 for error.
diff --git a/thin-provisioning/metadata.cc b/thin-provisioning/metadata.cc
index 771325a..bef75ba 100644
--- a/thin-provisioning/metadata.cc
+++ b/thin-provisioning/metadata.cc
@@ -78,6 +78,7 @@ namespace {
<< "data block size " << sb.data_block_size_ << endl
<< "metadata block size " << sb.metadata_block_size_ << endl
<< "metadata nr blocks " << sb.metadata_nr_blocks_ << endl
+ << "metadata snapshot block " << sb.metadata_snap_ << endl
;
}
}
diff --git a/thin-provisioning/thin_dump.cc b/thin-provisioning/thin_dump.cc
index 029a635..a844038 100644
--- a/thin-provisioning/thin_dump.cc
+++ b/thin-provisioning/thin_dump.cc
@@ -31,23 +31,37 @@ using namespace persistent_data;
using namespace std;
using namespace thin_provisioning;
+struct flags {
+ bool find_metadata_snap;
+ bool repair;
+};
+
namespace {
- int dump(string const &path, ostream &out, string const &format, bool repair,
+ int dump(string const &path, ostream *out, string const &format, struct flags &flags,
block_address metadata_snap = 0) {
try {
- metadata::ptr md(metadata_snap ? new metadata(path, metadata_snap) : new metadata(path, metadata::OPEN, 0, 0));
+ metadata::ptr md(new metadata(path, metadata_snap));
emitter::ptr e;
+ uint64_t metadata_snap_root = md->sb_.metadata_snap_;
+
+ if (metadata_snap_root) {
+ md.reset();
+ md = metadata::ptr(new metadata(path, metadata_snap_root));
+ } else if (flags.find_metadata_snap) {
+ cerr << "no metadata snapshot found!" << endl;
+ exit(1);
+ }
if (format == "xml")
- e = create_xml_emitter(out);
+ e = create_xml_emitter(*out);
else if (format == "human_readable")
- e = create_human_readable_emitter(out);
+ e = create_human_readable_emitter(*out);
else {
cerr << "unknown format '" << format << "'" << endl;
exit(1);
}
- metadata_dump(md, e, repair);
+ metadata_dump(md, e, flags.repair);
} catch (std::exception &e) {
cerr << e.what() << endl;
@@ -63,7 +77,7 @@ namespace {
<< " {-h|--help}" << endl
<< " {-f|--format} {xml|human_readable}" << endl
<< " {-r|--repair}" << endl
- << " {-m|--metadata-snap} block#" << endl
+ << " {-m|--metadata-snap} [block#]" << endl
<< " {-o <xml file>}" << endl
<< " {-V|--version}" << endl;
}
@@ -72,16 +86,16 @@ namespace {
int main(int argc, char **argv)
{
int c;
- bool repair = false;
char const *output = NULL;
- const char shortopts[] = "hm:o:f:rV";
+ const char shortopts[] = "hm::o:f:rV";
+ char *end_ptr;
string format = "xml";
block_address metadata_snap = 0;
- char *end_ptr;
+ struct flags flags = { .find_metadata_snap = false, .repair = false };
const struct option longopts[] = {
{ "help", no_argument, NULL, 'h'},
- { "metadata-snap", required_argument, NULL, 'm' },
+ { "metadata-snap", optional_argument, NULL, 'm' },
{ "output", required_argument, NULL, 'o'},
{ "format", required_argument, NULL, 'f' },
{ "repair", no_argument, NULL, 'r'},
@@ -100,16 +114,24 @@ int main(int argc, char **argv)
break;
case 'r':
- repair = true;
+ flags.repair = true;
+ break;
+
+ case 's':
+ flags.find_metadata_snap = true;
break;
case 'm':
- metadata_snap = strtoull(optarg, &end_ptr, 10);
- if (end_ptr == optarg) {
- cerr << "couldn't parse <metadata_snap>" << endl;
- usage(cerr, basename(argv[0]));
- return 1;
- }
+ if (optarg) {
+ metadata_snap = strtoull(optarg, &end_ptr, 10);
+ if (end_ptr == optarg) {
+ cerr << "couldn't parse <metadata_snap>" << endl;
+ usage(cerr, basename(argv[0]));
+ return 1;
+ }
+ } else
+ flags.find_metadata_snap = true;
+
break;
case 'o':
@@ -132,9 +154,5 @@ int main(int argc, char **argv)
return 1;
}
- if (output) {
- ofstream out(output);
- return dump(argv[optind], out, format, repair, metadata_snap);
- } else
- return dump(argv[optind], cout, format, repair, metadata_snap);
+ return dump(argv[optind], output ? new ofstream(output) : &cout, format, flags, metadata_snap);
}

View file

@ -1,114 +0,0 @@
diff --git a/thin-provisioning/metadata.cc b/thin-provisioning/metadata.cc
index c841614..771325a 100644
--- a/thin-provisioning/metadata.cc
+++ b/thin-provisioning/metadata.cc
@@ -57,15 +57,6 @@ namespace {
return tm;
}
- superblock
- read_superblock(block_manager<>::ptr bm, block_address location = SUPERBLOCK_LOCATION) {
- superblock sb;
- block_manager<>::read_ref r = bm->read_lock(location, superblock_validator());
- superblock_disk const *sbd = reinterpret_cast<superblock_disk const *>(&r.data());
- superblock_traits::unpack(*sbd, sb);
- return sb;
- }
-
void
copy_space_maps(space_map::ptr lhs, space_map::ptr rhs) {
for (block_address b = 0; b < rhs->get_nr_blocks(); b++) {
@@ -149,10 +140,10 @@ metadata::metadata(std::string const &dev_path, open_type ot,
}
}
-metadata::metadata(std::string const &dev_path)
+metadata::metadata(std::string const &dev_path, block_address metadata_snap)
{
tm_ = open_tm(open_bm(dev_path, false));
- sb_ = read_superblock(tm_->get_bm());
+ sb_ = read_superblock(tm_->get_bm(), metadata_snap);
// We don't open the metadata sm for a held root
//metadata_sm_ = open_metadata_sm(tm_, &sb_.metadata_space_map_root_);
diff --git a/thin-provisioning/metadata.h b/thin-provisioning/metadata.h
index 250c216..9749acb 100644
--- a/thin-provisioning/metadata.h
+++ b/thin-provisioning/metadata.h
@@ -62,10 +62,11 @@ namespace thin_provisioning {
// Deprecated: it would be better if we passed in an already
// constructed block_manager.
metadata(std::string const &dev_path, open_type ot,
- sector_t data_block_size = 128,
+ sector_t data_block_size = 128, // Only used if CREATE
block_address nr_data_blocks = 0); // Only used if CREATE
- metadata(std::string const &dev_path);
+ metadata(std::string const &dev_path,
+ block_address metadata_snap = 0);
// ... use these instead ...
metadata(block_manager<>::ptr bm, open_type ot,
diff --git a/thin-provisioning/superblock.cc b/thin-provisioning/superblock.cc
index c23fbc1..bf9544b 100644
--- a/thin-provisioning/superblock.cc
+++ b/thin-provisioning/superblock.cc
@@ -126,17 +126,22 @@ namespace thin_provisioning {
}
}
- superblock_detail::superblock read_superblock(block_manager<>::ptr bm)
+ superblock_detail::superblock read_superblock(block_manager<>::ptr bm, block_address location)
{
using namespace superblock_detail;
superblock sb;
- auto r = bm->read_lock(SUPERBLOCK_LOCATION, superblock_validator());
+ auto r = bm->read_lock(location, superblock_validator());
superblock_disk const *sbd = reinterpret_cast<superblock_disk const *>(&r.data());
superblock_traits::unpack(*sbd, sb);
return sb;
}
+ superblock_detail::superblock read_superblock(block_manager<>::ptr bm)
+ {
+ return read_superblock(bm, SUPERBLOCK_LOCATION);
+ }
+
void
check_superblock(block_manager<>::ptr bm,
superblock_detail::damage_visitor &visitor) {
diff --git a/thin-provisioning/superblock.h b/thin-provisioning/superblock.h
index e993497..a9377b0 100644
--- a/thin-provisioning/superblock.h
+++ b/thin-provisioning/superblock.h
@@ -123,6 +123,7 @@ namespace thin_provisioning {
persistent_data::block_manager<>::validator::ptr superblock_validator();
superblock_detail::superblock read_superblock(persistent_data::block_manager<>::ptr bm);
+ superblock_detail::superblock read_superblock(persistent_data::block_manager<>::ptr bm, persistent_data::block_address location);
void check_superblock(persistent_data::block_manager<>::ptr bm,
superblock_detail::damage_visitor &visitor);
}
diff --git a/thin-provisioning/thin_dump.cc b/thin-provisioning/thin_dump.cc
index a4bcf66..029a635 100644
--- a/thin-provisioning/thin_dump.cc
+++ b/thin-provisioning/thin_dump.cc
@@ -35,7 +35,7 @@ namespace {
int dump(string const &path, ostream &out, string const &format, bool repair,
block_address metadata_snap = 0) {
try {
- metadata::ptr md(new metadata(path, metadata::OPEN));
+ metadata::ptr md(metadata_snap ? new metadata(path, metadata_snap) : new metadata(path, metadata::OPEN, 0, 0));
emitter::ptr e;
if (format == "xml")
@@ -63,7 +63,7 @@ namespace {
<< " {-h|--help}" << endl
<< " {-f|--format} {xml|human_readable}" << endl
<< " {-r|--repair}" << endl
- << " {-m|--metadata-snap}" << endl
+ << " {-m|--metadata-snap} block#" << endl
<< " {-o <xml file>}" << endl
<< " {-V|--version}" << endl;
}

View file

@ -1,31 +0,0 @@
diff --git a/man8/thin_metadata_size.8 b/man8/thin_metadata_size.8
index 33b36b3..6b00e73 100644
--- a/man8/thin_metadata_size.8
+++ b/man8/thin_metadata_size.8
@@ -1,6 +1,6 @@
.TH THIN_METADATA_SIZE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
.SH NAME
-thin_metadata_size \- thin provisioning metadata file/device size calculator.
+thin_metadata_size \- thin provisioning metadata device/file size calculator.
.SH SYNOPSIS
.B thin_metadata_size
@@ -10,13 +10,15 @@ thin_metadata_size \- thin provisioning metadata file/device size calculator.
.B thin_metadata_size
calculates the size of the thin provisioning metadata based on the block size
of the thin provisioned devices, the size of the thin provisioning pool and
-the maximum number of all thin prisioned devices and snapshots. Size/number
-option arguments can be followed by unit specifiers in short one character
-and long form (eg. -b1m or -b1megabytes).
+the maximum number of all thin prisioned devices and snapshots.
+Because thin provisioning pools are holding widely variable contents,
+this tool is needed to provide sensible initial default size.
.IP "\fB\-b, \-\-block-size\fP \fIBLOCKSIZE[bskKmMgGtTpPeEzZyY]\fP"
Block size of thin provisioned devices in units of bytes,sectors,kilobytes,kibibytes,... respectively.
Default is in sectors without a block size unit specifier.
+Size/number option arguments can be followed by unit specifiers in short one character
+and long form (eg. -b1m or -b1megabytes).
.IP "\fB\-s, \-\-pool-size\fP \fIPOOLSIZE[bskKmMgGtTpPeEzZyY]\fP"
Thin provisioning pool size in units of bytes,sectors,kilobytes,kibibytes,... respectively.

View file

@ -1,20 +0,0 @@
diff --git a/man8/thin_check.8 b/man8/thin_check.8
index 1489078..a8dc81b 100644
--- a/man8/thin_check.8
+++ b/man8/thin_check.8
@@ -1,4 +1,4 @@
-.TH THIN_REPAIR 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.TH THIN_CHECK 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
.SH NAME
thin_check \- repair thin provisioning metadata on device or file
diff --git a/man8/thin_rmap.8 b/man8/thin_rmap.8
index 4d74520..684c86c 100644
--- a/man8/thin_rmap.8
+++ b/man8/thin_rmap.8
@@ -1,4 +1,4 @@
-.TH THIN_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.TH THIN_RMAP(g 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
.SH NAME
thin_rmap \- output reverse map of a thin provisioned region of blocks from metadata device or file

View file

@ -1,24 +0,0 @@
--- thin-provisioning-tools-0.2.8/Makefile.in.orig 2013-10-18 17:11:34.320772851 +0200
+++ thin-provisioning-tools-0.2.8/Makefile.in 2013-10-18 17:11:09.938219484 +0200
@@ -299,6 +299,10 @@
install: $(PROGRAMS)
$(INSTALL_DIR) $(BINDIR)
+ $(INSTALL_PROGRAM) cache_check $(BINDIR)
+ $(INSTALL_PROGRAM) cache_dump $(BINDIR)
+ $(INSTALL_PROGRAM) cache_repair $(BINDIR)
+ $(INSTALL_PROGRAM) cache_restore $(BINDIR)
$(INSTALL_PROGRAM) thin_check $(BINDIR)
$(INSTALL_PROGRAM) thin_dump $(BINDIR)
$(INSTALL_PROGRAM) thin_repair $(BINDIR)
@@ -306,6 +310,10 @@
$(INSTALL_PROGRAM) thin_rmap $(BINDIR)
$(INSTALL_PROGRAM) thin_metadata_size $(BINDIR)
$(INSTALL_DIR) $(MANPATH)/man8
+ $(INSTALL_DATA) man8/cache_check.8 $(MANPATH)/man8
+ $(INSTALL_DATA) man8/cache_dump.8 $(MANPATH)/man8
+ $(INSTALL_DATA) man8/cache_repair.8 $(MANPATH)/man8
+ $(INSTALL_DATA) man8/cache_restore.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8
$(INSTALL_DATA) man8/thin_repair.8 $(MANPATH)/man8

View file

@ -1,270 +0,0 @@
diff --git a/man8/cache_check.8 b/man8/cache_check.8
new file mode 100644
index 0000000..5cc7dff
--- /dev/null
+++ b/man8/cache_check.8
@@ -0,0 +1,62 @@
+.TH CACHE_CHECK 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+cache_check \- repair cache metadata on device or file
+
+.SH SYNOPSIS
+.B cache_check
+.RB [ options ]
+.I {device|file}
+
+.SH DESCRIPTION
+.B cache_check
+checks cache metadata created by
+the device-mapper cache target on a
+.I device
+or
+.I file.
+
+.SH OPTIONS
+.IP "\fB\-q, \-\-quiet\fP"
+Suppress output messages, return only exit code.
+
+.IP "\fB\-h, \-\-help\fP"
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
+
+.IP "\fB\-\-super\-block\-only\fP"
+Only check the superblock is present.
+
+.IP "\fB\-\-skip-mappings\fP"
+Skip checking of the block mappings which make up the bulk of the
+metadata.
+
+.IP "\fB\-\-skip-hints\fP"
+Skip checking of the policy hint values metadata.
+
+.IP "\fB\-\-skip-discards\fP"
+Skip checking of the discard bits in the metadata.
+
+.SH EXAMPLE
+Analyses and repairs cache metadata on logical volume
+/dev/vg/metadata:
+.sp
+.B cache_check /dev/vg/metadata
+
+The device may not be actively used by the target
+when running.
+
+.SH DIAGNOSTICS
+.B cache_check
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B cache_dump(8)
+.B cache_repair(8)
+.B cache_restore(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>
diff --git a/man8/cache_dump.8 b/man8/cache_dump.8
new file mode 100644
index 0000000..a0c2924
--- /dev/null
+++ b/man8/cache_dump.8
@@ -0,0 +1,59 @@
+.TH CACHE_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+cache_dump \- dump cache metadata from device or file to standard output
+
+.SH SYNOPSIS
+.B cache_dump
+.RB [options]
+.I {device|file}
+
+.SH DESCRIPTION
+.B cache_dump
+dumps binary cache metadata created by
+the device-mapper cache target on a
+.I device
+or
+.I file
+to standard output for
+analysis or postprocessing in XML format.
+XML formated metadata can be fed into cache_restore (see
+.BR cache_restore(8) )
+in order to put it back onto a metadata
+.I device
+(to process by the device-mapper target) or
+.I file.
+
+.IP "\fB\-r, \-\-repair\fP".
+Repair the metadata whilst dumping it.
+
+.IP "\fB\-h, \-\-help\fP".
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP".
+Output version information and exit.
+
+.SH EXAMPLES
+Dumps the cache metadata on logical volume /dev/vg/metadata
+to standard output in XML format:
+.sp
+.B cache_dump /dev/vg/metadata
+
+.SH EXAMPLES
+Dumps the cache metadata on logical volume /dev/vg/metadata
+whilst repairing it to standard output in XML format:
+.sp
+.B cache_dump --repair /dev/vg/metadata
+
+.SH DIAGNOSTICS
+.B cache_dump
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B cache_check(8)
+.B cache_repair(8)
+.B cache_restore(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>
diff --git a/man8/cache_repair.8 b/man8/cache_repair.8
new file mode 100644
index 0000000..ef04a7f
--- /dev/null
+++ b/man8/cache_repair.8
@@ -0,0 +1,61 @@
+.TH CACHE_REPAIR 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+cache_repair \- repair cache binary metadata from device/file to device/file
+
+.SH SYNOPSIS
+.B cache_repair
+.RB [ options ]
+.RB -i
+.I {device|file}
+.RB -o
+.I {device|file}
+
+.SH DESCRIPTION
+.B cache_repair
+reads binary cache metadata created by the
+respective device-mapper target from one
+.I device
+or
+.I file
+, repairs it and writes it to another
+.I device
+or
+.I file.
+If written to a metadata
+.I device
+, the metadata can be processed
+by the device-mapper target.
+
+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP"
+Input file or device with binary metadata.
+
+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP"
+Output file or device for repaired binary metadata.
+
+.IP "\fB\-h, \-\-help\fP"
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
+
+.SH EXAMPLE
+Reads the binary cache metadata from file
+.B metadata
+, repairs it and writes it to logical volume /dev/vg/metadata
+for further processing by the respective device-mapper target:
+.sp
+.B cache_repair -i metadata -o /dev/vg/metadata
+
+.SH DIAGNOSTICS
+.B cache_repair
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B cache_dump(8)
+.B cache_check(8)
+.B cache_restore(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>
diff --git a/man8/cache_restore.8 b/man8/cache_restore.8
new file mode 100644
index 0000000..5f9fdca
--- /dev/null
+++ b/man8/cache_restore.8
@@ -0,0 +1,64 @@
+.TH CACHE_RESTORE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+cache_restore \- restore cache metadata file to device or file
+
+.SH SYNOPSIS
+.B cache_restore
+.RB [ options ]
+.RB -i
+.I {device|file}
+.RB -o
+.I {device|file}
+
+.SH DESCRIPTION
+.B cache_restore
+restores cache metadata created by the respective
+device-mapper target dumped into an XML formatted (see
+.BR cache_dump(8) )
+.I file
+, which optionally can be preprocessed before the restore to another
+.I device
+or
+.I file.
+If restored to a metadata
+.I device
+, the metadata can be processed by the device-mapper target.
+
+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP"
+Input file or device with metadata.
+
+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP"
+Output file or device.
+
+.IP "\fB{\-\-debug-override-metadata-version}\fP \fI<integer>\fP"
+ONLY FOR DEBUGGING PURPOSES:
+.br
+override the version stored in the metadata.
+
+.IP "\fB\-h, \-\-help\fP"
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
+
+.SH EXAMPLE
+Restores the XML formatted cache metadata on file
+.B metadata
+to logical volume /dev/vg/metadata for further processing by the
+respective device-mapper target:
+.sp
+.B cache_restore -i metadata -o /dev/vg/metadata
+
+.SH DIAGNOSTICS
+.B cache_restore
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B cache_dump(8)
+.B cache_check(8)
+.B cache_repair(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>

View file

@ -1,11 +0,0 @@
--- a/Makefile.in 2014-11-12 18:46:30.282251378 +0100
+++ b/Makefile.in 2014-11-12 18:46:56.108608255 +0100
@@ -108,7 +108,7 @@
vpath %.cc $(TOP_DIR)
INSTALL_DIR = $(INSTALL) -m 755 -d
-INSTALL_PROGRAM = $(INSTALL) -m 755 -s
+INSTALL_PROGRAM = $(INSTALL) -m 755
INSTALL_DATA = $(INSTALL) -p -m 644
ifeq ("@TESTING@", "yes")

View file

@ -1,15 +0,0 @@
--- thin-provisioning-tools-0.4.1/man8/thin_check.8.orig 2014-10-28 14:19:02.800420873 +0100
+++ thin-provisioning-tools-0.4.1/man8/thin_check.8 2014-10-28 14:19:47.335924554 +0100
@@ -25,6 +25,12 @@
.IP "\fB\-V, \-\-version\fP"
Output version information and exit.
+.IP "\fB\-\-clear\-needs\-check\-flag\fP"
+Clear the needs-check-flag in case the check of the thin pool metadata succeeded.
+If the metadata check failed, the flag is not cleared and a thin_repair run is
+needed to fix any issues.
+After thin_repair succeeded, you may run thin_check again.
+
.IP "\fB\-\-super\-block\-only\fP"
Only check the superblock is present.

View file

@ -1,116 +0,0 @@
--- thin-provisioning-tools-0.4.1/man8/era_restore.8.orig 2014-10-28 14:24:43.356272471 +0100
+++ thin-provisioning-tools-0.4.1/man8/era_restore.8 2014-10-28 14:28:56.358133852 +0100
@@ -0,0 +1,63 @@
+.TH ERA_RESTORE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+era_restore \- restore era metadata file to device or file
+
+.SH SYNOPSIS
+.B era_restore
+.RB [ options ]
+.RB -i
+.I {device|file}
+.RB -o
+.I {device|file}
+
+.SH DESCRIPTION
+.B era_restore
+restores binary era metadata created by the
+respective device-mapper target dumped into an XML formatted (see
+.BR era_dump(8) )
+.I file
+, which optionally can be preprocessed before the restore to another
+.I device
+or
+.I file.
+If restored to a metadata
+.I device
+, the metadata can be processed by the device-mapper target.
+
+.IP "\fB\-q, \-\-quiet\fP"
+Suppress output messages, return only exit code.
+
+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP"
+Input file or device with metadata.
+
+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP"
+Output file or device.
+
+.IP "\fB\-h, \-\-help\fP"
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
+
+.SH EXAMPLE
+Restores the XML formatted era metadata on file
+.B metadata
+to logical volume /dev/vg/metadata for further processing by the
+respective device-mapper target:
+.sp
+.B era_restore -i metadata -o /dev/vg/metadata
+
+.SH DIAGNOSTICS
+.B era_restore
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B era_check(8)
+.B era_dump(8)
+.B era_invaidate(8)
+.B era_restore(8)
+
+.SH AUTHOR
+Joe Thornber <ejt@redhat.com>
+.br
+Heinz Mauelshagen <HeinzM@RedHat.com>
--- thin-provisioning-tools-0.4.1/man8/cache_metadata_size.8.orig 2014-10-28 14:31:49.116087709 +0100
+++ thin-provisioning-tools-0.4.1/man8/cache_metadata_size.8 2014-10-28 14:50:29.337238755 +0100
@@ -0,0 +1,47 @@
+.TH CACHE_METADATA_SIZE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*-
+.SH NAME
+cache_metadata_size \- cache metadata device/file size calculator.
+
+.SH SYNOPSIS
+.B cache_metadata_size
+.RB [ options ]
+
+.SH DESCRIPTION
+.B cache_metadata_size
+calculates the size of the cache metadata based on the block size
+of the cache device and the cache block size.
+All relates to the size of the fast device (eg, SSD), rather
+than the whole cached (i.e. origin) device.
+
+.IP "\fB\\-\-block\-size <sectors>\fP
+Block size of cache in units of sectors.
+
+.IP "\fB\\-\-device\-size <sectors>\fP
+Device size of the cache device in units of sectors.
+
+.IP "\fB\\-\-nr\-blocks <natural>\fP
+Capacity of the cache in number of blocks.
+
+.IP "\fB\-h, \-\-help\fP"
+Print help and exit.
+
+.IP "\fB\-V, \-\-version\fP"
+Output version information and exit.
+
+.SH EXAMPLES
+Calculates the cache metadata device size for block size 256 sectors.and device size of 2GiB
+.sp
+.B cache_metadata_size --block-size 256 --device-size $((2*1024*1024))
+
+.SH DIAGNOSTICS
+.B cache_metadata_size
+returns an exit code of 0 for success or 1 for error.
+
+.SH SEE ALSO
+.B cache_check(8)
+.B cache_dump(8)
+.B cache_repair(8)
+.B cache_restore(8)
+
+.SH AUTHOR
+Heinz Mauelshagen <HeinzM@RedHat.com>

View file

@ -0,0 +1,15 @@
Makefile.in | 1 -
1 file changed, 1 deletion(-)
diff --git a/Makefile.in b/Makefile.in
index 0aa9401..0f4f7cb 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -262,7 +262,6 @@ MANPAGES:=$(patsubst %,man8/%.8,$(TOOLS))
install: bin/pdata_tools $(MANPAGES)
$(INSTALL_DIR) $(BINDIR)
$(INSTALL_PROGRAM) bin/pdata_tools $(BINDIR)
- $(STRIP) $(BINDIR)/pdata_tools
ln -s -f pdata_tools $(BINDIR)/cache_check
ln -s -f pdata_tools $(BINDIR)/cache_dump
ln -s -f pdata_tools $(BINDIR)/cache_metadata_size

View file

@ -1,20 +1,38 @@
#
# Copyright (C) 2011-2014 Red Hat, Inc
# Copyright (C) 2011-2017 Red Hat, Inc
#
%bcond_without check
#%%global debug_package %%{nil}
#%%global version_suffix -rc2
#%%global release_suffix .test3
Summary: Device-mapper Persistent Data Tools
Name: device-mapper-persistent-data
Version: 0.4.1
Release: 3%{?dist}
License: GPLv3+
Group: System Environment/Base
Version: 1.3.1
Release: 1%{?dist}%{?release_suffix}
License: GPL-3.0-only AND (0BSD OR MIT OR Apache-2.0) AND Apache-2.0 AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND BSD-3-Clause AND MIT AND (MIT OR Apache-2.0) AND (MIT OR Zlib OR Apache-2.0) AND (Unlicense OR MIT) AND (Zlib OR Apache-2.0 OR MIT)
#ExcludeArch: %%{ix86}
URL: https://github.com/jthornber/thin-provisioning-tools
Source0: https://github.com/jthornber/thin-provisioning-tools/archive/thin-provisioning-tools-v%{version}.tar.bz2
# Source1: https://github.com/jthornber/thin-provisioning-tools/archive/v%{version}.tar.gz
BuildRequires: autoconf, expat-devel, libaio-devel, libstdc++-devel, boost-devel
Requires: expat
Patch0: device-mapper-persistent-data-0.4.1-bz1085620.patch
Patch1: device-mapper-persistent-data-0.4.1-missing-man-pages.patch
Patch2: device-mapper-persistent-data-0.4.1-avoid-strip.patch
#Source0: https://github.com/jthornber/thin-provisioning-tools/archive/thin-provisioning-tools-%%{version}.tar.gz
Source0: https://github.com/jthornber/thin-provisioning-tools/archive/v%{version}%{?version_suffix}.tar.gz
Source1: dmpd131-vendor.tar.gz
%if %{defined rhel}
BuildRequires: rust-toolset
%else
BuildRequires: rust-packaging
BuildRequires: rust >= 1.35
BuildRequires: cargo
%endif
BuildRequires: make
BuildRequires: systemd-devel
BuildRequires: clang-libs
BuildRequires: glibc-static
BuildRequires: device-mapper-devel
BuildRequires: clang
#BuildRequires: gcc
%description
thin-provisioning-tools contains check,dump,restore,repair,rmap
@ -25,62 +43,380 @@ are included and era check, dump, restore and invalidate to manage
snapshot eras
%prep
%setup -q -n thin-provisioning-tools-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%autosetup -p1 -n thin-provisioning-tools-%{version}%{?version_suffix} -a1
%cargo_prep -v vendor
# NOTE: Following could replace Cargo.toml patching, but some macros are not working well with it
# Notably at least one of cargo_license_summary, cargo_license_summary, or cargo_vendor_manifest
#cat >> .cargo/config.toml << EOF
#
#[source."git+https://github.com/jthornber/rio?branch=master"]
#git = "https://github.com/jthornber/rio"
#branch = "master"
#replace-with = "vendored-sources"
#
#EOF
echo %{version}-%{release} > VERSION
%generate_buildrequires
%build
autoconf
%configure --with-optimisation=
make %{?_smp_mflags} V=
#make %{?_smp_mflags} V=
%cargo_build
%cargo_license_summary
%{cargo_license} > LICENSE.dependencies
%cargo_vendor_manifest
%install
make DESTDIR=%{buildroot} MANDIR=%{_mandir} install
# TODO: Check that MANDIR is unused and remove
%make_install STRIP=true MANDIR=%{_mandir} BINDIR=%{buildroot}%{_sbindir}
%clean
%if %{with check}
%check
%cargo_test
#cargo test --test thin_shrink -- --nocapture --test-threads=1
%endif
%files
%doc COPYING README.md
%doc README.md
%license COPYING
%license LICENSE.dependencies
%license cargo-vendor.txt
%{_mandir}/man8/cache_check.8.gz
%{_mandir}/man8/cache_dump.8.gz
%{_mandir}/man8/cache_restore.8.gz
%{_mandir}/man8/cache_metadata_size.8.gz
%{_mandir}/man8/cache_repair.8.gz
%{_mandir}/man8/cache_restore.8.gz
%{_mandir}/man8/cache_writeback.8.gz
%{_mandir}/man8/era_check.8.gz
%{_mandir}/man8/era_dump.8.gz
%{_mandir}/man8/era_invalidate.8.gz
%{_mandir}/man8/era_restore.8.gz
%{_mandir}/man8/thin_check.8.gz
%{_mandir}/man8/thin_delta.8.gz
%{_mandir}/man8/thin_dump.8.gz
%{_mandir}/man8/thin_ls.8.gz
%{_mandir}/man8/thin_metadata_size.8.gz
%{_mandir}/man8/thin_restore.8.gz
%{_mandir}/man8/thin_migrate.8.gz
%{_mandir}/man8/thin_repair.8.gz
%{_mandir}/man8/thin_restore.8.gz
%{_mandir}/man8/thin_rmap.8.gz
%{_mandir}/man8/thin_trim.8.gz
%{_mandir}/man8/thin_metadata_pack.8.gz
%{_mandir}/man8/thin_metadata_unpack.8.gz
%{_sbindir}/pdata_tools
%{_sbindir}/cache_check
%{_sbindir}/cache_dump
%{_sbindir}/cache_metadata_size
%{_sbindir}/cache_restore
%{_sbindir}/cache_repair
%{_sbindir}/cache_restore
%{_sbindir}/cache_writeback
%{_sbindir}/era_check
%{_sbindir}/era_dump
%{_sbindir}/era_restore
%{_sbindir}/era_invalidate
%{_sbindir}/era_restore
%{_sbindir}/thin_check
%{_sbindir}/thin_delta
%{_sbindir}/thin_dump
%{_sbindir}/thin_ls
%{_sbindir}/thin_metadata_size
%{_sbindir}/thin_restore
%{_sbindir}/thin_migrate
%{_sbindir}/thin_repair
%{_sbindir}/thin_restore
%{_sbindir}/thin_rmap
%{_sbindir}/thin_trim
%{_sbindir}/thin_metadata_pack
%{_sbindir}/thin_metadata_unpack
#% {_sbindir}/thin_show_duplicates
%changelog
* Tue Dec 02 2025 Marian Csontos <mcsontos@redhat.com> - 1.3.1-1
- Update to latest upstream release 1.3.1.
* Wed Oct 22 2025 Marian Csontos <mcsontos@redhat.com> - 1.3.0-1
- Update to latest upstream release 1.3.0.
* Thu Sep 04 2025 Marian Csontos <mcsontos@redhat.com> - 1.2.1-1
- Update to latest upstream release 1.2.1.
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Sun Jan 12 2025 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1.1.0-2
- Rebuilt for the bin-sbin merge (2nd attempt)
* Mon Sep 02 2024 Marian Csontos <mcsontos@redhat.com> - 1.1.0-1
- Update to latest upstream release 1.1.0.
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.12-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Tue Jul 09 2024 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1.0.12-2
- Rebuilt for the bin-sbin merge
* Tue Feb 27 2024 Marian Csontos <mcsontos@redhat.com> - 1.0.12-1
- Update to latest upstream release 1.0.12.
* Tue Feb 13 2024 Marian Csontos <mcsontos@redhat.com> - 1.0.11-4
- Add licenses for statically linked libraries.
* Tue Feb 13 2024 Marian Csontos <mcsontos@redhat.com> - 1.0.11-3
- SPDX migration
* Thu Feb 08 2024 Yaakov Selkowitz <yselkowi@redhat.com> - 1.0.11-2
- Update Rust macro usage
* Thu Feb 08 2024 Marian Csontos <mcsontos@redhat.com> - 1.0.11-1
- Update to latest upstream release 1.0.11.
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.9-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Dec 11 2023 Marian Csontos <mcsontos@redhat.com> - 1.0.9-1
- Update to latest upstream release 1.0.9.
* Thu Aug 31 2023 Marian Csontos <mcsontos@redhat.com> - 1.0.6-2
- Fix broken installation on ppc64le caused by incorrect ioctl call.
* Wed Aug 09 2023 Marian Csontos <mcsontos@redhat.com> - 1.0.6-1
- Update to latest upstream release 1.0.6.
* Thu Jul 27 2023 Marian Csontos <mcsontos@redhat.com> - 1.0.5-1
- Update to latest upstream release 1.0.5.
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue May 30 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 1.0.4-2
- Use rust-toolset in RHEL builds
* Fri Apr 28 2023 Marian Csontos <mcsontos@redhat.com> - 1.0.4-1
- Update to latest upstream release 1.0.4.
* Wed Mar 22 2023 Marian Csontos <mcsontos@redhat.com> - 1.0.3-1
- Update to latest upstream release 1.0.3.
* Sun Feb 05 2023 Fabio Valentini <decathorpe@gmail.com> - 0.9.0-10
- Rebuild for fixed frame pointer compiler flags in Rust RPM macros.
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.0-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.0-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Jul 22 2021 Marian Csontos <mcsontos@redhat.com> - 0.9.0-6
- Fix rust-1.53 compilation issues.
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Thu Jun 10 2021 Marian Csontos <mcsontos@redhat.com> - 0.9.0-4
- Fix gating test syntax.
- Fix important issues found by static analysis.
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Sep 21 2020 Marian Csontos <mcsontos@redhat.com> - 0.9.0-2
- Update crc32c to version 0.5 supporting non x86 architectures
* Thu Sep 17 2020 Marian Csontos <mcsontos@redhat.com> - 0.9.0-1
- Update to latest upstream version
- New tools thin_metadata_pack and thin_metadata_unpack
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.8.5-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.8.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.8.5-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Tue Jun 04 2019 Marian Csontos <mcsontos@redhat.com> - 0.8.5-1
- Update to latest upstream version
* Sat May 04 2019 Marian Csontos <mcsontos@redhat.com> - 0.8.1-1
- Fix thin_repair should not require --repair option.
* Mon Apr 29 2019 Marian Csontos <mcsontos@redhat.com> - 0.8.0-1
- Update to latest upstream version
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.6-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Fri Jan 25 2019 Jonathan Wakely <jwakely@redhat.com> - 0.7.6-3
- Rebuilt for Boost 1.69
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Tue Apr 24 2018 Marian Csontos <mcsontos@redhat.com> - 0.7.6-1
- Update to latest upstream version
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Tue Jan 23 2018 Jonathan Wakely <jwakely@redhat.com> - 0.7.5-2
- Rebuilt for Boost 1.66
* Tue Nov 14 2017 Marian Csontos <mcsontos@redhat.com> - 0.7.5-1
- Fix version 2 metadata corruption in cache_restore.
* Fri Oct 06 2017 Marian Csontos <mcsontos@redhat.com> - 0.7.3-1
- Update to latest bugfix and documentation update release.
- *_restore tools wipe superblock as a last resort.
- Add thin_check --override-mapping-root.
* Fri Sep 22 2017 Marian Csontos <mcsontos@redhat.com> - 0.7.2-1
- Update to latest upstream release including various bug fixes and new features.
- Fix segfault when dump tools are given a tiny metadata file.
- Fix -V exiting with 1.
- Fix thin_check when running on XML dump instead of binary data.
- Speed up free block searching.
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.0-0.6.rc6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.7.0-0.5.rc6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Mon Jul 03 2017 Jonathan Wakely <jwakely@redhat.com> - 0.7.0-0.4.rc6
- Rebuilt for Boost 1.64
* Tue May 23 2017 Marian Csontos <mcsontos@redhat.com> - 0.7.0-0.3.rc6
- Rebuilt for mass rebuild incorrectly tagging master to .fc26
* Mon May 15 2017 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.7.0-0.2.rc6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild
* Mon Mar 27 2017 Peter Rajnoha <prajnoha@redhat.com> - 0.7.0-0.1-rc6
- Don't open devices as writeable if --clear-needs-check-flag is not set.
- Fix cache metadata format version 2 superblock packing.
* Wed Mar 22 2017 Peter Rajnoha <prajnoha@redhat.com> - 0.7.0-0.1-rc5
- Switch to a faster implementation of crc32 used for checksums.
* Tue Mar 21 2017 Peter Rajnoha <prajnoha@redhat.com> - 0.7.0-0.1-rc4
- Add support for cache metadata format version 2 in cache tools.
* Thu Mar 16 2017 Peter Rajnoha <prajnoha@redhat.com> - 0.7.0-0.1-rc3
- Fix compilation warnings and further code cleanup.
* Thu Mar 09 2017 Peter Rajnoha <prajnoha@redhat.com> - 0.7.0-0.1-rc2
- Update to latest upstream release including various bug fixes and new features.
- New thin_show_duplicates command.
- Add '--skip-mappings' and '--format custom' options to thin_dump.
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Fri Jan 27 2017 Jonathan Wakely <jwakely@redhat.com> - 0.6.3-2
- Rebuilt for Boost 1.63
* Thu Sep 22 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.3-1
- Preallocate output file for thin_repair and thin_restore.
* Mon Jul 11 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-1
- Fixes providing proper use of compiler flags.
* Mon Apr 11 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-0.1.rc8
- Fixes for thin_trim.
* Tue Mar 22 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-0.1.rc7
- Fixes for thin_repair.
* Wed Mar 09 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-0.1.rc6
- Add new fields to thin_ls: MAPPED_BYTES, EXCLUSIVE_BYTES and SHARED_BYTES.
* Thu Feb 18 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-0.1.rc5
- Fixes for thin_delta.
* Mon Feb 15 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-0.1.rc4
- Fix bug in mapping comparison while using thin_delta.
* Mon Feb 15 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-0.1.rc3
- Fix recent regression in thin_repair.
- Force g++-98 dialect.
* Mon Feb 15 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.2-0.1.rc1
- Fix bug in thin_dump when using metadata snaps.
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Jan 20 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.6.0-1
- New thin_ls command.
* Wed Jan 20 2016 Peter Rajnoha <prajnoha@redhat.com> - 0.5.6-1
- era_invalidate may be run on live metadata if the --metadata-snap
option is given.
* Fri Jan 15 2016 Jonathan Wakely <jwakely@redhat.com> - 0.5.5-3
- Rebuilt for Boost 1.60
* Thu Aug 27 2015 Jonathan Wakely <jwakely@redhat.com> - 0.5.5-2
- Rebuilt for Boost 1.59
* Thu Aug 13 2015 Peter Rajnoha <prajnoha@redhat.com> - 0.5.5-1
- Support thin_delta's --metadata_snap option without specifying snap location.
- Update man pages to make it clearer that tools shoulnd't be run on live metadata.
- Fix bugs in the metadata reference counting for thin_check.
* Wed Jul 29 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5.4-3
- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159
* Wed Jul 22 2015 David Tardon <dtardon@redhat.com> - 0.5.4-2
- rebuild for Boost 1.58
* Fri Jul 17 2015 Peter Rajnoha <prajnoha@redhat.com> - 0.5.4-1
- Fix cache_check with --clear-needs-check-flag option to
make sure metadata device is not open already by the tool
when open with O_EXCL mode is requested.
* Fri Jul 03 2015 Peter Rajnoha <prajnoha@redhat.com> - 0.5.3-1
- Tools now open the metadata device in O_EXCL mode to stop
running the tools on active metadata.
* Fri Jul 03 2015 Peter Rajnoha <prajnoha@redhat.com> - 0.5.2-1
- Fix bug in damage reporting in thin_dump and thin_check.
* Thu Jun 25 2015 Peter Rajnoha <prajnoha@redhat.com> - 0.5.1-1
- Fix crash if tools are given a very large metadata device to restore to.
* Mon Jun 22 2015 Peter Rajnoha <prajnoha@redhat.com> - 0.5.0-1
- Add space map checking for thin_check.
- Add --clear-needs-check option for cache_check.
- Update to latest upstream release.
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Mon Jun 08 2015 Peter Rajnoha <prajnoha@redhat.com> - 0.4.2-1
- New thin_delta and thin_trim commands.
- Update to latest upstream release.
* Sat May 02 2015 Kalev Lember <kalevlember@gmail.com> - 0.4.1-4
- Rebuilt for GCC 5 C++11 ABI change
* Mon Jan 26 2015 Petr Machata <pmachata@redhat.com> - 0.4.1-3
- Rebuild for boost 1.57.0
* Tue Oct 29 2014 Heinz Mauelshagen <heinzm@redhat.com> - 0.4.1-2
* Wed Oct 29 2014 Heinz Mauelshagen <heinzm@redhat.com> - 0.4.1-2
- Resolves: bz#1159466
* Tue Oct 29 2014 Heinz Mauelshagen <heinzm@redhat.com> - 0.4.1-1
* Wed Oct 29 2014 Heinz Mauelshagen <heinzm@redhat.com> - 0.4.1-1
- New upstream version
- Manual header additions/fixes
@ -121,7 +457,7 @@ make DESTDIR=%{buildroot} MANDIR=%{_mandir} install
* Thu Jul 25 2013 Heinz Mauelshagen <heinzm@redhat.com> - 0.2.1-5
- enhance manual pages and fix typos
* Fri Jul 18 2013 Heinz Mauelshagen <heinzm@redhat.com> - 0.2.1-4
* Thu Jul 18 2013 Heinz Mauelshagen <heinzm@redhat.com> - 0.2.1-4
- Update thin_metadata_size manual page
- thin_dump: support dumping default metadata snapshot

View file

@ -1 +1,2 @@
a1d5ac4bd865360dff6ac20ec00573cc thin-provisioning-tools-v0.4.1.tar.bz2
SHA512 (v1.3.1.tar.gz) = ff0758b21b50702568cad88522ee4c2b6b4433cec0a5f5074c9d1791c13e630e5c516601d7a68c51ac34e036091fc82fe831dbe51e6776737571d90ed266878e
SHA512 (dmpd131-vendor.tar.gz) = 0e1b8e501e330b64415c9097c94dfc1f1b43d2900a66258e40b6c8f28c51fd61247d60495f594f14550fb349ed4ad435f8959a8808fea1d363a206c5ead7db1e

View file

@ -0,0 +1,75 @@
# Copyright (c) 2006 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Author: Jakub Krysl <jkrysl@redhat.com>
# The toplevel namespace within which the test lives.
TOPLEVEL_NAMESPACE=kernel
# The name of the package under test:
PACKAGE_NAME=storage
# The path of the test below the package:
RELATIVE_PATH=lvm/device-mapper-persistent-data/thin
# Version of the Test. Used with make tag.
export TESTVERSION=1.0
# The combined namespace of the test.
export TEST=/$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH)
# A phony target is one that is not really the name of a file.
# It is just a name for some commands to be executed when you
# make an explicit request. There are two reasons to use a
# phony target: to avoid a conflict with a file of the same
# name, and to improve performance.
.PHONY: all install download clean
# executables to be built should be added here, they will be generated on the system under test.
BUILT_FILES=
# data files, .c files, scripts anything needed to either compile the test and/or run it.
FILES=$(METADATA) runtest.sh PURPOSE testinfo.desc dmpd_functions.py dmpd_library.py Makefile
run: $(FILES) build
./runtest.sh
build: $(BUILT_FILES)
chmod a+x ./runtest.sh
clean:
rm -f *~ *.rpm $(BUILT_FILES)
# You may need to add other targets e.g. to build executables from source code
# Add them here:
# Include Common Makefile
include /usr/share/rhts/lib/rhts-make.include
# Generate the testinfo.desc here:
$(METADATA): Makefile
@touch $(METADATA)
# Change to the test owner's name
@echo "Owner: Filip Suba <fsuba@redhat.com>" > $(METADATA)
@echo "Name: $(TEST)" >> $(METADATA)
@echo "Path: $(TEST_DIR)" >> $(METADATA)
@echo "License: GPL" >> $(METADATA)
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
@echo "Description: Testing thin tools provided by device-mapper-persistent-data">> $(METADATA)
@echo "TestTime: 1h" >> $(METADATA)
@echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA)
@echo "Requires: $(PACKAGE_NAME)" >> $(METADATA)
rhts-lint $(METADATA)

View file

@ -0,0 +1,30 @@
#===========================================================================
#
# PURPOSE file for:
# /kernel/storage/lvm/device-mapper-persistent-data/thin
#
# Description:
# Testing thin tools provided by device-mapper-persistent-data
#
# Bugs related:
#
#
# Author(s):
# Jakub Krysl
# <jkrysl@redhat.com>
#
#===========================================================================
# Note:
# As with some of Storage tests, at the end of the test it will check
# for errors on the logs.
# This check if implemented on /kernel/storage/include/python_modules
# LogChecker.py module
#
# To avoid Storage tests reporting error that were caused before the test
# started to run is recommended to run /kernel/storage/misc/log_checker
# just before running this test
#===========================================================================
# This task takes optional parameters:
#
#===========================================================================
# EndFile

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

18
tests/functions_test/runtest.sh Executable file
View file

@ -0,0 +1,18 @@
#!/bin/sh
# Copyright (c) 2017 Red Hat, Inc. All rights reserved. This copyrighted
# material is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
#
# Author: Jakub Krysl <jkrysl@redhat.com>
rhts-run-simple-test functions_test ./dmpd_functions.py

26
tests/tests.yml Normal file
View file

@ -0,0 +1,26 @@
---
# Tests suitable to run in classic environment
- hosts: localhost
roles:
- role: standard-test-beakerlib
tags:
- classic
tests:
- tools_not_linked_usr
- functions_test
required_packages:
- findutils # beakerlib needs find command
- which # tools_not_linked_usr needs which command
# Tests suitable to run in container and atomic environments
- hosts: localhost
roles:
- role: standard-test-beakerlib
tags:
- container
- atomic
tests:
- tools_not_linked_usr
required_packages:
- findutils # beakerlib needs find command
- which # tools_not_linked_usr needs which command

View file

@ -0,0 +1,75 @@
# Copyright (c) 2006 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; If not, see http://www.gnu.org/licenses/.
#
# Author: Bruno Goncalves <bgoncalv@redhat.com>
# The toplevel namespace within which the test lives.
TOPLEVEL_NAMESPACE=kernel
# The name of the package under test:
PACKAGE_NAME=storage
# The path of the test below the package:
RELATIVE_PATH=lvm/device-mapper-persistent-data/tools_not_linked_usr
# Version of the Test. Used with make tag.
export TESTVERSION=1.0
# The combined namespace of the test.
export TEST=/$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH)
# A phony target is one that is not really the name of a file.
# It is just a name for some commands to be executed when you
# make an explicit request. There are two reasons to use a
# phony target: to avoid a conflict with a file of the same
# name, and to improve performance.
.PHONY: all install download clean
# executables to be built should be added here, they will be generated on the system under test.
BUILT_FILES=
# data files, .c files, scripts anything needed to either compile the test and/or run it.
FILES=$(METADATA) runtest.sh PURPOSE tools_not_linked_usr.py
run: $(FILES) build
./runtest.sh
build: $(BUILT_FILES)
chmod a+x ./runtest.sh
chmod a+x ./tools_not_linked_usr.py
clean:
rm -f *~ *.rpm $(BUILT_FILES)
# You may need to add other targets e.g. to build executables from source code
# Add them here:
# Include Common Makefile
include /usr/share/rhts/lib/rhts-make.include
# Generate the testinfo.desc here:
$(METADATA): Makefile
@touch $(METADATA)
# Change to the test owner's name
@echo "Owner: Bruno Goncalves <bgoncalv@redhat.com>" > $(METADATA)
@echo "Name: $(TEST)" >> $(METADATA)
@echo "Path: $(TEST_DIR)" >> $(METADATA)
@echo "License: GPL" >> $(METADATA)
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
@echo "Description: Make sure tools are not linked to lib under /usr.">> $(METADATA)
@echo "TestTime: 1h" >> $(METADATA)
@echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA)
@echo "Requires: $(PACKAGE_NAME)" >> $(METADATA)
rhts-lint $(METADATA)

View file

@ -0,0 +1,13 @@
#===========================================================================
#
# Description:
# Make sure tools are not using any library that is linked to /usr
#
# Bugs related:
#
# Author(s):
# Bruno Goncalves
# <bgoncalv@redhat.com>
#
#===========================================================================
# EndFile

View file

@ -0,0 +1,18 @@
#!/bin/sh
# Copyright (c) 2006 Red Hat, Inc. All rights reserved. This copyrighted
# material is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
#
# Author: Bruno Goncalves <bgoncalv@redhat.com>
rhts-run-simple-test tools_not_linked_usr ./tools_not_linked_usr.py

View file

@ -0,0 +1,95 @@
#!/usr/bin/python
# Copyright (c) 2006 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; If not, see http://www.gnu.org/licenses/.
#
# Author: Bruno Goncalves <bgoncalv@redhat.com>
import subprocess
import sys
import re
def run(cmd):
print("INFO: Running '%s'..." % cmd)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout, stderr = p.communicate()
retcode = p.returncode
output = stdout.decode('ascii', 'ignore') + stderr.decode('ascii', 'ignore')
# remove new line from last line
output = output.rstrip()
print(output)
return retcode, output
def start_test():
#if uses any library linked to /usr this my affect the tools during boot
print("INFO: Making sure tools provided by device-mapper-persistent-data "
"are not linked to /usr")
#Paths where we should have no libraries linked from
lib_paths = ["/usr/"]
package = "device-mapper-persistent-data"
run("yum install -y %s" % package)
#Get all tools that we need to check
ret, output = run("rpm -ql %s | grep \"sbin/\"" % package)
if ret != 0:
print("FAIL: Could not get the tools shipped from %s" % package)
return False
tools = output.split("\n")
error = False
for tool in tools:
if not tool:
#skip any blank line
continue
tool_error = 0
for lib_path in lib_paths:
print("INFO: Checking if %s is not linked to libraries at %s" % (tool, lib_path))
ret, linked_lib = run("ldd %s" % tool)
if ret != 0:
print("FAIL: Could not list dynamically libraries for %s" % (tool))
tool_error += 1
else:
#The command executed sucessfuly
#check if any library linked is from lib_path
links = linked_lib.split("\n")
for link in links:
if re.match(".*%s.*" % lib_path, link):
print("FAIL: %s is linked to %s" % (tool, link))
tool_error += 1
if tool_error == 0:
print("%s is not linked to %s" % (tool, lib_path))
else:
#found some error in at least 1 tool
error = True
if error:
return False
return True
def main():
if not start_test():
print("FAIL: test failed")
sys.exit(1)
print("PASS: Test pass")
sys.exit(0)
main()