mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-28 06:55:50 +00:00
Avoid some unnecessary work.
This commit is contained in:
@@ -15,6 +15,10 @@
|
||||
#include "SHAMap.h"
|
||||
#include "Application.h"
|
||||
|
||||
#ifndef STATE_MAP_BUCKETS
|
||||
#define STATE_MAP_BUCKETS 1024
|
||||
#endif
|
||||
|
||||
SETUP_LOG();
|
||||
|
||||
DECLARE_INSTANCE(SHAMap);
|
||||
@@ -52,6 +56,8 @@ std::size_t hash_value(const uint160& u)
|
||||
|
||||
SHAMap::SHAMap(SHAMapType t, uint32 seq) : mSeq(seq), mState(smsModifying), mType(t)
|
||||
{
|
||||
if (t == smtSTATE)
|
||||
mTNByID.rehash(STATE_MAP_BUCKETS);
|
||||
root = boost::make_shared<SHAMapTreeNode>(mSeq, SHAMapNode(0, uint256()));
|
||||
root->makeInner();
|
||||
mTNByID[*root] = root;
|
||||
@@ -59,6 +65,8 @@ SHAMap::SHAMap(SHAMapType t, uint32 seq) : mSeq(seq), mState(smsModifying), mTyp
|
||||
|
||||
SHAMap::SHAMap(SHAMapType t, const uint256& hash) : mSeq(1), mState(smsSynching), mType(t)
|
||||
{ // FIXME: Need to acquire root node
|
||||
if (t == smtSTATE)
|
||||
mTNByID.rehash(STATE_MAP_BUCKETS);
|
||||
root = boost::make_shared<SHAMapTreeNode>(mSeq, SHAMapNode(0, uint256()));
|
||||
root->makeInner();
|
||||
mTNByID[*root] = root;
|
||||
@@ -729,7 +737,7 @@ SHAMapTreeNode::pointer SHAMap::fetchNodeExternal(const SHAMapNode& id, const ui
|
||||
try
|
||||
{
|
||||
SHAMapTreeNode::pointer ret =
|
||||
boost::make_shared<SHAMapTreeNode>(id, obj->getData(), mSeq, snfPREFIX, hash);
|
||||
boost::make_shared<SHAMapTreeNode>(id, obj->getData(), mSeq, snfPREFIX, hash, true);
|
||||
if (id != *ret)
|
||||
{
|
||||
cLog(lsFATAL) << "id:" << id << ", got:" << *ret;
|
||||
|
||||
@@ -187,7 +187,7 @@ public:
|
||||
|
||||
// raw node functions
|
||||
SHAMapTreeNode(const SHAMapNode& id, const std::vector<unsigned char>& data, uint32 seq,
|
||||
SHANodeFormat format, const uint256& hash);
|
||||
SHANodeFormat format, const uint256& hash, bool hashValid);
|
||||
void addRaw(Serializer &, SHANodeFormat format);
|
||||
|
||||
virtual bool isPopulated() const { return true; }
|
||||
|
||||
@@ -177,7 +177,7 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& node, SHAMapItem::ref item, TNT
|
||||
}
|
||||
|
||||
SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector<unsigned char>& rawNode, uint32 seq,
|
||||
SHANodeFormat format, const uint256& hash) :
|
||||
SHANodeFormat format, const uint256& hash, bool hashValid) :
|
||||
SHAMapNode(id), mSeq(seq), mType(tnERROR), mIsBranch(0), mFullBelow(false)
|
||||
{
|
||||
if (format == snfWIRE)
|
||||
@@ -317,9 +317,7 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector<unsigned
|
||||
throw std::runtime_error("Unknown format");
|
||||
}
|
||||
|
||||
if (hash.isZero())
|
||||
updateHash();
|
||||
else
|
||||
if (hashValid)
|
||||
{
|
||||
mHash = hash;
|
||||
#ifdef PARANOID
|
||||
@@ -327,6 +325,8 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector<unsigned
|
||||
assert(mHash == hash);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
updateHash();
|
||||
}
|
||||
|
||||
bool SHAMapTreeNode::updateHash()
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
|
||||
SETUP_LOG();
|
||||
|
||||
static const uint256 uZero;
|
||||
|
||||
void SHAMap::getMissingNodes(std::vector<SHAMapNode>& nodeIDs, std::vector<uint256>& hashes, int max,
|
||||
SHAMapSyncFilter* filter)
|
||||
{
|
||||
@@ -63,7 +65,7 @@ void SHAMap::getMissingNodes(std::vector<SHAMapNode>& nodeIDs, std::vector<uint2
|
||||
{
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer ptr =
|
||||
boost::make_shared<SHAMapTreeNode>(childID, nodeData, mSeq - 1, snfPREFIX, childHash);
|
||||
boost::make_shared<SHAMapTreeNode>(childID, nodeData, mSeq - 1, snfPREFIX, childHash, true);
|
||||
cLog(lsTRACE) << "Got sync node from cache: " << *ptr;
|
||||
mTNByID[*ptr] = ptr;
|
||||
d = ptr.get();
|
||||
@@ -213,7 +215,7 @@ SMAddNode SHAMap::addRootNode(const std::vector<unsigned char>& rootNode, SHANod
|
||||
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer node =
|
||||
boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uint256());
|
||||
boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uZero, false);
|
||||
if (!node)
|
||||
return SMAddNode::invalid();
|
||||
|
||||
@@ -253,7 +255,7 @@ SMAddNode SHAMap::addRootNode(const uint256& hash, const std::vector<unsigned ch
|
||||
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer node =
|
||||
boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uint256());
|
||||
boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uZero, false);
|
||||
if (!node || node->getNodeHash() != hash)
|
||||
return SMAddNode::invalid();
|
||||
|
||||
@@ -332,7 +334,7 @@ SMAddNode SHAMap::addKnownNode(const SHAMapNode& node, const std::vector<unsigne
|
||||
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer newNode =
|
||||
boost::make_shared<SHAMapTreeNode>(node, rawNode, mSeq - 1, snfWIRE, uint256());
|
||||
boost::make_shared<SHAMapTreeNode>(node, rawNode, mSeq - 1, snfWIRE, uZero, false);
|
||||
if (hash != newNode->getNodeHash()) // these aren't the droids we're looking for
|
||||
return SMAddNode::invalid();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user