diff --git a/enhancements/20230309-recurring-filesystem-trim.md b/enhancements/20230309-recurring-filesystem-trim.md new file mode 100644 index 0000000..329996d --- /dev/null +++ b/enhancements/20230309-recurring-filesystem-trim.md @@ -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`