* Commit more often to prevent out-of-memory errors.
This commit is contained in:
parent
98df735b51
commit
3a99616968
3 changed files with 22 additions and 4 deletions
|
@ -33,11 +33,9 @@ Transaction::Transaction()
|
|||
|
||||
|
||||
Transaction::Transaction(Database & db)
|
||||
: txn(0)
|
||||
{
|
||||
db.requireEnv();
|
||||
try {
|
||||
db.env->txn_begin(0, &txn, 0);
|
||||
} catch (DbException e) { rethrow(e); }
|
||||
begin(db);
|
||||
}
|
||||
|
||||
|
||||
|
@ -47,6 +45,16 @@ Transaction::~Transaction()
|
|||
}
|
||||
|
||||
|
||||
void Transaction::begin(Database & db)
|
||||
{
|
||||
assert(txn == 0);
|
||||
db.requireEnv();
|
||||
try {
|
||||
db.env->txn_begin(0, &txn, 0);
|
||||
} catch (DbException e) { rethrow(e); }
|
||||
}
|
||||
|
||||
|
||||
void Transaction::commit()
|
||||
{
|
||||
if (!txn) throw Error("commit called on null transaction");
|
||||
|
|
|
@ -27,6 +27,7 @@ public:
|
|||
Transaction(Database & _db);
|
||||
~Transaction();
|
||||
|
||||
void begin(Database & db);
|
||||
void abort();
|
||||
void commit();
|
||||
|
||||
|
|
|
@ -824,6 +824,7 @@ static void upgradeStore()
|
|||
PathSet validPaths(validPaths2.begin(), validPaths2.end());
|
||||
|
||||
cerr << "hashing paths...";
|
||||
int n = 0;
|
||||
for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) {
|
||||
checkInterrupt();
|
||||
string s;
|
||||
|
@ -832,10 +833,18 @@ static void upgradeStore()
|
|||
Hash hash = hashPath(htSHA256, *i);
|
||||
setHash(txn, *i, hash);
|
||||
cerr << ".";
|
||||
if (++n % 1000 == 0) {
|
||||
txn.commit();
|
||||
txn.begin(nixDB);
|
||||
}
|
||||
}
|
||||
}
|
||||
cerr << "\n";
|
||||
|
||||
txn.commit();
|
||||
|
||||
txn.begin(nixDB);
|
||||
|
||||
cerr << "processing closures...";
|
||||
for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) {
|
||||
checkInterrupt();
|
||||
|
|
Loading…
Reference in a new issue