diff --git a/modules/ripple_app/node/ripple_NodeStore.cpp b/modules/ripple_app/node/ripple_NodeStore.cpp index 40a256a173..629997e78b 100644 --- a/modules/ripple_app/node/ripple_NodeStore.cpp +++ b/modules/ripple_app/node/ripple_NodeStore.cpp @@ -219,3 +219,29 @@ NodeObject::pointer NodeStore::retrieve (uint256 const& hash) WriteLog (lsTRACE, NodeObject) << "HOS: " << hash << " fetch: in db"; return obj; } + +static void importFunc(HashStoreBE::pointer dest, std::vector& objects, + HashedObject::pointer object) +{ + if (objects.size() >= 128) + { + dest->bulkStore(objects); + objects.clear(); + objects.reserve(128); + } + objects.push_back(object); +} + +int HashedObjectStore::import (HashStoreBE::ref src, HashStoreBE::ref dest) +{ + WriteLog (lsWARNING, HashedObject) << "Node import from \"" + << src->getBackEndName() << ":" << src->getDataBaseName() + << "\" to \"" << dest->getBackEndName() << ":" << dest->getDataBaseName() << "\"."; + + std::vector objects; + objects.reserve(128); + src->visitAll(BIND_TYPE(&importFunc, dest, boost::ref(objects), P_1)); + + if (!objects.empty()) + dest->bulkStore(objects); +}