Skip to content

Commit

Permalink
Fix problem with paginator
Browse files Browse the repository at this point in the history
  • Loading branch information
Uxio0 committed Apr 22, 2019
1 parent aac41c7 commit 43d845a
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
21 changes: 9 additions & 12 deletions safe_relay_service/relay/services/internal_tx_service.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from logging import getLogger
from typing import Dict, List, Optional, Tuple

from django.core.paginator import Paginator
from django.db.models import Min

from hexbytes import HexBytes
Expand All @@ -10,6 +9,7 @@

from ..models import (EthereumTx, EthereumTxCallType, InternalTx, SafeContract,
SafeCreation, SafeCreation2, SafeTxStatus)
from ..utils import chunks

logger = getLogger(__name__)

Expand Down Expand Up @@ -103,17 +103,14 @@ def process_all_internal_txs(self):
number_safes = 0

# For safes almost updated (< 100 blocks) we process them together (100 safes at the same time)
paginator = Paginator(SafeTxStatus.objects.deployed().filter(
tx_block_number__lt=current_block_number - 10,
tx_block_number__gt=current_block_number - 100
).order_by(
'safe_id'
), 100, allow_empty_first_page=False)
for page_number in paginator.page_range:
page = paginator.page(page_number)
safe_addresses = [safe_tx_status.safe_id for safe_tx_status in page]
number_safes += len(safe_addresses)
self.process_multiple_internal_txs(safe_addresses)
safe_addresses = [safe_tx_status.safe_id for safe_tx_status in SafeTxStatus.objects.deployed().filter(
tx_block_number__lt=current_block_number - 10,
tx_block_number__gt=current_block_number - 100
)]
safe_addresses_chunks = chunks(safe_addresses, 100)
for safe_addresses_chunk in safe_addresses_chunks:
number_safes += len(safe_addresses_chunk)
self.process_multiple_internal_txs(safe_addresses_chunk)

# For safes not updated (> 100 blocks) we process them one by one (node hangs)
for safe_contract in SafeTxStatus.objects.deployed().filter(tx_block_number__lt=current_block_number - 10):
Expand Down
11 changes: 11 additions & 0 deletions safe_relay_service/relay/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from typing import List


def chunks(l: List[any], n: int):
"""
:param l: List
:param n: Number of elements per chunk
:return: Yield successive n-sized chunks from l
"""
for i in range(0, len(l), n):
yield l[i:i + n]

0 comments on commit 43d845a

Please sign in to comment.