mirror of
git://sourceware.org/git/lvm2.git
synced 2025-06-01 13:05:40 +03:00
Thin automatic policy based extension
This commit is contained in:
parent
34507894e9
commit
0e0f706f2e
@ -603,6 +603,25 @@ activation {
|
|||||||
snapshot_autoextend_threshold = 100
|
snapshot_autoextend_threshold = 100
|
||||||
snapshot_autoextend_percent = 20
|
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
|
# While activating devices, I/O to devices being (re)configured is
|
||||||
# suspended, and as a precaution against deadlocks, LVM2 needs to pin
|
# 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
|
# any memory it is using so it is not paged out. Groups of pages that
|
||||||
|
@ -170,5 +170,7 @@
|
|||||||
#define DEFAULT_MIRROR_LOG_FAULT_POLICY "allocate"
|
#define DEFAULT_MIRROR_LOG_FAULT_POLICY "allocate"
|
||||||
#define DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD 100
|
#define DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD 100
|
||||||
#define DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT 20
|
#define DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT 20
|
||||||
|
#define DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD 100
|
||||||
|
#define DEFAULT_THIN_POOL_AUTOEXTEND_PERCENT 20
|
||||||
|
|
||||||
#endif /* _LVM_DEFAULTS_H */
|
#endif /* _LVM_DEFAULTS_H */
|
||||||
|
@ -285,23 +285,40 @@ static int _adjust_policy_params(struct cmd_context *cmd,
|
|||||||
percent_t percent;
|
percent_t percent;
|
||||||
int policy_threshold, policy_amount;
|
int policy_threshold, policy_amount;
|
||||||
|
|
||||||
policy_threshold =
|
if (lv_is_thin_pool(lv)) {
|
||||||
find_config_tree_int(cmd, "activation/snapshot_autoextend_threshold",
|
policy_threshold =
|
||||||
DEFAULT_SNAPSHOT_AUTOEXTEND_THRESHOLD) * PERCENT_1;
|
find_config_tree_int(cmd, "activation/thin_pool_autoextend_threshold",
|
||||||
policy_amount =
|
DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD) * PERCENT_1;
|
||||||
find_config_tree_int(cmd, "activation/snapshot_autoextend_percent",
|
policy_amount =
|
||||||
DEFAULT_SNAPSHOT_AUTOEXTEND_PERCENT);
|
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)
|
if (policy_threshold >= PERCENT_100)
|
||||||
return 1; /* nothing to do */
|
return 1; /* nothing to do */
|
||||||
|
|
||||||
if (!lv_snapshot_percent(lv, &percent))
|
if (lv_is_thin_pool(lv)) {
|
||||||
return_0;
|
if (!lv_thin_pool_percent(lv, &percent))
|
||||||
|
return_0;
|
||||||
if (!(PERCENT_0 < percent && percent < PERCENT_100) || percent <= policy_threshold)
|
if (!(PERCENT_0 < percent && percent <= PERCENT_100) ||
|
||||||
return 1; /* nothing to do */
|
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;
|
lp->extents = policy_amount;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,8 +416,9 @@ static int _lvresize(struct cmd_context *cmd, struct volume_group *vg,
|
|||||||
lv = lvl->lv;
|
lv = lvl->lv;
|
||||||
|
|
||||||
if (use_policy) {
|
if (use_policy) {
|
||||||
if (!lv_is_cow(lv)) {
|
if (!lv_is_cow(lv) &&
|
||||||
log_error("Can't use policy-based resize for non-snapshot volumes.");
|
!lv_is_thin_pool(lv)) {
|
||||||
|
log_error("Policy-based resize is supported only for snapshot and thin pool volumes.");
|
||||||
return ECMD_FAILED;
|
return ECMD_FAILED;
|
||||||
}
|
}
|
||||||
_adjust_policy_params(cmd, lv, lp);
|
_adjust_policy_params(cmd, lv, lp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user