1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-24 06:04:19 +03:00

Thin automatic policy based extension

This commit is contained in:
Zdenek Kabelac 2011-12-21 13:10:52 +00:00
parent 58044875a8
commit d3923ece3d
3 changed files with 52 additions and 13 deletions

View File

@ -603,6 +603,25 @@ activation {
snapshot_autoextend_threshold = 100
snapshot_autoextend_percent = 20
# 'thin_pool_autoextend_threshold' and 'thin_pool_autoextend_percent' define
# how to handle automatic pool extension. The former defines when the
# pool should be extended: when its space usage exceeds this many
# percent. The latter defines how much extra space should be allocated for
# the pool, in percent of its current size.
#
# For example, if you set thin_pool_autoextend_threshold to 70 and
# thin_pool_autoextend_percent to 20, whenever a pool exceeds 70% usage,
# it will be extended by another 20%. For a 1G pool, using up 700M will
# trigger a resize to 1.2G. When the usage exceeds 840M, the pool will
# be extended to 1.44G, and so on.
#
# Setting thin_pool_autoextend_threshold to 100 disables automatic
# extensions. The minimum value is 50 (A setting below 50 will be treated
# as 50).
thin_pool_autoextend_threshold = 100
thin_pool_autoextend_percent = 20
# While activating devices, I/O to devices being (re)configured is
# suspended, and as a precaution against deadlocks, LVM2 needs to pin
# any memory it is using so it is not paged out. Groups of pages that

View File

@ -170,5 +170,7 @@
#define DEFAULT_MIRROR_LOG_FAULT_POLICY "allocate"
#define DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD 100
#define DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT 20
#define DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD 100
#define DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT 20
#endif /* _LVM_DEFAULTS_H */

View File

@ -285,23 +285,40 @@ static int _adjust_policy_params(struct cmd_context *cmd,
percent_t percent;
int policy_threshold, policy_amount;
policy_threshold =
find_config_tree_int(cmd, "activation/snapshot_autoextend_threshold",
DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD) * PERCENT_1;
policy_amount =
find_config_tree_int(cmd, "activation/snapshot_autoextend_percent",
DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT);
if (lv_is_thin_pool(lv)) {
policy_threshold =
find_config_tree_int(cmd, "activation/thin_pool_autoextend_threshold",
DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD) * PERCENT_1;
policy_amount =
find_config_tree_int(cmd, "activation/thin_pool_autoextend_percent",
DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT);
} else {
policy_threshold =
find_config_tree_int(cmd, "activation/snapshot_autoextend_threshold",
DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD) * PERCENT_1;
policy_amount =
find_config_tree_int(cmd, "activation/snapshot_autoextend_percent",
DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT);
}
if (policy_threshold >= PERCENT_100)
return 1; /* nothing to do */
if (!lv_snapshot_percent(lv, &percent))
return_0;
if (!(PERCENT_0 < percent && percent < PERCENT_100) || percent <= policy_threshold)
return 1; /* nothing to do */
if (lv_is_thin_pool(lv)) {
if (!lv_thin_pool_percent(lv, &percent))
return_0;
if (!(PERCENT_0 < percent && percent <= PERCENT_100) ||
percent <= policy_threshold)
return 1; /* nothing to do */
} else {
if (!lv_snapshot_percent(lv, &percent))
return_0;
if (!(PERCENT_0 < percent && percent < PERCENT_100) || percent <= policy_threshold)
return 1; /* nothing to do */
}
lp->extents = policy_amount;
return 1;
}
@ -399,8 +416,9 @@ static int _lvresize(struct cmd_context *cmd, struct volume_group *vg,
lv = lvl->lv;
if (use_policy) {
if (!lv_is_cow(lv)) {
log_error("Can't use policy-based resize for non-snapshot volumes.");
if (!lv_is_cow(lv) &&
!lv_is_thin_pool(lv)) {
log_error("Policy-based resize is supported only for snapshot and thin pool volumes.");
return ECMD_FAILED;
}
_adjust_policy_params(cmd, lv, lp);