forked from cerc-io/ipld-eth-server
Optimise missing block numbers query (#23)
This commit is contained in:
parent
6ff67f26d1
commit
55b6ad9381
@ -12,6 +12,9 @@ CREATE TABLE public.headers (
|
|||||||
ON DELETE CASCADE
|
ON DELETE CASCADE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- Index is removed when table is
|
||||||
|
CREATE INDEX headers_block_number ON public.headers (block_number);
|
||||||
|
|
||||||
|
|
||||||
-- +goose Down
|
-- +goose Down
|
||||||
DROP TABLE public.headers;
|
DROP TABLE public.headers;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
--
|
--
|
||||||
|
|
||||||
-- Dumped from database version 10.5
|
-- Dumped from database version 10.5
|
||||||
-- Dumped by pg_dump version 10.4
|
-- Dumped by pg_dump version 10.5
|
||||||
|
|
||||||
SET statement_timeout = 0;
|
SET statement_timeout = 0;
|
||||||
SET lock_timeout = 0;
|
SET lock_timeout = 0;
|
||||||
@ -710,6 +710,13 @@ CREATE INDEX block_id_index ON public.transactions USING btree (block_id);
|
|||||||
CREATE INDEX block_number_index ON public.blocks USING btree (number);
|
CREATE INDEX block_number_index ON public.blocks USING btree (number);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: headers_block_number; Type: INDEX; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE INDEX headers_block_number ON public.headers USING btree (block_number);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: node_id_index; Type: INDEX; Schema: public; Owner: -
|
-- Name: node_id_index; Type: INDEX; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
|
@ -19,9 +19,7 @@ package repositories
|
|||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
"github.com/vulcanize/vulcanizedb/pkg/core"
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
|
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
|
||||||
)
|
)
|
||||||
@ -61,12 +59,13 @@ func (repository HeaderRepository) GetHeader(blockNumber int64) (core.Header, er
|
|||||||
|
|
||||||
func (repository HeaderRepository) MissingBlockNumbers(startingBlockNumber, endingBlockNumber int64, nodeID string) ([]int64, error) {
|
func (repository HeaderRepository) MissingBlockNumbers(startingBlockNumber, endingBlockNumber int64, nodeID string) ([]int64, error) {
|
||||||
numbers := make([]int64, 0)
|
numbers := make([]int64, 0)
|
||||||
err := repository.database.Select(&numbers, `SELECT all_block_numbers
|
err := repository.database.Select(&numbers,
|
||||||
FROM (
|
`SELECT series.block_number
|
||||||
SELECT generate_series($1::INT, $2::INT) AS all_block_numbers) series
|
FROM (SELECT generate_series($1::INT, $2::INT) AS block_number) AS series
|
||||||
WHERE all_block_numbers NOT IN (
|
LEFT OUTER JOIN (SELECT block_number FROM headers
|
||||||
SELECT block_number FROM headers WHERE eth_node_fingerprint = $3
|
WHERE eth_node_fingerprint = $3) AS synced
|
||||||
) `,
|
USING (block_number)
|
||||||
|
WHERE synced.block_number IS NULL`,
|
||||||
startingBlockNumber, endingBlockNumber, nodeID)
|
startingBlockNumber, endingBlockNumber, nodeID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("MissingBlockNumbers failed to get blocks between %v - %v for node %v",
|
log.Errorf("MissingBlockNumbers failed to get blocks between %v - %v for node %v",
|
||||||
|
Loading…
Reference in New Issue
Block a user