From fb65aadd8203f4ab0828115e0b36e6f087bbc48e Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Sun, 2 Sep 2007 21:39:47 -0700
Subject: [PATCH] storage: don't add a duplicate lease, renew the old one
 instead

---
 src/allmydata/storage.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/storage.py b/src/allmydata/storage.py
index 396d49d3..78c482be 100644
--- a/src/allmydata/storage.py
+++ b/src/allmydata/storage.py
@@ -120,6 +120,13 @@ class ShareFile:
                 return
         raise IndexError("unable to renew non-existent lease")
 
+    def add_or_renew_lease(self, lease_info):
+        owner_num, renew_secret, cancel_secret, expire_time = lease_info
+        try:
+            self.renew_lease(renew_secret, expire_time)
+        except IndexError:
+            self.add_lease(lease_info)
+
     def cancel_lease(self, cancel_secret):
         """Remove a lease with the given cancel_secret. Return
         (num_remaining_leases, space_freed). Raise IndexError if there was no
@@ -263,7 +270,7 @@ class StorageServer(service.MultiService, Referenceable):
                     sf = ShareFile(incominghome)
                 else:
                     sf = ShareFile(finalhome)
-                sf.add_lease(lease_info)
+                sf.add_or_renew_lease(lease_info)
             elif no_limits or remaining_space >= space_per_bucket:
                 fileutil.make_dirs(os.path.join(self.incomingdir, si_s))
                 bw = BucketWriter(self, incominghome, finalhome,
-- 
2.45.2