Skip to content

Commit babcc9a

Browse files
authored
Merge pull request #5414 from stacks-network/feat/indexing-naka-block-headers
feat: add index for stacks block id in nakamoto_block_headers
2 parents 7e29f76 + 722d01b commit babcc9a

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to the versioning scheme outlined in the [README.md](RE
77

88
## [Unreleased]
99

10+
### Changed
11+
- Add index for StacksBlockId to nakamoto block headers table (improves node performance)
12+
1013
## [3.0.0.0.0]
1114

1215
### Added

stackslib/src/chainstate/nakamoto/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,14 @@ lazy_static! {
289289
);
290290
"#,
291291
];
292+
293+
pub static ref NAKAMOTO_CHAINSTATE_SCHEMA_5: [&'static str; 2] = [
294+
r#"
295+
UPDATE db_config SET version = "8";
296+
"#,
297+
// Add an index for index block hash in nakamoto block headers
298+
"CREATE INDEX IF NOT EXISTS index_block_hash ON nakamoto_block_headers(index_block_hash);",
299+
];
292300
}
293301

294302
#[cfg(test)]

stackslib/src/chainstate/stacks/db/mod.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ use crate::chainstate::burn::{ConsensusHash, ConsensusHashExtensions};
5555
use crate::chainstate::nakamoto::{
5656
HeaderTypeNames, NakamotoBlock, NakamotoBlockHeader, NakamotoChainState,
5757
NakamotoStagingBlocksConn, NAKAMOTO_CHAINSTATE_SCHEMA_1, NAKAMOTO_CHAINSTATE_SCHEMA_2,
58-
NAKAMOTO_CHAINSTATE_SCHEMA_3, NAKAMOTO_CHAINSTATE_SCHEMA_4,
58+
NAKAMOTO_CHAINSTATE_SCHEMA_3, NAKAMOTO_CHAINSTATE_SCHEMA_4, NAKAMOTO_CHAINSTATE_SCHEMA_5,
5959
};
6060
use crate::chainstate::stacks::address::StacksAddressExtensions;
6161
use crate::chainstate::stacks::boot::*;
@@ -299,14 +299,14 @@ impl DBConfig {
299299
});
300300
match epoch_id {
301301
StacksEpochId::Epoch10 => true,
302-
StacksEpochId::Epoch20 => version_u32 >= 1 && version_u32 <= 7,
303-
StacksEpochId::Epoch2_05 => version_u32 >= 2 && version_u32 <= 7,
304-
StacksEpochId::Epoch21 => version_u32 >= 3 && version_u32 <= 7,
305-
StacksEpochId::Epoch22 => version_u32 >= 3 && version_u32 <= 7,
306-
StacksEpochId::Epoch23 => version_u32 >= 3 && version_u32 <= 7,
307-
StacksEpochId::Epoch24 => version_u32 >= 3 && version_u32 <= 7,
308-
StacksEpochId::Epoch25 => version_u32 >= 3 && version_u32 <= 7,
309-
StacksEpochId::Epoch30 => version_u32 >= 3 && version_u32 <= 7,
302+
StacksEpochId::Epoch20 => version_u32 >= 1 && version_u32 <= 8,
303+
StacksEpochId::Epoch2_05 => version_u32 >= 2 && version_u32 <= 8,
304+
StacksEpochId::Epoch21 => version_u32 >= 3 && version_u32 <= 8,
305+
StacksEpochId::Epoch22 => version_u32 >= 3 && version_u32 <= 8,
306+
StacksEpochId::Epoch23 => version_u32 >= 3 && version_u32 <= 8,
307+
StacksEpochId::Epoch24 => version_u32 >= 3 && version_u32 <= 8,
308+
StacksEpochId::Epoch25 => version_u32 >= 3 && version_u32 <= 8,
309+
StacksEpochId::Epoch30 => version_u32 >= 3 && version_u32 <= 8,
310310
}
311311
}
312312
}
@@ -680,7 +680,7 @@ impl<'a> DerefMut for ChainstateTx<'a> {
680680
}
681681
}
682682

683-
pub const CHAINSTATE_VERSION: &'static str = "7";
683+
pub const CHAINSTATE_VERSION: &'static str = "8";
684684

685685
const CHAINSTATE_INITIAL_SCHEMA: &'static [&'static str] = &[
686686
"PRAGMA foreign_keys = ON;",
@@ -1087,28 +1087,24 @@ impl StacksChainState {
10871087
while db_config.version != CHAINSTATE_VERSION {
10881088
match db_config.version.as_str() {
10891089
"1" => {
1090-
// migrate to 2
10911090
info!("Migrating chainstate schema from version 1 to 2");
10921091
for cmd in CHAINSTATE_SCHEMA_2.iter() {
10931092
tx.execute_batch(cmd)?;
10941093
}
10951094
}
10961095
"2" => {
1097-
// migrate to 3
10981096
info!("Migrating chainstate schema from version 2 to 3");
10991097
for cmd in CHAINSTATE_SCHEMA_3.iter() {
11001098
tx.execute_batch(cmd)?;
11011099
}
11021100
}
11031101
"3" => {
1104-
// migrate to nakamoto 1
11051102
info!("Migrating chainstate schema from version 3 to 4: nakamoto support");
11061103
for cmd in NAKAMOTO_CHAINSTATE_SCHEMA_1.iter() {
11071104
tx.execute_batch(cmd)?;
11081105
}
11091106
}
11101107
"4" => {
1111-
// migrate to nakamoto 2
11121108
info!(
11131109
"Migrating chainstate schema from version 4 to 5: fix nakamoto tenure typo"
11141110
);
@@ -1117,21 +1113,27 @@ impl StacksChainState {
11171113
}
11181114
}
11191115
"5" => {
1120-
// migrate to nakamoto 3
11211116
info!("Migrating chainstate schema from version 5 to 6: adds height_in_tenure field");
11221117
for cmd in NAKAMOTO_CHAINSTATE_SCHEMA_3.iter() {
11231118
tx.execute_batch(cmd)?;
11241119
}
11251120
}
11261121
"6" => {
1127-
// migrate to nakamoto 3
11281122
info!(
11291123
"Migrating chainstate schema from version 6 to 7: adds signer_stats table"
11301124
);
11311125
for cmd in NAKAMOTO_CHAINSTATE_SCHEMA_4.iter() {
11321126
tx.execute_batch(cmd)?;
11331127
}
11341128
}
1129+
"7" => {
1130+
info!(
1131+
"Migrating chainstate schema from version 7 to 8: add index for nakamoto block headers"
1132+
);
1133+
for cmd in NAKAMOTO_CHAINSTATE_SCHEMA_5.iter() {
1134+
tx.execute_batch(cmd)?;
1135+
}
1136+
}
11351137
_ => {
11361138
error!(
11371139
"Invalid chain state database: expected version = {}, got {}",

0 commit comments

Comments
 (0)