rippled
Public Member Functions | Private Attributes | List of all members
ripple::ManifestCache Class Reference

Remembers manifests with the highest sequence number. More...

Collaboration diagram for ripple::ManifestCache:
Collaboration graph
[legend]

Public Member Functions

 ManifestCache (beast::Journal j=beast::Journal(beast::Journal::getNullSink()))
 
std::uint32_t sequence () const
 A monotonically increasing number used to detect new manifests. More...
 
PublicKey getSigningKey (PublicKey const &pk) const
 Returns master key's current signing key. More...
 
PublicKey getMasterKey (PublicKey const &pk) const
 Returns ephemeral signing key's master public key. More...
 
std::optional< std::uint32_tgetSequence (PublicKey const &pk) const
 Returns master key's current manifest sequence. More...
 
std::optional< std::stringgetDomain (PublicKey const &pk) const
 Returns domain claimed by a given public key. More...
 
std::optional< std::stringgetManifest (PublicKey const &pk) const
 Returns mainfest corresponding to a given public key. More...
 
bool revoked (PublicKey const &pk) const
 Returns true if master key has been revoked in a manifest. More...
 
ManifestDisposition applyManifest (Manifest m)
 Add manifest to cache. More...
 
bool load (DatabaseCon &dbCon, std::string const &dbTable, std::string const &configManifest, std::vector< std::string > const &configRevocation)
 Populate manifest cache with manifests in database and config. More...
 
void load (DatabaseCon &dbCon, std::string const &dbTable)
 Populate manifest cache with manifests in database. More...
 
void save (DatabaseCon &dbCon, std::string const &dbTable, std::function< bool(PublicKey const &)> const &isTrusted)
 Save cached manifests to database. More...
 
template<class Function >
void for_each_manifest (Function &&f) const
 Invokes the callback once for every populated manifest. More...
 
template<class PreFun , class EachFun >
void for_each_manifest (PreFun &&pf, EachFun &&f) const
 Invokes the callback once for every populated manifest. More...
 

Private Attributes

beast::Journal j_
 
std::shared_mutex mutex_
 
hash_map< PublicKey, Manifestmap_
 Active manifests stored by master public key. More...
 
hash_map< PublicKey, PublicKeysigningToMasterKeys_
 Master public keys stored by current ephemeral public key. More...
 
std::atomic< std::uint32_tseq_ {0}
 

Detailed Description

Remembers manifests with the highest sequence number.

Definition at line 231 of file Manifest.h.

Constructor & Destructor Documentation

◆ ManifestCache()

ripple::ManifestCache::ManifestCache ( beast::Journal  j = beast::Journal(beast::Journal::getNullSink()))
explicit

Definition at line 246 of file Manifest.h.

Member Function Documentation

◆ sequence()

std::uint32_t ripple::ManifestCache::sequence ( ) const

A monotonically increasing number used to detect new manifests.

Definition at line 254 of file Manifest.h.

◆ getSigningKey()

PublicKey ripple::ManifestCache::getSigningKey ( PublicKey const &  pk) const

Returns master key's current signing key.

Parameters
pkMaster public key
Returns
pk if no known signing key from a manifest
Thread Safety

May be called concurrently

Definition at line 291 of file app/misc/impl/Manifest.cpp.

◆ getMasterKey()

PublicKey ripple::ManifestCache::getMasterKey ( PublicKey const &  pk) const

Returns ephemeral signing key's master public key.

Parameters
pkEphemeral signing public key
Returns
pk if signing key is not in a valid manifest
Thread Safety

May be called concurrently

Definition at line 303 of file app/misc/impl/Manifest.cpp.

◆ getSequence()

std::optional< std::uint32_t > ripple::ManifestCache::getSequence ( PublicKey const &  pk) const

Returns master key's current manifest sequence.

Returns
sequence corresponding to Master public key if configured or std::nullopt otherwise

Definition at line 315 of file app/misc/impl/Manifest.cpp.

◆ getDomain()

std::optional< std::string > ripple::ManifestCache::getDomain ( PublicKey const &  pk) const

Returns domain claimed by a given public key.

Returns
domain corresponding to Master public key if present, otherwise std::nullopt

Definition at line 327 of file app/misc/impl/Manifest.cpp.

