fixup! Add pruneblockchain RPC to enable manual block file pruning.

Extend pruneblockchain RPC to accept block timestamps as well as block indices.
This commit is contained in:
Russell Yanofsky
2017-01-09 13:35:12 -05:00
parent 1fc4ec7bf2
commit afffeea7d9
2 changed files with 67 additions and 42 deletions

View File

@@ -820,7 +820,7 @@ UniValue pruneblockchain(const JSONRPCRequest& request)
throw runtime_error(
"pruneblockchain\n"
"\nArguments:\n"
"1. \"height\" (int, required) The block height to prune up to.\n");
"1. \"height\" (numeric, required) The block height to prune up to. May be set to a discrete height, or to a unix timestamp to prune based on block time.\n");
if (!fPruneMode)
throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Cannot prune blocks because node is not in prune mode.");
@@ -831,6 +831,16 @@ UniValue pruneblockchain(const JSONRPCRequest& request)
if (heightParam < 0)
throw JSONRPCError(RPC_INVALID_PARAMETER, "Negative block height.");
// Height value more than a billion is too high to be a block height, and
// too low to be a block time (corresponds to timestamp from Sep 2001).
if (heightParam > 1000000000) {
CBlockIndex* pindex = chainActive.FindLatestBefore(heightParam);
if (!pindex) {
throw JSONRPCError(RPC_INTERNAL_ERROR, "Could not find block before specified timestamp.");
}
heightParam = pindex->nHeight;
}
unsigned int height = (unsigned int) heightParam;
unsigned int chainHeight = (unsigned int) chainActive.Height();
if (chainHeight < Params().PruneAfterHeight())