Skip to content
This repository was archived by the owner on Apr 9, 2024. It is now read-only.

Commit 6c72e1d

Browse files
author
Eason Gao
authored
feat(sql): add create index sql (#173)
* add create indexer sql * refactor sync * cargo fmt
1 parent d113345 commit 6c72e1d

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

core/synchronization/src/lib.rs

+12-14
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ pub struct Synchronization<T> {
6060
pool: XSQLPool,
6161
rocksdb: PrefixKVStore,
6262
adapter: Arc<T>,
63-
task_count: Arc<()>,
6463

6564
sync_task_size: usize,
6665
max_task_number: usize,
@@ -75,13 +74,11 @@ impl<T: SyncAdapter> Synchronization<T> {
7574
max_task_number: usize,
7675
) -> Self {
7776
let rocksdb = PrefixKVStore::new(rocksdb_path);
78-
let task_count = Arc::new(());
7977

8078
Synchronization {
8179
pool,
8280
rocksdb,
8381
adapter,
84-
task_count,
8582
sync_task_size,
8683
max_task_number,
8784
}
@@ -106,7 +103,7 @@ impl<T: SyncAdapter> Synchronization<T> {
106103
self.pool.fetch_count_by_wrapper::<BlockTable>(&w).await?
107104
};
108105

109-
debug_assert!(current_count == (chain_tip + 1));
106+
log::info!("[sync] current block count {}", current_count);
110107

111108
let mut num = 1;
112109
while let Some(set) = self.check_synchronization().await? {
@@ -147,24 +144,23 @@ impl<T: SyncAdapter> Synchronization<T> {
147144

148145
for set in sync_list.chunks(self.sync_task_size) {
149146
let sync_set = set.to_vec();
150-
let (rdb, kvdb, adapter, arc_clone) = (
147+
let (rdb, kvdb, adapter) = (
151148
self.pool.clone(),
152149
self.rocksdb.clone(),
153150
Arc::clone(&self.adapter),
154-
Arc::clone(&self.task_count),
155151
);
156152

157153
loop {
158154
let task_num = current_task_count();
159155
if task_num < self.max_task_number {
160156
add_one_task();
161157
tokio::spawn(async move {
162-
sync_process(sync_set, rdb, kvdb, adapter, arc_clone).await;
158+
sync_process(sync_set, rdb, kvdb, adapter).await;
163159
});
164160

165161
break;
166162
} else {
167-
sleep(Duration::from_secs(2)).await;
163+
sleep(Duration::from_secs(5)).await;
168164
}
169165
}
170166
}
@@ -260,12 +256,15 @@ impl<T: SyncAdapter> Synchronization<T> {
260256
}
261257

262258
async fn wait_insertion_complete(&self) {
263-
while Arc::strong_count(&self.task_count) != 1 {
264-
log::info!(
265-
"current thread number {}",
266-
Arc::strong_count(&self.task_count)
267-
);
259+
loop {
268260
sleep(Duration::from_secs(5)).await;
261+
262+
let task_num = current_task_count();
263+
if task_num == 0 {
264+
return;
265+
}
266+
267+
log::info!("current thread number {}", current_task_count());
269268
}
270269
}
271270
}
@@ -275,7 +274,6 @@ async fn sync_process<T: SyncAdapter>(
275274
rdb: XSQLPool,
276275
kvdb: PrefixKVStore,
277276
adapter: Arc<T>,
278-
_: Arc<()>,
279277
) {
280278
for subtask in task.chunks(PULL_BLOCK_BATCH_SIZE) {
281279
let (rdb_clone, kvdb_clone, adapter_clone) =

devtools/create_table/create_table.sql

+15
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,18 @@ CREATE TABLE mercury_registered_address(
117117
CREATE TABLE mercury_sync_status(
118118
block_number int NOT NULL PRIMARY KEY
119119
);
120+
121+
122+
CREATE INDEX "index_block_table_block_number" ON "mercury_block" ("block_number");
123+
124+
CREATE INDEX "index_live_cell_table_block_hash" ON "mercury_live_cell" ("block_hash");
125+
CREATE INDEX "index_live_cell_table_block_number" ON "mercury_live_cell" ("block_number");
126+
CREATE INDEX "index_live_cell_table_tx_hash_and_output_index" ON "mercury_live_cell" ("tx_hash", "output_index");
127+
128+
CREATE INDEX "index_script_table_script_hash" ON "mercury_script" ("script_hash");
129+
CREATE INDEX "index_script_table_code_hash" ON "mercury_script" ("script_code_hash");
130+
CREATE INDEX "index_script_table_args" ON "mercury_script" ("script_args");
131+
132+
CREATE INDEX "index_cell_table_tx_hash_and_output_index" ON "mercury_cell" ("tx_hash", "output_index");
133+
134+
CREATE INDEX "index_transaction_table_tx_hash" ON "mercury_transaction" USING btree ("tx_hash" "pg_catalog"."bytea_ops" ASC NULLS LAST);

0 commit comments

Comments
 (0)