Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use a separate database for each data domain #1629

Merged
merged 98 commits into from
Feb 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
df6e1ae
Move storage traits implementation to the `fuel-core-storage` crate
xgreenx Dec 24, 2023
de82e25
Added comments to all newly added stuff. Made self-review and applied…
xgreenx Dec 26, 2023
7ccc722
Merge branch 'master' into feature/move-storage-implementation-to-own…
xgreenx Dec 26, 2023
33661bc
Updated CHANGELOG.md
xgreenx Dec 26, 2023
1b8295a
Merge remote-tracking branch 'origin/feature/move-storage-implementat…
xgreenx Dec 26, 2023
82df7e2
Moved insertion of the blocks into the `BlockImporter` instead of the…
xgreenx Dec 29, 2023
d4a4d0a
Update CHANGELOG.md
xgreenx Dec 29, 2023
5033d8c
Cleanup
xgreenx Dec 29, 2023
ab88c67
Moved insertion of the whole block with transactions
xgreenx Dec 29, 2023
a49d96d
Use `store_block` as a name instead of `block`
xgreenx Dec 30, 2023
c6fb1fe
Merge branch 'master' into feature/move-blocks-to-importer
xgreenx Jan 2, 2024
f5c38f2
Move `ChainId` to `fuel_core_importer::Config`
xgreenx Jan 5, 2024
4c3f18c
Apply suggestions from the PR
xgreenx Jan 5, 2024
0eaab98
Merge branch 'master' into feature/move-storage-implementation-to-own…
xgreenx Jan 5, 2024
c1ee5f8
Apply suggestions from the PR
xgreenx Jan 5, 2024
c594d45
Extract off chain logic from the executor
xgreenx Jan 4, 2024
bd60793
Added comments and linked todos
xgreenx Jan 5, 2024
8221443
Updated CHANGELOG.md
xgreenx Jan 5, 2024
810edee
Merge branch 'master' into feature/move-offchain-logic-from-executor
xgreenx Jan 5, 2024
4a580ed
Merge branch 'master' into feature/move-offchain-logic-from-executor
xgreenx Jan 6, 2024
0cea5bb
Merge branch 'master' into feature/move-storage-implementation-to-own…
xgreenx Jan 6, 2024
c9977a4
Merge branch 'master' into feature/move-storage-implementation-to-own…
xgreenx Jan 6, 2024
b0ed3e9
Fixed compilation
xgreenx Jan 6, 2024
541527e
Merge branch 'master' into feature/move-storage-implementation-to-own…
xgreenx Jan 6, 2024
c5a7b71
Merge branch 'master' into feature/move-offchain-logic-from-executor
xgreenx Jan 6, 2024
d2b5504
Use `BlockHeight` as a primary key for the `FuelsBlock` table
xgreenx Jan 6, 2024
1013f0e
Merge branch 'feature/move-storage-implementation-to-own-crate' into …
xgreenx Jan 6, 2024
359192e
Updated CHANGELOG.md
xgreenx Jan 6, 2024
34b5e6a
Merge remote-tracking branch 'origin/feature/block-height-as-primary-…
xgreenx Jan 6, 2024
e27996a
Fix compilation
xgreenx Jan 6, 2024
f3515d8
Merge branch 'master' into feature/move-offchain-logic-from-executor
xgreenx Jan 7, 2024
1be054c
Use `AtomicView` in the `TxPool`
xgreenx Jan 8, 2024
ea69532
Update CHANGELOG.md
xgreenx Jan 8, 2024
452418c
Merge remote-tracking branch 'origin/feature/move-storage-implementat…
xgreenx Jan 19, 2024
1fbc318
Merge branch 'master' into feature/move-storage-implementation-to-own…
xgreenx Jan 19, 2024
c5956a8
Use "blueprint" instead of "structure"
xgreenx Jan 19, 2024
cc9966c
Fix documents
xgreenx Jan 19, 2024
0bbeea1
Merge branch 'feature/move-storage-implementation-to-own-crate' into …
xgreenx Jan 19, 2024
2d3e471
Merge latest modifications from move storage PR
xgreenx Jan 19, 2024
f0df4f0
Merge branch 'master' into feature/block-height-as-primary-key
xgreenx Jan 19, 2024
688a24b
Merge branch 'master' into feature/move-offchain-logic-from-executor
xgreenx Jan 19, 2024
c7bce20
Fix conflicts
xgreenx Jan 19, 2024
0850b03
Merge branch 'feature/move-offchain-logic-from-executor' into feature…
xgreenx Jan 19, 2024
f607007
Merge branch 'feature/move-offchain-logic-from-executor' into feature…
xgreenx Jan 19, 2024
55424cb
Merge remote-tracking branch 'origin/feature/use-view-in-txpool' into…
xgreenx Jan 19, 2024
2b95d4e
Merge branch 'master' into feature/use-view-in-txpool
xgreenx Jan 19, 2024
993aa84
Merge branch 'master' into feature/block-height-as-primary-key
xgreenx Jan 19, 2024
36445b7
Merged master
xgreenx Jan 19, 2024
0e2abad
Merge branch 'master' into feature/block-height-as-primary-key
xgreenx Jan 19, 2024
6a503b9
Apply comments
xgreenx Jan 19, 2024
02a45a8
Merge branch 'master' into feature/use-view-in-txpool
xgreenx Jan 19, 2024
50f2ff0
Merge branch 'feature/block-height-as-primary-key' into feature/use-v…
xgreenx Jan 19, 2024
067792b
Apply comments
xgreenx Jan 19, 2024
6cead2b
Merge branch 'master' into feature/use-view-in-txpool
xgreenx Jan 19, 2024
8369cd5
Move arc wrapper into its own module
xgreenx Jan 19, 2024
4b79c3f
Merge branch 'master' into feature/atomic-view-everywhere
xgreenx Jan 21, 2024
c540f4d
Use `AtomicView` in all services
xgreenx Jan 21, 2024
7e7ff6d
Update CHANGELOG.md
xgreenx Jan 21, 2024
fa5d52d
Fix compilation
xgreenx Jan 21, 2024
9c35ab7
Merge branch 'master' into feature/atomic-view-everywhere
xgreenx Jan 22, 2024
d75a5c1
Merge branch 'master' into feature/atomic-view-everywhere
xgreenx Jan 24, 2024
c8b4da6
Making relayer independent from the executor
xgreenx Jan 24, 2024
31109c7
Update CHANGELOG.md
xgreenx Jan 24, 2024
11cf96f
Merge branch 'master' into feature/atomic-view-everywhere
xgreenx Jan 24, 2024
5f65363
Merge branch 'feature/atomic-view-everywhere' into feature/independen…
xgreenx Jan 24, 2024
2af3b6f
Use a separate database for each data domain
xgreenx Jan 25, 2024
76a689d
Merge branch 'master' into feature/atomic-view-everywhere
xgreenx Jan 26, 2024
2d63c32
Merged with `master`
xgreenx Jan 26, 2024
08c18e1
Update CHANGELOG.md
xgreenx Jan 26, 2024
43b559b
Merge branch 'feature/atomic-view-everywhere' into feature/independen…
xgreenx Jan 26, 2024
09e5eb3
Merge branch 'feature/independent-relayer-and-fti' into feature/separ…
xgreenx Jan 26, 2024
1bffca6
Fix compilation
xgreenx Jan 26, 2024
5300800
Merge branch 'master' into feature/atomic-view-everywhere
xgreenx Jan 26, 2024
555d4e1
Merge with `master`
xgreenx Jan 26, 2024
75d164a
Merge branch 'feature/atomic-view-everywhere' into feature/independen…
xgreenx Jan 26, 2024
4a4f135
Merge branch 'feature/independent-relayer-and-fti' into feature/separ…
xgreenx Jan 26, 2024
b50753c
Updated CHANGELOG.md
xgreenx Jan 26, 2024
adbeed6
Fix compilation
xgreenx Jan 26, 2024
ff51296
Apply comments from the PR
xgreenx Jan 26, 2024
843ddf1
Merge branch 'feature/atomic-view-everywhere' into feature/independen…
xgreenx Jan 27, 2024
ec52b27
Merge branch 'master' into feature/independent-relayer-and-fti
xgreenx Jan 27, 2024
d9762f9
Merge branch 'feature/independent-relayer-and-fti' into feature/separ…
xgreenx Jan 27, 2024
b0b0df1
Notify services about importing of the genesis block
xgreenx Jan 27, 2024
40c2189
Updated CHANGELOG.md
xgreenx Jan 27, 2024
5f5af6c
Merge branch 'feature/async-genesis-block-import' into feature/separa…
xgreenx Jan 27, 2024
e28f5c1
Merge branch 'master' into feature/independent-relayer-and-fti
xgreenx Jan 29, 2024
d1f0ad4
Merge branch 'feature/independent-relayer-and-fti' into feature/separ…
xgreenx Jan 29, 2024
91ca347
Merge `master` branch
xgreenx Jan 29, 2024
2906562
Merge branch 'master' into feature/independent-relayer-and-fti
xgreenx Jan 29, 2024
e504b1b
Merge branch 'master' into feature/independent-relayer-and-fti
xgreenx Jan 30, 2024
ed311d0
Fix compilation issue after merge with `master`
xgreenx Jan 30, 2024
6519ab4
Merge branch 'feature/independent-relayer-and-fti' into feature/separ…
xgreenx Jan 30, 2024
f3761e6
Applied comments
xgreenx Jan 30, 2024
a077350
Merge branch 'feature/independent-relayer-and-fti' into feature/separ…
xgreenx Jan 30, 2024
c5a4348
Merge branch 'master' into feature/separate-databases
xgreenx Jan 30, 2024
882c6e1
Merge branch 'master' into feature/separate-databases
xgreenx Feb 1, 2024
fb0b2b1
Use diffrent timeout for node B to avoid closign connection from B side.
xgreenx Feb 1, 2024
1e8b83c
Merge branch 'master' into feature/separate-databases
xgreenx Feb 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ Description of the upcoming release here.

