feat(lep): recurring filesystem trim design

Ref: 5186

Signed-off-by: Chin-Ya Huang <chin-ya.huang@suse.com>
This commit is contained in:
Chin-Ya Huang 2023-03-09 14:50:13 +08:00 committed by David Ko
parent ec6480dd4c
commit f82928c33e

View File

@ -0,0 +1,86 @@
# Recurring Filesystem Trim
## Summary
Longhorn currently supports the [filesystem trim](./20221103-filesystem-trim.md) feature, which allows users to reclaim volume disk spaces of deleted files. However, this is a manual process, which can be time-consuming and inconvenient.
To improve user experience, Longhorn could automate the process by implementing a new RecurringJob `filesystem-trim` type. This enhancement enables regularly freeing up unused volume spaces and reducing the need for manual interventions.
### Related Issues
https://github.com/longhorn/longhorn/issues/5186
## Motivation
### Goals
Introduce a new recurring job type called `filesystem-trim` to periodically trim the volume filesystem to reclaim disk spaces.
### Non-goals [optional]
`None`
## Proposal
To extend the RecurringJob custom resource definition by adding new `RecurringJobType: filesystem-trim`.
### User Stories
To schedule regular volume filesystem trims, user can create a RecurringJob with `spec.task=filesystem-trim` and associating it with volumes.
### User Experience In Detail
#### Recurring Filesystem Trim
1. The user sees workload volume size has increased over time.
1. Create RecurringJob with the `filesystem-trim` task type and assign it to the volume.
```yaml
apiVersion: longhorn.io/v1beta2
kind: RecurringJob
metadata:
name: recurring-fs-trim-per-min
namespace: longhorn-system
spec:
concurrency: 1
cron: '* * * * *'
groups: []
labels: {}
name: recurring-fs-trim-per-min
retain: 0
task: filesystem-trim
```
1. The RecurringJob runs and relaims some volume spaces.
### API changes
`None`
## Design
### Implementation Overview
#### The RecurringJob `filesystem-trim` Task Type
1. Call Volume API `ActionTrimFilesystem` when the RecurringJob type is `filesystem-trim`.
### RecurringJob Mutate
1. Mutate the `Recurringjob.Spec.Retain` to 0 when the task type is `filesystem-trim` as it is not effective for this type of task.
### Test plan
#### Test Recurring Filesystem Trim
1. Create workload.
1. Create a file with some data in the workload.
1. Volume actual size should increase.
1. Delete the file.
1. Volume actual size should not decrease.
1. Create RecurringJob with type `filesystem-trim` and assign to the workload volume.
1. Wait for RecurringJob to complete.
1. Volume actual size should decrease.
### Upgrade strategy
`None`
## Note [optional]
`None`