File versioning can be triggerd as a per directory policy using the extended attribute sys.versioning=<n> or via the eos file version command.
The paramter <n> in the extended attribute describes the maximum number of versions which should be kept according to a FIFO policy.
Additionally to the simple FIFO policy where the oldest versions are deleted once <n> versions are reached there are 11 predefined timebins, for which additional versions exceeding the versioning parameter <n> are kept.
Versions are kept in a hidden directory (visible with ls -la) which is composed by .sys.v#.<basename>
eos ls -la
drwxrwxrwx 1 root root 0 Aug 29 15:33 .sys.v#.myfile
-rw-r----- 1 root root 1824 Aug 29 15:33 myfile
The 11 time bins are defined as follows:
bin deletion policy age<1d the first version entering this bin survives 1d<=age<2d the first version entering this bin survives 2d<=age<3d the first version entering this bin survives 3d<=age<4d the first version entering this bin survives 4d<=age<5d the first version entering this bin survives 5d<=age<6d the first version entering this bin survives 6d<=age<1w the first version entering this bin survives 1w<=age<2w the first version entering this bin survives 2w<=age<3w the first version entering this bin survives 3w<=age<1mo the first version entering this bin survives
Configure each directory which should apply versioning using the extended attribute sys.versioning:
# force 10 versions (FIFO)
eos attr set sys.versioning=10 version-dir
# upload initial file
eos cp /tmp/file /eos/version-dir/file
# versions are created on the fly with each upload - now 1 version
eos cp /tmp/file /eos/version-dir/file
# versions are created on the fly with each upload - now 2 versions
eos cp /tmp/file /eos/version-dir/file
# aso ....
# force a new version
eos file version myfile
# force a new version with max 5 versions
eos file version myfile 5
eos file versions myfile
-rw-r----- 1 root root 1824 Aug 29 15:17 1567084675.0014ede6
-rw-r----- 1 root root 1824 Aug 29 15:33 1567085591.0014ede7
-rw-r----- 1 root root 1824 Aug 29 15:33 1567085591.0014ede8
-rw-r----- 1 root root 1824 Aug 29 15:33 1567085592.0014ede9
# remove all versions
eos file purge myfile 0
# keep 5 versions (FIFO)
eos file purge myfile 5