CheckAndRecover checks and recovers the last datafile. If the datafile isn't corrupted, this is a noop. If it is, the longest non-corrupted prefix will be kept and the rest will be *deleted*. Also, the index file is also *deleted* which will be automatically recreated on next startup.
Datafile is an interface that represents a readable and writeable datafile
NewDatafile opens an existing datafile