From c657e772c4efbfee8ff698883f1532a38117a70a Mon Sep 17 00:00:00 2001 From: warptangent Date: Thu, 4 Feb 2016 17:15:37 -0800 Subject: [PATCH] blockchain_import: Add --drop-hard-fork command --- src/blockchain_db/berkeleydb/db_bdb.cpp | 5 +++++ src/blockchain_db/berkeleydb/db_bdb.h | 1 + src/blockchain_db/blockchain_db.h | 1 + src/blockchain_db/lmdb/db_lmdb.cpp | 13 +++++++++++++ src/blockchain_db/lmdb/db_lmdb.h | 1 + src/blockchain_utilities/blockchain_import.cpp | 11 +++++++++++ 6 files changed, 32 insertions(+) diff --git a/src/blockchain_db/berkeleydb/db_bdb.cpp b/src/blockchain_db/berkeleydb/db_bdb.cpp index 6c80d133..2c18ae5d 100644 --- a/src/blockchain_db/berkeleydb/db_bdb.cpp +++ b/src/blockchain_db/berkeleydb/db_bdb.cpp @@ -2192,6 +2192,11 @@ void BlockchainBDB::check_hard_fork_info() /* FIXME: Some other time */ } +void BlockchainBDB::drop_hard_fork_info() +{ + /* TODO */ +} + void BlockchainBDB::set_hard_fork_version(uint64_t height, uint8_t version) { LOG_PRINT_L3("BlockchainBDB::" << __func__); diff --git a/src/blockchain_db/berkeleydb/db_bdb.h b/src/blockchain_db/berkeleydb/db_bdb.h index 8cac94f6..6db91aa1 100644 --- a/src/blockchain_db/berkeleydb/db_bdb.h +++ b/src/blockchain_db/berkeleydb/db_bdb.h @@ -376,6 +376,7 @@ private: virtual void set_hard_fork_version(uint64_t height, uint8_t version); virtual uint8_t get_hard_fork_version(uint64_t height) const; virtual void check_hard_fork_info(); + virtual void drop_hard_fork_info(); /** * @brief convert a tx output to a blob for storage diff --git a/src/blockchain_db/blockchain_db.h b/src/blockchain_db/blockchain_db.h index 1f4ee21c..4a140e5f 100644 --- a/src/blockchain_db/blockchain_db.h +++ b/src/blockchain_db/blockchain_db.h @@ -503,6 +503,7 @@ public: virtual void set_hard_fork_version(uint64_t height, uint8_t version) = 0; virtual uint8_t get_hard_fork_version(uint64_t height) const = 0; virtual void check_hard_fork_info() = 0; + virtual void drop_hard_fork_info() = 0; virtual bool is_read_only() const = 0; diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp index c18db772..541e838f 100644 --- a/src/blockchain_db/lmdb/db_lmdb.cpp +++ b/src/blockchain_db/lmdb/db_lmdb.cpp @@ -2457,6 +2457,19 @@ void BlockchainLMDB::check_hard_fork_info() TXN_POSTFIX_SUCCESS(); } +void BlockchainLMDB::drop_hard_fork_info() +{ + LOG_PRINT_L3("BlockchainLMDB::" << __func__); + check_open(); + + TXN_PREFIX(0); + + mdb_drop(*txn_ptr, m_hf_starting_heights, 1); + mdb_drop(*txn_ptr, m_hf_versions, 1); + + TXN_POSTFIX_SUCCESS(); +} + void BlockchainLMDB::set_hard_fork_starting_height(uint8_t version, uint64_t height) { LOG_PRINT_L3("BlockchainLMDB::" << __func__); diff --git a/src/blockchain_db/lmdb/db_lmdb.h b/src/blockchain_db/lmdb/db_lmdb.h index 48f4adb4..eb0704ab 100644 --- a/src/blockchain_db/lmdb/db_lmdb.h +++ b/src/blockchain_db/lmdb/db_lmdb.h @@ -236,6 +236,7 @@ private: virtual void set_hard_fork_version(uint64_t height, uint8_t version); virtual uint8_t get_hard_fork_version(uint64_t height) const; virtual void check_hard_fork_info(); + virtual void drop_hard_fork_info(); /** * @brief convert a tx output to a blob for storage diff --git a/src/blockchain_utilities/blockchain_import.cpp b/src/blockchain_utilities/blockchain_import.cpp index 247bab30..447d3a21 100644 --- a/src/blockchain_utilities/blockchain_import.cpp +++ b/src/blockchain_utilities/blockchain_import.cpp @@ -557,6 +557,7 @@ int main(int argc, char* argv[]) const command_line::arg_descriptor arg_block_stop = {"block-stop", "Stop at block number", block_stop}; const command_line::arg_descriptor arg_batch_size = {"batch-size", "", db_batch_size}; const command_line::arg_descriptor arg_pop_blocks = {"pop-blocks", "Remove blocks from end of blockchain", num_blocks}; + const command_line::arg_descriptor arg_drop_hf = {"drop-hard-fork", "Drop hard fork subdbs", false}; const command_line::arg_descriptor arg_testnet_on = { "testnet" , "Run on testnet." @@ -589,6 +590,7 @@ int main(int argc, char* argv[]) command_line::add_arg(desc_cmd_only, arg_count_blocks); command_line::add_arg(desc_cmd_only, arg_pop_blocks); + command_line::add_arg(desc_cmd_only, arg_drop_hf); command_line::add_arg(desc_cmd_only, command_line::arg_help); // call add_options() directly for these arguments since @@ -761,6 +763,15 @@ int main(int argc, char* argv[]) return 0; } +#if !defined(BLOCKCHAIN_DB) || (BLOCKCHAIN_DB == DB_LMDB) + if (! vm["drop-hard-fork"].defaulted()) + { + LOG_PRINT_L0("Dropping hard fork tables..."); + simple_core.m_storage.get_db().drop_hard_fork_info(); + return 0; + } +#endif + import_from_file(simple_core, import_file_path, block_stop); #endif