Skip to content

Commit

Permalink
Parse size_info
Browse files Browse the repository at this point in the history
  • Loading branch information
msmouse committed Feb 29, 2024
1 parent 507bde1 commit 4078c51
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 9 deletions.
4 changes: 3 additions & 1 deletion ecosystem/indexer-grpc/indexer-grpc-fullnode/src/convert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use aptos_logger::warn;
use aptos_protos::{
transaction::{
v1 as transaction,
v1::{any_signature, Ed25519, Keyless, Secp256k1Ecdsa, WebAuthn},
v1::{any_signature, Ed25519, Keyless, Secp256k1Ecdsa, TransactionSizeInfo, WebAuthn},
},
util::timestamp,
};
Expand Down Expand Up @@ -740,6 +740,7 @@ pub fn convert_transaction(
transaction: &Transaction,
block_height: u64,
epoch: u64,
size_info: TransactionSizeInfo,
) -> transaction::Transaction {
let mut timestamp: Option<timestamp::Timestamp> = None;

Expand Down Expand Up @@ -833,5 +834,6 @@ pub fn convert_transaction(
block_height,
r#type: txn_type as i32,
txn_data: Some(txn_data),
size_info: Some(size_info),
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@ use aptos_protos::{
internal::fullnode::v1::{
transactions_from_node_response, TransactionsFromNodeResponse, TransactionsOutput,
},
transaction::v1::Transaction as TransactionPB,
transaction::v1::{
EventSizeInfo, Transaction as TransactionPB, TransactionSizeInfo, WriteOpSizeInfo,
},
util::timestamp::Timestamp,
};
use aptos_vm::data_cache::AsMoveResolver;
use itertools::Itertools;
use serde::Serialize;
use std::{sync::Arc, time::Duration};
use tokio::sync::mpsc;
use tonic::Status;
Expand Down Expand Up @@ -329,7 +332,7 @@ impl IndexerStreamCoordinator {
fn convert_to_api_txns(
context: Arc<Context>,
raw_txns: Vec<TransactionOnChainData>,
) -> Vec<APITransaction> {
) -> Vec<(APITransaction, TransactionSizeInfo)> {
if raw_txns.is_empty() {
return vec![];
}
Expand Down Expand Up @@ -371,6 +374,7 @@ impl IndexerStreamCoordinator {
block_height_bcs = aptos_api_types::U64::from(block_height);
}
}
let size_info = Self::get_size_info(&raw_txn);
match converter
.try_into_onchain_transaction(timestamp, raw_txn)
.map(|mut txn| {
Expand Down Expand Up @@ -403,7 +407,7 @@ impl IndexerStreamCoordinator {
};
txn
}) {
Ok(transaction) => transactions.push(transaction),
Ok(transaction) => transactions.push((transaction, size_info)),
Err(err) => {
UNABLE_TO_FETCH_TRANSACTION.inc();
error!(
Expand Down Expand Up @@ -431,7 +435,7 @@ impl IndexerStreamCoordinator {
start_version = first_version,
end_version = transactions
.last()
.map(|txn| txn.version().unwrap())
.map(|(txn, _size_info)| txn.version().unwrap())
.unwrap_or(0),
num_of_transactions = transactions.len(),
fetch_duration_in_ms = fetch_millis,
Expand All @@ -443,12 +447,45 @@ impl IndexerStreamCoordinator {
transactions
}

fn convert_to_pb_txns(api_txns: Vec<APITransaction>) -> Vec<TransactionPB> {
fn ser_size_u32<T: Serialize>(t: &T) -> u32 {
bcs::serialized_size(t).expect("serialized_size() failed") as u32
}

fn get_size_info(raw_txn: &TransactionOnChainData) -> TransactionSizeInfo {
TransactionSizeInfo {
transaction_bytes: Self::ser_size_u32(&raw_txn.transaction),
event_size_info: raw_txn
.events
.iter()
.map(|event| EventSizeInfo {
type_tag_bytes: Self::ser_size_u32(event.type_tag()),
total_bytes: event.size() as u32,
})
.collect(),
write_op_size_info: raw_txn
.changes
.iter()
.map(|(state_key, write_op)| WriteOpSizeInfo {
key_bytes: Self::ser_size_u32(state_key),
value_bytes: write_op.size() as u32,
})
.collect(),
}
}

fn convert_to_pb_txns(
api_txns: Vec<(APITransaction, TransactionSizeInfo)>,
) -> Vec<TransactionPB> {
api_txns
.iter()
.map(|txn| {
.into_iter()
.map(|(txn, size_info)| {
let info = txn.transaction_info().unwrap();
convert_transaction(txn, info.block_height.unwrap().0, info.epoch.unwrap().0)
convert_transaction(
&txn,
info.block_height.unwrap().0,
info.epoch.unwrap().0,
size_info,
)
})
.collect()
}
Expand Down
9 changes: 9 additions & 0 deletions types/src/write_set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,15 @@ impl WriteOp {
}
}

pub fn size(&self) -> usize {
use WriteOp::*;

match self {
Creation { data, .. } | Modification { data, .. } => data.len(),
Deletion { .. } => 0,
}
}

pub fn metadata(&self) -> &StateValueMetadata {
use WriteOp::*;

Expand Down

0 comments on commit 4078c51

Please sign in to comment.