Commit Graph

4147 Commits

Author SHA1 Message Date
Alexander Meißner a85548cf34
Cleanup - spl_token_v3_4_0 and spl_associated_token_account_v1_1_0 (#31764)
* spl_token_v3_4_0

* spl_associated_token_account_v1_1_0

* Marks replace_program_account() as dead code.
2023-05-24 18:45:37 +02:00
Jeff Washington (jwash) e396a10312
change StartBlockHeightAndRewards from parent to current (#31781) 2023-05-23 20:10:51 -07:00
Jeff Washington (jwash) ae12079139
add debug to VoteReward (#31782) 2023-05-23 20:10:20 -07:00
Jeff Washington (jwash) 8e8b2f1671
reformat comments (#31780) 2023-05-23 17:04:47 -07:00
Andrew Fitzgerald f52ded35f4
async delete contents but leave directory (#31737)
* async delete contents but leave directory

* Clarified comment
2023-05-23 15:33:09 -07:00
Brooks 05c932f92d
Moves transient accounts hash cache files into their own dir (#31778) 2023-05-23 22:14:30 +00:00
Yueh-Hsuan Chiang 174951478f
Add new error type -- TieredStorageError (#31633)
#### Summary of Changes
This PR adds a new error type for the tiered storage.
2023-05-23 15:06:55 -07:00
Brooks a474cb24b9
Creates temporary accounts hash cache files inside accounts hash cache dir (#31776) 2023-05-23 17:09:16 -04:00
Brooks 61afb07dbd
Purges old bank snapshots at startup (#31656)
Co-authored-by: Andrew Fitzgerald <apfitzge@gmail.com>
2023-05-23 13:18:05 -04:00
Andrew Fitzgerald 5448d0b1e8
Remove redundant clones (#31685)
* broadcast_stage remove redundant clone

* broadcast_fake_shreds_run remove redundant clone

* wallet remove redundant clone

* cluster_query remove redundant clone

* accounts remove redundant clones
2023-05-23 09:42:05 -07:00
Alexander Meißner 1e8e024ec5
Cleanup - disable_fee_calculator (#31766)
disable_fee_calculator
2023-05-23 18:20:38 +02:00
Alexander Meißner e9d99973ca
Cleanup - bank_transaction_count_fix (#31768)
bank_transaction_count_fix
2023-05-23 18:18:15 +02:00
Alexander Meißner d866fce3d8
Cleanup - include_account_index_in_rent_error (#31770)
include_account_index_in_rent_error
2023-05-23 15:02:55 +02:00
Alexander Meißner 183e7fd60f
Cleanup - instructions_sysvar_owned_by_sysvar (#31769)
instructions_sysvar_owned_by_sysvar
2023-05-23 15:02:35 +02:00
Yueh-Hsuan Chiang d9d2120d32
Make reconstruct_single_storage() returns SnapshotError (#31748)
#### Problem
The return error type -- io::Error used in reconstruct_single_storage()
isn't suitable to describe all possible errors inside the function such as
AccountsFileError.

#### Summary of Changes
This PR makes it return SnapshotError which can better handle
both AccountsFileError and io::Error.
2023-05-23 02:18:23 -07:00
Yueh-Hsuan Chiang 586fd407bf
Refactor SnapshotError related code (#31632)
#### Problem
Part of the snapshot-related code uses io::Error while other parts use SnapshotError.

#### Summary of Changes
As SnapshotError can be created from io::Error, this PR makes snapshot-related
code to use SnapshotError instead.
2023-05-22 15:33:11 -07:00
Yueh-Hsuan Chiang c79a6e74e2
Add new error type AccountsFileError (#31631)
#### Problem
AccountsFile- and AppendVec-related code uses io::Error for their main error type.  However, there're many errors under AccountsFile that don't belong to io::Error.

#### Summary of Changes
This PR introduces AccountsFileError and makes minimum changes to keep the PR small.
Subsequent changes related to this will be in separate PRs.
2023-05-22 14:09:09 -07:00
Alexander Meißner 83f692ce67
Refactor - Share RBPF config and syscall registry globally (#31727)
* Adds LoadedPrograms::program_runtime_environment_v1.

* No need to explicitly remove precompiles from program_accounts_map.
2023-05-20 20:28:00 +02:00
Pankaj Garg e6d490708a
Do not overwrite builtin program in the same slot (#31718) 2023-05-19 05:26:31 -07:00
Andrew Fitzgerald d391e75a60
Performance: Allowed forced inline update_index (no thread pool) (#31455) 2023-05-18 13:32:41 -07:00
Alexander Meißner 520c647918
Refactor - Merges `BuiltinPrograms` into `LoadedPrograms` (#31654)
* Merges BuiltinPrograms into LoadedPrograms.

* Prevents built-ins from being pruned.
2023-05-18 22:18:28 +02:00
Jeff Washington (jwash) 9fd6f09984
remove redundant `mut`s (#31696) 2023-05-18 11:08:13 -07:00
Jeff Washington (jwash) 3ac5bb2a60
deserialize epoch_reward_status into BankFieldsToDeserialize (#31698) 2023-05-18 07:14:59 -07:00
Jeff Washington (jwash) 0291454876
persist EpochRewardStatus::Active (#31697)
persist `EpochRewardStatus::Active`
2023-05-18 07:14:41 -07:00
Jeff Washington (jwash) 3f625e47df
working towards persistence for EpochRewardStatus (#31678) 2023-05-17 13:23:20 -07:00
Jeff Washington (jwash) 8ed4962229
refactor serialization tuple into an enum (#31679) 2023-05-17 10:53:28 -07:00
Jeff Washington (jwash) ce32cb43db
add bank.epoch_reward_status (#31680) 2023-05-17 10:01:14 -07:00
Pankaj Garg b03422968b
Remove Rc and RefCell to carry program cache in invoke_context (#31684) 2023-05-17 06:10:50 -07:00
Jeff Washington (jwash) 7c6478da8f
remove unnecessary pub (#31676) 2023-05-16 13:53:57 -07:00
Jeff Washington (jwash) 5bc41a0eb8
prepare load_transaction_accounts to recognize reward interval (#31673) 2023-05-16 12:55:35 -07:00
Jeff Washington (jwash) cdb430d287
add StorableAccount impl for account value (#31675) 2023-05-16 12:54:48 -07:00
Jeff Washington (jwash) d841ff7fe1
support snapshot deserialization with EpochRewardStatus (#31672)
* support snapshot deserialization with EpochRewardStatus

* pub(crate)
2023-05-16 12:53:52 -07:00
Jeff Washington (jwash) db4b76d9e2
default to using packed ancient append vec (#31657) 2023-05-16 07:11:24 -07:00
Jeff Washington (jwash) eaaed0a726
clean up is_ancient in is_candidate_for_shrink (#31616)
clean up `is_ancient` in `is_candidate_for_shrink`
2023-05-15 14:05:41 -07:00
Jeff Washington (jwash) 6172b0d50c
cleanup a stat call to `is_ancient` (#31621)
cleanup some calls to `is_ancient`
2023-05-15 13:22:15 -07:00
Jeff Washington (jwash) 656d93d805
remove unused `accounts_hash_complete_oldest_non_ancient_slot` (#31652) 2023-05-15 12:44:37 -07:00
Andrew Fitzgerald e5effa38b1
derive TransactionCost::{PartialEq, Eq} (#31626) 2023-05-15 12:27:17 -07:00
Maximilian Schneider 31aafc8ae6
race condition when running solana-program-test (#31637)
* hold bank freeze lock in banks-server to prevent RC on slot change

* clean up comments and loop

---------

Co-authored-by: Maximilian Schneider <max@mango.markets>
2023-05-15 12:25:06 -07:00
Jeff Washington (jwash) 596a76ffb3
`get_ancient_slots` returns slots based on slot as opposed to contents (#31620) 2023-05-15 11:21:33 -07:00
Brooks dd4cfe9924
Do not purge bank snapshots in AccountsBackgroundService (#31647) 2023-05-15 13:53:48 -04:00
Brooks bac4d50761
Uses `_` instead of `-` for datapoint field names (#31648) 2023-05-15 12:02:43 -04:00
Jeff Washington (jwash) 376f562d8f
mark_old_slots_as_dirty is a no-op when ancient append vecs are enabled (#31624) 2023-05-15 06:28:06 -07:00
Jeff Washington (jwash) 5cdb5daaad
clean stat updated based on slot instead of contents (#31623) 2023-05-15 06:26:40 -07:00
Jeff Washington (jwash) 13077e0b71
remove an irrelevant ancient stat (#31622) 2023-05-15 06:25:54 -07:00
Ashwin Sekar 3e8f5bad81
refactor: highest_cluster_confirmed_root -> highest_super_majority_root (#31619) 2023-05-14 00:42:03 -07:00
Ashwin Sekar ef75f1cb4e
Add ancestor hashes to state machine (#31627)
* Notify replay of pruned duplicate confirmed slots

* Ingest replay signal and run ancestor hashes for pruned

* Forward PDC to ancestor hashes and ingest pruned dumps from ancestor hashes service

* Add local-cluster test
2023-05-13 02:05:44 -07:00
Brooks 8e5e66fdb4
Revert "Revert "SnapshotPackagerService purges old bank snapshots (#31511)" (#31524)" (#31558)
This reverts commit 775639c058.
2023-05-12 15:39:14 -04:00
Brooks 7dbcf5a0fd
Do not remove bank snapshots in new_from_dir() (#31556) 2023-05-12 13:19:07 -04:00
Andrew Fitzgerald 2c869ef778
QoS refactor: Allow pre-filtering (#31542) 2023-05-12 08:53:22 -07:00
Jeff Washington (jwash) 3e543665c7
remove unused functions connecting hash calc and ancient append vec boundary (#31575)
remove coupling between hash calc and ancient append vec boundary
2023-05-11 13:30:44 -07:00
Jeff Washington (jwash) 122b05b9f5
pass include_slot_in_hash through hash calcs to allow rehashing if hash is not stored (#31579)
* pass include_slot_in_hash through hash calcs to allow rehashing

* tests use each include_slot_in_hash value

* move include_slot_in_hash

* typo

* reorder struct init

* spelling is hard
2023-05-11 13:23:29 -07:00
Jeff Washington (jwash) d9cfb31bba
remove unnecessary struct IndexAccountMapEntry (#31605) 2023-05-11 13:22:03 -07:00
Jeff Washington (jwash) e0b914e775
use highest alive root to determine ancient for packing (#31573) 2023-05-11 12:13:15 -07:00
Jeff Washington (jwash) ea95173b27
remove IndexAccountMapEntry.store_id (#31600)
* remove IndexAccountMapEntry.store_id

* fix empty case that test hit

* store_id checks

* cleanup generate index when slot contains no storage

* remove unwrap
2023-05-11 12:12:41 -07:00
Jeff Washington (jwash) 722921380b
remove unused IndexAccountMapEntry.write_version (#31599) 2023-05-11 09:16:27 -07:00
Tao Zhu 49f44f5ded
Refactor pass feature status to deserialized packet via packet meta (#31549)
Add a flag to packet, set its value by packet_deserializer when received by banking_stage with working_bank
2023-05-11 09:31:05 -05:00
Alexander Meißner bbd8be6cbe
Refactor - Renames loader-v3 to loader-v4. (#31570)
Renames loader-v3 to loader-v4.
2023-05-11 08:29:06 +02:00
Pankaj Garg 04425b81ce
Add stats for LoadedPrograms (#31577) 2023-05-10 12:08:55 -07:00
Jeff Washington (jwash) fed1bb7d54
use max alive root to determine ancient cutoff for clean stats (#31545)
* use max alive root to determine ancient cutoff for clean stats

* fix math and add tests
2023-05-10 08:05:31 -07:00
Alexander Meißner 9e72668a77
Refactor - Simplify built-in program feature transition (#31565)
* Removes builtins::get_builtins(), instead derive them from Bank::builtin_programs.

* Removes BuiltinAction.
Turns BuiltinFeatureTransition from an enum into a struct.

* Makes Bank::remove_builtin() place tombstones.
2023-05-10 16:53:36 +02:00
Pankaj Garg ab89e2cb15
Remove executor cache from the codebase (#31566) 2023-05-10 07:11:04 -07:00
Alexander Meißner 8e9b064ab3
Cleanup - `add_compute_budget_program` and `versioned_tx_message_enabled` (#31560)
* Moves compute_budget_program and address_lookup_table_program into genesis_builtins().

* Removes feature gate of versioned_tx_message_enabled.
2023-05-10 01:14:08 +02:00
Pankaj Garg 2210af60ee
Replace executor cache usage with LoadedPrograms cache (#31462)
* Replace executor cache usage with LoadedPrograms cache

* clippy fixes

* update cache with updated programs

* fixes

* more cleanup

* update tx batch cache with the tx results

* address review comments

* handle program closing backward compatibility

* handle unloaded programs during extraction
2023-05-09 15:44:38 -07:00
Brooks 3bb2e3b546
Purges incomplete snapshot dirs at startup (#31555) 2023-05-09 14:08:12 -04:00
Jeff Washington (jwash) c7867cfa5f
clean stats for ancient aren't based off last hash calc slot (#31546) 2023-05-09 10:08:08 -07:00
Pankaj Garg 3845423e17
Generalize matching criteria for tombstone at boot up (#31547)
Generalize matching criteria for tombstone at bootup
2023-05-09 08:26:42 -07:00
behzad nouri 8e638b785a
removes feature gate code sending votes to tpu-vote-port (#31529) 2023-05-08 18:12:35 +00:00
Jeff Washington (jwash) 8d98589c85
remove unused historical_roots (#31539) 2023-05-08 10:50:27 -07:00
Yueh-Hsuan Chiang 8120d31396
Implementation of the footer for tiered account storage (#31161)
#### Summary of Changes
This PR includes the implementation of the footer for the tiered account storage.

Tiered account storage proposal: #30551
The prototype implementation of the tiered account storage: #30626.
2023-05-07 13:18:10 -07:00
Brooks 775639c058
Revert "SnapshotPackagerService purges old bank snapshots (#31511)" (#31524)
This reverts commit a6c39ded8e.
2023-05-06 09:18:03 -04:00
steviez e62e4fbabd
Replace inc_new_counter_* with datapoint_* in Bank (#31495)
Counters can only report a single field; this adds an extra step to
debugging efforts to figure out the context for where/why the counted
event occurred. Use datapoints instead to subtmit some extra context.
2023-05-05 16:33:35 -05:00
Brooks a6c39ded8e
SnapshotPackagerService purges old bank snapshots (#31511) 2023-05-05 17:22:48 -04:00
Brooks 39a092c3dc
Adds snapshot_utils::purge_bank_snapshot() (#31500)
Co-authored-by: Andrew Fitzgerald <apfitzge@gmail.com>
2023-05-05 14:01:08 -04:00
Brooks c7d922f229
Uses SNAPSHOT_VERSION_FILENAME constant (#31508) 2023-05-05 14:00:08 -04:00
Jeff Washington (jwash) d8664397b6
clarify AccountsIndexScanResult::OnlyKeepInMemoryIfDirty (#31513) 2023-05-05 10:39:32 -07:00
Brooks 1d861ad558
Removes solana_logger from snapshot_utils unit tests (#31510) 2023-05-05 12:52:36 -04:00
Brooks 10b8b32a31
Uses SNAPSHOT_ARCHIVE_DOWNLOAD_DIR constant (#31507) 2023-05-05 12:36:32 -04:00
Brooks ab6094a94f
Uses SNAPSHOT_ACCOUNTS_HARDLINKS constant (#31499) 2023-05-05 12:36:21 -04:00
Brooks 4196dbcbf4
Replaces snapshot_utils::remove_bank_snapshot() (#31498) 2023-05-05 07:43:28 -04:00
Brooks 0e0c91faac
Adds snapshot_utils::purge_bank_snapshot() (#31497) 2023-05-04 19:19:26 -04:00
HaoranYi 0f4293914c
remove unnecessary-struct-initialization (#31486)
* remove unnecessary-struct-initialization

* more  remove unnecessary-struct-initialization

---------

Co-authored-by: haoran <haoran.yi@solana.com>
2023-05-04 17:48:33 -05:00
Pankaj Garg 555520b640
Update SBF programs tests to use bank from the correct slot (#31491) 2023-05-04 13:25:02 -07:00
Alexander Meißner 67939c061e
Feature Gate Update - Requires the owner accounts of programs to be built-ins. (#31488)
Requires the owner accounts of programs to be built-ins.
(owned by the native_loader and have the executable flag set)
2023-05-04 21:03:09 +02:00
Andrew Fitzgerald 18cd4311af
remove counters in hotpath (#31398) 2023-05-04 09:36:28 -07:00
Pankaj Garg 96e170bd37
Do not evict unloaded programs (#31465)
* Do not evict unloaded programs

* cleanup
2023-05-04 07:49:54 -07:00
Brooks 22d4c6abf2
Adds test for SortedStorages::new_with_slots() (#31471) 2023-05-04 06:13:08 -04:00
Jeff Washington (jwash) ddd1f2fce0
remove unnecessary casts (#31461) 2023-05-03 08:54:25 -07:00
Brooks a9515e9269
Inlines AccountsDb::remove_bank_hash_infos() (#31454) 2023-05-03 10:42:16 -04:00
Pankaj Garg ba6f7e80e8
Remove obsolete code for lazily loading programs (#31395) 2023-05-02 14:39:27 -07:00
Alexander Meißner ae75c7cb3f
Refactoring - Remove redundant definition of `BuiltinProgram` (#31429)
* Replaces BuiltinProgram in the program-runtime with the one from solana_rbpf.

* Adjusts the runtimes built-ins to use Arc<LoadedProgram>.

* Adjusts the tests and benchmarks.
2023-05-02 23:01:28 +02:00
Brooks fdf7bdae1a
Fixes name of snapshot_utils::get_bank_snapshot_dir() (#31432) 2023-05-01 19:28:35 +00:00
Xiang Zhu 0a2e897f16
Clean up the outdated SnapshotPackage snapshot_links field (#31360)
* Remove snapshot_links

* Change the function name from snapshot_dir to bank_snapshot_dir

* Format fix

* Fix test_concurrent_snapshot_packaging

* Fix clippy error

* Fix nits

* Fix nits 2nd try

* Use get_bank_snapshots_dir

* Use slot_dir

* Revert "Use get_bank_snapshots_dir" because get_bank_snapshots_dir is private to crate

This reverts commit 1ed9b3b2c8e84689a918beee7159f63c56500a96.
2023-05-01 11:24:59 -07:00
Jeff Washington (jwash) 58ce19446f
replace tuple with `VoteReward` struct (#31408) 2023-05-01 10:42:05 -07:00
Pankaj Garg 8eebf64464
Add a second level cache to contain tx batch specific programs (#31413)
* Add a second level cache to contain tx batch specific programs

* fix clippy

* address review comments
2023-05-01 09:09:43 -07:00
steviez 1a995ade3f
Combine multiple snapshot_utils metrics (#31406)
Within the contents of snapshot_utils::add_bank_snapshot(), metrics were
being reported in several datapoints and counters. This adds extra
overhead, and makes it harder to correlate fields that correspond to the
same snapshot.

So, combine the counters and multiple datapoints into a single
datapoint.
2023-04-30 16:36:08 -04:00
Dmitri Makarov 74bd5f87af
Add minor extensions to Bank API (#31396)
* Make load_program method of Bank public for use in ledger-tool

* Add an accessor method to get a reference to builtin_programs of Bank

* Add a parameter to Bank::load_program to control debugging_features
2023-04-28 19:02:49 -04:00
Xiang Zhu bb95d44328
Check incomplete file flag first (#31409)
* Check incomplete file flag first

* Use the simple is_file call, no need for metadata
2023-04-28 15:44:59 -07:00
Alessandro Decina 117a194b73
Account data direct mapping (#28053)
* AccountSharedData: make data_mut() private

This ensures that the inner Vec is never handed out. This is in
preparation of enforcing that the capacity of the inner vec never
shrinks, which is required for direct mapping.

* Adds the feature bpf_account_data_direct_mapping.

* Remaps EbpfError::AccessViolation into InstructionError::ReadonlyDataModified.

* WIP: Memory regions for each instruction account in create_vm().

* Fix serialization benches, run both copy and !copy variants

* rbpf-cli: fix build

* BorrowedAccount: ensure that account capacity is never reduced

Accounts can be directly mapped in address space. Their capacity can't
be reduced mid transaction as that would create holes in vm address
space that point to invalid host memory.

* bpf_load: run serialization tests for both copy and !copy account data

* bpf_loader: add Serializer::write_account

* fix lints

* BorrowedAccount: make_data_mut is host only

* Fix unused import warning

* Fix lints

* cpi: add explicit direct_mapping arg to update_(callee|caller)_account

* cpi: rename account_data_or_only_realloc_padding to serialized_data

* cpi: add CallerAccount::original_data_len comment

* cpi: add update_callee_account direct_mapping test

* cpi: add test_update_caller_account_data_direct_mapping and fix bug

We used to have a bug in zeroing data when shrinking account, where we zeroed
the spare account capacity but not the realloc padding.

* cpi: add tests for mutated readonly accounts

* cpi: update_caller_account doesn't need to change .serialized_data when direct_mapping is on

* cpi: update_caller_account: ensure that account capacity is always enough

Introduce a better way to ensure that account capacity never goes below what
might be mapped in memory regions.

* cpi: zero account capacity using the newly introduced BorrowedAccount::spare_data_capacity_mut()

Before we were using BorrowedAccount::get_data_mut() to get the base pointer to
the account data, then we were slicing the spare capacity from it. Calling
get_data_mut() doesn't work if an account has been closed tho, since the
current program doesn't own the account anymore and therefore get_data_mut()
errors out.

* bpf_loader: fix same lint for the umpteenth time

* bpf_loader: map AccessViolation to ReadonlyDataModified only for account region violations

* programs/sbf: realloc: add test for large write after realloc

Add a test that after a realloc does a large write that spans the
original account length and the realloc area. This ensures that memory
mapping works correctly across the boundary.

* programs/sbf: run test_program_sbf_realloc with both direct_mapping on and off

By default test banks test with all features on. This ensures we keep
testing the existing code until the new feature is enabled.

* bpf_loader: tweak memcmp syscall

Split the actual memcmp code in a separate function. Remove check
indexing the slices since the slices are guaranteed to have the correct
length by construction.

* bpf_loader: tweak the memset syscall

Use slice::fill, which is effectively memset.

* bpf_loader: syscalls: update mem syscalls to work with non contiguous memory

With direct mapping enabled, accounts can now span multiple memory
regions.

* fix lint, rebase mem_ops

* Implement CoW for writable accounts

* Fix CI

* Move CoW to the MemoryMapping level

* Update after rbpf API change

* Fix merge screwup

* Add create_vm macro. Fix benches.

* cpi: simplify update_caller_account

Simplify the logic to update a caller's memory region when a callee
causes an account data pointer to change (eg during CoW)

* benches/bpf_loader: move serialization out of  create_vm bench

* benches/bpf_loader: don't copy accounts when direct mapping is on

* Fix review nits

* bpf_loader: mem_ops: handle u64 overflow in MemoryChunkIterator::new

When starting at u64::MAX, the chunk iterator would always return the
empty sequence (None on the first next()) call, instead of returning a
memory access violation.

Use checked instead of saturating arithmetic to detect the condition and
error out.

This commit also adds more tests around boundary conditions.

* Fix loader-v3 tests: data_mut => data_as_mut_slice

* Fix CI

* bpf_loader: fix tuner bench: account must be writable

With direct mapping on, invalid writes are caught early meaning the
tuner would fail on the first store and not consume the whole budget
like the benchmark expects.

---------

Co-authored-by: Alexander Meißner <AlexanderMeissner@gmx.net>
2023-04-29 06:54:39 +10:00
Brooks 53dfb9fa41
Gives lifetimes more descriptive names in append_vec.rs (#31403) 2023-04-28 15:32:29 -04:00
Brooks f86dc35471
Fixes lifetimes on AppendVec::get_type() (#31401) 2023-04-28 15:27:22 -04:00