StorageType& storage) {
storage.clear();
- for (int i = 2; i >= 0; --i) {
- bool completed_exists = false;
-
- // Initialize the name of the lease file to parse. For the
- // first two loops we're going to append .2 and .1 to the
- // lease file name, unless the file with the .completed
- // postfix exists.
- std::ostringstream s;
- s << filename;
-
- // If this is the first file to load leases from, we should check
- // if the file with the .completed prefix exists. If it exists
- // we are going to skip loading leases from the files with
- // postfixes .2 and .1.
- if (i == 2) {
- s << ".completed";
- lease_file.reset(new LeaseFileType(s.str()));
- // If the .completed file exists, reduce the value of i to
- // skip loop for the file with postfix .1. We will only
- // load leases from the .completed file and the lease
- // file without postfix (for i = 0).
- if (lease_file->exists()) {
- --i;
- completed_exists = true;
- }
- }
+ // Load the leasefile.completed, if exists.
+ lease_file.reset(new LeaseFileType(std::string(filename + ".completed")));
+ if (lease_file->exists()) {
+ LeaseFileLoader::load<LeaseObjectType>(*lease_file, storage,
+ MAX_LEASE_ERRORS);
- // If .completed file doesn't exist, load the files with postfixes
- // .1 and .2.
- if (!completed_exists) {
- std::ostringstream s2;
- s2 << filename;
- if (i > 0) {
- s2 << "." << i;
- }
- lease_file.reset(new LeaseFileType(s2.str()));
+ } else {
+ // If the leasefile.completed doesn't exist, let's load the leases
+ // from leasefile.2 and leasefile.1, if they exist.
+ lease_file.reset(new LeaseFileType(std::string(filename + ".2")));
+ if (lease_file->exists()) {
+ LeaseFileLoader::load<LeaseObjectType>(*lease_file, storage,
+ MAX_LEASE_ERRORS);
}
- // Don't open the file if it doesn't exist and it is not the
- // primary lease file - not ending with .1 or .2 or .completed.
- // Those files are optional and we don't want to create them if
- // they don't exist.
- if (i == 0 || lease_file->exists()) {
- // If the file doesn't exist it will be created as an empty
- // file (with no leases). The last parameter is set to false
- // when the primary lease file is parsed. This is to
- // indicate that the lease file should remain open after
- // parsing. The backend will use this file to append future
- // lease updates.
+ lease_file.reset(new LeaseFileType(std::string(filename + ".1")));
+ if (lease_file->exists()) {
LeaseFileLoader::load<LeaseObjectType>(*lease_file, storage,
- MAX_LEASE_ERRORS, (i != 0));
+ MAX_LEASE_ERRORS);
}
}
+
+ // Always load leases from the primary lease file. If the lease file
+ // doesn't exist it will be created by the LeaseFileLoader. Note
+ // that the false value passed as the last parameter to load
+ // function causes the function to leave the file open after
+ // it is parsed. This file will be used by the backend to record
+ // future lease updates.
+ lease_file.reset(new LeaseFileType(filename));
+ LeaseFileLoader::load<LeaseObjectType>(*lease_file, storage,
+ MAX_LEASE_ERRORS, false);;
}