Skip to content

Commit

Permalink
debugging
Browse files Browse the repository at this point in the history
  • Loading branch information
coranos committed May 28, 2023
1 parent 54e9bfe commit baa8b9d
Show file tree
Hide file tree
Showing 11 changed files with 684 additions and 1,182 deletions.
20 changes: 13 additions & 7 deletions nano/node/lmdb/lmdb.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#include <nano/crypto_lib/random_pool.hpp>
#include <nano/lib/utility.hpp>
#include <nano/node/common.hpp>
#include <nano/node/lmdb/lmdb.hpp>
Expand All @@ -9,7 +8,6 @@

#include <boost/filesystem.hpp>
#include <boost/format.hpp>
#include <boost/polymorphic_cast.hpp>

#include <queue>

Expand Down Expand Up @@ -47,7 +45,6 @@ nano::lmdb::store::store (nano::logger_mt & logger_a, boost::filesystem::path co
frontier_store,
account_store,
pending_store,
unchecked_store,
online_weight_store,
pruned_store,
peer_store,
Expand All @@ -65,7 +62,6 @@ nano::lmdb::store::store (nano::logger_mt & logger_a, boost::filesystem::path co
peer_store{ *this },
confirmation_height_store{ *this },
final_vote_store{ *this },
unchecked_store{ *this },
version_store{ *this },
logger (logger_a),
env (error, path_a, nano::mdb_env::options::make ().set_config (lmdb_config_a).set_use_no_mem_init (true)),
Expand Down Expand Up @@ -211,7 +207,6 @@ nano::mdb_txn_callbacks nano::lmdb::store::create_txn_callbacks () const
void nano::lmdb::store::open_databases (bool & error_a, nano::transaction const & transaction_a, unsigned flags)
{
error_a |= mdb_dbi_open (env.tx (transaction_a), "frontiers", flags, &frontier_store.frontiers_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked_store.unchecked_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "online_weight", flags, &online_weight_store.online_weight_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &block_store.meta_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peer_store.peers_handle) != 0;
Expand Down Expand Up @@ -306,6 +301,9 @@ bool nano::lmdb::store::do_upgrades (nano::write_transaction & transaction_a, na
upgrade_v20_to_v21 (transaction_a);
[[fallthrough]];
case 21:
upgrade_v21_to_v22 (transaction_a);
[[fallthrough]];
case 22:
break;
default:
logger.always_log (boost::str (boost::format ("The version of the ledger (%1%) is too high for this node") % version_l));
Expand Down Expand Up @@ -779,6 +777,16 @@ void nano::lmdb::store::upgrade_v20_to_v21 (nano::write_transaction const & tran
logger.always_log ("Finished creating new final_vote table");
}

void nano::lmdb::store::upgrade_v21_to_v22 (nano::write_transaction const & transaction_a)
{
logger.always_log ("Preparing v21 to v22 database upgrade...");
MDB_dbi unchecked_handle{ 0 };
release_assert (!mdb_dbi_open (env.tx (transaction_a), "unchecked", MDB_CREATE, &unchecked_handle));
release_assert (!mdb_drop (env.tx (transaction_a), unchecked_handle, 1)); // del = 1, to delete it from the environment and close the DB handle.
version.put (transaction_a, 22);
logger.always_log ("Finished removing unchecked table");
}

/** Takes a filepath, appends '_backup_<timestamp>' to the end (but before any extension) and saves that file in the same directory */
void nano::lmdb::store::create_backup_file (nano::mdb_env & env_a, boost::filesystem::path const & filepath_a, nano::logger_mt & logger_a)
{
Expand Down Expand Up @@ -868,8 +876,6 @@ MDB_dbi nano::lmdb::store::table_to_dbi (tables table_a) const
return block_store.blocks_handle;
case tables::pending:
return pending_store.pending_handle;
case tables::unchecked:
return unchecked_store.unchecked_handle;
case tables::online_weight:
return online_weight_store.online_weight_handle;
case tables::meta:
Expand Down
5 changes: 2 additions & 3 deletions nano/node/lmdb/lmdb.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include <nano/node/lmdb/peer_store.hpp>
#include <nano/node/lmdb/pending_store.hpp>
#include <nano/node/lmdb/pruned_store.hpp>
#include <nano/node/lmdb/unchecked_store.hpp>
#include <nano/node/lmdb/version_store.hpp>
#include <nano/secure/common.hpp>
#include <nano/secure/versioning.hpp>
Expand Down Expand Up @@ -57,7 +56,6 @@ namespace lmdb
nano::lmdb::peer_store peer_store;
nano::lmdb::pending_store pending_store;
nano::lmdb::pruned_store pruned_store;
nano::lmdb::unchecked_store unchecked_store;
nano::lmdb::version_store version_store;

friend class nano::lmdb::account_store;
Expand All @@ -69,7 +67,6 @@ namespace lmdb
friend class nano::lmdb::peer_store;
friend class nano::lmdb::pending_store;
friend class nano::lmdb::pruned_store;
friend class nano::lmdb::unchecked_store;
friend class nano::lmdb::version_store;

public:
Expand Down Expand Up @@ -136,6 +133,7 @@ namespace lmdb
void upgrade_v18_to_v19 (nano::write_transaction const &);
void upgrade_v19_to_v20 (nano::write_transaction const &);
void upgrade_v20_to_v21 (nano::write_transaction const &);
void upgrade_v21_to_v22 (nano::write_transaction const &);

std::shared_ptr<nano::block> block_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const;
nano::mdb_val block_raw_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const;
Expand Down Expand Up @@ -188,6 +186,7 @@ namespace lmdb
friend class mdb_block_store_upgrade_v18_v19_Test;
friend class mdb_block_store_upgrade_v19_v20_Test;
friend class mdb_block_store_upgrade_v20_v21_Test;
friend class mdb_block_store_upgrade_v21_v22_Test;
friend class block_store_DISABLED_change_dupsort_Test;
friend void write_sideband_v14 (nano::lmdb::store &, nano::transaction &, nano::block const &, MDB_dbi);
friend void write_sideband_v15 (nano::lmdb::store &, nano::transaction &, nano::block const &);
Expand Down
22 changes: 21 additions & 1 deletion nano/node/lmdb/lmdb_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,16 @@ class mdb_iterator : public store_iterator_impl<T, U>
return &current;
}

bool operator== (nano::mdb_iterator<T, U> const & base_a) const
{
auto const other_a (boost::polymorphic_downcast<nano::mdb_iterator<T, U> const *> (&base_a));
auto result (current.first.data () == other_a->current.first.data ());
debug_assert (!result || (current.first.size () == other_a->current.first.size ()));
debug_assert (!result || (current.second.data () == other_a->current.second.data ()));
debug_assert (!result || (current.second.size () == other_a->current.second.size ()));
return result;
}

bool operator== (nano::store_iterator_impl<T, U> const & base_a) const override
{
auto const other_a (boost::polymorphic_downcast<nano::mdb_iterator<T, U> const *> (&base_a));
Expand Down Expand Up @@ -210,11 +220,21 @@ class mdb_merge_iterator : public store_iterator_impl<T, U>
return least_iterator ().operator-> ();
}

bool operator== (nano::mdb_merge_iterator<T, U> const & other) const
{
return *impl1 == *other.impl1 && *impl2 == *other.impl2;
}

bool operator!= (nano::mdb_merge_iterator<T, U> const & base_a) const
{
return !(*this == base_a);
}

bool operator== (nano::store_iterator_impl<T, U> const & base_a) const override
{
debug_assert ((dynamic_cast<nano::mdb_merge_iterator<T, U> const *> (&base_a) != nullptr) && "Incompatible iterator comparison");
auto & other (static_cast<nano::mdb_merge_iterator<T, U> const &> (base_a));
return *impl1 == *other.impl1 && *impl2 == *other.impl2;
return *this == other;
}

bool is_end_sentinal () const override
Expand Down
20 changes: 3 additions & 17 deletions nano/node/lmdb/lmdb_txn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,12 @@

#include <boost/format.hpp>

// Some builds (mac) fail due to "Boost.Stacktrace requires `_Unwind_Backtrace` function".
#ifndef _WIN32
#ifdef NANO_STACKTRACE_BACKTRACE
#define BOOST_STACKTRACE_USE_BACKTRACE
#ifdef _WIN32
#ifndef NOMINMAX
#define NOMINMAX
#endif
#ifndef _GNU_SOURCE
#define BEFORE_GNU_SOURCE 0
#define _GNU_SOURCE
#else
#define BEFORE_GNU_SOURCE 1
#endif
#endif
// On Windows this include defines min/max macros, so keep below other includes
// to reduce conflicts with other std functions
#include <boost/stacktrace.hpp>
#ifndef _WIN32
#if !BEFORE_GNU_SOURCE
#undef _GNU_SOURCE
#endif
#endif

namespace
{
Expand Down
2 changes: 0 additions & 2 deletions nano/node/lmdb/lmdb_txn.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
#include <boost/property_tree/ptree_fwd.hpp>
#include <boost/stacktrace/stacktrace_fwd.hpp>

#include <mutex>

#include <lmdb/libraries/liblmdb/lmdb.h>

namespace nano
Expand Down
15 changes: 0 additions & 15 deletions nano/node/logging.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include <boost/log/utility/setup/file.hpp>

#ifdef BOOST_WINDOWS
#include <boost/log/sinks/event_log_backend.hpp>
#else
#define BOOST_LOG_USE_NATIVE_SYSLOG
#include <boost/log/sinks/syslog_backend.hpp>
Expand All @@ -37,20 +36,6 @@ void nano::logging::init (boost::filesystem::path const & application_path_a)
}

#ifdef BOOST_WINDOWS
if (nano::event_log_reg_entry_exists () || nano::is_windows_elevated ())
{
static auto event_sink = boost::make_shared<boost::log::sinks::synchronous_sink<boost::log::sinks::simple_event_log_backend>> (boost::log::keywords::log_name = "Banano", boost::log::keywords::log_source = "Banano");
event_sink->set_formatter (format);

// Currently only mapping sys log errors
boost::log::sinks::event_log::custom_event_type_mapping<nano::severity_level> mapping ("Severity");
mapping[nano::severity_level::error] = boost::log::sinks::event_log::error;
event_sink->locked_backend ()->set_event_type_mapper (mapping);

// Only allow messages or error or greater severity to the event log
event_sink->set_filter (severity >= nano::severity_level::error);
boost::log::core::get ()->add_sink (event_sink);
}
#else
static auto sys_sink = boost::make_shared<boost::log::sinks::synchronous_sink<boost::log::sinks::syslog_backend>> (boost::log::keywords::facility = boost::log::sinks::syslog::user, boost::log::keywords::use_impl = boost::log::sinks::syslog::impl_types::native);
sys_sink->set_formatter (format);
Expand Down
Loading

0 comments on commit baa8b9d

Please sign in to comment.