Description
A file system abstraction allows to add new features (cross cutting concerns) in a modular way, for example:
- detection and special behavior of out-of-disk space situation
- profiling and statistics over JMX
- re-try on file system problems
- encryption
- file system monitoring
- replication / real-time backup on the file system level (for clustering)
- caching (improved performance for CRX)
- allows to easily switch to faster file system APIs (FileChannel, memory mapped files)
- debugging (for example, logging all file system operations)
- allows to implement s3 / hadoop / mongodb / ... file systems - not only by us but from 3th party, possibly the end user
- zip file system (for example to support read-only, compressed repositories)
- testing: simulating out of disk space and out of memory (ensure the repository doesn't corrupt in this case)
- testing: simulate very large files (using an in-memory file system)
- splitting very large files in 2 gb blocks (FAT and other file systems that don't support large files)
- data compression (if needed)