1 /* LBS: An LFS-inspired filesystem backup system Copyright (C) 2007 Michael
4 * To speed backups, we maintain a "stat cache" containing selected information
5 * about all regular files, including modification times and the list of blocks
6 * that comprised the file in the last backup. If the file has not changed
7 * according to a stat() call, we may re-use the information contained in the
8 * stat cache instead of re-reading the entire file. It is always safe to
9 * discard information from the stat cache; this will only cause a file to be
10 * re-read to determine that it contains the same data as before.
12 * The stat cache is stored in a file called "statcache" in the local backup
13 * directory. During a backup, a new statcache file is written out with a
14 * suffix based on the current time; at the end of a successful backup this
15 * file is renamed over the original statcache file.
17 * The information in the statcache file is stored in sorted order as we
18 * traverse the filesystem, so that we can read and write it in a purely
19 * streaming manner. (This is why we don't include the information in the
20 * SQLite local database; doing so is likely less efficient.)
23 #ifndef _LBS_STATCACHE_H
24 #define _LBS_STATCACHE_H
26 #include <sys/types.h>
38 void Open(const char *path, const char *snapshot_name);
40 bool Find(const std::string &path, const struct stat *stat_buf);
41 void Save(const std::string &path, struct stat *stat_buf,
42 const std::string &checksum,
43 const std::list<std::string> &blocks);
45 std::string get_checksum() const { return old_checksum; }
46 const std::list<ObjectReference> &get_blocks() const
47 { return old_contents; }
52 std::string oldpath, newpath;
53 std::ifstream *oldcache;
54 std::ofstream *newcache;
56 /* Information about one file read from the old cache. */
58 bool old_is_validated;
59 int64_t old_mtime, old_ctime, old_inode, old_size;
60 std::string old_name, old_checksum;
61 std::list<ObjectReference> old_contents;
64 #endif // _LBS_STATCACHE_H