◆ getManifest()

std::optional< std::string > ripple::ManifestCache::getManifest ( PublicKey const &  pk) const

Returns mainfest corresponding to a given public key.

Returns
manifest corresponding to Master public key if present, otherwise std::nullopt

Definition at line 339 of file app/misc/impl/Manifest.cpp.

◆ revoked()

bool ripple::ManifestCache::revoked ( PublicKey const &  pk) const

Returns true if master key has been revoked in a manifest.

Parameters
pkMaster public key
Thread Safety

May be called concurrently

Definition at line 351 of file app/misc/impl/Manifest.cpp.

◆ applyManifest()

ManifestDisposition ripple::ManifestCache::applyManifest ( Manifest  m)

Add manifest to cache.

Parameters
mManifest to add
Returns
ManifestDisposition::accepted if successful, or stale or invalid otherwise
Thread Safety

May be called concurrently

Definition at line 363 of file app/misc/impl/Manifest.cpp.

◆ load() [1/2]

bool ripple::ManifestCache::load ( DatabaseCon dbCon,
std::string const &  dbTable,
std::string const &  configManifest,
std::vector< std::string > const &  configRevocation 
)

Populate manifest cache with manifests in database and config.

Parameters
dbConDatabase connection with dbTable
dbTableDatabase table
configManifestBase64 encoded manifest for local node's validator keys
configRevocationBase64 encoded validator key revocation from the config
Thread Safety

May be called concurrently

Definition at line 520 of file app/misc/impl/Manifest.cpp.

◆ load() [2/2]

void ripple::ManifestCache::load ( DatabaseCon dbCon,
std::string const &  dbTable 
)

Populate manifest cache with manifests in database.

Parameters
dbConDatabase connection with dbTable
dbTableDatabase table
Thread Safety

May be called concurrently

Definition at line 513 of file app/misc/impl/Manifest.cpp.

◆ save()

void ripple::ManifestCache::save ( DatabaseCon dbCon,
std::string const &  dbTable,
std::function< bool(PublicKey const &)> const &  isTrusted 
)

Save cached manifests to database.

Parameters
dbConDatabase connection with ValidatorManifests table
isTrustedFunction that returns true if manifest is trusted
Thread Safety

May be called concurrently

Definition at line 577 of file app/misc/impl/Manifest.cpp.

◆ for_each_manifest() [1/2]

template<class Function >
void ripple::ManifestCache::for_each_manifest ( Function &&  f) const

Invokes the callback once for every populated manifest.

Note
Do not call ManifestCache member functions from within the callback. This can re-lock the mutex from the same thread, which is UB.
Do not write ManifestCache member variables from within the callback. This can lead to data races.
Parameters
fFunction called for each manifest
Thread Safety

May be called concurrently

Definition at line 401 of file Manifest.h.

◆ for_each_manifest() [2/2]

template<class PreFun , class EachFun >
void ripple::ManifestCache::for_each_manifest ( PreFun &&  pf,
EachFun &&  f 
) const

Invokes the callback once for every populated manifest.

Note
Do not call ManifestCache member functions from within the callback. This can re-lock the mutex from the same thread, which is UB.
Do not write ManifestCache member variables from within the callback. This can lead to data races.
Parameters
pfPre-function called with the maximum number of times f will be called (useful for memory allocations)
fFunction called for each manifest
Thread Safety

May be called concurrently

Definition at line 429 of file Manifest.h.

Member Data Documentation

◆ j_

beast::Journal ripple::ManifestCache::j_
private

Definition at line 234 of file Manifest.h.

◆ mutex_

std::shared_mutex ripple::ManifestCache::mutex_
mutableprivate

Definition at line 235 of file Manifest.h.

◆ map_

hash_map<PublicKey, Manifest> ripple::ManifestCache::map_
private

Active manifests stored by master public key.

Definition at line 238 of file Manifest.h.

◆ signingToMasterKeys_

hash_map<PublicKey, PublicKey> ripple::ManifestCache::signingToMasterKeys_
private

Master public keys stored by current ephemeral public key.

Definition at line 241 of file Manifest.h.

◆ seq_

std::atomic<std::uint32_t> ripple::ManifestCache::seq_ {0}
private

Definition at line 243 of file Manifest.h.