xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
peerfinder
detail
StoreSqdb.h
1
#pragma once
2
3
#include <xrpld/app/rdb/PeerFinder.h>
4
5
#include <xrpl/basics/Log.h>
6
#include <xrpl/beast/net/IPEndpoint.h>
7
#include <xrpl/beast/utility/Journal.h>
8
#include <xrpl/peerfinder/detail/Store.h>
9
#include <xrpl/rdb/SociDB.h>
10
11
#include <soci/session.h>
12
13
#include <
cstddef
>
14
#include <
string
>
15
#include <
vector
>
16
17
namespace
xrpl::peer_finder
{
18
22
class
StoreSqdb
:
public
Store
23
{
24
private
:
25
beast::Journal
journal_
;
26
soci::session
sqlDb_
;
27
28
public
:
29
static
constexpr
auto
kCurrentSchemaVersion
= 4;
// on-database format version
30
31
explicit
StoreSqdb
(
beast::Journal
journal =
beast::Journal
{
beast::Journal::getNullSink
()})
32
:
journal_
(journal)
33
{
34
}
35
36
~StoreSqdb
()
override
=
default
;
37
38
void
39
open
(
BasicConfig
const
& config)
40
{
41
init
(config);
42
update
();
43
}
44
45
// Loads the bootstrap cache, calling the callback for each entry
46
//
47
std::size_t
48
load
(
LoadCallback
const
& cb)
override
49
{
50
std::size_t
n(0);
51
52
readPeerFinderDB
(
sqlDb_
, [&](
std::string
const
& s,
int
valence) {
53
beast::ip::Endpoint
const
endpoint(
beast::ip::Endpoint::fromString
(s));
54
55
if
(!isUnspecified(endpoint))
56
{
57
cb(endpoint, valence);
58
++n;
59
}
60
else
61
{
62
JLOG(
journal_
.error()) <<
"Bad address string '"
<< s <<
"' in Bootcache table"
;
63
}
64
});
65
66
return
n;
67
}
68
69
// Overwrites the stored bootstrap cache with the specified array.
70
//
71
void
72
save
(
std::vector<Entry>
const
& v)
override
73
{
74
savePeerFinderDB
(
sqlDb_
, v);
75
}
76
77
// Convert any existing entries from an older schema to the
78
// current one, if appropriate.
79
void
80
update
()
81
{
82
updatePeerFinderDB
(
sqlDb_
,
kCurrentSchemaVersion
,
journal_
);
83
}
84
85
private
:
86
void
87
init
(
BasicConfig
const
& config)
88
{
89
initPeerFinderDB
(
sqlDb_
, config,
journal_
);
90
}
91
};
92
93
}
// namespace xrpl::peer_finder
std::string
beast::Journal
A generic endpoint for log messages.
Definition
Journal.h:44
beast::Journal::getNullSink
static Sink & getNullSink()
Returns a Sink which does nothing.
Definition
beast_Journal.cpp:63
beast::ip::Endpoint
A version-independent IP address and port combination.
Definition
IPEndpoint.h:24
beast::ip::Endpoint::fromString
static Endpoint fromString(std::string const &s)
Definition
IPEndpoint.cpp:42
xrpl::BasicConfig
Holds unparsed configuration information.
Definition
BasicConfig.h:222
xrpl::peer_finder::StoreSqdb::StoreSqdb
StoreSqdb(beast::Journal journal=beast::Journal{beast::Journal::getNullSink()})
Definition
StoreSqdb.h:31
xrpl::peer_finder::StoreSqdb::journal_
beast::Journal journal_
Definition
StoreSqdb.h:25
xrpl::peer_finder::StoreSqdb::load
std::size_t load(LoadCallback const &cb) override
Definition
StoreSqdb.h:48
xrpl::peer_finder::StoreSqdb::save
void save(std::vector< Entry > const &v) override
Definition
StoreSqdb.h:72
xrpl::peer_finder::StoreSqdb::open
void open(BasicConfig const &config)
Definition
StoreSqdb.h:39
xrpl::peer_finder::StoreSqdb::kCurrentSchemaVersion
static constexpr auto kCurrentSchemaVersion
Definition
StoreSqdb.h:29
xrpl::peer_finder::StoreSqdb::update
void update()
Definition
StoreSqdb.h:80
xrpl::peer_finder::StoreSqdb::sqlDb_
soci::session sqlDb_
Definition
StoreSqdb.h:26
xrpl::peer_finder::StoreSqdb::~StoreSqdb
~StoreSqdb() override=default
xrpl::peer_finder::StoreSqdb::init
void init(BasicConfig const &config)
Definition
StoreSqdb.h:87
xrpl::peer_finder::Store
Abstract persistence for PeerFinder data.
Definition
Store.h:15
xrpl::peer_finder::Store::LoadCallback
std::function< void(beast::ip::Endpoint, int)> LoadCallback
Definition
Store.h:20
cstddef
xrpl::peer_finder
Definition
include/xrpl/peerfinder/Config.h:12
xrpl::savePeerFinderDB
void savePeerFinderDB(soci::session &session, std::vector< peer_finder::Store::Entry > const &v)
savePeerFinderDB Saves a new entry to the peer finder database.
Definition
xrpld/app/rdb/detail/PeerFinder.cpp:229
xrpl::readPeerFinderDB
void readPeerFinderDB(soci::session &session, std::function< void(std::string const &, int)> const &func)
readPeerFinderDB Reads all entries from the peer finder database and invokes the given callback for e...
Definition
xrpld/app/rdb/detail/PeerFinder.cpp:209
xrpl::updatePeerFinderDB
void updatePeerFinderDB(soci::session &session, int currentSchemaVersion, beast::Journal j)
updatePeerFinderDB Updates the peer finder database to a new version.
Definition
xrpld/app/rdb/detail/PeerFinder.cpp:60
xrpl::initPeerFinderDB
void initPeerFinderDB(soci::session &session, BasicConfig const &config, beast::Journal j)
initPeerFinderDB Opens a session with the peer finder database.
Definition
xrpld/app/rdb/detail/PeerFinder.cpp:28
std::size_t
string
vector
Generated by
1.17.0