Skip to content

Commit 673d69d

Browse files
Zekun Lizekun000
authored andcommitted
[vm] avoid cloning metadata
1 parent 3cfa9d9 commit 673d69d

File tree

14 files changed

+35
-73
lines changed

14 files changed

+35
-73
lines changed

aptos-move/aptos-vm-types/src/module_and_script_storage/state_view_adapter.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ use move_binary_format::{
2121
};
2222
use move_core_types::{
2323
account_address::AccountAddress, identifier::IdentStr, language_storage::ModuleId,
24-
metadata::Metadata,
2524
};
2625
use move_vm_runtime::{
2726
ambassador_impl_ModuleStorage, ambassador_impl_WithRuntimeEnvironment, AsUnsyncCodeStorage,

aptos-move/aptos-vm/src/aptos_vm.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -678,10 +678,10 @@ impl AptosVM {
678678
}
679679

680680
let info = module_storage
681-
.unmetered_get_module_metadata(module_id.address(), module_id.name())
681+
.unmetered_get_deserialized_module(module_id.address(), module_id.name())
682682
.ok()
683683
.flatten()
684-
.and_then(|metadata| get_metadata(&metadata))
684+
.and_then(|module| get_metadata(&module.metadata))
685685
.and_then(|m| m.extract_abort_info(code));
686686

687687
ExecutionStatus::MoveAbort {
@@ -3434,14 +3434,16 @@ pub(crate) fn should_create_account_resource(
34343434
// Account lives at a special address, so we should not be charging for it and unmetered
34353435
// access is safe. There are tests that ensure that address is always special.
34363436
assert!(account_tag.address.is_special());
3437-
let metadata = module_storage
3438-
.unmetered_get_existing_module_metadata(&account_tag.address, &account_tag.module)?;
3437+
let module = module_storage.unmetered_get_existing_deserialized_module(
3438+
&account_tag.address,
3439+
&account_tag.module,
3440+
)?;
34393441

34403442
let (maybe_bytes, _) = resolver
34413443
.get_resource_bytes_with_metadata_and_layout(
34423444
&txn_data.sender(),
34433445
&account_tag,
3444-
&metadata,
3446+
&module.metadata,
34453447
None,
34463448
)
34473449
.map_err(|e| e.finish(Location::Undefined))?;

aptos-move/aptos-vm/src/keyless_validation.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ fn get_resource_on_chain_at_addr<T: MoveStructType + for<'a> Deserialize<'a>>(
6161
// INVARIANT:
6262
// The struct should be defined at core (0x1) address, so we do not require metering for any
6363
// module loading.
64-
let metadata = module_storage
65-
.unmetered_get_existing_module_metadata(&struct_tag.address, &struct_tag.module)
64+
let module = module_storage
65+
.unmetered_get_existing_deserialized_module(&struct_tag.address, &struct_tag.module)
6666
.map_err(|e| e.into_vm_status())?;
6767

6868
let bytes = resolver
69-
.get_resource_bytes_with_metadata_and_layout(addr, &struct_tag, &metadata, None)
69+
.get_resource_bytes_with_metadata_and_layout(addr, &struct_tag, &module.metadata, None)
7070
.map_err(|e| e.finish(Location::Undefined).into_vm_status())?
7171
.0
7272
.ok_or_else(|| {

aptos-move/aptos-vm/src/move_vm_ext/session/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -367,14 +367,14 @@ where
367367
// INVARIANT:
368368
// We do not need to meter metadata access here. If this resource is in data
369369
// cache, we must have already fetched metadata for its tag.
370-
let metadata = module_storage
371-
.unmetered_get_existing_module_metadata(
370+
let module = module_storage
371+
.unmetered_get_existing_deserialized_module(
372372
&struct_tag.address,
373373
&struct_tag.module,
374374
)
375375
.map_err(|e| e.to_partial())?;
376376

377-
get_resource_group_member_from_metadata(&struct_tag, &metadata)
377+
get_resource_group_member_from_metadata(&struct_tag, &module.metadata)
378378
};
379379

380380
if let Some(resource_group_tag) = resource_group_tag {

third_party/move/move-vm/integration-tests/src/tests/module_storage_tests.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,6 @@ fn test_module_does_not_exist() {
7777
let result = module_storage.unmetered_get_module_size(&AccountAddress::ZERO, ident_str!("a"));
7878
assert_none!(assert_ok!(result));
7979

80-
let result =
81-
module_storage.unmetered_get_module_metadata(&AccountAddress::ZERO, ident_str!("a"));
82-
assert_none!(assert_ok!(result));
83-
8480
let result =
8581
module_storage.unmetered_get_deserialized_module(&AccountAddress::ZERO, ident_str!("a"));
8682
assert_none!(assert_ok!(result));
@@ -119,9 +115,9 @@ fn test_deserialized_caching() {
119115

120116
let module_storage = module_bytes_storage.into_unsync_module_storage();
121117

122-
let result = module_storage.unmetered_get_module_metadata(a_id.address(), a_id.name());
123-
let expected = make_module("a", vec!["b", "c"], vec![]).0.metadata;
124-
assert_eq!(assert_some!(assert_ok!(result)), expected);
118+
let result = module_storage.unmetered_get_deserialized_module(a_id.address(), a_id.name());
119+
let expected = make_module("a", vec!["b", "c"], vec![]).0;
120+
assert_eq!(assert_some!(assert_ok!(result)).as_ref(), &expected);
125121
module_storage.assert_cached_state(vec![&a_id], vec![]);
126122

127123
let result = module_storage.unmetered_get_deserialized_module(c_id.address(), c_id.name());

third_party/move/move-vm/runtime/src/data_cache.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ impl TransactionDataCache {
278278
)?;
279279

280280
let (data, bytes_loaded) = {
281-
let metadata = metadata_loader.load_module_metadata(
281+
let module = metadata_loader.load_module_for_metadata(
282282
gas_meter,
283283
traversal_context,
284284
&struct_tag.module_id(),
@@ -289,7 +289,7 @@ impl TransactionDataCache {
289289
resource_resolver.get_resource_bytes_with_metadata_and_layout(
290290
addr,
291291
&struct_tag,
292-
&metadata,
292+
&module.metadata,
293293
layout_with_delayed_fields.layout_when_contains_delayed_fields(),
294294
)?
295295
};

third_party/move/move-vm/runtime/src/native_functions.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ use move_core_types::{
3030
gas_algebra::{InternalGas, NumBytes},
3131
identifier::{IdentStr, Identifier},
3232
language_storage::{ModuleId, TypeTag},
33-
metadata::Metadata,
3433
value::MoveTypeLayout,
3534
vm_status::StatusCode,
3635
};

third_party/move/move-vm/runtime/src/storage/implementations/unsync_code_storage.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use bytes::Bytes;
1919
use move_binary_format::{errors::VMResult, file_format::CompiledScript, CompiledModule};
2020
use move_core_types::{
2121
account_address::AccountAddress, identifier::IdentStr, language_storage::ModuleId,
22-
metadata::Metadata,
2322
};
2423
use move_vm_types::code::{
2524
ambassador_impl_ScriptCache, Code, ModuleBytesStorage, ScriptCache, UnsyncScriptCache,

third_party/move/move-vm/runtime/src/storage/implementations/unsync_module_storage.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use bytes::Bytes;
1717
use move_binary_format::{errors::VMResult, CompiledModule};
1818
use move_core_types::{
1919
account_address::AccountAddress, identifier::IdentStr, language_storage::ModuleId,
20-
metadata::Metadata,
2120
};
2221
use move_vm_types::{
2322
code::{

third_party/move/move-vm/runtime/src/storage/loader/eager.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ use move_binary_format::{
1919
access::ScriptAccess,
2020
errors::{PartialVMError, PartialVMResult, VMResult},
2121
file_format::CompiledScript,
22+
CompiledModule,
2223
};
2324
use move_core_types::{
2425
identifier::IdentStr,
2526
language_storage::{ModuleId, TypeTag},
26-
metadata::Metadata,
2727
vm_status::StatusCode,
2828
};
2929
use move_vm_types::{
@@ -237,16 +237,16 @@ impl<'a, T> ModuleMetadataLoader for EagerLoader<'a, T>
237237
where
238238
T: ModuleStorage,
239239
{
240-
fn load_module_metadata(
240+
fn load_module_for_metadata(
241241
&self,
242242
_gas_meter: &mut impl DependencyGasMeter,
243243
_traversal_context: &mut TraversalContext,
244244
module_id: &ModuleId,
245-
) -> PartialVMResult<Vec<Metadata>> {
245+
) -> PartialVMResult<Arc<CompiledModule>> {
246246
// Note:
247247
// For backwards compatibility, metadata accesses were never metered.
248248
self.module_storage
249-
.unmetered_get_existing_module_metadata(module_id.address(), module_id.name())
249+
.unmetered_get_existing_deserialized_module(module_id.address(), module_id.name())
250250
.map_err(|err| err.to_partial())
251251
}
252252
}

0 commit comments

Comments
 (0)