mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 03:31:10 +00:00
Tracing for wasm with bridging to native (#6916)
* implement events handling, implement parent_id for spans & events * add events to sp_io::storage * update test * add tests * adjust limit * let tracing crate handle parent_ids * re-enable current-id tracking * add test for threads with CurrentSpan * fix log level * remove redundant check for non wasm traces * remove duplicate definition in test * Adding conditional events API * prefer explicit parent_id over current, enhance test * limit changes to client::tracing event implementation * remove From impl due to fallback required on parent_id * make tracing codecable * replace with global tracing * new tracing interface * impl TracingSubscriber in client * implement access to global TracingSubscriber from primitives * span for wasm * increment towards Wasm Tracing Subscriber implementation * increment, remove sp-tracing from runtime-interface * increment, it compiles * attained original functionality with new mechanism * implement remaining TracingSubscriber functions * remove spans from decl_module * add handling for encoded values * Revert "replace with global tracing" This reverts commit 8824a60deea54d9b437407a21c8ceaf6a1902ee5. * Wasm Side Tracing * tracing on wasm * enable tracing wasm on node-runtime * export all the macros in std * tracing subscriber on wasm-side only * pass spans and events over and record them * reactivate previous code and cleanup * further cleaning up * extend the span macros, activate through executive * tracking the actual extrinsic, too * style * fixing tests * spaces -> tabs * attempting to reactivate params * activate our tests in CI * some passing * tests passing * with core lazy * global tracer for wasm side with pass over * fixing metadata referencing * remove const_fn feature requirement * reenable dispatch traces * reset client tracing * further cleaning up * fixing runtime-test * move tracing-build setup into runtime-test * Merge DebugWriter from tracing and frame-support, move to sp-std * remove dangling fixme * Docs for tracing primitives * cleaning up a bit more * Wasm interface docs * optimise docs.rs setup * adding tracing flags to uncomment * remove brace * fixing imports * fixing broken syntax * add required modules * nicer formatting * better target management * adding low level storage tracing events into frame * add custom Debug impl for WasmMetadata * cloning profiler * adding info about cloning profiler * using in-scope for within calls * proper time tracing, cleaning up println * allow to disable tracing on runtime_interface-macro * disable tracing for wasm-tracing-interface * simplify wasm-tracing-api * update client to new interface * fixing docs and tests for sp-tracing * update integration tests * re-activating enter_span * dropping FIXME, it's documented * fix formatting * fix formatting * fix imports * more debug info * inform wasm about it being disabled by returning 1 * only one tracer, but enabled multi-all support * make trait pub again for tests * Apply suggestions from code review Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com> * fixing wasm doc tests for proper usage * remove unnecessary import * fixing formatting * minor style fixes * downgrading wabt * update error message for UI * Fix interface test * next attempt to fix macros * geee * revert tracing on hashed for future PR * remove local macros, use originals * we are able to convert to static items * implement more WasmValue types * adding support to convert str, debug and encoded values * more minor fixes * revert unsafe 'static making * fix indentation * remove commented lines * bump all them tracing versions * cleaning up docs and info * document new flag * the new layered system handles span cloning better * Apply suggestions from code review Co-authored-by: David <dvdplm@gmail.com> Co-authored-by: Matt Rutherford <mattrutherford@users.noreply.github.com> Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com> Co-authored-by: David <dvdplm@gmail.com>
This commit is contained in:
committed by
GitHub
parent
649bee1a1e
commit
a9c73113a8
@@ -207,6 +207,8 @@ where
|
||||
{
|
||||
/// Start the execution of a particular block.
|
||||
pub fn initialize_block(header: &System::Header) {
|
||||
sp_io::init_tracing();
|
||||
sp_tracing::enter_span!(sp_tracing::Level::TRACE, "init_block");
|
||||
let digests = Self::extract_pre_digest(&header);
|
||||
Self::initialize_block_impl(
|
||||
header.number(),
|
||||
@@ -270,6 +272,7 @@ where
|
||||
}
|
||||
|
||||
fn initial_checks(block: &Block) {
|
||||
sp_tracing::enter_span!(sp_tracing::Level::TRACE, "initial_checks");
|
||||
let header = block.header();
|
||||
|
||||
// Check that `parent_hash` is correct.
|
||||
@@ -288,23 +291,28 @@ where
|
||||
|
||||
/// Actually execute all transitions for `block`.
|
||||
pub fn execute_block(block: Block) {
|
||||
Self::initialize_block(block.header());
|
||||
sp_io::init_tracing();
|
||||
sp_tracing::within_span! {
|
||||
sp_tracing::info_span!( "execute_block", ?block);
|
||||
{
|
||||
Self::initialize_block(block.header());
|
||||
|
||||
// any initial checks
|
||||
Self::initial_checks(&block);
|
||||
// any initial checks
|
||||
Self::initial_checks(&block);
|
||||
|
||||
let signature_batching = sp_runtime::SignatureBatching::start();
|
||||
let signature_batching = sp_runtime::SignatureBatching::start();
|
||||
|
||||
// execute extrinsics
|
||||
let (header, extrinsics) = block.deconstruct();
|
||||
Self::execute_extrinsics_with_book_keeping(extrinsics, *header.number());
|
||||
// execute extrinsics
|
||||
let (header, extrinsics) = block.deconstruct();
|
||||
Self::execute_extrinsics_with_book_keeping(extrinsics, *header.number());
|
||||
|
||||
if !signature_batching.verify() {
|
||||
panic!("Signature verification failed.");
|
||||
}
|
||||
if !signature_batching.verify() {
|
||||
panic!("Signature verification failed.");
|
||||
}
|
||||
|
||||
// any final checks
|
||||
Self::final_checks(&header);
|
||||
// any final checks
|
||||
Self::final_checks(&header);
|
||||
} };
|
||||
}
|
||||
|
||||
/// Execute given extrinsics and take care of post-extrinsics book-keeping.
|
||||
@@ -320,6 +328,8 @@ where
|
||||
/// Finalize the block - it is up the caller to ensure that all header fields are valid
|
||||
/// except state-root.
|
||||
pub fn finalize_block() -> System::Header {
|
||||
sp_io::init_tracing();
|
||||
sp_tracing::enter_span!( sp_tracing::Level::TRACE, "finalize_block" );
|
||||
<frame_system::Module<System>>::note_finished_extrinsics();
|
||||
let block_number = <frame_system::Module<System>>::block_number();
|
||||
<frame_system::Module<System> as OnFinalize<System::BlockNumber>>::on_finalize(block_number);
|
||||
@@ -335,6 +345,7 @@ where
|
||||
/// This doesn't attempt to validate anything regarding the block, but it builds a list of uxt
|
||||
/// hashes.
|
||||
pub fn apply_extrinsic(uxt: Block::Extrinsic) -> ApplyExtrinsicResult {
|
||||
sp_io::init_tracing();
|
||||
let encoded = uxt.encode();
|
||||
let encoded_len = encoded.len();
|
||||
Self::apply_extrinsic_with_len(uxt, encoded_len, Some(encoded))
|
||||
@@ -355,6 +366,10 @@ where
|
||||
encoded_len: usize,
|
||||
to_note: Option<Vec<u8>>,
|
||||
) -> ApplyExtrinsicResult {
|
||||
sp_tracing::enter_span!(
|
||||
sp_tracing::info_span!("apply_extrinsic",
|
||||
ext=?sp_core::hexdisplay::HexDisplay::from(&uxt.encode()))
|
||||
);
|
||||
// Verify that the signature is good.
|
||||
let xt = uxt.check(&Default::default())?;
|
||||
|
||||
@@ -377,6 +392,7 @@ where
|
||||
}
|
||||
|
||||
fn final_checks(header: &System::Header) {
|
||||
sp_tracing::enter_span!(sp_tracing::Level::TRACE, "final_checks");
|
||||
// remove temporaries
|
||||
let new_header = <frame_system::Module<System>>::finalize();
|
||||
|
||||
@@ -406,24 +422,32 @@ where
|
||||
source: TransactionSource,
|
||||
uxt: Block::Extrinsic,
|
||||
) -> TransactionValidity {
|
||||
use sp_tracing::tracing_span;
|
||||
sp_io::init_tracing();
|
||||
use sp_tracing::{enter_span, within_span};
|
||||
|
||||
sp_tracing::enter_span!("validate_transaction");
|
||||
enter_span!{ sp_tracing::Level::TRACE, "validate_transaction" };
|
||||
|
||||
let encoded_len = tracing_span!{ "using_encoded"; uxt.using_encoded(|d| d.len()) };
|
||||
let encoded_len = within_span!{ sp_tracing::Level::TRACE, "using_encoded";
|
||||
uxt.using_encoded(|d| d.len())
|
||||
};
|
||||
|
||||
let xt = tracing_span!{ "check"; uxt.check(&Default::default())? };
|
||||
let xt = within_span!{ sp_tracing::Level::TRACE, "check";
|
||||
uxt.check(&Default::default())
|
||||
}?;
|
||||
|
||||
let dispatch_info = tracing_span!{ "dispatch_info"; xt.get_dispatch_info() };
|
||||
let dispatch_info = within_span!{ sp_tracing::Level::TRACE, "dispatch_info";
|
||||
xt.get_dispatch_info()
|
||||
};
|
||||
|
||||
tracing_span! {
|
||||
"validate";
|
||||
within_span! {
|
||||
sp_tracing::Level::TRACE, "validate";
|
||||
xt.validate::<UnsignedValidator>(source, &dispatch_info, encoded_len)
|
||||
}
|
||||
}
|
||||
|
||||
/// Start an offchain worker and generate extrinsics.
|
||||
pub fn offchain_worker(header: &System::Header) {
|
||||
sp_io::init_tracing();
|
||||
// We need to keep events available for offchain workers,
|
||||
// hence we initialize the block manually.
|
||||
// OffchainWorker RuntimeApi should skip initialization.
|
||||
|
||||
Reference in New Issue
Block a user