diff --git a/src/client.py b/src/client.py --- a/src/client.py +++ b/src/client.py @@ -166,8 +166,10 @@ class Client(NetNode): self._new_leaves[i+self._tree.leaf_start] = hash_block(block) t = datetime.now().timestamp() - if t-last_flushed >= 60 and self._tree_file: - self._update_tree() + if t-last_flushed >= 60: + if self._tree_file: + self._update_tree() + self._refresh_lock() last_flushed = t stats.log_transferred_block() diff --git a/src/netnode.py b/src/netnode.py --- a/src/netnode.py +++ b/src/netnode.py @@ -1,4 +1,5 @@ import os +from datetime import datetime import socket import logging as log @@ -62,7 +63,15 @@ class NetNode: f = open(lock_file, "x") f.close() except FileExistsError: - raise LockedException() + stat = os.stat(lock_file) + dt = datetime.now().timestamp()-stat.st_mtime + if dt<5*60: + raise LockedException() + log.warning("Found an old lock file ({0}s), ignoring it.".format(round(dt))) + self._refresh_lock() + + def _refresh_lock(self): + os.utime(lock_file) def _unlock(self): os.remove(lock_file) diff --git a/src/server.py b/src/server.py --- a/src/server.py +++ b/src/server.py @@ -5,7 +5,7 @@ import multiprocessing import logging as log from hashtree import hash_block -from netnode import BaseConnection,NetNode +from netnode import BaseConnection, NetNode import config as conf import status from datafile import DataFile @@ -150,8 +150,10 @@ class Server(NetNode): self._new_leaves[k+self._tree.leaf_start] = hash_block(block) t = datetime.now().timestamp() - if t-self._last_flushed>=60 and self._tree_file: - self._update_tree() + if t-self._last_flushed>=60: + if self._tree_file: + self._update_tree() + self._refresh_lock() self._last_flushed = t return ({"command": "ack", "index": indices},)