mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-21 03:26:01 +00:00
Everything but visitAll
This commit is contained in:
@@ -19,15 +19,24 @@ public:
|
|||||||
|
|
||||||
error = mdb_env_create (&m_env);
|
error = mdb_env_create (&m_env);
|
||||||
|
|
||||||
|
if (error == 0) // Should use the size of the file plus the free space on the disk
|
||||||
|
error = mdb_env_set_mapsize(m_env, 512L * 1024L * 1024L * 1024L);
|
||||||
|
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
{
|
|
||||||
error = mdb_env_open (
|
error = mdb_env_open (
|
||||||
m_env,
|
m_env,
|
||||||
keyValues ["path"].toStdString().c_str (),
|
keyValues ["path"].toStdString().c_str (),
|
||||||
0,
|
MDB_NOTLS,
|
||||||
0);
|
0664);
|
||||||
|
|
||||||
|
MDB_txn * txn;
|
||||||
|
if (error == 0)
|
||||||
|
error = mdb_txn_begin(m_env, NULL, 0, &txn);
|
||||||
|
if (error == 0)
|
||||||
|
error = mdb_dbi_open(txn, NULL, 0, &m_dbi);
|
||||||
|
if (error == 0)
|
||||||
|
error = mdb_txn_commit(txn);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
{
|
{
|
||||||
@@ -35,36 +44,115 @@ public:
|
|||||||
s << "Error #" << error << " creating mdb environment";
|
s << "Error #" << error << " creating mdb environment";
|
||||||
throw std::runtime_error (s.toStdString ());
|
throw std::runtime_error (s.toStdString ());
|
||||||
}
|
}
|
||||||
|
m_name = keyValues ["path"].toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
~Backend ()
|
~Backend ()
|
||||||
{
|
{
|
||||||
if (m_env != nullptr)
|
if (m_env != nullptr)
|
||||||
|
{
|
||||||
|
mdb_dbi_close(m_env, m_dbi);
|
||||||
mdb_env_close (m_env);
|
mdb_env_close (m_env);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string getDataBaseName()
|
std::string getDataBaseName()
|
||||||
{
|
{
|
||||||
return std::string ();
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool store (NodeObject::ref obj)
|
bool store (NodeObject::ref obj)
|
||||||
{
|
{
|
||||||
return false;
|
MDB_txn *txn = nullptr;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
rc = mdb_txn_begin(m_env, NULL, 0, &txn);
|
||||||
|
|
||||||
|
if (rc == 0)
|
||||||
|
{
|
||||||
|
MDB_val key, data;
|
||||||
|
Blob blob (toBlob (obj));
|
||||||
|
|
||||||
|
key.mv_size = (256 / 8);
|
||||||
|
key.mv_data = const_cast<unsigned char *>(obj->getHash().begin());
|
||||||
|
|
||||||
|
data.mv_size = blob.size();
|
||||||
|
data.mv_data = &blob.front();
|
||||||
|
|
||||||
|
rc = mdb_put(txn, m_dbi, &key, &data, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc == 0)
|
||||||
|
rc = mdb_txn_commit(txn);
|
||||||
|
else if (txn)
|
||||||
|
mdb_txn_abort(txn);
|
||||||
|
|
||||||
|
return rc == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bulkStore (std::vector <NodeObject::pointer> const& objs)
|
bool bulkStore (std::vector <NodeObject::pointer> const& objs)
|
||||||
{
|
{
|
||||||
return false;
|
MDB_txn *txn = nullptr;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
rc = mdb_txn_begin(m_env, NULL, 0, &txn);
|
||||||
|
|
||||||
|
if (rc == 0)
|
||||||
|
{
|
||||||
|
BOOST_FOREACH (NodeObject::ref obj, objs)
|
||||||
|
{
|
||||||
|
MDB_val key, data;
|
||||||
|
Blob blob (toBlob (obj));
|
||||||
|
|
||||||
|
key.mv_size = (256 / 8);
|
||||||
|
key.mv_data = const_cast<unsigned char *>(obj->getHash().begin());
|
||||||
|
|
||||||
|
data.mv_size = blob.size();
|
||||||
|
data.mv_data = &blob.front();
|
||||||
|
|
||||||
|
rc = mdb_put(txn, m_dbi, &key, &data, 0);
|
||||||
|
if (rc != 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc == 0)
|
||||||
|
rc = mdb_txn_commit(txn);
|
||||||
|
else if (txn)
|
||||||
|
mdb_txn_abort(txn);
|
||||||
|
|
||||||
|
return rc == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeObject::pointer retrieve (uint256 const& hash)
|
NodeObject::pointer retrieve (uint256 const& hash)
|
||||||
{
|
{
|
||||||
return NodeObject::pointer ();
|
NodeObject::pointer ret;
|
||||||
|
|
||||||
|
MDB_txn *txn = nullptr;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
rc = mdb_txn_begin(m_env, NULL, 0, &txn);
|
||||||
|
|
||||||
|
if (rc == 0)
|
||||||
|
{
|
||||||
|
MDB_val key, data;
|
||||||
|
|
||||||
|
key.mv_size = (256 / 8);
|
||||||
|
key.mv_data = const_cast<unsigned char *>(hash.begin());
|
||||||
|
|
||||||
|
rc = mdb_get(txn, m_dbi, &key, &data);
|
||||||
|
if (rc == 0)
|
||||||
|
ret = fromBinary(hash, static_cast<char *>(data.mv_data), data.mv_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
mdb_txn_abort(txn);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void visitAll (FUNCTION_TYPE <void (NodeObject::pointer)> func)
|
void visitAll (FUNCTION_TYPE <void (NodeObject::pointer)> func)
|
||||||
{
|
{ // WRITEME
|
||||||
|
assert(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Blob toBlob (NodeObject::ref obj) const
|
Blob toBlob (NodeObject::ref obj) const
|
||||||
@@ -101,7 +189,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::string m_name;
|
||||||
MDB_env* m_env;
|
MDB_env* m_env;
|
||||||
|
MDB_dbi m_dbi;
|
||||||
};
|
};
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user