mirror of
https://github.com/yzernik/squeaknode.git
synced 2026-08-18 13:09:08 +02:00
Make save squeak idempotent not raise error (#365)
* Got idempotent save squeak working * Remove old commented save squeak methods
This commit is contained in:
parent
22803b42d5
commit
f29831fbe1
5 changed files with 22 additions and 29 deletions
|
|
@ -167,9 +167,12 @@ class SqueakDb:
|
|||
else None,
|
||||
)
|
||||
with self.get_connection() as connection:
|
||||
res = connection.execute(ins)
|
||||
squeak_hash = res.inserted_primary_key[0]
|
||||
return bytes.fromhex(squeak_hash)
|
||||
try:
|
||||
res = connection.execute(ins)
|
||||
inserted_squeak_hash = res.inserted_primary_key[0]
|
||||
except sqlalchemy.exc.IntegrityError:
|
||||
pass
|
||||
return get_hash(squeak)
|
||||
|
||||
def get_squeak_entry(self, squeak_hash):
|
||||
""" Get a squeak. """
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ class PeerSyncTask:
|
|||
return self.peer_client.lookup_squeaks(addresses, min_block, max_block)
|
||||
|
||||
def _save_squeak(self, squeak):
|
||||
self.squeak_store.save_downloaded_squeak(squeak)
|
||||
self.squeak_store.save_squeak(squeak, verify=True, skip_whitelist_check=True)
|
||||
|
||||
def _get_saved_squeak(self, squeak_hash):
|
||||
return self.squeak_store.get_squeak(squeak_hash)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ class SqueakBlockVerifier:
|
|||
self.unverified_queue = queue.Queue()
|
||||
|
||||
def verify_squeak_block(self, squeak_hash):
|
||||
logger.info("Verifying squeak hash: {}".format(squeak_hash))
|
||||
logger.info("Verifying squeak hash: {}".format(squeak_hash.hex()))
|
||||
squeak = self._get_squeak(squeak_hash)
|
||||
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -93,10 +93,10 @@ class SqueakNode:
|
|||
self.squeak_offer_expiry_worker.start_running()
|
||||
|
||||
def save_uploaded_squeak(self, squeak):
|
||||
return self.squeak_store.save_uploaded_squeak(squeak)
|
||||
return self.squeak_store.save_squeak(squeak)
|
||||
|
||||
def save_created_squeak(self, squeak):
|
||||
return self.squeak_store.save_created_squeak(squeak)
|
||||
return self.squeak_store.save_squeak(squeak, verify=True, skip_whitelist_check=True)
|
||||
|
||||
def get_public_squeak(self, squeak_hash):
|
||||
return self.squeak_store.get_public_squeak(squeak_hash)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
import logging
|
||||
|
||||
from squeaknode.server.util import get_hash, get_replyto
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
|
@ -12,31 +14,19 @@ class SqueakStore:
|
|||
self.squeak_rate_limiter = squeak_rate_limiter
|
||||
self.squeak_whitelist = squeak_whitelist
|
||||
|
||||
def save_uploaded_squeak(self, squeak):
|
||||
if not self.squeak_whitelist.should_allow_squeak(squeak):
|
||||
raise Exception("Squeak upload not allowed by whitelist.")
|
||||
def save_squeak(self, squeak, verify=False, skip_whitelist_check=False):
|
||||
if not skip_whitelist_check:
|
||||
if not self.squeak_whitelist.should_allow_squeak(squeak):
|
||||
raise Exception("Squeak upload not allowed by whitelist.")
|
||||
|
||||
if not self.squeak_rate_limiter.should_rate_limit_allow(squeak):
|
||||
raise Exception("Excedeed allowed number of squeaks per block.")
|
||||
if not self.squeak_rate_limiter.should_rate_limit_allow(squeak):
|
||||
raise Exception("Excedeed allowed number of squeaks per block.")
|
||||
|
||||
inserted_squeak_hash = self.postgres_db.insert_squeak(squeak)
|
||||
self.squeak_block_verifier.add_squeak_to_queue(inserted_squeak_hash)
|
||||
return inserted_squeak_hash
|
||||
|
||||
def save_downloaded_squeak(self, squeak):
|
||||
if not self.squeak_rate_limiter.should_rate_limit_allow(squeak):
|
||||
raise Exception("Excedeed allowed number of squeaks per block.")
|
||||
|
||||
inserted_squeak_hash = self.postgres_db.insert_squeak(squeak)
|
||||
# self.squeak_block_verifier.add_squeak_to_queue(inserted_squeak_hash)
|
||||
# Slow operation because of blockchain lookup
|
||||
self.squeak_block_verifier.verify_squeak_block(inserted_squeak_hash)
|
||||
return inserted_squeak_hash
|
||||
|
||||
def save_created_squeak(self, squeak):
|
||||
inserted_squeak_hash = self.postgres_db.insert_squeak(squeak)
|
||||
# Slow operation because of blockchain lookup
|
||||
self.squeak_block_verifier.verify_squeak_block(inserted_squeak_hash)
|
||||
if verify:
|
||||
self.squeak_block_verifier.verify_squeak_block(inserted_squeak_hash)
|
||||
else:
|
||||
self.squeak_block_verifier.add_squeak_to_queue(inserted_squeak_hash)
|
||||
return inserted_squeak_hash
|
||||
|
||||
def get_squeak(self, squeak_hash):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue