mirror of
https://github.com/yzernik/squeaknode.git
synced 2026-08-16 13:01:04 +02:00
Use configurable retention for sent offer deletion (#865)
This commit is contained in:
parent
5b37fcb6f1
commit
f111aabd98
3 changed files with 40 additions and 10 deletions
|
|
@ -37,6 +37,7 @@ DEFAULT_LND_HOST = "localhost"
|
|||
DEFAULT_SYNC_INTERVAL_S = 10
|
||||
DEFAULT_SYNC_TIMEOUT_S = 10
|
||||
DEFAULT_SYNC_BLOCK_INTERVAL = 2016
|
||||
DEFAULT_SENT_OFFER_RETENTION_S = 86400
|
||||
|
||||
|
||||
@section('bitcoin')
|
||||
|
|
@ -95,6 +96,8 @@ class CoreConfig(Config):
|
|||
cast=int, required=False, default=DEFAULT_MAX_SQUEAKS_PER_ADDRESS_PER_BLOCK)
|
||||
sqk_dir_path = key(cast=str, required=False, default=DEFAULT_SQK_DIR_PATH)
|
||||
log_level = key(cast=str, required=False, default=DEFAULT_LOG_LEVEL)
|
||||
sent_offer_retention_s = key(
|
||||
cast=int, required=False, default=DEFAULT_SENT_OFFER_RETENTION_S)
|
||||
|
||||
|
||||
@section('sync')
|
||||
|
|
|
|||
|
|
@ -110,28 +110,44 @@ class SqueakDb:
|
|||
return self.squeaks.c.created > \
|
||||
self.datetime_now - timedelta(seconds=interval_s)
|
||||
|
||||
def received_offer_is_expired(self):
|
||||
def received_offer_should_be_deleted(self):
|
||||
expire_time = (
|
||||
self.received_offers.c.invoice_timestamp
|
||||
+ self.received_offers.c.invoice_expiry
|
||||
)
|
||||
return self.datetime_now.timestamp() > expire_time
|
||||
return self.datetime_now.timestamp() >= expire_time
|
||||
|
||||
@property
|
||||
def received_offer_is_not_paid(self):
|
||||
return self.received_offers.c.paid == False # noqa: E711
|
||||
|
||||
def sent_offer_is_expired(self):
|
||||
@property
|
||||
def received_offer_is_not_expired(self):
|
||||
expire_time = (
|
||||
self.received_offers.c.invoice_timestamp
|
||||
+ self.received_offers.c.invoice_expiry
|
||||
)
|
||||
return self.datetime_now.timestamp() < expire_time
|
||||
|
||||
def sent_offer_should_be_deleted(self, interval_s):
|
||||
expire_time = (
|
||||
self.sent_offers.c.invoice_timestamp
|
||||
+ self.sent_offers.c.invoice_expiry
|
||||
)
|
||||
return self.datetime_now.timestamp() > expire_time
|
||||
return self.datetime_now.timestamp() >= expire_time + interval_s
|
||||
|
||||
@property
|
||||
def sent_offer_is_not_paid(self):
|
||||
return self.sent_offers.c.paid == False # noqa: E711
|
||||
|
||||
@property
|
||||
def sent_offer_is_not_expired(self):
|
||||
expire_time = (
|
||||
self.sent_offers.c.invoice_timestamp
|
||||
+ self.sent_offers.c.invoice_expiry
|
||||
)
|
||||
return self.datetime_now.timestamp() < expire_time
|
||||
|
||||
def insert_squeak(self, squeak: CSqueak, block_header: CBlockHeader) -> bytes:
|
||||
""" Insert a new squeak.
|
||||
TODO: Clear the decryption key from the serialized bytes
|
||||
|
|
@ -686,6 +702,7 @@ class SqueakDb:
|
|||
)
|
||||
.where(self.received_offers.c.squeak_hash == squeak_hash.hex())
|
||||
.where(self.received_offer_is_not_paid)
|
||||
.where(self.received_offer_is_not_expired)
|
||||
)
|
||||
with self.get_connection() as connection:
|
||||
result = connection.execute(s)
|
||||
|
|
@ -717,7 +734,7 @@ class SqueakDb:
|
|||
def delete_expired_received_offers(self):
|
||||
""" Delete all expired offers. """
|
||||
s = self.received_offers.delete().where(
|
||||
self.received_offer_is_expired()
|
||||
self.received_offer_should_be_deleted()
|
||||
)
|
||||
with self.get_connection() as connection:
|
||||
res = connection.execute(s)
|
||||
|
|
@ -850,12 +867,16 @@ class SqueakDb:
|
|||
return sent_offer
|
||||
|
||||
def get_sent_offer_by_squeak_hash_and_client_addr(self, squeak_hash: bytes, client_addr: str) -> Optional[SentOffer]:
|
||||
""" Get a sent offer by squeak hash and client addr. """
|
||||
"""
|
||||
Get a sent offer by squeak hash and client addr. Only
|
||||
return sent offer if it's not expired and not paid.
|
||||
"""
|
||||
s = (
|
||||
select([self.sent_offers])
|
||||
.where(self.sent_offers.c.squeak_hash == squeak_hash.hex())
|
||||
.where(self.sent_offers.c.client_addr == client_addr)
|
||||
.where(self.sent_offer_is_not_paid)
|
||||
.where(self.sent_offer_is_not_expired)
|
||||
)
|
||||
with self.get_connection() as connection:
|
||||
result = connection.execute(s)
|
||||
|
|
@ -873,10 +894,13 @@ class SqueakDb:
|
|||
with self.get_connection() as connection:
|
||||
connection.execute(s)
|
||||
|
||||
def delete_expired_sent_offers(self):
|
||||
""" Delete all expired sent offers. """
|
||||
def delete_expired_sent_offers(self, interval_s):
|
||||
"""
|
||||
Delete all expired sent offers. Only delete sent
|
||||
offers that have been expired for more than interval_s seconds.
|
||||
"""
|
||||
s = self.sent_offers.delete().where(
|
||||
self.sent_offer_is_expired()
|
||||
self.sent_offer_should_be_deleted(interval_s)
|
||||
)
|
||||
with self.get_connection() as connection:
|
||||
res = connection.execute(s)
|
||||
|
|
|
|||
|
|
@ -411,7 +411,10 @@ class SqueakController:
|
|||
|
||||
def delete_all_expired_sent_offers(self):
|
||||
logger.info("Deleting expired sent offers.")
|
||||
num_expired_sent_offers = self.squeak_db.delete_expired_sent_offers()
|
||||
sent_offer_retention_s = self.config.core.sent_offer_retention_s
|
||||
num_expired_sent_offers = self.squeak_db.delete_expired_sent_offers(
|
||||
sent_offer_retention_s,
|
||||
)
|
||||
if num_expired_sent_offers > 0:
|
||||
logger.info(
|
||||
"Deleted number of expired sent offers: {}".format(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue