Skip to content

Commit 91e1c8d

Browse files
committed
Delete share after timeout
1 parent 4da1940 commit 91e1c8d

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

hub/hub.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class Hub:
3030
_share_timeout_secs: int
3131
_peer_clients: dict[str, PeerClient] # Indexed by client name
3232
_shares: dict[UUID, Share] # Indexed by key UUID
33+
_share_timeout_tasks: dict[UUID, asyncio.Task] # Indexed by key UUID
3334
_stop_task: asyncio.Task | None
3435

3536
def __init__(self, name: str, share_timeout_secs: int):
@@ -162,6 +163,8 @@ def store_share(self, share: Share):
162163
if share.user_key_id in self._shares:
163164
LOGGER.error(f"Overwriting existing share for key ID {share.user_key_id}")
164165
self._shares[share.user_key_id] = share
166+
task = asyncio.create_task(self.delete_share_after_timeout(share.user_key_id))
167+
self._share_timeout_tasks[share.user_key_id] = task
165168

166169
def get_share(self, key_id: UUID) -> Share:
167170
"""
@@ -177,10 +180,12 @@ def delete_share(self, key_id: UUID):
177180
"""
178181
Delete a share by key ID.
179182
"""
180-
try:
183+
if key_id in self._share_timeout_tasks:
184+
task = self._share_timeout_tasks[key_id]
185+
task.cancel()
186+
del self._share_timeout_tasks[key_id]
187+
if key_id in self._shares:
181188
del self._shares[key_id]
182-
except KeyError as exc:
183-
raise exceptions.UnknownKeyIDError(key_id) from exc
184189

185190
def initiate_stop(self):
186191
"""
@@ -196,3 +201,14 @@ async def _stop_after_delay(self):
196201
await asyncio.sleep(0.5)
197202
utils.delete_pid_file("hub", self._name)
198203
os.kill(os.getpid(), signal.SIGTERM)
204+
205+
async def delete_share_after_timeout(self, key_id: UUID):
206+
"""
207+
Delete a share after the share timeout.
208+
"""
209+
await asyncio.sleep(self._share_timeout_secs)
210+
try:
211+
self.delete_share(key_id)
212+
LOGGER.info(f"Deleted share for key ID {key_id} after timeout")
213+
except exceptions.UnknownKeyIDError:
214+
LOGGER.error(f"Share for key ID {key_id} not found after timeout")

0 commit comments

Comments
 (0)