mirror of
https://github.com/EvernodeXRPL/hpcore.git
synced 2026-04-29 15:37:59 +00:00
Introducing ledger shards and new ledger syncing logic. (#247)
- The ledgers are stored in a sqlite database in ledger file system. - Ledgers are organized in shards inside primary folder. - Raw inputs are saved as shards inside blob folder. No input files are created if neither inputs nor outputs are available. - Both last primary shard hash and last blob shard hashes are subjected to consensus and necessary sync operations are performed if out of sync. - Hpfs sync support setting single sync targets from both ends of the list. (Targets set from front are prioritized). - Contract and ledger syncs and serving are performed independently.
This commit is contained in:
committed by
GitHub
parent
e394497698
commit
16c5b3fae2
@@ -2,7 +2,7 @@
|
||||
#include "../conf.hpp"
|
||||
#include "../consensus.hpp"
|
||||
#include "../hplog.hpp"
|
||||
#include "../ledger.hpp"
|
||||
#include "../ledger/ledger.hpp"
|
||||
#include "../msg/fbuf/p2pmsg_helpers.hpp"
|
||||
#include "../msg/controlmsg_common.hpp"
|
||||
#include "../msg/controlmsg_parser.hpp"
|
||||
@@ -47,9 +47,9 @@ namespace sc
|
||||
|
||||
void deinit()
|
||||
{
|
||||
contract_fs.deinit();
|
||||
contract_server.deinit();
|
||||
contract_sync_worker.deinit();
|
||||
contract_server.deinit();
|
||||
contract_fs.deinit();
|
||||
}
|
||||
/**
|
||||
* Executes the contract process and passes the specified context arguments.
|
||||
@@ -133,7 +133,7 @@ namespace sc
|
||||
execv_args[j] = conf::cfg.contract.runtime_binexec_args[i].data();
|
||||
execv_args[len - 1] = NULL;
|
||||
|
||||
const std::string current_dir = contract_fs.physical_path(ctx.args.hpfs_session_name, hpfs::STATE_DIR_PATH);
|
||||
const std::string current_dir = contract_fs.physical_path(ctx.args.hpfs_session_name, STATE_DIR_PATH);
|
||||
chdir(current_dir.c_str());
|
||||
|
||||
if (create_contract_log_files(ctx) == -1)
|
||||
@@ -249,24 +249,24 @@ namespace sc
|
||||
else
|
||||
{
|
||||
// Read the state hash if not in readonly mode.
|
||||
if (contract_fs.get_hash(ctx.args.post_execution_state_hash, ctx.args.hpfs_session_name, hpfs::STATE_DIR_PATH) < 1)
|
||||
if (contract_fs.get_hash(ctx.args.post_execution_state_hash, ctx.args.hpfs_session_name, STATE_DIR_PATH) < 1)
|
||||
{
|
||||
contract_fs.release_rw_session();
|
||||
return -1;
|
||||
}
|
||||
|
||||
util::h32 patch_hash;
|
||||
const int patch_hash_result = contract_fs.get_hash(patch_hash, ctx.args.hpfs_session_name, hpfs::PATCH_FILE_PATH);
|
||||
const int patch_hash_result = contract_fs.get_hash(patch_hash, ctx.args.hpfs_session_name, PATCH_FILE_PATH);
|
||||
|
||||
if (patch_hash_result == -1)
|
||||
{
|
||||
contract_fs.release_rw_session();
|
||||
return -1;
|
||||
}
|
||||
else if (patch_hash_result == 1 && patch_hash != contract_fs.get_parent_hash(hpfs::PATCH_FILE_PATH))
|
||||
else if (patch_hash_result == 1 && patch_hash != contract_fs.get_parent_hash(PATCH_FILE_PATH))
|
||||
{
|
||||
// Update global hash tracker of contract fs with the new patch file hash.
|
||||
contract_fs.set_parent_hash(hpfs::PATCH_FILE_PATH, patch_hash);
|
||||
contract_fs.set_parent_hash(PATCH_FILE_PATH, patch_hash);
|
||||
// Denote that the patch file was updated by the SC.
|
||||
consensus::is_patch_update_pending = true;
|
||||
}
|
||||
@@ -576,7 +576,7 @@ namespace sc
|
||||
if (!output.empty())
|
||||
{
|
||||
flatbuffers::FlatBufferBuilder fbuf(1024);
|
||||
msg::fbuf::p2pmsg::create_msg_from_npl_output(fbuf, output, ledger::ctx.get_lcl());
|
||||
msg::fbuf::p2pmsg::create_msg_from_npl_output(fbuf, output, ledger::ctx.get_lcl(), ledger::ctx.get_last_primary_shard_id());
|
||||
p2p::broadcast_message(fbuf, true, false, !conf::cfg.contract.is_npl_public);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user