summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* TODO: add a description for thisdev-dct-process-v16Alasdair G Kergon2014-06-175-11/+21
|
* test: add process-each toollib testsDavid Teigland2014-06-174-0/+1933
|
* logging: use flags to enable warningsDavid Teigland2014-06-175-53/+59
| | | | | | | | | | | | | | | The "warnings" arg was used to enable logging of warnings when reading a pv. This arg is turned into a set of flags with the WARN_PV_READ flag matching the existing behavior. A new flag WARN_INCONSISTENT is added that will cause vg_read_internal() to log the "vg is not consistent" warning, and the various callers do not need to log this warning themselves. A new vg_read flag READ_WARN_INCONSISTENT is used from reporting to enable the WARN_INCONSISTENT flag in vg_read_internal.
* vgreduce: use normal process_each_pvDavid Teigland2014-06-173-83/+76
| | | | In the non-repair case.
* toollib: rewrite process_each_pvDavid Teigland2014-06-1711-371/+474
| | | | | | Process pvs by iterating through vgs, then iterating through devs if the command wants to process non-pv devices. The process_single function can always use the vg and pv args.
* toollib: add ENABLE_ALL_DEVS flagDavid Teigland2014-06-172-3/+4
| | | | | | | The ENABLE_ALL_DEVS flag is added to the command structure for commands that should process all devs (pvs and non-pvs) when they call process_each_pv and the command includes the --all arg. This will be used in a later process_each_pv patch.
* toollib: remove unused arg from process_each_lv_in_vgDavid Teigland2014-06-173-4/+2
| | | | | The failed_lvnames arg is no longer used since the cmd_vg replicator wrapper was removed.
* toollib: improve error message in process_each_lv_in_vgDavid Teigland2014-06-171-6/+11
| | | | Include in the error message the lv name args that were not found.
* toollib: rewrite process_each_lvDavid Teigland2014-06-171-297/+334
| | | | | | - Copy the same form as the new process_each_vg. - Replace unused struct cmd_vg and cmd_vg_read() replicator code with struct vg and vg_read() directly.
* toollib: rewrite process_each_vgDavid Teigland2014-06-171-145/+233
| | | | | | | | - Split the collecting of arguments from processing them. - The split allows the two different loops through vgs to be replaced by a single loop. - Replace unused struct cmd_vg and cmd_vg_read() replicator code with struct vg and vg_read() directly.
* toollib: add ALL_VGS_IS_DEFAULT flagDavid Teigland2014-06-172-14/+21
| | | | | | | The ALL_VGS_IS_DEFAULT flag is added to the command structure for commands that should process all vgs when they call process_each_vg or process_each_lv with no args. This will be used in later patches to process_each functions.
* test: fix report_select test to work in clusterPeter Rajnoha2014-06-171-1/+1
| | | | | The snapshot LV is used to check selection of percent values. The orig volume must be activated exclusively in cluster.
* tests: update lvcreate-thin for latest changesPeter Rajnoha2014-06-171-1/+1
| | | | | | | | | With recent changes introduced with the report selection support, the content of lv_modules field is of string list type (before it was just string type). String list elements are always ordered now so update lvcreate-thin test to expect the elements to be ordered.
* prop: update FIELD macro to accomodate the differentiation of number, size ↵Peter Rajnoha2014-06-172-1/+2
| | | | | | | | and percent field values The differentiation of the original number field into number, size and percent field types has been introduced with recent changes for report selection support.
* report: select: add man pages for report selection featuredev-prajnoha-report-selectPeter Rajnoha2014-06-177-0/+117
|
* report: select: add --select arg to lvm devtypesPeter Rajnoha2014-06-171-1/+2
|
* report: add support for implicit fields, add implicit "selected" fieldPeter Rajnoha2014-06-171-67/+282
| | | | | | | | | | | | | | | | | | | | | | | | Implicit fields are fields that are registered with the report and reported internally by libdevmapper itself (compared to explicit fields that are registered by the layer above libdevmapper - e.g. LVM, dmsetup...). The "selected" field is the implicit field (for now the only one) that reports the result of the selection. Since the selection itself is the property of the libdevmapper, the upper layer using dm_report_init can't register this field itself and it must be done directly at libdevmapper layer. The "selected" field is internally registered as part of the "common" report type with id 0x80000000 (the last bit in uin32_t) which is then reserved (the explicit report types are then checked if they do not contain this id and if yes, we error out). This way, the "selected" field is recognized by all libdevmapper users that initialize the reporting with "dm_report_init_with_selection". If reporting is initialized with the classical "dm_report_init", there's no functional change (so the "selected" field is not defined and it's not recognized).
* tests: select: add test for report selection featurePeter Rajnoha2014-06-171-0/+212
|
* report: select: add support for percent selectionPeter Rajnoha2014-06-175-37/+84
|
* report: select: refactor: move percent handling code to libdm for reusePeter Rajnoha2014-06-1730-257/+266
|
* report: select: add support for reserved value recognition in report ↵Peter Rajnoha2014-06-174-43/+268
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | selection string - add struct dm_report_reserved_value Make dm_report_init_with_selection to accept an argument with an array of reserved values where each element contains a triple: {dm report field type, reserved value, array of strings representing this value} When the selection is parsed, we always check whether a string representation of some reserved value is not hit and if it is, we use the reserved value assigned for this string instead of trying to parse it as a value of certain field type. This makes it possible to define selections like: ... --select lv_major=undefined (or -1 or unknown or undef or whatever string representations are registered for this reserved value in the future) ... --select lv_read_ahead=auto ... --select vg_mda_copies=unmanaged With this, each time the field value of certain type is hit and when we compare it with the selection, we use the proper value for comparison. For now, register these reserved values that are used at the moment (also more descriptive names are used for the values): const uint64_t _reserved_number_undef_64 = UINT64_MAX; const uint64_t _reserved_number_unmanaged_64 = UINT64_MAX - 1; const uint64_t _reserved_size_auto_64 = UINT64_MAX; { {DM_REPORT_FIELD_TYPE_NUMBER, _reserved_number_undef_64, {"-1", "undefined", "undef", "unknown", NULL}}, {DM_REPORT_FIELD_TYPE_NUMBER, _reserved_number_unmanaged_64, {"unmanaged", NULL}}, {DM_REPORT_FIELD_TYPE_SIZE, _reserved_size_auto_64, {"auto", NULL}}, NULL } Same reserved value of different field types do not collide. All arrays are null-terminated. The list of reserved values is automatically displayed within selection help output: Selection operands ------------------ ... Reserved values --------------- -1, undefined, undef, unknown - Reserved value for undefined numeric value. [number] unmanaged - Reserved value for unmanaged number of metadata copies in VG. [number] auto - Reserved value for size that is automatically calculated. [size] Selection operators ------------------- ...
* report: select: show field type in field list if in context of selectionPeter Rajnoha2014-06-171-6/+21
| | | | | | | | When the field list is displayed as help for constructing selection criteria, show also the field value type. This is useful for users to know what set of operators are allowed for the type - the subsequent "Selection operands" section in the help output summarize all known types that can be used in selection.
* report: select: add help for creating selectionsPeter Rajnoha2014-06-172-7/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The "<lvm command> -S/--select help" shows help (including list of fields to match against): ...field list here including the field type name... Selection operands ------------------ field - Reporting field. number - Non-negative integer value. size - Floating point value with units specified. string - Characters quoted by ' or " or unquoted. string list - Strings enclosed by [ ] and elements delimited by either "all items must match" or "at least one item must match" operator. regular expression - Characters quoted by ' or " or unquoted. Selection operators ------------------- Comparison operators: =~ - Matching regular expression. !~ - Not matching regular expression. = - Equal to. != - Not equal to. >= - Greater than or equal to. > - Greater than <= - Less than or equal to. < - Less than. Logical and grouping operators: && - All fields must match , - All fields must match || - At least one field must match # - At least one field must match ! - Logical negation ( - Left parenthesis ) - Right parenthesis [ - List start ] - List end
* report: select: add support for comparing string lists with selection definedPeter Rajnoha2014-06-171-0/+73
|
* report: select: add support for processing string lists in selectionPeter Rajnoha2014-06-171-6/+198
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Selection list items are enclosed in '[' and ']' (if there's only one item, the '[' and ']' can be omitted). Each element of the list is a string (either quoted or unquoted, like the usual string operand used in selection) and each element is delimited either by conjunction (meaining "match all") or disjunction operator (meaning "match any"). For example, if "," is the conjuction operator and "/" is the disjunction operator then: lv_tags=[a,b,c] ...will match all fields where tags contain *all* a, b and c. lv_tags=[a/b/c] ...will match all fields where tags contain *any* of a, b, or c. Mixing operators within the list is not supported: lv_tags=[a,b/c] ...will give an error. The order in which items are defined in the selection do not matter. This patch enhances the selection parsing functionality to recognize such lists.
* report: select: add DM_REPORT_FIELD_TYPE_STRING_LIST to make a difference ↵Peter Rajnoha2014-06-176-23/+32
| | | | | | | | between STRING and STRING_LIST The {pv,vg,lv,seg}_tags and lv_modules fields are reported as string lists using the new dm_report_field_string_list - so we just pass the list to the fn that takes care of reporting and item sorting itself.
* report: select: add dm_report_field_string_list to libdmPeter Rajnoha2014-06-172-0/+129
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add a separate dm_report_field_string_list fn to libdevmapper to support reporting string lists. Before, the code used libdevmappers's dm_report_field_string fn which required formatting the list to a single string. This functionality is now moved to libdevmapper and the code that needs to report the string list just needs to pass the list itself and libdevmapper will take care of this. This also enhances code reuse. The dm_report_field_string_list also accepts an argument to define custom delimiter to use. If not defined, a default "," (comma) is used as item delimiter in the string list reported. The dm_report_field_string_list automatically sorts the items in the list before formatting it to a final string. It also encodes the position and length within the final string where each element can be found. This can be used to support checking against each list item reported since since when formatted as a single string for the actual report, we would lose this information otherwise (we don't want to copy each item, the position and length within the final string is enough for us to get the original items back). When such lists are checked against the selection tree, we can check each item individually this way and we can support operators like "match any" and "match all".
* report: select: refactor: move str_list to libdmPeter Rajnoha2014-06-1733-84/+51
| | | | | | | | | | The list of strings is used quite frequently and we'd like to reuse this simple structure for report selection support too. Make it part of libdevmapper for general reuse throughout the code. This also simplifies the LVM code a bit since we don't need to include and manage lvm-types.h anymore (the string list was the only structure defined there).
* report: select: add --select arg to pvdisplay, vgdisplay and lvdisplayPeter Rajnoha2014-06-174-4/+10
|
* report: select: add --select arg to pvs, vgs and lvsPeter Rajnoha2014-06-175-19/+24
|
* report: select: add --select arg to dmsetupPeter Rajnoha2014-06-171-5/+16
|
* report: select: use _check_report_selection in dm_report_object to report ↵Peter Rajnoha2014-06-171-12/+27
| | | | | | | | | | only objects that satisfy the report selection This is rebased and edited version of the original design and patch proposed by Jun'ichi Nomura: http://www.redhat.com/archives/dm-devel/2007-April/msg00025.html This activates the actual selection process in dm_report_object.
* report: select: add _check_selection fn to support checking fields against ↵Peter Rajnoha2014-06-171-1/+155
| | | | | | | | | | | given selections This is rebased and edited versions of the original design and patch proposed by Jun'ichi Nomura: http://www.redhat.com/archives/dm-devel/2007-April/msg00025.html The _check_selection implements the actual field checking against the selection tree.
* report: select: add dm_report_init_with_selection to libdmPeter Rajnoha2014-06-172-9/+436
| | | | | | | | | | | | | | This is rebased and edited version of the original design and patch proposed by Jun'ichi Nomura: http://www.redhat.com/archives/dm-devel/2007-April/msg00025.html The dm_report_init_with_selection is the same as dm_report_init but it contains an additional argument to set the selection in the form of a string that contains field names to check against and selection operators. The selection string is parsend and a selection tree is composed for use in the checks against individual fields when the report is processed. The parsed selection tree is stored in dm_report structure as "selection_root".
* report: select: add supporting infrastucture for token parsing in report ↵Peter Rajnoha2014-06-171-2/+279
| | | | | | | | | | | selections This is rebased and edited version of the original design and patch proposed by Jun'ichi Nomura: http://www.redhat.com/archives/dm-devel/2007-April/msg00025.html Add support for parsing numbers, strings (quoted or unquoted), regexes and operators amogst these operands in selection condition supplied.
* report: select: add structs for report selectionPeter Rajnoha2014-06-171-0/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is rebased and edited version of the original design and patch proposed by Jun'ichi Nomura: http://www.redhat.com/archives/dm-devel/2007-April/msg00025.html This patch defines operators and structures that will be used to store the report selection against which the actual values reported will be checked. Selection operators ------------------- Comparison operators: =~ - Matching regular expression. !~ - Not matching regular expression. = - Equal to. != - Not equal to. >= - Greater than or equal to. > - Greater than <= - Less than or equal to. < - Less than. Logical and grouping operators: && - All fields must match , - All fields must match || - At least one field must match # - At least one field must match ! - Logical negation ( - Left parenthesis ) - Right parenthesis
* report: select: add DM_REPORT_FIELD_TYPE_SIZE to make a difference between ↵Peter Rajnoha2014-06-177-26/+36
| | | | | | | | NUMBER and SIZE This makes it easier to check against the fields (following patches for report selection) and check whether size units are allowed or not with the field value.
* tests: check new snapshot skillsZdenek Kabelac2014-06-172-5/+39
|
* tests: detect version of thin_restore commandZdenek Kabelac2014-06-171-3/+4
| | | | Skip test when missing.
* tests: wait for udevZdenek Kabelac2014-06-171-0/+3
| | | | Before test exits, wait for udev.
* cleanup: we already know max device name sizeZdenek Kabelac2014-06-171-8/+6
| | | | | | Use NAME_LEN constant to simplify creation of device name. Since the max size should be already tested in validation, throw INTERNAL_ERROR if the size of vg/lv is bigger then NAME_LEN.
* cleanup: use stack for small bufferZdenek Kabelac2014-06-171-9/+6
| | | | | | Avoid error checking of allocation error when just few bytes are needed for short string and use stack. Stacktrace lvmetad_pv_gone() fail path.
* snapshot: %ORIGIN is relative to data sizeZdenek Kabelac2014-06-173-4/+13
| | | | | | | | Let's use the size of origin as the real base for percenta calculation, and 'silenly' add needed metadata space for snapshot. So now command 'lvcreate -s -l100%ORIGIN vg/lv' should always create a snapshot to handle full device overwrite.
* snapshot: report proper error messageZdenek Kabelac2014-06-172-3/+3
| | | | | | | Expresing -lXX%LV is not valid for snapshot, but error message for snapshost case was not complete and missed %ORIGIN. Also document correct settings for in manpage properly where it missed %PVS.
* snapshot: do not spawn when origin is not activeZdenek Kabelac2014-06-171-1/+1
| | | | | Since the code is not doing anything when origin is not active, avoid spawning polling thread.
* snapshot: check snapshot existsZdenek Kabelac2014-06-171-1/+2
| | | | Return 0 if the LV is not even snapshot.
* snapshot: check it's still snapshotZdenek Kabelac2014-06-171-1/+2
| | | | | | | While polling for snapshot, detect first the snapshot still exits. It's valid to have multiple polling threads watching for the same thing and just 1 can 'win' the finish part. All others should nicely 'fail'.
* poll_daemon: Cleanly exit polling if the LV is no longer activeJonathan Brassow2014-06-161-0/+10
| | | | | | | | | | If the we are polling an LV due to some sort of conversion and it becomes inactive, a rather worrisome message is produced, e.g.: " ABORTING: Mirror percentage check failed." We can cleanly exit if we do a simple check to see if the LV is active before performing the check. This eliminates the scary message.
* cache: Properly rename origin LV tree when adding "_corig"Jonathan Brassow2014-06-164-6/+74
| | | | | | | | When creating a cache LV with a RAID origin, we need to ensure that the sub-LVs of that origin properly change their names to include the "_corig" extention of the top-level LV. We do this by first performing a 'lv_rename_update' before making the call to 'insert_layer_for_lv'.
* systemd: use RemoveOnStop for dm-event.socket and lvm2-lvmetad.socketPeter Rajnoha2014-06-134-0/+4
| | | | | | | Systemd version 214 introduced new "RemoveOnStop" option for socket units to remove the socket/FIFO when the particular unit is stopped. Also https://bugzilla.redhat.com/show_bug.cgi?id=802748.