#### Breaking
- [#1639](https://github.com/FuelLabs/fuel-core/pull/1639): Make Merkle metadata, i.e. `SparseMerkleMetadata` and `DenseMerkleMetadata` type version-able enums
- [#16232](https://github.com/FuelLabs/fuel-core/pull/1632): Make `Message` type a version-able enum
- [#1632](https://github.com/FuelLabs/fuel-core/pull/1632): Make `Message` type a version-able enum
- [#1629](https://github.com/FuelLabs/fuel-core/pull/1629): Use a separate database for each data domain. Each database has its own folder where data is stored.
- [#1628](https://github.com/FuelLabs/fuel-core/pull/1628): Make `CompressedCoin` type a version-able enum
- [#1616](https://github.com/FuelLabs/fuel-core/pull/1616): Make `BlockHeader` type a version-able enum
- [#1614](https://github.com/FuelLabs/fuel-core/pull/1614): Use the default consensus key regardless of trigger mode. The change is breaking because it removes the `--dev-keys` argument. If the `debug` flag is set, the default consensus key will be used, regardless of the trigger mode.
Expand Down
4 changes: 4 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 7 additions & 2 deletions benches/benches/block_target_gas.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use criterion::{
use ed25519_dalek::Signer;
use ethnum::U256;
use fuel_core::{
combined_database::CombinedDatabase,
service::{
config::Trigger,
Config,
Expand Down Expand Up @@ -325,8 +326,11 @@ fn service_with_many_contracts(
.unwrap();
}

let service = fuel_core::service::FuelService::new(database, config.clone())
.expect("Unable to start a FuelService");
let service = FuelService::new(
CombinedDatabase::new(database, Default::default(), Default::default()),
config.clone(),
)
.expect("Unable to start a FuelService");
service.start().expect("Unable to start the service");
(service, rt)
}
Expand Down Expand Up @@ -456,6 +460,7 @@ fn replace_contract_in_service(
service
.shared
.database
.on_chain_mut()
.storage_as_mut::<ContractsRawCode>()
.insert(contract_id, &contract_bytecode)
.unwrap();
Expand Down
1 change: 1 addition & 0 deletions benches/benches/transaction_throughput.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ where
let block = srv
.shared
.database
.on_chain()
.get_sealed_block_by_height(&1.into())
.unwrap()
.unwrap();
Expand Down
1 change: 1 addition & 0 deletions crates/fuel-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ rocksdb = { version = "0.21", default-features = false, features = [
"lz4",
"multi-threaded-cf",
], optional = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true, features = ["raw_value"] }
strum = { workspace = true }
strum_macros = { workspace = true }
Expand Down
13 changes: 7 additions & 6 deletions crates/fuel-core/src/coins_query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ mod tests {
CoinsQueryError,
SpendQuery,
},
database::Database,
combined_database::CombinedDatabase,
fuel_core_graphql_api::api_service::ReadDatabase as ServiceDatabase,
query::asset_query::{
AssetQuery,
Expand Down Expand Up @@ -922,7 +922,7 @@ mod tests {
}

pub struct TestDatabase {
database: Database,
database: CombinedDatabase,
last_coin_index: u64,
last_message_index: u64,
}
Expand All @@ -937,8 +937,9 @@ mod tests {
}

fn service_database(&self) -> ServiceDatabase {
let database = self.database.clone();
ServiceDatabase::new(database.clone(), database)
let on_chain = self.database.on_chain().clone();
let off_chain = self.database.off_chain().clone();
ServiceDatabase::new(on_chain, off_chain)
}
}

Expand All @@ -958,7 +959,7 @@ mod tests {
coin.set_amount(amount);
coin.set_asset_id(asset_id);

let db = &mut self.database;
let db = self.database.on_chain_mut();
StorageMutate::<Coins>::insert(db, &id, &coin).unwrap();

coin.uncompress(id)
Expand All @@ -978,7 +979,7 @@ mod tests {
}
.into();

let db = &mut self.database;
let db = self.database.on_chain_mut();
StorageMutate::<Messages>::insert(db, message.id(), &message).unwrap();

message
Expand Down
92 changes: 92 additions & 0 deletions crates/fuel-core/src/combined_database.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
use crate::database::{
database_description::{
off_chain::OffChain,
on_chain::OnChain,
relayer::Relayer,
},
Database,
Result as DatabaseResult,
};
use fuel_core_storage::Result as StorageResult;
use fuel_core_types::{
blockchain::primitives::DaBlockHeight,
fuel_types::BlockHeight,
};

/// A database that combines the on-chain, off-chain and relayer databases into one entity.
#[derive(Default, Clone)]
pub struct CombinedDatabase {
MitchTurner marked this conversation as resolved.
Show resolved Hide resolved
on_chain: Database<OnChain>,
off_chain: Database<OffChain>,
relayer: Database<Relayer>,
}

impl CombinedDatabase {
pub fn new(
on_chain: Database<OnChain>,
off_chain: Database<OffChain>,
relayer: Database<Relayer>,
) -> Self {
Self {
on_chain,
off_chain,
relayer,
}
}

#[cfg(feature = "rocksdb")]
pub fn open(path: &std::path::Path, capacity: usize) -> DatabaseResult<Self> {
// TODO: Use different cache sizes for different databases
let on_chain = Database::open(path, capacity)?;
let off_chain = Database::open(path, capacity)?;
let relayer = Database::open(path, capacity)?;
Ok(Self {
on_chain,
off_chain,
relayer,
})
}

pub fn in_memory() -> Self {
Self::new(
Database::in_memory(),
Database::in_memory(),
Database::in_memory(),
)
}

pub fn init(
&mut self,
block_height: &BlockHeight,
da_block_height: &DaBlockHeight,
) -> StorageResult<()> {
self.on_chain.init(block_height)?;
self.off_chain.init(block_height)?;
self.relayer.init(da_block_height)?;
Ok(())
}

pub fn on_chain(&self) -> &Database<OnChain> {
&self.on_chain
}

#[cfg(any(feature = "test-helpers", test))]
pub fn on_chain_mut(&mut self) -> &mut Database<OnChain> {
&mut self.on_chain
}

pub fn off_chain(&self) -> &Database<OffChain> {
&self.off_chain
}

pub fn relayer(&self) -> &Database<Relayer> {
&self.relayer
}

pub fn flush(self) -> DatabaseResult<()> {
self.on_chain.flush()?;
self.off_chain.flush()?;
self.relayer.flush()?;
Ok(())
}
}
Loading
Loading