StoreException
Base class for every failure the storage core raises on its own account.
Sealed, so a caller can distinguish the situations that want genuinely different handling: the data is unreadable (CorruptLogException, CorruptSegmentException, CorruptManifestException), the format is from the future (UnsupportedFormatException), another process owns the directory (StoreLockedException), and the caller is using a store it already closed (StoreClosedException).
The three unreadable-data cases stay separate because the operator's next move differs. A damaged log costs the commits in it; a damaged segment costs data that was durable long ago and points at the medium; a damaged manifest costs the catalogue of files while every one of them is still intact on disk.
Ordinary IO failures are not wrapped. A missing directory or a full disk is an java.io.IOException, and re-dressing it as a store exception would hide the operating system's own diagnosis, which is the useful part.