40
40
"""
41
41
42
42
logger = get_logger (__name__ )
43
- debug , info = logger .debug , logger .info
43
+ debug , info , warning = logger .debug , logger .info , logger . warning
44
44
45
45
46
46
class ModelEntry (ScheduleEntry ):
@@ -221,8 +221,9 @@ def all_as_schedule(self):
221
221
return s
222
222
223
223
def schedule_changed (self ):
224
- close_old_connections ()
225
224
try :
225
+ close_old_connections ()
226
+
226
227
# If MySQL is running with transaction isolation level
227
228
# REPEATABLE-READ (default), then we won't see changes done by
228
229
# other transactions until the current transaction is
@@ -236,6 +237,13 @@ def schedule_changed(self):
236
237
except DatabaseError as exc :
237
238
logger .exception ('Database gave error: %r' , exc )
238
239
return False
240
+ except InterfaceError :
241
+ warning (
242
+ 'DatabaseScheduler: InterfaceError in schedule_changed(), '
243
+ 'waiting to retry in next call...'
244
+ )
245
+ return False
246
+
239
247
try :
240
248
if ts and ts > (last if last else ts ):
241
249
return True
@@ -264,10 +272,16 @@ def sync(self):
264
272
_tried .add (name )
265
273
except (KeyError , ObjectDoesNotExist ) as exc :
266
274
_failed .add (name )
267
- except (DatabaseError , InterfaceError ) as exc :
275
+ except DatabaseError as exc :
276
+ logger .exception ('Database error while sync: %r' , exc )
277
+ except InterfaceError :
278
+ warning (
279
+ 'DatabaseScheduler: InterfaceError in sync(), '
280
+ 'waiting to retry in next call...'
281
+ )
282
+ finally :
268
283
# retry later, only for the failed ones
269
284
self ._dirty |= _failed
270
- logger .exception ('Database error while sync: %r' , exc )
271
285
272
286
def update_from_dict (self , mapping ):
273
287
s = {}
0 commit comments