feat(lep): recurring filesystem trim design
Ref: 5186 Signed-off-by: Chin-Ya Huang <chin-ya.huang@suse.com>
This commit is contained in:
parent
ec6480dd4c
commit
f82928c33e
86
enhancements/20230309-recurring-filesystem-trim.md
Normal file
86
enhancements/20230309-recurring-filesystem-trim.md
Normal 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`
|
Loading…
Reference in New Issue
Block a user