Remove NTP time

This commit is contained in:
Vikram Rajkumar 2017-03-16 12:46:09 -05:00
parent 974a7fc0c8
commit 8ae1f6b3a5
15 changed files with 15 additions and 238 deletions

View file

@ -4,7 +4,6 @@ add_subdirectory( deterministic_openssl_rand )
add_subdirectory( chain )
add_subdirectory( egenesis )
add_subdirectory( net )
add_subdirectory( time )
add_subdirectory( utilities )
add_subdirectory( app )
add_subdirectory( plugins )

View file

@ -12,7 +12,7 @@ add_library( graphene_app
)
# need to link graphene_debug_witness because plugins aren't sufficiently isolated #246
target_link_libraries( graphene_app graphene_market_history graphene_account_history graphene_chain fc graphene_db graphene_net graphene_time graphene_utilities graphene_debug_witness )
target_link_libraries( graphene_app graphene_market_history graphene_account_history graphene_chain fc graphene_db graphene_net graphene_utilities graphene_debug_witness )
target_include_directories( graphene_app
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}/../egenesis/include" )

View file

@ -28,15 +28,12 @@
#include <graphene/chain/protocol/fee_schedule.hpp>
#include <graphene/chain/protocol/types.hpp>
#include <graphene/time/time.hpp>
#include <graphene/egenesis/egenesis.hpp>
#include <graphene/net/core_messages.hpp>
#include <graphene/net/exceptions.hpp>
#include <graphene/time/time.hpp>
#include <graphene/utilities/key_conversion.hpp>
#include <graphene/chain/worker_evaluator.hpp>
@ -336,7 +333,7 @@ namespace detail {
bool modified_genesis = false;
if( _options->count("genesis-timestamp") )
{
genesis.initial_timestamp = fc::time_point_sec( graphene::time::now() ) + genesis.initial_parameters.block_interval + _options->at("genesis-timestamp").as<uint32_t>();
genesis.initial_timestamp = fc::time_point_sec( fc::time_point::now() ) + genesis.initial_parameters.block_interval + _options->at("genesis-timestamp").as<uint32_t>();
genesis.initial_timestamp -= genesis.initial_timestamp.sec_since_epoch() % genesis.initial_parameters.block_interval;
modified_genesis = true;
std::cerr << "Used genesis timestamp: " << genesis.initial_timestamp.to_iso_string() << " (PLEASE RECORD THIS)\n";
@ -468,8 +465,6 @@ namespace detail {
_force_validate = true;
}
graphene::time::now();
if( _options->count("api-access") )
_apiaccess = fc::json::from_file( _options->at("api-access").as<boost::filesystem::path>() )
.as<api_access>();
@ -538,7 +533,7 @@ namespace detail {
std::vector<fc::uint160_t>& contained_transaction_message_ids) override
{ try {
auto latency = graphene::time::now() - blk_msg.block.timestamp;
auto latency = fc::time_point::now() - blk_msg.block.timestamp;
FC_ASSERT( (latency.count()/1000) > -5000, "Rejecting block with timestamp in the future" );
if (!sync_mode || blk_msg.block.block_num() % 10000 == 0)
{
@ -910,12 +905,6 @@ namespace detail {
return fc::time_point_sec::min();
} FC_CAPTURE_AND_RETHROW( (block_id) ) }
/** returns graphene::time::now() */
virtual fc::time_point_sec get_blockchain_now() override
{
return graphene::time::now();
}
virtual item_hash_t get_head_block_id() const override
{
return _chain_db->head_block_id();

@ -1 +1 @@
Subproject commit e3238628fc319fbd9ce8d3b00e771cb806d69f2e
Subproject commit 0d0b485f3ab76d46da1bbe5d85c60a6d95e06bd4

View file

@ -158,9 +158,6 @@ namespace graphene { namespace net {
*/
virtual fc::time_point_sec get_block_time(const item_hash_t& block_id) = 0;
/** returns graphene::blockchain::now() */
virtual fc::time_point_sec get_blockchain_now() = 0;
virtual item_hash_t get_head_block_id() const = 0;
virtual uint32_t estimate_last_known_fork_from_git_revision_timestamp(uint32_t unix_timestamp) const = 0;

View file

@ -396,7 +396,6 @@ namespace graphene { namespace net { namespace detail {
void connection_count_changed( uint32_t c ) override;
uint32_t get_block_number(const item_hash_t& block_id) override;
fc::time_point_sec get_block_time(const item_hash_t& block_id) override;
fc::time_point_sec get_blockchain_now() override;
item_hash_t get_head_block_id() const override;
uint32_t estimate_last_known_fork_from_git_revision_timestamp(uint32_t unix_timestamp) const override;
void error_encountered(const std::string& message, const fc::oexception& error) override;
@ -2642,7 +2641,8 @@ namespace graphene { namespace net { namespace detail {
fc::time_point_sec minimum_time_of_last_offered_block =
originating_peer->last_block_time_delegate_has_seen + // timestamp of the block immediately before the first unfetched block
originating_peer->number_of_unfetched_item_ids * GRAPHENE_MIN_BLOCK_INTERVAL;
if (minimum_time_of_last_offered_block > _delegate->get_blockchain_now() + GRAPHENE_NET_FUTURE_SYNC_BLOCKS_GRACE_PERIOD_SEC)
fc::time_point_sec now = fc::time_point::now();
if (minimum_time_of_last_offered_block > now + GRAPHENE_NET_FUTURE_SYNC_BLOCKS_GRACE_PERIOD_SEC)
{
wlog("Disconnecting from peer ${peer} who offered us an implausible number of blocks, their last block would be in the future (${timestamp})",
("peer", originating_peer->get_remote_endpoint())
@ -2650,7 +2650,7 @@ namespace graphene { namespace net { namespace detail {
fc::exception error_for_peer(FC_LOG_MESSAGE(error, "You offered me a list of more sync blocks than could possibly exist. Total blocks offered: ${blocks}, Minimum time of the last block you offered: ${minimum_time_of_last_offered_block}, Now: ${now}",
("blocks", originating_peer->number_of_unfetched_item_ids)
("minimum_time_of_last_offered_block", minimum_time_of_last_offered_block)
("now", _delegate->get_blockchain_now())));
("now", now)));
disconnect_from_peer(originating_peer,
"You offered me a list of more sync blocks than could possibly exist",
true, error_for_peer);
@ -5448,14 +5448,6 @@ namespace graphene { namespace net { namespace detail {
INVOKE_AND_COLLECT_STATISTICS(get_block_time, block_id);
}
/** returns graphene::blockchain::now() */
fc::time_point_sec statistics_gathering_node_delegate_wrapper::get_blockchain_now()
{
// this function doesn't need to block,
ASSERT_TASK_NOT_PREEMPTED();
return _node_delegate->get_blockchain_now();
}
item_hash_t statistics_gathering_node_delegate_wrapper::get_head_block_id() const
{
INVOKE_AND_COLLECT_STATISTICS(get_head_block_id);

View file

@ -25,7 +25,6 @@
#include <graphene/chain/database.hpp>
#include <graphene/chain/witness_object.hpp>
#include <graphene/time/time.hpp>
#include <graphene/utilities/key_conversion.hpp>

View file

@ -4,7 +4,7 @@ add_library( graphene_witness
witness.cpp
)
target_link_libraries( graphene_witness graphene_chain graphene_app graphene_time )
target_link_libraries( graphene_witness graphene_chain graphene_app )
target_include_directories( graphene_witness
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" )

View file

@ -25,7 +25,6 @@
#include <graphene/chain/database.hpp>
#include <graphene/chain/witness_object.hpp>
#include <graphene/time/time.hpp>
#include <graphene/utilities/key_conversion.hpp>
@ -51,7 +50,7 @@ void new_chain_banner( const graphene::chain::database& db )
"* *\n"
"********************************\n"
"\n";
if( db.get_slot_at_time( graphene::time::now() ) > 200 )
if( db.get_slot_at_time( fc::time_point::now() ) > 200 )
{
std::cerr << "Your genesis seems to have an old timestamp\n"
"Please consider using the --genesis-timestamp option to give your genesis a recent timestamp\n"
@ -122,8 +121,6 @@ void witness_plugin::plugin_startup()
{ try {
ilog("witness plugin: plugin_startup() begin");
chain::database& d = database();
//Start NTP time client
graphene::time::now();
if( !_witnesses.empty() )
{
@ -143,7 +140,6 @@ void witness_plugin::plugin_startup()
void witness_plugin::plugin_shutdown()
{
graphene::time::shutdown_ntp_time();
return;
}
@ -151,13 +147,12 @@ void witness_plugin::schedule_production_loop()
{
//Schedule for the next second's tick regardless of chain state
// If we would wait less than 50ms, wait for the whole second.
fc::time_point ntp_now = graphene::time::now();
fc::time_point fc_now = fc::time_point::now();
int64_t time_to_next_second = 1000000 - (ntp_now.time_since_epoch().count() % 1000000);
fc::time_point now = fc::time_point::now();
int64_t time_to_next_second = 1000000 - (now.time_since_epoch().count() % 1000000);
if( time_to_next_second < 50000 ) // we must sleep for at least 50ms
time_to_next_second += 1000000;
fc::time_point next_wakeup( fc_now + fc::microseconds( time_to_next_second ) );
fc::time_point next_wakeup( now + fc::microseconds( time_to_next_second ) );
//wdump( (now.time_since_epoch().count())(next_wakeup.time_since_epoch().count()) );
_block_production_task = fc::schedule([this]{block_production_loop();},
@ -221,7 +216,7 @@ block_production_condition::block_production_condition_enum witness_plugin::bloc
block_production_condition::block_production_condition_enum witness_plugin::maybe_produce_block( fc::mutable_variant_object& capture )
{
chain::database& db = database();
fc::time_point now_fine = graphene::time::now();
fc::time_point now_fine = fc::time_point::now();
fc::time_point_sec now = now_fine + fc::microseconds( 500000 );
// If the next block production opportunity is in the present or future, we're synced.

View file

@ -1,18 +0,0 @@
file(GLOB HEADERS "include/graphene/time/*.hpp")
add_library( graphene_time
time.cpp
)
target_link_libraries( graphene_time fc )
target_include_directories( graphene_time
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" )
install( TARGETS
graphene_time
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install( FILES ${HEADERS} DESTINATION "include/graphene/time" )

View file

@ -1,46 +0,0 @@
/*
* Copyright (c) 2015 Cryptonomex, Inc., and contributors.
*
* The MIT License
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#pragma once
#include <fc/optional.hpp>
#include <fc/signals.hpp>
#include <fc/time.hpp>
namespace graphene { namespace time {
typedef fc::signal<void()> time_discontinuity_signal_type;
extern time_discontinuity_signal_type time_discontinuity_signal;
fc::optional<fc::time_point> ntp_time();
fc::time_point now();
fc::time_point nonblocking_now(); // identical to now() but guaranteed not to block
void update_ntp_time();
fc::microseconds ntp_error();
void shutdown_ntp_time();
void start_simulated_time( const fc::time_point sim_time );
void advance_simulated_time_to( const fc::time_point sim_time );
void advance_time( int32_t delta_seconds );
} } // graphene::time

View file

@ -1,126 +0,0 @@
/*
* Copyright (c) 2015 Cryptonomex, Inc., and contributors.
*
* The MIT License
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <graphene/time/time.hpp>
#include <fc/exception/exception.hpp>
#include <fc/network/ntp.hpp>
#include <fc/thread/mutex.hpp>
#include <fc/thread/scoped_lock.hpp>
#include <atomic>
namespace graphene { namespace time {
static int32_t simulated_time = 0;
static int32_t adjusted_time_sec = 0;
time_discontinuity_signal_type time_discontinuity_signal;
namespace detail
{
std::atomic<fc::ntp*> ntp_service(nullptr);
fc::mutex ntp_service_initialization_mutex;
}
fc::optional<fc::time_point> ntp_time()
{
fc::ntp* actual_ntp_service = detail::ntp_service.load();
if (!actual_ntp_service)
{
fc::scoped_lock<fc::mutex> lock(detail::ntp_service_initialization_mutex);
actual_ntp_service = detail::ntp_service.load();
if (!actual_ntp_service)
{
actual_ntp_service = new fc::ntp;
detail::ntp_service.store(actual_ntp_service);
}
}
return actual_ntp_service->get_time();
}
void shutdown_ntp_time()
{
fc::ntp* actual_ntp_service = detail::ntp_service.exchange(nullptr);
delete actual_ntp_service;
}
fc::time_point now()
{
if( simulated_time )
return fc::time_point() + fc::seconds( simulated_time + adjusted_time_sec );
fc::optional<fc::time_point> current_ntp_time = ntp_time();
if( current_ntp_time.valid() )
return *current_ntp_time + fc::seconds( adjusted_time_sec );
else
return fc::time_point::now() + fc::seconds( adjusted_time_sec );
}
fc::time_point nonblocking_now()
{
if (simulated_time)
return fc::time_point() + fc::seconds(simulated_time + adjusted_time_sec);
fc::ntp* actual_ntp_service = detail::ntp_service.load();
fc::optional<fc::time_point> current_ntp_time;
if (actual_ntp_service)
current_ntp_time = actual_ntp_service->get_time();
if (current_ntp_time)
return *current_ntp_time + fc::seconds(adjusted_time_sec);
else
return fc::time_point::now() + fc::seconds(adjusted_time_sec);
}
void update_ntp_time()
{
detail::ntp_service.load()->request_now();
}
fc::microseconds ntp_error()
{
fc::optional<fc::time_point> current_ntp_time = ntp_time();
FC_ASSERT( current_ntp_time, "We don't have NTP time!" );
return *current_ntp_time - fc::time_point::now();
}
void start_simulated_time( const fc::time_point sim_time )
{
simulated_time = sim_time.sec_since_epoch();
adjusted_time_sec = 0;
}
void advance_simulated_time_to( const fc::time_point sim_time )
{
simulated_time = sim_time.sec_since_epoch();
adjusted_time_sec = 0;
}
void advance_time( int32_t delta_seconds )
{
adjusted_time_sec += delta_seconds;
time_discontinuity_signal();
}
} } // graphene::time

View file

@ -19,11 +19,11 @@ target_link_libraries( performance_test graphene_chain graphene_app graphene_acc
file(GLOB BENCH_MARKS "benchmarks/*.cpp")
add_executable( chain_bench ${BENCH_MARKS} ${COMMON_SOURCES} )
target_link_libraries( chain_bench graphene_chain graphene_app graphene_account_history graphene_time graphene_egenesis_none fc ${PLATFORM_SPECIFIC_LIBS} )
target_link_libraries( chain_bench graphene_chain graphene_app graphene_account_history graphene_egenesis_none fc ${PLATFORM_SPECIFIC_LIBS} )
file(GLOB APP_SOURCES "app/*.cpp")
add_executable( app_test ${APP_SOURCES} )
target_link_libraries( app_test graphene_app graphene_account_history graphene_net graphene_chain graphene_time graphene_egenesis_none fc ${PLATFORM_SPECIFIC_LIBS} )
target_link_libraries( app_test graphene_app graphene_account_history graphene_net graphene_chain graphene_egenesis_none fc ${PLATFORM_SPECIFIC_LIBS} )
file(GLOB INTENSE_SOURCES "intense/*.cpp")
add_executable( intense_test ${INTENSE_SOURCES} ${COMMON_SOURCES} )

View file

@ -26,8 +26,6 @@
#include <graphene/chain/balance_object.hpp>
#include <graphene/time/time.hpp>
#include <graphene/utilities/tempdir.hpp>
#include <graphene/account_history/account_history_plugin.hpp>

View file

@ -25,8 +25,6 @@
#include <graphene/chain/account_object.hpp>
#include <graphene/utilities/tempdir.hpp>
#include <graphene/time/time.hpp>
#include <fc/crypto/digest.hpp>
#include <fc/smart_ref_impl.hpp>