[pbs-devel] [PATCH proxmox 2/2] pbs api types: add option to set GC chunk cleanup wait period
Christian Ebner
c.ebner at proxmox.com
Mon Mar 3 14:30:00 CET 2025
On 3/3/25 13:58, Fabian Grünbichler wrote:
> On February 19, 2025 5:48 pm, Christian Ebner wrote:
>> Add the `gc-wait-period` 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. This option is only considered, if the `gc-atime-check` is
>> enabled, to avoid potential data loss.
>>
>> The default is to keep chunks within the 24h 5m timespan (given no
>> active writers). The 5m minimum was chosen to be in line with the
>> already used safety offset for garbage collection.
>>
>> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
>> ---
>> changes since version 1:
>> - not present in previous version
>>
>> pbs-api-types/src/datastore.rs | 13 +++++++++++++
>> 1 file changed, 13 insertions(+)
>>
>> diff --git a/pbs-api-types/src/datastore.rs b/pbs-api-types/src/datastore.rs
>> index a7a9db7d..7542e969 100644
>> --- a/pbs-api-types/src/datastore.rs
>> +++ b/pbs-api-types/src/datastore.rs
>> @@ -223,6 +223,13 @@ pub enum DatastoreFSyncLevel {
>> Filesystem,
>> }
>>
>> +pub const GC_WAIT_PERIOD_SCHEMA: Schema =
>> + IntegerSchema::new("Wait period (in minutes) for garbage collection phase 2 chunk cleanup (default 24h 5m)")
>> + .minimum(5)
>> + .maximum(1445)
>
> these seem a bit conservative - if we introduce the option, we could
> also allow to reduce the grace period to 0 or to require longer grace
> periods?
I did stick to the additional 5 minutes safety gap, as this was also
introduced with the oldest writer change in commit 11861a48
("src/backup/chunk_store.rs: fix GC"). Since that commit does not
explicitly mention the reason (I assume to prevent a race between writer
instantiation and garbage collection), I sticked with this additional
lower limit.
Increasing the upper limit might be possible without such concerns, I do
not really see however the use case for that.
>
> wait period is also a bit of a misnomer IMHO, this is not something
> where we "wait" per se, but rather something to account for the
> timestamp information potentially not being accurate.. not sure what a
> better term would be, "grace period" doesn't really fit either..
I sticked with Thomas' naming suggestion here, but maybe something like
`gc-clenup-safety-margin` is more fitting? Although it does not imply
that this is due to the atime... Other suggestions?
>
> it's a kind of "safety margin", maybe something related to that? naming
> can be quite hard..
>
> maybe gc_atime_safety_margin ? that also implies that setting a
> non-default value has potential safety implications/risks your data,
> IMHO more than "reducing a wait period" does..
>
>> + .default(1445)
>> + .schema();
>> +
>> #[api(
>> properties: {
>> "chunk-order": {
>> @@ -235,6 +242,10 @@ pub enum DatastoreFSyncLevel {
>> default: true,
>> type: bool,
>> },
>> + "gc-wait-period": {
>> + schema: GC_WAIT_PERIOD_SCHEMA,
>> + optional: true,
>> + },
>> },
>> )]
>> #[derive(Serialize, Deserialize, Default)]
>> @@ -248,6 +259,8 @@ pub struct DatastoreTuning {
>> pub sync_level: Option<DatastoreFSyncLevel>,
>> #[serde(skip_serializing_if = "Option::is_none")]
>> pub gc_atime_check: Option<bool>,
>> + #[serde(skip_serializing_if = "Option::is_none")]
>> + pub gc_wait_period: Option<usize>,
>> }
>>
>> pub const DATASTORE_TUNING_STRING_SCHEMA: Schema = StringSchema::new("Datastore tuning options")
>> --
>> 2.39.5
>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
More information about the pbs-devel
mailing list