Skip to content

Commit

Permalink
[mempool] Mark unaccepted txs present in mempool as 'already there'.
Browse files Browse the repository at this point in the history
On startup, the wallets will start pumping wallet transactions into the mempool in a different thread while LoadMempool() is running.
This will sometimes result in transactions "failing" to be accepted into mempool, but only for the reason that they were already
put there by a wallet. The log message for mempool load would note this as a 'failure' to import, which was misleading; it should
instead mark it as the transaction already being in the mempool.
  • Loading branch information
kallewoof committed Sep 4, 2017
1 parent ce66586 commit 258d33b
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions src/validation.cpp
Expand Up @@ -4278,8 +4278,9 @@ bool LoadMempool(void)
}

int64_t count = 0;
int64_t skipped = 0;
int64_t expired = 0;
int64_t failed = 0;
int64_t already_there = 0;
int64_t nNow = GetTime();

try {
Expand Down Expand Up @@ -4309,10 +4310,18 @@ bool LoadMempool(void)
if (state.IsValid()) {
++count;
} else {
++failed;
// mempool may contain the transaction already, e.g. from
// wallet(s) having loaded it while we were processing
// mempool transactions; consider these as valid, instead of
// failed, but mark them as 'already there'
if (mempool.exists(tx->GetHash())) {
++already_there;
} else {
++failed;
}
}
} else {
++skipped;
++expired;
}
if (ShutdownRequested())
return false;
Expand All @@ -4328,7 +4337,7 @@ bool LoadMempool(void)
return false;
}

LogPrintf("Imported mempool transactions from disk: %i successes, %i failed, %i expired\n", count, failed, skipped);
LogPrintf("Imported mempool transactions from disk: %i succeeded, %i failed, %i expired, %i already there\n", count, failed, expired, already_there);
return true;
}

Expand Down

0 comments on commit 258d33b

Please sign in to comment.