Make save squeak idempotent not raise error (#365)

* Got idempotent save squeak working

* Remove old commented save squeak methods
This commit is contained in:
Jonathan Zernik 2020-11-04 01:27:13 -05:00 committed by GitHub
parent 22803b42d5
commit f29831fbe1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 22 additions and 29 deletions

View file

@ -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. """

View file

@ -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)

View file

@ -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:

View file

@ -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)

View file

@ -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):