aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/blockchain_db/berkeleydb/db_bdb.cpp89
-rw-r--r--src/blockchain_utilities/CMakeLists.txt8
-rw-r--r--src/common/dns_utils.cpp4
-rw-r--r--src/p2p/data_logger.cpp3
-rw-r--r--src/p2p/net_node.h2
-rw-r--r--src/p2p/net_node.inl2
6 files changed, 95 insertions, 13 deletions
diff --git a/src/blockchain_db/berkeleydb/db_bdb.cpp b/src/blockchain_db/berkeleydb/db_bdb.cpp
index f035bf4c4..d44e14f5b 100644
--- a/src/blockchain_db/berkeleydb/db_bdb.cpp
+++ b/src/blockchain_db/berkeleydb/db_bdb.cpp
@@ -1073,8 +1073,10 @@ void BlockchainBDB::sync()
m_spent_keys->sync(0);
- m_hf_starting_heights->sync(0);
- m_hf_versions->sync(0);
+ if (m_hf_starting_heights != nullptr)
+ m_hf_starting_heights->sync(0);
+ if (m_hf_versions != nullptr)
+ m_hf_versions->sync(0);
m_properties->sync(0);
}
@@ -2208,12 +2210,91 @@ uint64_t BlockchainBDB::get_hard_fork_starting_height(uint8_t version) const
void BlockchainBDB::check_hard_fork_info()
{
- /* FIXME: Some other time */
+ LOG_PRINT_L3("BlockchainBDB::" << __func__);
+ check_open();
+
+ if (m_hf_versions == nullptr)
+ {
+ LOG_PRINT_L0("hf versions DB not open, so not checking");
+ return;
+ }
+
+ DB_BTREE_STAT* db_stat1, * db_stat2;
+
+ // DB_FAST_STAT can apparently cause an incorrect number of records
+ // to be returned. The flag should be set to 0 instead if this proves
+ // to be the case.
+
+ // Set txn to NULL and DB_FAST_STAT to zero (0) for reliability.
+ m_blocks->stat(NULL, &db_stat1, 0);
+ m_hf_versions->stat(NULL, &db_stat2, 0);
+ if (db_stat1->bt_nkeys != db_stat2->bt_nkeys)
+ {
+ LOG_PRINT_L0("num blocks " << db_stat1->bt_nkeys << " != " << "num hf_versions " << db_stat2->bt_nkeys << " - will clear the two hard fork DBs");
+
+ bdb_txn_safe txn;
+ bdb_txn_safe* txn_ptr = &txn;
+ if (m_write_txn)
+ txn_ptr = m_write_txn;
+ else
+ {
+ if (m_env->txn_begin(NULL, txn, 0))
+ throw0(DB_ERROR("Failed to create a transaction for the db"));
+ }
+
+ try
+ {
+ uint32_t count;
+ m_hf_starting_heights->truncate(*txn_ptr, &count, 0);
+ LOG_PRINT_L0("hf_starting_heights count: " << count);
+ m_hf_versions->truncate(*txn_ptr, &count, 0);
+ LOG_PRINT_L0("hf_versions count: " << count);
+
+ if (!m_write_txn)
+ txn.commit();
+ }
+ catch (const std::exception& e)
+ {
+ throw0(DB_ERROR(std::string("Failed to clear two hard fork DBs: ").append(e.what()).c_str()));
+ }
+ }
+ delete db_stat1;
+ delete db_stat2;
}
void BlockchainBDB::drop_hard_fork_info()
{
- /* TODO */
+ LOG_PRINT_L3("BlockchainBDB::" << __func__);
+ check_open();
+
+ bdb_txn_safe txn;
+ bdb_txn_safe* txn_ptr = &txn;
+ if (m_write_txn)
+ txn_ptr = m_write_txn;
+ else
+ {
+ if (m_env->txn_begin(NULL, txn, 0))
+ throw0(DB_ERROR("Failed to create a transaction for the db"));
+ }
+
+ try
+ {
+ m_hf_starting_heights->close(0);
+ m_hf_versions->close(0);
+ m_hf_starting_heights = nullptr;
+ m_hf_versions = nullptr;
+ if (m_env->dbremove(*txn_ptr, BDB_HF_STARTING_HEIGHTS, NULL, 0) != 0)
+ LOG_ERROR("Error removing hf_starting_heights");
+ if (m_env->dbremove(*txn_ptr, BDB_HF_VERSIONS, NULL, 0) != 0)
+ LOG_ERROR("Error removing hf_versions");
+
+ if (!m_write_txn)
+ txn.commit();
+ }
+ catch (const std::exception& e)
+ {
+ throw0(DB_ERROR(std::string("Failed to drop hard fork info: ").append(e.what()).c_str()));
+ }
}
void BlockchainBDB::set_hard_fork_version(uint64_t height, uint8_t version)
diff --git a/src/blockchain_utilities/CMakeLists.txt b/src/blockchain_utilities/CMakeLists.txt
index 41c3098a0..96b30b83b 100644
--- a/src/blockchain_utilities/CMakeLists.txt
+++ b/src/blockchain_utilities/CMakeLists.txt
@@ -99,9 +99,9 @@ target_link_libraries(blockchain_converter
blockchain_db
${CMAKE_THREAD_LIBS_INIT})
-if(${ARCH_WIDTH} EQUAL 32)
+if(ARCH_WIDTH)
target_compile_definitions(blockchain_converter
- PUBLIC -DARCH_WIDTH=32)
+ PUBLIC -DARCH_WIDTH=${ARCH_WIDTH})
endif()
add_dependencies(blockchain_converter
@@ -122,9 +122,9 @@ target_link_libraries(blockchain_import
p2p
${CMAKE_THREAD_LIBS_INIT})
-if(${ARCH_WIDTH} EQUAL 32)
+if(ARCH_WIDTH)
target_compile_definitions(blockchain_import
- PUBLIC -DARCH_WIDTH=32)
+ PUBLIC -DARCH_WIDTH=${ARCH_WIDTH})
endif()
add_dependencies(blockchain_import
diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp
index eb7b6608b..eb0a7de1f 100644
--- a/src/common/dns_utils.cpp
+++ b/src/common/dns_utils.cpp
@@ -38,7 +38,7 @@
using namespace epee;
namespace bf = boost::filesystem;
-static std::mutex instance_lock;
+static boost::mutex instance_lock;
namespace
{
@@ -304,7 +304,7 @@ std::string DNSResolver::get_dns_format_from_oa_address(const std::string& oa_ad
DNSResolver& DNSResolver::instance()
{
- std::lock_guard<std::mutex> lock(instance_lock);
+ boost::lock_guard<boost::mutex> lock(instance_lock);
static DNSResolver* staticInstance = NULL;
if (staticInstance == NULL)
diff --git a/src/p2p/data_logger.cpp b/src/p2p/data_logger.cpp
index f875cb8f0..7fc85e3bc 100644
--- a/src/p2p/data_logger.cpp
+++ b/src/p2p/data_logger.cpp
@@ -31,6 +31,7 @@
#include <boost/chrono.hpp>
#include <boost/filesystem.hpp>
+#include <boost/thread.hpp>
#include <chrono>
#include "../../contrib/otshell_utils/utils.hpp"
@@ -85,7 +86,7 @@ namespace net_utils
_info_c("dbg/data","Creating thread for data logger"); // create timer thread
m_thread_maybe_running=true;
- std::shared_ptr<std::thread> logger_thread(new std::thread([&]() {
+ std::shared_ptr<boost::thread> logger_thread(new boost::thread([&]() {
_info_c("dbg/data","Inside thread for data logger");
while (m_state == data_logger_state::state_during_init) { // wait for creation to be done (in other thread, in singleton) before actually running
std::this_thread::sleep_for(std::chrono::seconds(1));
diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h
index 2ae849e2a..260dd813d 100644
--- a/src/p2p/net_node.h
+++ b/src/p2p/net_node.h
@@ -270,7 +270,7 @@ namespace nodetool
bool m_offline;
std::atomic<bool> m_save_graph;
std::atomic<bool> is_closing;
- std::unique_ptr<std::thread> mPeersLoggerThread;
+ std::unique_ptr<boost::thread> mPeersLoggerThread;
//critical_section m_connections_lock;
//connections_indexed_container m_connections;
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
index 47a5dc6c3..56717ec66 100644
--- a/src/p2p/net_node.inl
+++ b/src/p2p/net_node.inl
@@ -567,7 +567,7 @@ namespace nodetool
bool node_server<t_payload_net_handler>::run()
{
// creating thread to log number of connections
- mPeersLoggerThread.reset(new std::thread([&]()
+ mPeersLoggerThread.reset(new boost::thread([&]()
{
_note("Thread monitor number of peers - start");
while (!is_closing && !m_net_server.is_stop_signal_sent())