Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F118141115
D378.1775644687.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
D378.1775644687.diff
View Options
diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@ -508,36 +508,12 @@
folder_name = "user%s%s" % (self.get_separator(), mailbox_base_name)
log.info(_("Creating new mailbox for user %s") %(mailbox_base_name))
- max_tries = 10
- success = False
- while not success and max_tries > 0:
- success = self.create_folder(folder_name, server)
- if not success:
- self.disconnect()
- max_tries -= 1
- time.sleep(1)
- self.connect()
+ success = self._create_folder_waiting(folder_name, server)
if not success:
log.error(_("Could not create the mailbox for user %s, aborting." % (mailbox_base_name)))
return False
- # In a Cyrus IMAP Murder topology, wait for the murder to have settled
- if self.imap_murder():
- self.disconnect()
- self.connect()
-
- created = False
- last_log = time.time()
- while not created:
- created = self.has_folder(folder_name)
- if not created:
- if time.time() - last_log > 5:
- log.info(_("Waiting for the Cyrus IMAP Murder to settle..."))
- last_log = time.time()
-
- time.sleep(0.5)
-
_additional_folders = None
if not hasattr(self, 'domain'):
@@ -628,7 +604,6 @@
last_log = time.time()
while not success:
try:
-
self.disconnect()
self.connect(login=False, server=server)
self.login_plain(admin_login, admin_password, user)
@@ -654,28 +629,11 @@
log.error(_("Correcting additional folder name from %r to %r") % (folder_name, "%s%s" % (personal, folder_name)))
folder_name = "%s%s" % (personal, folder_name)
- try:
- self.create_folder(folder_name)
- created = False
- last_log = time.time()
- while not created:
- created = self.has_folder(folder_name)
- if not created:
- if time.time() - last_log > 5:
- log.info(_("Waiting for the Cyrus IMAP Murder to settle..."))
- if time.time() - last_log > 30:
- log.warning(_("Waited for 30 seconds, going to reconnect"))
- self.disconnect()
- self.connec()
- last_log = time.time()
+ success = self._create_folder_waiting(folder_name)
- time.sleep(0.5)
- except:
- log.warning(_("Mailbox already exists: %s") % (folder_name))
- if conf.debuglevel > 8:
- import traceback
- traceback.print_exc()
+ if not success:
+ log.warning(_("Failed to create folder: %s") % (folder_name))
continue
if additional_folders[additional_folder].has_key("annotations"):
@@ -782,6 +740,50 @@
except:
log.error(_("Could not rename %s to reside on partition %s") % (folder_name, partition))
+ def _create_folder_waiting(self, folder_name, server=None):
+ """
+ Create a folder and wait to make sure it exists
+ """
+
+ created = False
+
+ try:
+ max_tries = 10
+ while not created and max_tries > 0:
+ created = self.create_folder(folder_name, server)
+ if not created:
+ self.disconnect()
+ max_tries -= 1
+ time.sleep(1)
+ self.connect()
+
+ # In a Cyrus IMAP Murder topology, wait for the murder to have settled
+ if created and self.imap_murder():
+ success = False
+ last_log = time.time()
+ reconnect_counter = 0
+ while not success:
+ success = self.has_folder(folder_name)
+ if not success:
+ if time.time() - last_log > 5:
+ reconnect_counter += 1
+ log.info(_("Waiting for the Cyrus IMAP Murder to settle..."))
+ if reconnect_counter == 6:
+ log.warning(_("Waited for 30 seconds, going to reconnect"))
+ reconnect_counter = 0
+ self.disconnect()
+ self.connect()
+
+ last_log = time.time()
+
+ time.sleep(0.5)
+ except:
+ if conf.debuglevel > 8:
+ import traceback
+ traceback.print_exc()
+
+ return created
+
def user_mailbox_delete(self, mailbox_base_name):
"""
Delete a user mailbox.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 8, 10:38 AM (16 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18846893
Default Alt Text
D378.1775644687.diff (5 KB)
Attached To
Mode
D378: Fix and unify IMAP reconnection on folder create with Murder (Bifrost#T23626)
Attached
Detach File
Event Timeline