mirror of
				https://git.wownero.com/wownero/wownero.git
				synced 2024-08-15 01:03:23 +00:00 
			
		
		
		
	Move update_checkpoints() to a later stage
update_checkpoints() makes a few DNS requests and can take up to 20-30 seconds to complete (3-6 seconds on average). It is currently called from core::handle_incoming_block() which holds m_incoming_tx_lock, so it blocks all incoming transactions and blocks processing while update_checkpoints() is running. This PR moves it to until after a new block has been processed and relayed, to avoid full monerod locking.
This commit is contained in:
		
							parent
							
								
									7cbae6ca98
								
							
						
					
					
						commit
						802c4bb0e4
					
				
					 4 changed files with 10 additions and 4 deletions
				
			
		| 
						 | 
					@ -1656,10 +1656,6 @@ namespace cryptonote
 | 
				
			||||||
    if (((size_t)-1) <= 0xffffffff && block_blob.size() >= 0x3fffffff)
 | 
					    if (((size_t)-1) <= 0xffffffff && block_blob.size() >= 0x3fffffff)
 | 
				
			||||||
      MWARNING("This block's size is " << block_blob.size() << ", closing on the 32 bit limit");
 | 
					      MWARNING("This block's size is " << block_blob.size() << ", closing on the 32 bit limit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // load json & DNS checkpoints every 10min/hour respectively,
 | 
					 | 
				
			||||||
    // and verify them with respect to what blocks we already have
 | 
					 | 
				
			||||||
    CHECK_AND_ASSERT_MES(update_checkpoints(), false, "One or more checkpoints loaded from json or dns conflicted with existing checkpoints.");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    block lb;
 | 
					    block lb;
 | 
				
			||||||
    if (!b)
 | 
					    if (!b)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -537,6 +537,10 @@ namespace cryptonote
 | 
				
			||||||
      MLOG_PEER_STATE("requesting chain");
 | 
					      MLOG_PEER_STATE("requesting chain");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // load json & DNS checkpoints every 10min/hour respectively,
 | 
				
			||||||
 | 
					    // and verify them with respect to what blocks we already have
 | 
				
			||||||
 | 
					    CHECK_AND_ASSERT_MES(m_core.update_checkpoints(), 1, "One or more checkpoints loaded from json or dns conflicted with existing checkpoints.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 1;
 | 
					    return 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  //------------------------------------------------------------------------------------------------------------------------
 | 
					  //------------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
| 
						 | 
					@ -819,6 +823,10 @@ namespace cryptonote
 | 
				
			||||||
          post_notify<NOTIFY_REQUEST_CHAIN>(r, context);
 | 
					          post_notify<NOTIFY_REQUEST_CHAIN>(r, context);
 | 
				
			||||||
          MLOG_PEER_STATE("requesting chain");
 | 
					          MLOG_PEER_STATE("requesting chain");
 | 
				
			||||||
        }            
 | 
					        }            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // load json & DNS checkpoints every 10min/hour respectively,
 | 
				
			||||||
 | 
					        // and verify them with respect to what blocks we already have
 | 
				
			||||||
 | 
					        CHECK_AND_ASSERT_MES(m_core.update_checkpoints(), 1, "One or more checkpoints loaded from json or dns conflicted with existing checkpoints.");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } 
 | 
					    } 
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,6 +90,7 @@ namespace tests
 | 
				
			||||||
    bool get_test_drop_download_height() {return true;}
 | 
					    bool get_test_drop_download_height() {return true;}
 | 
				
			||||||
    bool prepare_handle_incoming_blocks(const std::vector<cryptonote::block_complete_entry>  &blocks_entry, std::vector<cryptonote::block> &blocks) { return true; }
 | 
					    bool prepare_handle_incoming_blocks(const std::vector<cryptonote::block_complete_entry>  &blocks_entry, std::vector<cryptonote::block> &blocks) { return true; }
 | 
				
			||||||
    bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
 | 
					    bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
 | 
				
			||||||
 | 
					    bool update_checkpoints(const bool skip_dns = false) { return true; }
 | 
				
			||||||
    uint64_t get_target_blockchain_height() const { return 1; }
 | 
					    uint64_t get_target_blockchain_height() const { return 1; }
 | 
				
			||||||
    size_t get_block_sync_size(uint64_t height) const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
 | 
					    size_t get_block_sync_size(uint64_t height) const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
 | 
				
			||||||
    virtual void on_transactions_relayed(epee::span<const cryptonote::blobdata> tx_blobs, cryptonote::relay_method tx_relay) {}
 | 
					    virtual void on_transactions_relayed(epee::span<const cryptonote::blobdata> tx_blobs, cryptonote::relay_method tx_relay) {}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,6 +72,7 @@ public:
 | 
				
			||||||
  bool get_test_drop_download_height() const {return true;}
 | 
					  bool get_test_drop_download_height() const {return true;}
 | 
				
			||||||
  bool prepare_handle_incoming_blocks(const std::vector<cryptonote::block_complete_entry>  &blocks_entry, std::vector<cryptonote::block> &blocks) { return true; }
 | 
					  bool prepare_handle_incoming_blocks(const std::vector<cryptonote::block_complete_entry>  &blocks_entry, std::vector<cryptonote::block> &blocks) { return true; }
 | 
				
			||||||
  bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
 | 
					  bool cleanup_handle_incoming_blocks(bool force_sync = false) { return true; }
 | 
				
			||||||
 | 
					  bool update_checkpoints(const bool skip_dns = false) { return true; }
 | 
				
			||||||
  uint64_t get_target_blockchain_height() const { return 1; }
 | 
					  uint64_t get_target_blockchain_height() const { return 1; }
 | 
				
			||||||
  size_t get_block_sync_size(uint64_t height) const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
 | 
					  size_t get_block_sync_size(uint64_t height) const { return BLOCKS_SYNCHRONIZING_DEFAULT_COUNT; }
 | 
				
			||||||
  virtual void on_transactions_relayed(epee::span<const cryptonote::blobdata> tx_blobs, cryptonote::relay_method tx_relay) {}
 | 
					  virtual void on_transactions_relayed(epee::span<const cryptonote::blobdata> tx_blobs, cryptonote::relay_method tx_relay) {}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue