[pbs-devel] [PATCH v5 proxmox 2/8] pbs api types: add option to set GC chunk cleanup atime cutoff
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed Mar 19 09:10:03 CET 2025
Am 06.03.25 um 15:52 schrieb Christian Ebner:
> Add the `gc-atime-cutoff` option to the datastore tuning parameters.
> This allows to specify the time after which the chunks are not
> considered in use anymore if their atime has not been updated since
> then.
>
> The default is to keep chunks within the 24h 5m timespan (given no
> active writers).
>
> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
> ---
> changes since version 4:
> - drop mentioning this being conditional on gc-atime-safety-check,
> it isn't anymore
>
> pbs-api-types/src/datastore.rs | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/pbs-api-types/src/datastore.rs b/pbs-api-types/src/datastore.rs
> index 1a4d9e2d..467417e8 100644
> --- a/pbs-api-types/src/datastore.rs
> +++ b/pbs-api-types/src/datastore.rs
> @@ -223,6 +223,15 @@ pub enum DatastoreFSyncLevel {
> Filesystem,
> }
>
> +pub const GC_ATIME_CUTOFF_SCHEMA: Schema = IntegerSchema::new(
> + "Cutoff (in minutes) for chunk cleanup atime check in garbage collection phase 2 \
> + (default 24h 5m)",
> +)
> +.minimum(1) // safety margin for kernel timestamp granularity, but stay within minute range
> +.maximum(2880) // 2 days
> +.default(1445)
tiny nit that could definitively get fixed up on applying or if there
is the need for a v6 due to other stuff that actually matters, otherwise
we can keep it as is:
I'd prefer writing time constants that are less common – like these here
– such, that one more easily can tell what the outcome is even without a
comment (that might get outdated), e.g. for this here:
.maximum(2 * 24 * 60)
.default(24 * 60 + 5)
Very common values like 60 m or even 600 s for 1 h are IMO normally fine
though.
> +.schema();
> +
> #[api(
> properties: {
> "chunk-order": {
> @@ -237,6 +246,10 @@ pub enum DatastoreFSyncLevel {
> default: true,
> type: bool,
> },
> + "gc-atime-cutoff": {
> + schema: GC_ATIME_CUTOFF_SCHEMA,
> + optional: true,
> + },
> },
> )]
> #[derive(Serialize, Deserialize, Default)]
> @@ -250,6 +263,8 @@ pub struct DatastoreTuning {
> pub sync_level: Option<DatastoreFSyncLevel>,
> #[serde(skip_serializing_if = "Option::is_none")]
> pub gc_atime_safety_check: Option<bool>,
> + #[serde(skip_serializing_if = "Option::is_none")]
> + pub gc_atime_cutoff: Option<usize>,
> }
>
> pub const DATASTORE_TUNING_STRING_SCHEMA: Schema = StringSchema::new("Datastore tuning options")
More information about the pbs-devel
mailing list