~verterok/ubuntuone-client/fix-435137

« back to all changes in this revision

Viewing changes to ubuntuone/syncdaemon/states.py

fixes #420354 (BadTransitions happening due to there being multiple active connections on the client)

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
The states of the SyncDaemon
20
20
"""
21
21
 
 
22
from pprint import pformat
 
23
from inspect import getsource
 
24
from difflib import unified_diff
 
25
 
 
26
def compare(this, that):
 
27
    this = vars(this)
 
28
    if this['enter'] is not None:
 
29
        this['enter'] = getsource(this['enter']).strip()
 
30
    that = vars(that)
 
31
    if that['enter'] is not None:
 
32
        that['enter'] = getsource(that['enter']).strip()
 
33
    if this != that:
 
34
        print "\n".join(unified_diff(pformat(this).split('\n'),
 
35
                                     pformat(that).split('\n'),
 
36
                                     'new '+this['name'], 'old'))
 
37
        assert False
 
38
 
 
39
 
22
40
class BadTransition(Exception):
23
41
    """
24
42
    An event arrived that the state didn't know how to handle.
50
68
        self.is_connected = is_connected
51
69
        self.is_online = is_online
52
70
        self.enter = enter
 
71
        self.has_network = any((self.is_connected,
 
72
                                "WITH_NETWORK" in name,
 
73
                                "CONNECTING" in name,
 
74
                                "CONNECTED_CLEANUP" in name))
 
75
        self.wants_to_connect = any((self.is_connected,
 
76
                                     "WAITING" in name,
 
77
                                     "CONNECTING" in name))
53
78
        self.is_handshake = 'SYS_HANDSHAKE_TIMEOUT' in other_transitions
54
79
        self.transitions = dict(SYS_NET_CONNECTED=sys_net_connected_trn,
55
80
                                SYS_CONNECT=sys_connect_trn,
74
99
            raise BadTransition("State %s can't handle the %s event"
75
100
                                % (self.name, event))
76
101
 
 
102
 
 
103
    def clone_with_queue(self, qname, **extra_transitions):
 
104
        new_trns = self.transitions.copy()
 
105
        del new_trns['SYS_UNKNOWN_ERROR']
 
106
        suffix = '_WITH_' + qname
 
107
        mqw_trn = new_trns.pop('SYS_META_QUEUE_WAITING')
 
108
        mqd_trn = new_trns.pop('SYS_META_QUEUE_DONE')
 
109
        cqw_trn = new_trns.pop('SYS_CONTENT_QUEUE_WAITING')
 
110
        cqd_trn = new_trns.pop('SYS_CONTENT_QUEUE_DONE')
 
111
        if self.name.startswith('START_'):
 
112
            bq_trn = self.name[6:] + '_WITH_BOTHQ'
 
113
            expected_name = 'START_' + dict(METAQ=mqw_trn,
 
114
                                            CONTQ=cqw_trn, BOTHQ=bq_trn)[qname]
 
115
        else:
 
116
            bq_trn = self.name + '_WITH_BOTHQ'
 
117
            expected_name = dict(METAQ=mqw_trn,
 
118
                                 CONTQ=cqw_trn, BOTHQ=bq_trn)[qname]
 
119
        mqw = dict(METAQ=mqw_trn, CONTQ=bq_trn, BOTHQ=bq_trn)[qname]
 
120
        mqd = dict(METAQ=mqd_trn, CONTQ=cqw_trn, BOTHQ=cqw_trn)[qname]
 
121
        cqw = dict(METAQ=bq_trn, CONTQ=cqw_trn, BOTHQ=bq_trn)[qname]
 
122
        cqd = dict(METAQ=mqw_trn, CONTQ=cqd_trn, BOTHQ=mqw_trn)[qname]
 
123
        new = SyncDaemonState(self.name + suffix,
 
124
                              self.description + ', ' + qname + ' waiting',
 
125
                              new_trns.pop('SYS_NET_CONNECTED') + suffix,
 
126
                              new_trns.pop('SYS_CONNECT') + suffix,
 
127
                              new_trns.pop('SYS_NET_DISCONNECTED') + suffix,
 
128
                              new_trns.pop('SYS_DISCONNECT') + suffix,
 
129
                              new_trns.pop('SYS_CONNECTION_LOST') + suffix,
 
130
                              self.is_error, self.is_connected, self.is_online,
 
131
                              self.enter,
 
132
                              SYS_META_QUEUE_WAITING=mqw,
 
133
                              SYS_META_QUEUE_DONE=mqd,
 
134
                              SYS_CONTENT_QUEUE_WAITING=cqw,
 
135
                              SYS_CONTENT_QUEUE_DONE=cqd)
 
136
        new.is_handshake = self.is_handshake
 
137
        new.with_q = qname
 
138
        assert new.name == expected_name, "%r != %r" % (new.name, expected_name)
 
139
        for evt, trn in new_trns.items():
 
140
            if trn not in ['BAD_VERSION', 'CAPABILITIES_MISMATCH', 'AUTH_FAILED']:
 
141
                trn = trn + suffix
 
142
            new.transitions[evt] = trn
 
143
        for evt, trn in extra_transitions.items():
 
144
            new.transitions[evt] = trn
 
145
        return new
 
146
 
 
147
    def clone_with_metaq(self, **extra_transitions):
 
148
        return self.clone_with_queue('METAQ', **extra_transitions)
 
149
 
 
150
    def clone_with_contq(self, **extra_transitions):
 
151
        return self.clone_with_queue('CONTQ', **extra_transitions)
 
152
 
 
153
    def clone_with_bothq(self, **extra_transitions):
 
154
        return self.clone_with_queue('BOTHQ', **extra_transitions)
 
155
 
 
156
    def clone_with_no_start(self, new_description, **extra_transitions):
 
157
        if not self.name.startswith('START_'):
 
158
            raise ValueError, "Not a START_ transition"
 
159
        name = self.name[6:]
 
160
        new_trns = self.transitions.copy()
 
161
        del new_trns['SYS_UNKNOWN_ERROR']
 
162
        new_trns.update(extra_transitions)
 
163
        new = SyncDaemonState(name,
 
164
                              new_description,
 
165
                              new_trns.pop('SYS_NET_CONNECTED'),
 
166
                              new_trns.pop('SYS_CONNECT'),
 
167
                              new_trns.pop('SYS_NET_DISCONNECTED'),
 
168
                              new_trns.pop('SYS_DISCONNECT'),
 
169
                              new_trns.pop('SYS_CONNECTION_LOST'),
 
170
                              self.is_error, self.is_connected, self.is_online,
 
171
                              None,
 
172
                              **new_trns)
 
173
        if getattr(self, 'with_q', object) is not object:
 
174
            new.with_q = self.with_q
 
175
        return new
 
176
 
77
177
class NonActiveConnectedSDState(SyncDaemonState):
78
178
    """
79
179
    States that handle network disconnections with no cleanup
84
184
        ready_waiting = 'READY_WAITING'
85
185
        ready_w_network = 'READY_WITH_NETWORK'
86
186
        start_connecting = 'START_CONNECTING'
 
187
        self.with_q = with_q
87
188
        if with_q is not None:
88
189
            ready_waiting += '_WITH_' + with_q
89
190
            ready_w_network += '_WITH_' + with_q
111
212
            suffix = '_WITH_' + with_q
112
213
        else:
113
214
            suffix = ''
 
215
        if name.startswith('START_'):
 
216
            next_name = name[6:]
 
217
        else:
 
218
            next_name = name
114
219
        super(WorkingSDState, self).__init__(
115
 
            name, description, name, name,
 
220
            name, description, next_name, next_name,
116
221
            'START_CLEANUP_WAITING' + suffix,
117
222
            'START_CONNECTED_CLEANUP' + suffix,
118
 
            'START_CLEANUP_WAITING_WITH_NETWORK' + suffix,
 
223
            'START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST' + suffix,
119
224
            is_connected=True, is_online=True,
120
225
            **other_transitions)
121
226
 
177
282
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_CONTQ',
178
283
    SYS_CONTENT_QUEUE_DONE='READING',
179
284
    )
180
 
 
181
 
READING_WITH_METAQ = SyncDaemonState(
182
 
    'READING_WITH_METAQ',
183
 
    'doing local rescan, meta_q waiting',
184
 
    'READING_WITH_NETWORK_WITH_METAQ', 'READING_WAITING_WITH_METAQ',
185
 
    'READING_WITH_METAQ', 'READING_WITH_METAQ', 'READING_WITH_METAQ',
186
 
    SYS_LOCAL_RESCAN_DONE='READY_FOR_NETWORK_WITH_METAQ',
187
 
    SYS_META_QUEUE_WAITING='READING_WITH_METAQ',
188
 
    SYS_META_QUEUE_DONE='READING',
189
 
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_BOTHQ',
190
 
    SYS_CONTENT_QUEUE_DONE='READING_WITH_METAQ',
191
 
    )
192
 
 
193
 
READING_WITH_CONTQ = SyncDaemonState(
194
 
    'READING_WITH_CONTQ',
195
 
    'doing local rescan, content_q waiting',
196
 
    'READING_WITH_NETWORK_WITH_CONTQ', 'READING_WAITING_WITH_CONTQ',
197
 
    'READING_WITH_CONTQ', 'READING_WITH_CONTQ', 'READING_WITH_CONTQ',
198
 
    SYS_LOCAL_RESCAN_DONE='READY_FOR_NETWORK_WITH_CONTQ',
199
 
    SYS_META_QUEUE_WAITING='READING_WITH_BOTHQ',
200
 
    SYS_META_QUEUE_DONE='READING_WITH_CONTQ',
201
 
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_CONTQ',
202
 
    SYS_CONTENT_QUEUE_DONE='READING',
203
 
    )
204
 
 
205
 
READING_WITH_BOTHQ = SyncDaemonState(
206
 
    'READING_WITH_BOTHQ',
207
 
    'doing local rescan, both _q\'s waiting',
208
 
    'READING_WITH_NETWORK_WITH_BOTHQ', 'READING_WAITING_WITH_BOTHQ',
209
 
    'READING_WITH_BOTHQ', 'READING_WITH_BOTHQ', 'READING_WITH_BOTHQ',
210
 
    SYS_LOCAL_RESCAN_DONE='READY_FOR_NETWORK_WITH_BOTHQ',
211
 
    SYS_META_QUEUE_WAITING='READING_WITH_BOTHQ',
212
 
    SYS_META_QUEUE_DONE='READING_WITH_CONTQ',
213
 
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_BOTHQ',
214
 
    SYS_CONTENT_QUEUE_DONE='READING_WITH_METAQ',
215
 
    )
 
285
READING_WITH_METAQ = READING.clone_with_metaq()
 
286
READING_WITH_CONTQ = READING.clone_with_contq()
 
287
READING_WITH_BOTHQ = READING.clone_with_bothq()
216
288
 
217
289
READING_WITH_NETWORK = SyncDaemonState(
218
290
    'READING_WITH_NETWORK',
225
297
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_NETWORK_WITH_CONTQ',
226
298
    SYS_CONTENT_QUEUE_DONE='READING_WITH_NETWORK',
227
299
    )
228
 
 
229
 
READING_WITH_NETWORK_WITH_METAQ = SyncDaemonState(
230
 
    'READING_WITH_NETWORK_WITH_METAQ',
231
 
    'doing local rescan; network is available, meta_q waiting',
232
 
    'READING_WITH_NETWORK_WITH_METAQ',
233
 
    'READING_WAITING_WITH_NETWORK_WITH_METAQ',
234
 
    'READING_WITH_METAQ', 'READING_WITH_NETWORK_WITH_METAQ',
235
 
    'READING_WITH_NETWORK_WITH_METAQ',
236
 
    SYS_LOCAL_RESCAN_DONE='READY_WITH_NETWORK_WITH_METAQ',
237
 
    SYS_META_QUEUE_WAITING='READING_WITH_NETWORK_WITH_METAQ',
238
 
    SYS_META_QUEUE_DONE='READING_WITH_NETWORK',
239
 
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_NETWORK_WITH_BOTHQ',
240
 
    SYS_CONTENT_QUEUE_DONE='READING_WITH_NETWORK_WITH_METAQ',
241
 
    )
242
 
 
243
 
READING_WITH_NETWORK_WITH_CONTQ = SyncDaemonState(
244
 
    'READING_WITH_NETWORK_WITH_CONTQ',
245
 
    'doing local rescan; network is available, content_q waiting',
246
 
    'READING_WITH_NETWORK_WITH_CONTQ',
247
 
    'READING_WAITING_WITH_NETWORK_WITH_CONTQ',
248
 
    'READING_WITH_CONTQ', 'READING_WITH_NETWORK_WITH_CONTQ',
249
 
    'READING_WITH_NETWORK_WITH_CONTQ',
250
 
    SYS_LOCAL_RESCAN_DONE='READY_WITH_NETWORK_WITH_CONTQ',
251
 
    SYS_META_QUEUE_WAITING='READING_WITH_NETWORK_WITH_BOTHQ',
252
 
    SYS_META_QUEUE_DONE='READING_WITH_NETWORK_WITH_CONTQ',
253
 
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_NETWORK_WITH_CONTQ',
254
 
    SYS_CONTENT_QUEUE_DONE='READING_WITH_NETWORK',
255
 
    )
256
 
 
257
 
READING_WITH_NETWORK_WITH_BOTHQ = SyncDaemonState(
258
 
    'READING_WITH_NETWORK_WITH_BOTHQ',
259
 
    'doing local rescan; network is available, both _q\'s waiting',
260
 
    'READING_WITH_NETWORK_WITH_BOTHQ',
261
 
    'READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
262
 
    'READING_WITH_BOTHQ', 'READING_WITH_NETWORK_WITH_BOTHQ',
263
 
    'READING_WITH_NETWORK_WITH_BOTHQ',
264
 
    SYS_LOCAL_RESCAN_DONE='READY_WITH_NETWORK_WITH_BOTHQ',
265
 
    SYS_META_QUEUE_WAITING='READING_WITH_NETWORK_WITH_BOTHQ',
266
 
    SYS_META_QUEUE_DONE='READING_WITH_NETWORK_WITH_CONTQ',
267
 
    SYS_CONTENT_QUEUE_WAITING='READING_WITH_NETWORK_WITH_BOTHQ',
268
 
    SYS_CONTENT_QUEUE_DONE='READING_WITH_NETWORK_WITH_METAQ',
269
 
    )
 
300
READING_WITH_NETWORK_WITH_METAQ = READING_WITH_NETWORK.clone_with_metaq()
 
301
READING_WITH_NETWORK_WITH_CONTQ = READING_WITH_NETWORK.clone_with_contq()
 
302
READING_WITH_NETWORK_WITH_BOTHQ = READING_WITH_NETWORK.clone_with_bothq()
270
303
 
271
304
READING_WAITING = SyncDaemonState(
272
305
    'READING_WAITING',
279
312
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_CONTQ',
280
313
    SYS_CONTENT_QUEUE_DONE='READING_WAITING',
281
314
    )
282
 
 
283
 
READING_WAITING_WITH_METAQ = SyncDaemonState(
284
 
    'READING_WAITING_WITH_METAQ',
285
 
    'doing local rescan; user wants to connect, meta_q waiting',
286
 
    'READING_WAITING_WITH_NETWORK_WITH_METAQ', 'READING_WAITING_WITH_METAQ',
287
 
    'READING_WAITING_WITH_METAQ', 'READING_WITH_METAQ',
288
 
    'READING_WAITING_WITH_METAQ',
289
 
    SYS_LOCAL_RESCAN_DONE='READY_WAITING_WITH_METAQ',
290
 
    SYS_META_QUEUE_WAITING='READING_WAITING_WITH_METAQ',
291
 
    SYS_META_QUEUE_DONE='READING_WAITING',
292
 
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_BOTHQ',
293
 
    SYS_CONTENT_QUEUE_DONE='READING_WAITING_WITH_METAQ',
294
 
    )
295
 
 
296
 
READING_WAITING_WITH_CONTQ = SyncDaemonState(
297
 
    'READING_WAITING_WITH_CONTQ',
298
 
    'doing local rescan; user wants to connect, content_q waiting',
299
 
    'READING_WAITING_WITH_NETWORK_WITH_CONTQ', 'READING_WAITING_WITH_CONTQ',
300
 
    'READING_WAITING_WITH_CONTQ', 'READING_WITH_CONTQ',
301
 
    'READING_WAITING_WITH_CONTQ',
302
 
    SYS_LOCAL_RESCAN_DONE='READY_WAITING_WITH_CONTQ',
303
 
    SYS_META_QUEUE_WAITING='READING_WAITING_WITH_BOTHQ',
304
 
    SYS_META_QUEUE_DONE='READING_WAITING_WITH_CONTQ',
305
 
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_CONTQ',
306
 
    SYS_CONTENT_QUEUE_DONE='READING_WAITING',
307
 
    )
308
 
 
309
 
READING_WAITING_WITH_BOTHQ = SyncDaemonState(
310
 
    'READING_WAITING_WITH_BOTHQ',
311
 
    'doing local rescan; user wants to connect, both _q\'s waiting',
312
 
    'READING_WAITING_WITH_NETWORK_WITH_BOTHQ', 'READING_WAITING_WITH_BOTHQ',
313
 
    'READING_WAITING_WITH_BOTHQ', 'READING_WITH_BOTHQ',
314
 
    'READING_WAITING_WITH_BOTHQ',
315
 
    SYS_LOCAL_RESCAN_DONE='READY_WAITING_WITH_BOTHQ',
316
 
    SYS_META_QUEUE_WAITING='READING_WAITING_WITH_BOTHQ',
317
 
    SYS_META_QUEUE_DONE='READING_WAITING_WITH_CONTQ',
318
 
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_BOTHQ',
319
 
    SYS_CONTENT_QUEUE_DONE='READING_WAITING_WITH_METAQ',
320
 
    )
 
315
READING_WAITING_WITH_METAQ = READING_WAITING.clone_with_metaq()
 
316
READING_WAITING_WITH_CONTQ = READING_WAITING.clone_with_contq()
 
317
READING_WAITING_WITH_BOTHQ = READING_WAITING.clone_with_bothq()
321
318
 
322
319
READING_WAITING_WITH_NETWORK = SyncDaemonState(
323
320
    'READING_WAITING_WITH_NETWORK',
324
 
    'doing local rescan; user wants to connect, and network is available',
 
321
    'doing local rescan; user wants to connect, network is available',
325
322
    'READING_WAITING_WITH_NETWORK', 'READING_WAITING_WITH_NETWORK',
326
323
    'READING_WAITING', 'READING_WITH_NETWORK',
327
324
    'READING_WAITING_WITH_NETWORK',
331
328
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_NETWORK_WITH_CONTQ',
332
329
    SYS_CONTENT_QUEUE_DONE='READING_WAITING_WITH_NETWORK',
333
330
    )
334
 
 
335
 
READING_WAITING_WITH_NETWORK_WITH_METAQ = SyncDaemonState(
336
 
    'READING_WAITING_WITH_NETWORK_WITH_METAQ',
337
 
    'doing local rescan; user wants to connect, network is available,'
338
 
        ' meta_q waiting',
339
 
    'READING_WAITING_WITH_NETWORK_WITH_METAQ',
340
 
    'READING_WAITING_WITH_NETWORK_WITH_METAQ',
341
 
    'READING_WAITING_WITH_METAQ', 'READING_WITH_NETWORK_WITH_METAQ',
342
 
    'READING_WAITING_WITH_NETWORK_WITH_METAQ',
343
 
    SYS_LOCAL_RESCAN_DONE='START_CONNECTING_WITH_METAQ',
344
 
    SYS_META_QUEUE_WAITING='READING_WAITING_WITH_NETWORK_WITH_METAQ',
345
 
    SYS_META_QUEUE_DONE='READING_WAITING_WITH_NETWORK',
346
 
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
347
 
    SYS_CONTENT_QUEUE_DONE='READING_WAITING_WITH_NETWORK_WITH_METAQ',
348
 
    )
349
 
 
350
 
READING_WAITING_WITH_NETWORK_WITH_CONTQ = SyncDaemonState(
351
 
    'READING_WAITING_WITH_NETWORK_WITH_CONTQ',
352
 
    'doing local rescan; user wants to connect, network is available,'
353
 
        ' content_q waiting',
354
 
    'READING_WAITING_WITH_NETWORK_WITH_CONTQ',
355
 
    'READING_WAITING_WITH_NETWORK_WITH_CONTQ',
356
 
    'READING_WAITING_WITH_CONTQ', 'READING_WITH_NETWORK_WITH_CONTQ',
357
 
    'READING_WAITING_WITH_NETWORK_WITH_CONTQ',
358
 
    SYS_LOCAL_RESCAN_DONE='START_CONNECTING_WITH_CONTQ',
359
 
    SYS_META_QUEUE_WAITING='READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
360
 
    SYS_META_QUEUE_DONE='READING_WAITING_WITH_NETWORK_WITH_CONTQ',
361
 
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_NETWORK_WITH_CONTQ',
362
 
    SYS_CONTENT_QUEUE_DONE='READING_WAITING_WITH_NETWORK',
363
 
    )
364
 
 
365
 
READING_WAITING_WITH_NETWORK_WITH_BOTHQ = SyncDaemonState(
366
 
    'READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
367
 
    'doing local rescan; user wants to connect, network is available,'
368
 
        ' both _q\'s waiting',
369
 
    'READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
370
 
    'READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
371
 
    'READING_WAITING_WITH_BOTHQ', 'READING_WITH_NETWORK_WITH_BOTHQ',
372
 
    'READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
373
 
    SYS_LOCAL_RESCAN_DONE='START_CONNECTING_WITH_BOTHQ',
374
 
    SYS_META_QUEUE_WAITING='READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
375
 
    SYS_META_QUEUE_DONE='READING_WAITING_WITH_NETWORK_WITH_CONTQ',
376
 
    SYS_CONTENT_QUEUE_WAITING='READING_WAITING_WITH_NETWORK_WITH_BOTHQ',
377
 
    SYS_CONTENT_QUEUE_DONE='READING_WAITING_WITH_NETWORK_WITH_METAQ',
378
 
    )
 
331
READING_WAITING_WITH_NETWORK_WITH_METAQ = \
 
332
    READING_WAITING_WITH_NETWORK.clone_with_metaq()
 
333
READING_WAITING_WITH_NETWORK_WITH_CONTQ = \
 
334
    READING_WAITING_WITH_NETWORK.clone_with_contq()
 
335
READING_WAITING_WITH_NETWORK_WITH_BOTHQ = \
 
336
    READING_WAITING_WITH_NETWORK.clone_with_bothq()
379
337
 
380
338
READY_FOR_NETWORK = SyncDaemonState(
381
339
    'READY_FOR_NETWORK',
382
 
    'ready to connect as soon as the user says so and the network comes up.',
 
340
    'ready to connect as soon as the user says so and the network comes up',
383
341
    'READY_WITH_NETWORK', 'READY_WAITING',
384
342
    'READY_FOR_NETWORK', 'READY_FOR_NETWORK', 'READY_FOR_NETWORK',
385
343
    SYS_META_QUEUE_WAITING='READY_FOR_NETWORK_WITH_METAQ',
387
345
    SYS_CONTENT_QUEUE_WAITING='READY_FOR_NETWORK_WITH_CONTQ',
388
346
    SYS_CONTENT_QUEUE_DONE='READY_FOR_NETWORK',
389
347
    )
390
 
 
391
 
READY_FOR_NETWORK_WITH_METAQ = SyncDaemonState(
392
 
    'READY_FOR_NETWORK_WITH_METAQ',
393
 
    'ready to connect as soon as the user says so and the network comes up.'
394
 
    + ' Meta queue is waiting.',
395
 
    'READY_WITH_NETWORK_WITH_METAQ', 'READY_WAITING_WITH_METAQ',
396
 
    'READY_FOR_NETWORK_WITH_METAQ', 'READY_FOR_NETWORK_WITH_METAQ',
397
 
    'READY_FOR_NETWORK_WITH_METAQ',
398
 
    SYS_META_QUEUE_WAITING='READY_FOR_NETWORK_WITH_METAQ',
399
 
    SYS_META_QUEUE_DONE='READY_FOR_NETWORK',
400
 
    SYS_CONTENT_QUEUE_WAITING='READY_FOR_NETWORK_WITH_BOTHQ',
401
 
    SYS_CONTENT_QUEUE_DONE='READY_FOR_NETWORK_WITH_METAQ',
402
 
    )
403
 
 
404
 
READY_FOR_NETWORK_WITH_CONTQ = SyncDaemonState(
405
 
    'READY_FOR_NETWORK_WITH_CONTQ',
406
 
    'ready to connect as soon as the user says so and the network comes up.'
407
 
    + ' Content queue is waiting.',
408
 
    'READY_WITH_NETWORK_WITH_CONTQ', 'READY_WAITING_WITH_CONTQ',
409
 
    'READY_FOR_NETWORK_WITH_CONTQ', 'READY_FOR_NETWORK_WITH_CONTQ',
410
 
    'READY_FOR_NETWORK_WITH_CONTQ',
411
 
    SYS_META_QUEUE_WAITING='READY_FOR_NETWORK_WITH_BOTHQ',
412
 
    SYS_META_QUEUE_DONE='READY_FOR_NETWORK_WITH_CONTQ',
413
 
    SYS_CONTENT_QUEUE_WAITING='READY_FOR_NETWORK_WITH_CONTQ',
414
 
    SYS_CONTENT_QUEUE_DONE='READY_FOR_NETWORK',
415
 
    )
416
 
 
417
 
READY_FOR_NETWORK_WITH_BOTHQ = SyncDaemonState(
418
 
    'READY_FOR_NETWORK_WITH_BOTHQ',
419
 
    'ready to connect as soon as the user says so and the network comes up.'
420
 
    + ' Both request queues are waiting.',
421
 
    'READY_WITH_NETWORK_WITH_BOTHQ', 'READY_WAITING_WITH_BOTHQ',
422
 
    'READY_FOR_NETWORK_WITH_BOTHQ', 'READY_FOR_NETWORK_WITH_BOTHQ',
423
 
    'READY_FOR_NETWORK_WITH_BOTHQ',
424
 
    SYS_META_QUEUE_WAITING='READY_FOR_NETWORK_WITH_BOTHQ',
425
 
    SYS_META_QUEUE_DONE='READY_FOR_NETWORK_WITH_CONTQ',
426
 
    SYS_CONTENT_QUEUE_WAITING='READY_FOR_NETWORK_WITH_BOTHQ',
427
 
    SYS_CONTENT_QUEUE_DONE='READY_FOR_NETWORK_WITH_METAQ',
428
 
    )
 
348
READY_FOR_NETWORK_WITH_METAQ = READY_FOR_NETWORK.clone_with_metaq()
 
349
READY_FOR_NETWORK_WITH_CONTQ = READY_FOR_NETWORK.clone_with_contq()
 
350
READY_FOR_NETWORK_WITH_BOTHQ = READY_FOR_NETWORK.clone_with_bothq()
429
351
 
430
352
READY_WITH_NETWORK = SyncDaemonState(
431
353
    'READY_WITH_NETWORK',
432
 
    'ready to connect, network is up, user is yet to push "go"',
 
354
    'ready to connect, network up, user yet to push "go"',
433
355
    'READY_WITH_NETWORK', 'START_CONNECTING',
434
356
    'READY_FOR_NETWORK', 'READY_WITH_NETWORK', 'READY_WITH_NETWORK',
435
357
    SYS_META_QUEUE_WAITING='READY_WITH_NETWORK_WITH_METAQ',
437
359
    SYS_CONTENT_QUEUE_WAITING='READY_WITH_NETWORK_WITH_CONTQ',
438
360
    SYS_CONTENT_QUEUE_DONE='READY_WITH_NETWORK',
439
361
    )
440
 
 
441
 
READY_WITH_NETWORK_WITH_METAQ = SyncDaemonState(
442
 
    'READY_WITH_NETWORK_WITH_METAQ',
443
 
    'ready to connect, network up, meta_q waiting, user yet to push "go"',
444
 
    'READY_WITH_NETWORK_WITH_METAQ', 'START_CONNECTING_WITH_METAQ',
445
 
    'READY_FOR_NETWORK_WITH_METAQ', 'READY_WITH_NETWORK_WITH_METAQ',
446
 
    'READY_WITH_NETWORK_WITH_METAQ',
447
 
    SYS_META_QUEUE_WAITING='READY_WITH_NETWORK_WITH_METAQ',
448
 
    SYS_META_QUEUE_DONE='READY_WITH_NETWORK',
449
 
    SYS_CONTENT_QUEUE_WAITING='READY_WITH_NETWORK_WITH_BOTHQ',
450
 
    SYS_CONTENT_QUEUE_DONE='READY_WITH_NETWORK_WITH_METAQ',
451
 
    )
452
 
 
453
 
READY_WITH_NETWORK_WITH_CONTQ = SyncDaemonState(
454
 
    'READY_WITH_NETWORK_WITH_CONTQ',
455
 
    'ready to connect, network up, content_q waiting, user yet to push "go"',
456
 
    'READY_WITH_NETWORK_WITH_CONTQ', 'START_CONNECTING_WITH_CONTQ',
457
 
    'READY_FOR_NETWORK_WITH_CONTQ', 'READY_WITH_NETWORK_WITH_CONTQ',
458
 
    'READY_WITH_NETWORK_WITH_CONTQ',
459
 
    SYS_META_QUEUE_WAITING='READY_WITH_NETWORK_WITH_BOTHQ',
460
 
    SYS_META_QUEUE_DONE='READY_WITH_NETWORK_WITH_CONTQ',
461
 
    SYS_CONTENT_QUEUE_WAITING='READY_WITH_NETWORK_WITH_CONTQ',
462
 
    SYS_CONTENT_QUEUE_DONE='READY_WITH_NETWORK',
463
 
    )
464
 
 
465
 
READY_WITH_NETWORK_WITH_BOTHQ = SyncDaemonState(
466
 
    'READY_WITH_NETWORK_WITH_BOTHQ',
467
 
    'ready to connect, network up, both _q\'s waiting, user yet to push "go"',
468
 
    'READY_WITH_NETWORK_WITH_BOTHQ', 'START_CONNECTING_WITH_BOTHQ',
469
 
    'READY_FOR_NETWORK_WITH_BOTHQ', 'READY_WITH_NETWORK_WITH_BOTHQ',
470
 
    'READY_WITH_NETWORK_WITH_BOTHQ',
471
 
    SYS_META_QUEUE_WAITING='READY_WITH_NETWORK_WITH_BOTHQ',
472
 
    SYS_META_QUEUE_DONE='READY_WITH_NETWORK_WITH_CONTQ',
473
 
    SYS_CONTENT_QUEUE_WAITING='READY_WITH_NETWORK_WITH_BOTHQ',
474
 
    SYS_CONTENT_QUEUE_DONE='READY_WITH_NETWORK_WITH_METAQ',
475
 
    )
 
362
READY_WITH_NETWORK_WITH_METAQ = READY_WITH_NETWORK.clone_with_metaq()
 
363
READY_WITH_NETWORK_WITH_CONTQ = READY_WITH_NETWORK.clone_with_contq()
 
364
READY_WITH_NETWORK_WITH_BOTHQ = READY_WITH_NETWORK.clone_with_bothq()
476
365
 
477
366
READY_WAITING = SyncDaemonState(
478
367
    'READY_WAITING',
484
373
    SYS_CONTENT_QUEUE_WAITING='READY_WAITING_WITH_CONTQ',
485
374
    SYS_CONTENT_QUEUE_DONE='READY_WAITING',
486
375
)
487
 
 
488
 
READY_WAITING_WITH_METAQ = SyncDaemonState(
489
 
    'READY_WAITING_WITH_METAQ',
490
 
    'ready to connect; user said "go", network is down, meta_q waiting',
491
 
    'START_CONNECTING_WITH_METAQ', 'READY_WAITING_WITH_METAQ',
492
 
    'READY_WAITING_WITH_METAQ', 'READY_FOR_NETWORK_WITH_METAQ',
493
 
    'READY_WAITING_WITH_METAQ',
494
 
    SYS_META_QUEUE_DONE='READY_WAITING',
495
 
    SYS_META_QUEUE_WAITING='READY_WAITING_WITH_METAQ',
496
 
    SYS_CONTENT_QUEUE_WAITING='READY_WAITING_WITH_BOTHQ',
497
 
    SYS_CONTENT_QUEUE_DONE='READY_WAITING_WITH_METAQ',
498
 
)
499
 
 
500
 
READY_WAITING_WITH_CONTQ = SyncDaemonState(
501
 
    'READY_WAITING_WITH_CONTQ',
502
 
    'ready to connect; user said "go", network is down, content_q waiting',
503
 
    'START_CONNECTING_WITH_CONTQ', 'READY_WAITING_WITH_CONTQ',
504
 
    'READY_WAITING_WITH_CONTQ', 'READY_FOR_NETWORK_WITH_CONTQ',
505
 
    'READY_WAITING_WITH_CONTQ',
506
 
    SYS_META_QUEUE_WAITING='READY_WAITING_WITH_BOTHQ',
507
 
    SYS_META_QUEUE_DONE='READY_WAITING_WITH_CONTQ',
508
 
    SYS_CONTENT_QUEUE_WAITING='READY_WAITING_WITH_CONTQ',
509
 
    SYS_CONTENT_QUEUE_DONE='READY_WAITING',
510
 
)
511
 
 
512
 
READY_WAITING_WITH_BOTHQ = SyncDaemonState(
513
 
    'READY_WAITING_WITH_BOTHQ',
514
 
    'ready to connect; user said "go", network is down, both _q\'s waiting',
515
 
    'START_CONNECTING_WITH_BOTHQ', 'READY_WAITING_WITH_BOTHQ',
516
 
    'READY_WAITING_WITH_BOTHQ', 'READY_FOR_NETWORK_WITH_BOTHQ',
517
 
    'READY_WAITING_WITH_BOTHQ',
518
 
    SYS_META_QUEUE_WAITING='READY_WAITING_WITH_BOTHQ',
519
 
    SYS_META_QUEUE_DONE='READY_WAITING_WITH_CONTQ',
520
 
    SYS_CONTENT_QUEUE_WAITING='READY_WAITING_WITH_BOTHQ',
521
 
    SYS_CONTENT_QUEUE_DONE='READY_WAITING_WITH_METAQ',
522
 
)
 
376
READY_WAITING_WITH_METAQ = READY_WAITING.clone_with_metaq()
 
377
READY_WAITING_WITH_CONTQ = READY_WAITING.clone_with_contq()
 
378
READY_WAITING_WITH_BOTHQ = READY_WAITING.clone_with_bothq()
 
379
 
 
380
START_STANDOFF_WAITING_WITH_NETWORK = SyncDaemonState(
 
381
    'START_STANDOFF_WAITING_WITH_NETWORK',
 
382
    'disconnect and wait for SYS_CONNECTION_LOST, then go on to connect',
 
383
    'STANDOFF_WAITING_WITH_NETWORK', 'STANDOFF_WAITING_WITH_NETWORK',
 
384
    'STANDOFF_WAITING', 'STANDOFF_WITH_NETWORK',
 
385
    'START_CONNECTING',
 
386
    SYS_META_QUEUE_WAITING='STANDOFF_WAITING_WITH_NETWORK_WITH_METAQ',
 
387
    SYS_META_QUEUE_DONE='STANDOFF_WAITING_WITH_NETWORK',
 
388
    SYS_CONTENT_QUEUE_WAITING='STANDOFF_WAITING_WITH_NETWORK_WITH_CONTQ',
 
389
    SYS_CONTENT_QUEUE_DONE='STANDOFF_WAITING_WITH_NETWORK',
 
390
    enter=lambda m: m.action_q.disconnect(),
 
391
)
 
392
START_STANDOFF_WAITING_WITH_NETWORK_WITH_METAQ = \
 
393
    START_STANDOFF_WAITING_WITH_NETWORK.clone_with_metaq()
 
394
START_STANDOFF_WAITING_WITH_NETWORK_WITH_CONTQ = \
 
395
    START_STANDOFF_WAITING_WITH_NETWORK.clone_with_contq()
 
396
START_STANDOFF_WAITING_WITH_NETWORK_WITH_BOTHQ = \
 
397
    START_STANDOFF_WAITING_WITH_NETWORK.clone_with_bothq()
 
398
STANDOFF_WAITING_WITH_NETWORK = \
 
399
    START_STANDOFF_WAITING_WITH_NETWORK.clone_with_no_start(
 
400
    'wait for SYS_CONNECTION_LOST, then go on to connect')
 
401
STANDOFF_WAITING_WITH_NETWORK_WITH_METAQ = \
 
402
    STANDOFF_WAITING_WITH_NETWORK.clone_with_metaq()
 
403
STANDOFF_WAITING_WITH_NETWORK_WITH_CONTQ = \
 
404
    STANDOFF_WAITING_WITH_NETWORK.clone_with_contq()
 
405
STANDOFF_WAITING_WITH_NETWORK_WITH_BOTHQ = \
 
406
    STANDOFF_WAITING_WITH_NETWORK.clone_with_bothq()
 
407
 
 
408
START_STANDOFF_WITH_NETWORK = SyncDaemonState(
 
409
    'START_STANDOFF_WITH_NETWORK',
 
410
    'disconnect and wait for SYS_CONNECTION_LOST;'
 
411
        ' network present, but asked not to connect',
 
412
    'STANDOFF_WITH_NETWORK', 'STANDOFF_WAITING_WITH_NETWORK',
 
413
    'STANDOFF', 'STANDOFF_WITH_NETWORK',
 
414
    'READY_WITH_NETWORK',
 
415
    SYS_META_QUEUE_WAITING='STANDOFF_WITH_NETWORK_WITH_METAQ',
 
416
    SYS_META_QUEUE_DONE='STANDOFF_WITH_NETWORK',
 
417
    SYS_CONTENT_QUEUE_WAITING='STANDOFF_WITH_NETWORK_WITH_CONTQ',
 
418
    SYS_CONTENT_QUEUE_DONE='STANDOFF_WITH_NETWORK',
 
419
    enter=lambda m: m.action_q.disconnect(),
 
420
)
 
421
START_STANDOFF_WITH_NETWORK_WITH_METAQ = \
 
422
    START_STANDOFF_WITH_NETWORK.clone_with_metaq()
 
423
START_STANDOFF_WITH_NETWORK_WITH_CONTQ = \
 
424
    START_STANDOFF_WITH_NETWORK.clone_with_contq()
 
425
START_STANDOFF_WITH_NETWORK_WITH_BOTHQ = \
 
426
    START_STANDOFF_WITH_NETWORK.clone_with_bothq()
 
427
STANDOFF_WITH_NETWORK = START_STANDOFF_WITH_NETWORK.clone_with_no_start(
 
428
    'wait for SYS_CONNECTION_LOST; network present, but asked not to connect')
 
429
STANDOFF_WITH_NETWORK_WITH_METAQ = STANDOFF_WITH_NETWORK.clone_with_metaq()
 
430
STANDOFF_WITH_NETWORK_WITH_CONTQ = STANDOFF_WITH_NETWORK.clone_with_contq()
 
431
STANDOFF_WITH_NETWORK_WITH_BOTHQ = STANDOFF_WITH_NETWORK.clone_with_bothq()
 
432
 
 
433
START_STANDOFF_WAITING = SyncDaemonState(
 
434
    'START_STANDOFF_WAITING',
 
435
    'disconnect and wait for SYS_CONNECTION_LOST;'
 
436
        ' wanting to connect but no network present',
 
437
    'STANDOFF_WAITING_WITH_NETWORK', 'STANDOFF_WAITING',
 
438
    'STANDOFF_WAITING', 'STANDOFF',
 
439
    'READY_WAITING',
 
440
    SYS_META_QUEUE_WAITING='STANDOFF_WAITING_WITH_METAQ',
 
441
    SYS_META_QUEUE_DONE='STANDOFF_WAITING',
 
442
    SYS_CONTENT_QUEUE_WAITING='STANDOFF_WAITING_WITH_CONTQ',
 
443
    SYS_CONTENT_QUEUE_DONE='STANDOFF_WAITING',
 
444
    enter=lambda m: m.action_q.disconnect(),
 
445
)
 
446
START_STANDOFF_WAITING_WITH_METAQ = START_STANDOFF_WAITING.clone_with_metaq()
 
447
START_STANDOFF_WAITING_WITH_CONTQ = START_STANDOFF_WAITING.clone_with_contq()
 
448
START_STANDOFF_WAITING_WITH_BOTHQ = START_STANDOFF_WAITING.clone_with_bothq()
 
449
STANDOFF_WAITING = START_STANDOFF_WAITING.clone_with_no_start(
 
450
    'wait for SYS_CONNECTION_LOST; wanting to connect but no network present')
 
451
STANDOFF_WAITING_WITH_METAQ = STANDOFF_WAITING.clone_with_metaq()
 
452
STANDOFF_WAITING_WITH_CONTQ = STANDOFF_WAITING.clone_with_contq()
 
453
STANDOFF_WAITING_WITH_BOTHQ = STANDOFF_WAITING.clone_with_bothq()
 
454
 
 
455
START_STANDOFF = SyncDaemonState(
 
456
    'START_STANDOFF',
 
457
    'disconnect and wait for SYS_CONNECTION_LOST;'
 
458
        ' no network present, not wanting to connect',
 
459
    'STANDOFF_WITH_NETWORK', 'STANDOFF_WAITING',
 
460
    'STANDOFF', 'STANDOFF',
 
461
    'READY_FOR_NETWORK',
 
462
    SYS_META_QUEUE_WAITING='STANDOFF_WITH_METAQ',
 
463
    SYS_META_QUEUE_DONE='STANDOFF',
 
464
    SYS_CONTENT_QUEUE_WAITING='STANDOFF_WITH_CONTQ',
 
465
    SYS_CONTENT_QUEUE_DONE='STANDOFF',
 
466
    enter=lambda m: m.action_q.disconnect(),
 
467
)
 
468
START_STANDOFF_WITH_METAQ = START_STANDOFF.clone_with_metaq()
 
469
START_STANDOFF_WITH_CONTQ = START_STANDOFF.clone_with_contq()
 
470
START_STANDOFF_WITH_BOTHQ = START_STANDOFF.clone_with_bothq()
 
471
STANDOFF = START_STANDOFF.clone_with_no_start(
 
472
    'wait for SYS_CONNECTION_LOST; no network present, not wanting to connect')
 
473
STANDOFF_WITH_METAQ = STANDOFF.clone_with_metaq()
 
474
STANDOFF_WITH_CONTQ = STANDOFF.clone_with_contq()
 
475
STANDOFF_WITH_BOTHQ = STANDOFF.clone_with_bothq()
523
476
 
524
477
START_CONNECTING = SyncDaemonState(
525
478
    'START_CONNECTING',
531
484
    SYS_META_QUEUE_DONE='CONNECTING',
532
485
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_CONTQ',
533
486
    SYS_CONTENT_QUEUE_DONE='CONNECTING',
534
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
535
 
    enter=lambda m: m.action_q.connect(),
536
 
    )
537
 
 
538
 
START_CONNECTING_WITH_METAQ = SyncDaemonState(
539
 
    'START_CONNECTING_WITH_METAQ',
540
 
    'started waiting for the socket to come up; meta_q waiting',
541
 
    'CONNECTING_WITH_METAQ', 'CONNECTING_WITH_METAQ',
542
 
    'READY_WAITING_WITH_METAQ', 'READY_WITH_NETWORK_WITH_METAQ',
543
 
    'START_CONNECTING_WITH_METAQ',
544
 
    SYS_CONNECTION_MADE='START_CONNECTED_WITH_METAQ',
545
 
    SYS_META_QUEUE_WAITING='CONNECTING_WITH_METAQ',
546
 
    SYS_META_QUEUE_DONE='CONNECTING',
547
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
548
 
    SYS_CONTENT_QUEUE_DONE='CONNECTING_WITH_METAQ',
549
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
550
 
    enter=lambda m: m.action_q.connect(),
551
 
    )
552
 
 
553
 
START_CONNECTING_WITH_CONTQ = SyncDaemonState(
554
 
    'START_CONNECTING_WITH_CONTQ',
555
 
    'started waiting for the socket to come up; content_q waiting',
556
 
    'CONNECTING_WITH_CONTQ', 'CONNECTING_WITH_CONTQ',
557
 
    'READY_WAITING_WITH_CONTQ', 'READY_WITH_NETWORK_WITH_CONTQ',
558
 
    'START_CONNECTING_WITH_CONTQ',
559
 
    SYS_CONNECTION_MADE='START_CONNECTED_WITH_CONTQ',
560
 
    SYS_META_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
561
 
    SYS_META_QUEUE_DONE='CONNECTING_WITH_CONTQ',
562
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_CONTQ',
563
 
    SYS_CONTENT_QUEUE_DONE='CONNECTING',
564
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
565
 
    enter=lambda m: m.action_q.connect(),
566
 
    )
567
 
 
568
 
START_CONNECTING_WITH_BOTHQ = SyncDaemonState(
569
 
    'START_CONNECTING_WITH_BOTHQ',
570
 
    'started waiting for the socket to come up; both _q\'s waiting',
571
 
    'CONNECTING_WITH_BOTHQ', 'CONNECTING_WITH_BOTHQ',
572
 
    'READY_WAITING_WITH_BOTHQ', 'READY_WITH_NETWORK_WITH_BOTHQ',
573
 
    'START_CONNECTING_WITH_BOTHQ',
574
 
    SYS_CONNECTION_MADE='START_CONNECTED_WITH_BOTHQ',
575
 
    SYS_META_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
576
 
    SYS_META_QUEUE_DONE='CONNECTING_WITH_CONTQ',
577
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
578
 
    SYS_CONTENT_QUEUE_DONE='CONNECTING_WITH_METAQ',
579
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
580
 
    enter=lambda m: m.action_q.connect(),
581
 
    )
582
 
 
583
 
CONNECTING = SyncDaemonState(
584
 
    'CONNECTING',
585
 
    'waiting for the socket to come up',
586
 
    'CONNECTING', 'CONNECTING',
587
 
    'READY_WAITING', 'READY_WITH_NETWORK', 'START_CONNECTING',
588
 
    SYS_CONNECTION_MADE='START_CONNECTED',
589
 
    SYS_META_QUEUE_WAITING='CONNECTING_WITH_METAQ',
590
 
    SYS_META_QUEUE_DONE='CONNECTING',
591
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_CONTQ',
592
 
    SYS_CONTENT_QUEUE_DONE='CONNECTING',
593
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
594
 
    )
595
 
 
596
 
CONNECTING_WITH_METAQ = SyncDaemonState(
597
 
    'CONNECTING_WITH_METAQ',
598
 
    'waiting for the socket to come up; meta_q waiting',
599
 
    'CONNECTING_WITH_METAQ', 'CONNECTING_WITH_METAQ',
600
 
    'READY_WAITING_WITH_METAQ', 'READY_WITH_NETWORK_WITH_METAQ',
601
 
    'START_CONNECTING_WITH_METAQ',
602
 
    SYS_CONNECTION_MADE='START_CONNECTED_WITH_METAQ',
603
 
    SYS_META_QUEUE_WAITING='CONNECTING_WITH_METAQ',
604
 
    SYS_META_QUEUE_DONE='CONNECTING',
605
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
606
 
    SYS_CONTENT_QUEUE_DONE='CONNECTING_WITH_METAQ',
607
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
608
 
    )
609
 
 
610
 
CONNECTING_WITH_CONTQ = SyncDaemonState(
611
 
    'CONNECTING_WITH_CONTQ',
612
 
    'waiting for the socket to come up; content_q waiting',
613
 
    'CONNECTING_WITH_CONTQ', 'CONNECTING_WITH_CONTQ',
614
 
    'READY_WAITING_WITH_CONTQ', 'READY_WITH_NETWORK_WITH_CONTQ',
615
 
    'START_CONNECTING_WITH_CONTQ',
616
 
    SYS_CONNECTION_MADE='START_CONNECTED_WITH_CONTQ',
617
 
    SYS_META_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
618
 
    SYS_META_QUEUE_DONE='CONNECTING_WITH_CONTQ',
619
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_CONTQ',
620
 
    SYS_CONTENT_QUEUE_DONE='CONNECTING',
621
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
622
 
    )
623
 
 
624
 
CONNECTING_WITH_BOTHQ = SyncDaemonState(
625
 
    'CONNECTING_WITH_BOTHQ',
626
 
    'waiting for the socket to come up; both _q\'s waiting',
627
 
    'CONNECTING_WITH_BOTHQ', 'CONNECTING_WITH_BOTHQ',
628
 
    'READY_WAITING_WITH_BOTHQ', 'READY_WITH_NETWORK_WITH_BOTHQ',
629
 
    'START_CONNECTING_WITH_BOTHQ',
630
 
    SYS_CONNECTION_MADE='START_CONNECTED_WITH_BOTHQ',
631
 
    SYS_META_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
632
 
    SYS_META_QUEUE_DONE='CONNECTING_WITH_CONTQ',
633
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTING_WITH_BOTHQ',
634
 
    SYS_CONTENT_QUEUE_DONE='CONNECTING_WITH_METAQ',
635
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
636
 
    )
 
487
    SYS_HANDSHAKE_TIMEOUT='START_STANDOFF_WAITING_WITH_NETWORK',
 
488
    enter=lambda m: m.action_q.connect(),
 
489
    )
 
490
START_CONNECTING_WITH_METAQ = START_CONNECTING.clone_with_metaq()
 
491
START_CONNECTING_WITH_CONTQ = START_CONNECTING.clone_with_contq()
 
492
START_CONNECTING_WITH_BOTHQ = START_CONNECTING.clone_with_bothq()
 
493
 
 
494
CONNECTING = START_CONNECTING.clone_with_no_start(
 
495
    'waiting for the socket to come up')
 
496
CONNECTING_WITH_METAQ = CONNECTING.clone_with_metaq()
 
497
CONNECTING_WITH_CONTQ = CONNECTING.clone_with_contq()
 
498
CONNECTING_WITH_BOTHQ = CONNECTING.clone_with_bothq()
637
499
 
638
500
START_CONNECTED = NonActiveConnectedSDState(
639
501
    'START_CONNECTED',
644
506
    SYS_META_QUEUE_DONE='CONNECTED',
645
507
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_CONTQ',
646
508
    SYS_CONTENT_QUEUE_DONE='CONNECTED',
647
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
648
 
    enter=lambda m: m.check_version(),
649
 
    )
650
 
 
651
 
START_CONNECTED_WITH_METAQ = NonActiveConnectedSDState(
652
 
    'START_CONNECTED_WITH_METAQ',
653
 
    'socket came up! start checking protocol version; meta_q waiting',
654
 
    with_q='METAQ',
655
 
    SYS_PROTOCOL_VERSION_ERROR='BAD_VERSION',
656
 
    SYS_PROTOCOL_VERSION_OK='START_SET_CAPABILITIES_WITH_METAQ',
657
 
    SYS_META_QUEUE_WAITING='CONNECTED_WITH_METAQ',
658
 
    SYS_META_QUEUE_DONE='CONNECTED',
659
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
660
 
    SYS_CONTENT_QUEUE_DONE='CONNECTED_WITH_METAQ',
661
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
662
 
    enter=lambda m: m.check_version(),
663
 
    )
664
 
 
665
 
START_CONNECTED_WITH_CONTQ = NonActiveConnectedSDState(
666
 
    'START_CONNECTED_WITH_CONTQ',
667
 
    'socket came up! start checking protocol version; content_q waiting',
668
 
    with_q='CONTQ',
669
 
    SYS_PROTOCOL_VERSION_ERROR='BAD_VERSION',
670
 
    SYS_PROTOCOL_VERSION_OK='START_SET_CAPABILITIES_WITH_CONTQ',
671
 
    SYS_META_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
672
 
    SYS_META_QUEUE_DONE='CONNECTED_WITH_CONTQ',
673
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_CONTQ',
674
 
    SYS_CONTENT_QUEUE_DONE='CONNECTED',
675
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
676
 
    enter=lambda m: m.check_version(),
677
 
    )
678
 
 
679
 
START_CONNECTED_WITH_BOTHQ = NonActiveConnectedSDState(
680
 
    'START_CONNECTED_WITH_BOTHQ',
681
 
    'socket came up! start checking protocol version both _q\'s waiting',
682
 
    with_q='BOTHQ',
683
 
    SYS_PROTOCOL_VERSION_ERROR='BAD_VERSION',
684
 
    SYS_PROTOCOL_VERSION_OK='START_SET_CAPABILITIES_WITH_BOTHQ',
685
 
    SYS_META_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
686
 
    SYS_META_QUEUE_DONE='CONNECTED_WITH_CONTQ',
687
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
688
 
    SYS_CONTENT_QUEUE_DONE='CONNECTED_WITH_METAQ',
689
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
690
 
    enter=lambda m: m.check_version(),
691
 
    )
692
 
 
693
 
CONNECTED = NonActiveConnectedSDState(
694
 
    'CONNECTED',
695
 
    'socket came up! checking protocol version',
696
 
    SYS_PROTOCOL_VERSION_ERROR='BAD_VERSION',
697
 
    SYS_PROTOCOL_VERSION_OK='START_SET_CAPABILITIES',
698
 
    SYS_META_QUEUE_WAITING='CONNECTED_WITH_METAQ',
699
 
    SYS_META_QUEUE_DONE='CONNECTED',
700
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_CONTQ',
701
 
    SYS_CONTENT_QUEUE_DONE='CONNECTED',
702
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
703
 
    )
704
 
 
705
 
CONNECTED_WITH_METAQ = NonActiveConnectedSDState(
706
 
    'CONNECTED_WITH_METAQ',
707
 
    'socket came up! checking protocol version; meta_q waiting',
708
 
    with_q='METAQ',
709
 
    SYS_PROTOCOL_VERSION_ERROR='BAD_VERSION',
710
 
    SYS_PROTOCOL_VERSION_OK='START_SET_CAPABILITIES_WITH_METAQ',
711
 
    SYS_META_QUEUE_WAITING='CONNECTED_WITH_METAQ',
712
 
    SYS_META_QUEUE_DONE='CONNECTED',
713
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
714
 
    SYS_CONTENT_QUEUE_DONE='CONNECTED_WITH_METAQ',
715
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
716
 
    )
717
 
 
718
 
CONNECTED_WITH_CONTQ = NonActiveConnectedSDState(
719
 
    'CONNECTED_WITH_CONTQ',
720
 
    'socket came up! checking protocol version; content_q waiting',
721
 
    with_q='CONTQ',
722
 
    SYS_PROTOCOL_VERSION_ERROR='BAD_VERSION',
723
 
    SYS_PROTOCOL_VERSION_OK='START_SET_CAPABILITIES_WITH_CONTQ',
724
 
    SYS_META_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
725
 
    SYS_META_QUEUE_DONE='CONNECTED_WITH_CONTQ',
726
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_CONTQ',
727
 
    SYS_CONTENT_QUEUE_DONE='CONNECTED',
728
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
729
 
    )
730
 
 
731
 
CONNECTED_WITH_BOTHQ = NonActiveConnectedSDState(
732
 
    'CONNECTED_WITH_BOTHQ',
733
 
    'socket came up! checking protocol version both _q\'s waiting',
734
 
    with_q='BOTHQ',
735
 
    SYS_PROTOCOL_VERSION_ERROR='BAD_VERSION',
736
 
    SYS_PROTOCOL_VERSION_OK='START_SET_CAPABILITIES_WITH_BOTHQ',
737
 
    SYS_META_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
738
 
    SYS_META_QUEUE_DONE='CONNECTED_WITH_CONTQ',
739
 
    SYS_CONTENT_QUEUE_WAITING='CONNECTED_WITH_BOTHQ',
740
 
    SYS_CONTENT_QUEUE_DONE='CONNECTED_WITH_METAQ',
741
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
742
 
    )
 
509
    SYS_HANDSHAKE_TIMEOUT='START_STANDOFF_WAITING_WITH_NETWORK',
 
510
    enter=lambda m: m.check_version(),
 
511
    )
 
512
START_CONNECTED_WITH_METAQ = START_CONNECTED.clone_with_metaq()
 
513
START_CONNECTED_WITH_CONTQ = START_CONNECTED.clone_with_contq()
 
514
START_CONNECTED_WITH_BOTHQ = START_CONNECTED.clone_with_bothq()
 
515
CONNECTED = START_CONNECTED.clone_with_no_start('socket came up!'
 
516
                                                ' checking protocol version')
 
517
CONNECTED_WITH_METAQ = CONNECTED.clone_with_metaq()
 
518
CONNECTED_WITH_CONTQ = CONNECTED.clone_with_contq()
 
519
CONNECTED_WITH_BOTHQ = CONNECTED.clone_with_bothq()
743
520
 
744
521
BAD_VERSION = AQErrorState(
745
522
    'BAD_VERSION',
755
532
    SYS_META_QUEUE_DONE='SET_CAPABILITIES',
756
533
    SYS_CONTENT_QUEUE_WAITING='SET_CAPABILITIES_WITH_CONTQ',
757
534
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES',
758
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
759
 
    enter=lambda m: m.set_capabilities(),
760
 
    )
761
 
 
762
 
START_SET_CAPABILITIES_WITH_METAQ = NonActiveConnectedSDState(
763
 
    'START_SET_CAPABILITIES_WITH_METAQ',
764
 
    'protocol version is OK! start checking capabilities; meta_q waiting',
765
 
    with_q='METAQ',
766
 
    SYS_SET_CAPABILITIES_ERROR='CAPABILITIES_MISMATCH',
767
 
    SYS_SET_CAPABILITIES_OK='START_AUTHENTICATING_WITH_METAQ',
768
 
    SYS_META_QUEUE_WAITING='SET_CAPABILITIES_WITH_METAQ',
769
 
    SYS_META_QUEUE_DONE='SET_CAPABILITIES',
770
 
    SYS_CONTENT_QUEUE_WAITING='SET_CAPABILITIES_WITH_BOTHQ',
771
 
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES_WITH_METAQ',
772
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
773
 
    enter=lambda m: m.set_capabilities(),
774
 
    )
775
 
 
776
 
START_SET_CAPABILITIES_WITH_CONTQ = NonActiveConnectedSDState(
777
 
    'START_SET_CAPABILITIES_WITH_CONTQ',
778
 
    'protocol version is OK! start checking capabilities; content_q waiting',
779
 
    with_q='CONTQ',
780
 
    SYS_SET_CAPABILITIES_ERROR='CAPABILITIES_MISMATCH',
781
 
    SYS_SET_CAPABILITIES_OK='START_AUTHENTICATING_WITH_CONTQ',
782
 
    SYS_META_QUEUE_WAITING='SET_CAPABILITIES_WITH_BOTHQ',
783
 
    SYS_META_QUEUE_DONE='SET_CAPABILITIES_WITH_CONTQ',
784
 
    SYS_CONTENT_QUEUE_WAITING='SET_CAPABILITIES_WITH_CONTQ',
785
 
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES',
786
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
787
 
    enter=lambda m: m.set_capabilities(),
788
 
    )
789
 
 
790
 
START_SET_CAPABILITIES_WITH_BOTHQ = NonActiveConnectedSDState(
791
 
    'START_SET_CAPABILITIES_WITH_BOTHQ',
792
 
    'protocol version is OK! start checking capabilities; both _q\'s waiting',
793
 
    with_q='BOTHQ',
794
 
    SYS_SET_CAPABILITIES_ERROR='CAPABILITIES_MISMATCH',
795
 
    SYS_SET_CAPABILITIES_OK='START_AUTHENTICATING_WITH_BOTHQ',
796
 
    SYS_META_QUEUE_WAITING='SET_CAPABILITIES_WITH_BOTHQ',
797
 
    SYS_META_QUEUE_DONE='SET_CAPABILITIES_WITH_CONTQ',
798
 
    SYS_CONTENT_QUEUE_WAITING='START_SET_CAPABILITIES_WITH_BOTHQ',
799
 
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES_WITH_METAQ',
800
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
801
 
    enter=lambda m: m.set_capabilities(),
802
 
    )
803
 
 
804
 
SET_CAPABILITIES = NonActiveConnectedSDState(
805
 
    'SET_CAPABILITIES',
806
 
    'capabilities OK, do the auth!',
807
 
    SYS_SET_CAPABILITIES_ERROR='CAPABILITIES_MISMATCH',
808
 
    SYS_SET_CAPABILITIES_OK='START_AUTHENTICATING',
809
 
    SYS_META_QUEUE_WAITING='SET_CAPABILITIES_WITH_METAQ',
810
 
    SYS_META_QUEUE_DONE='SET_CAPABILITIES',
811
 
    SYS_CONTENT_QUEUE_WAITING='SET_CAPABILITIES_WITH_CONTQ',
812
 
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES',
813
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
814
 
    )
815
 
 
816
 
SET_CAPABILITIES_WITH_METAQ = NonActiveConnectedSDState(
817
 
    'SET_CAPABILITIES_WITH_METAQ',
818
 
    'capabilities OK, do the auth!; meta_q waiting',
819
 
    with_q='METAQ',
820
 
    SYS_SET_CAPABILITIES_ERROR='CAPABILITIES_MISMATCH',
821
 
    SYS_SET_CAPABILITIES_OK='START_AUTHENTICATING_WITH_METAQ',
822
 
    SYS_META_QUEUE_WAITING='SET_CAPABILITIES_WITH_METAQ',
823
 
    SYS_META_QUEUE_DONE='SET_CAPABILITIES',
824
 
    SYS_CONTENT_QUEUE_WAITING='SET_CAPABILITIES_WITH_BOTHQ',
825
 
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES_WITH_METAQ',
826
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
827
 
    )
828
 
 
829
 
SET_CAPABILITIES_WITH_CONTQ = NonActiveConnectedSDState(
830
 
    'SET_CAPABILITIES_WITH_CONTQ',
831
 
    'capabilities OK, do the auth!; cont_q waiting',
832
 
    with_q='CONTQ',
833
 
    SYS_SET_CAPABILITIES_ERROR='CAPABILITIES_MISMATCH',
834
 
    SYS_SET_CAPABILITIES_OK='START_AUTHENTICATING_WITH_CONTQ',
835
 
    SYS_META_QUEUE_WAITING='SET_CAPABILITIES_WITH_BOTHQ',
836
 
    SYS_META_QUEUE_DONE='SET_CAPABILITIES_WITH_CONTQ',
837
 
    SYS_CONTENT_QUEUE_WAITING='SET_CAPABILITIES_WITH_CONTQ',
838
 
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES',
839
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
840
 
    )
841
 
 
842
 
SET_CAPABILITIES_WITH_BOTHQ = NonActiveConnectedSDState(
843
 
    'SET_CAPABILITIES_WITH_BOTHQ',
844
 
    'capabilities OK, do the auth!; both _q\'s waiting',
845
 
    with_q='BOTHQ',
846
 
    SYS_SET_CAPABILITIES_ERROR='CAPABILITIES_MISMATCH',
847
 
    SYS_SET_CAPABILITIES_OK='START_AUTHENTICATING_WITH_BOTHQ',
848
 
    SYS_META_QUEUE_WAITING='SET_CAPABILITIES_WITH_BOTHQ',
849
 
    SYS_META_QUEUE_DONE='SET_CAPABILITIES_WITH_CONTQ',
850
 
    SYS_CONTENT_QUEUE_WAITING='SET_CAPABILITIES_WITH_BOTHQ',
851
 
    SYS_CONTENT_QUEUE_DONE='SET_CAPABILITIES_WITH_METAQ',
852
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
853
 
    )
 
535
    SYS_HANDSHAKE_TIMEOUT='START_STANDOFF_WAITING_WITH_NETWORK',
 
536
    enter=lambda m: m.set_capabilities(),
 
537
    )
 
538
START_SET_CAPABILITIES_WITH_METAQ = START_SET_CAPABILITIES.clone_with_metaq()
 
539
START_SET_CAPABILITIES_WITH_CONTQ = START_SET_CAPABILITIES.clone_with_contq()
 
540
START_SET_CAPABILITIES_WITH_BOTHQ = START_SET_CAPABILITIES.clone_with_bothq()
 
541
SET_CAPABILITIES = START_SET_CAPABILITIES.clone_with_no_start(
 
542
    'protocol version is OK! checking capabilities')
 
543
SET_CAPABILITIES_WITH_METAQ = SET_CAPABILITIES.clone_with_metaq()
 
544
SET_CAPABILITIES_WITH_CONTQ = SET_CAPABILITIES.clone_with_contq()
 
545
SET_CAPABILITIES_WITH_BOTHQ = SET_CAPABILITIES.clone_with_bothq()
854
546
 
855
547
CAPABILITIES_MISMATCH = AQErrorState(
856
548
    'CAPABILITIES_MISMATCH',
860
552
START_AUTHENTICATING = NonActiveConnectedSDState(
861
553
    'START_AUTHENTICATING',
862
554
    'Start doing the OAuth dance',
863
 
    SYS_OAUTH_OK='SCANNING_START',
864
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
865
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_METAQ',
866
 
    SYS_META_QUEUE_DONE='AUTHENTICATING',
867
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_CONTQ',
868
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING',
869
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
870
 
    enter=lambda m: m.authenticate(),
871
 
    )
872
 
 
873
 
START_AUTHENTICATING_WITH_METAQ = NonActiveConnectedSDState(
874
 
    'START_AUTHENTICATING_WITH_METAQ',
875
 
    'Start doing the OAuth dance; meta_q waiting',
876
 
    with_q='METAQ',
877
 
    SYS_OAUTH_OK='SCANNING_START_WITH_METAQ',
878
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
879
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_METAQ',
880
 
    SYS_META_QUEUE_DONE='AUTHENTICATING',
881
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
882
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING_WITH_METAQ',
883
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
884
 
    enter=lambda m: m.authenticate(),
885
 
    )
886
 
 
887
 
START_AUTHENTICATING_WITH_CONTQ = NonActiveConnectedSDState(
888
 
    'START_AUTHENTICATING_WITH_CONTQ',
889
 
    'Start doing the OAuth dance; content_q waiting',
890
 
    with_q='CONTQ',
891
 
    SYS_OAUTH_OK='SCANNING_START_WITH_CONTQ',
892
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
893
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
894
 
    SYS_META_QUEUE_DONE='AUTHENTICATING_WITH_CONTQ',
895
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_CONTQ',
896
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING',
897
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
898
 
    enter=lambda m: m.authenticate(),
899
 
    )
900
 
 
901
 
START_AUTHENTICATING_WITH_BOTHQ = NonActiveConnectedSDState(
902
 
    'START_AUTHENTICATING_WITH_BOTHQ',
903
 
    'Start doing the OAuth dance; both _q\'s waiting',
904
 
    with_q='CONTQ',
905
 
    SYS_OAUTH_OK='SCANNING_START_WITH_BOTHQ',
906
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
907
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
908
 
    SYS_META_QUEUE_DONE='AUTHENTICATING_WITH_CONTQ',
909
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
910
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING_WITH_METAQ',
911
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
912
 
    enter=lambda m: m.authenticate(),
913
 
    )
914
 
 
915
 
AUTHENTICATING = NonActiveConnectedSDState(
916
 
    'AUTHENTICATING',
917
 
    'Doing the OAuth dance',
918
 
    SYS_OAUTH_OK='SCANNING_START',
919
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
920
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_METAQ',
921
 
    SYS_META_QUEUE_DONE='AUTHENTICATING',
922
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_CONTQ',
923
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING',
924
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING',
925
 
    )
926
 
 
927
 
AUTHENTICATING_WITH_METAQ = NonActiveConnectedSDState(
928
 
    'AUTHENTICATING_WITH_METAQ',
929
 
    'Doing the OAuth dance; meta_q waiting',
930
 
    with_q='METAQ',
931
 
    SYS_OAUTH_OK='SCANNING_START_WITH_METAQ',
932
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
933
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_METAQ',
934
 
    SYS_META_QUEUE_DONE='AUTHENTICATING',
935
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
936
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING_WITH_METAQ',
937
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_METAQ',
938
 
    )
939
 
 
940
 
AUTHENTICATING_WITH_CONTQ = NonActiveConnectedSDState(
941
 
    'AUTHENTICATING_WITH_CONTQ',
942
 
    'Doing the OAuth dance; content_q waiting',
943
 
    with_q='CONTQ',
944
 
    SYS_OAUTH_OK='SCANNING_START_WITH_CONTQ',
945
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
946
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
947
 
    SYS_META_QUEUE_DONE='AUTHENTICATING_WITH_CONTQ',
948
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_CONTQ',
949
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING',
950
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_CONTQ',
951
 
    )
952
 
 
953
 
AUTHENTICATING_WITH_BOTHQ = NonActiveConnectedSDState(
954
 
    'AUTHENTICATING_WITH_BOTHQ',
955
 
    'Doing the OAuth dance; both _q\'s waiting',
956
 
    with_q='CONTQ',
957
 
    SYS_OAUTH_OK='SCANNING_START_WITH_BOTHQ',
958
 
    SYS_OAUTH_ERROR='AUTH_FAILED',
959
 
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
960
 
    SYS_META_QUEUE_DONE='AUTHENTICATING_WITH_CONTQ',
961
 
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_BOTHQ',
962
 
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING_WITH_METAQ',
963
 
    SYS_HANDSHAKE_TIMEOUT='START_CONNECTING_WITH_BOTHQ',
964
 
    )
 
555
    SYS_OAUTH_OK='START_SCANNING',
 
556
    SYS_OAUTH_ERROR='AUTH_FAILED',
 
557
    SYS_META_QUEUE_WAITING='AUTHENTICATING_WITH_METAQ',
 
558
    SYS_META_QUEUE_DONE='AUTHENTICATING',
 
559
    SYS_CONTENT_QUEUE_WAITING='AUTHENTICATING_WITH_CONTQ',
 
560
    SYS_CONTENT_QUEUE_DONE='AUTHENTICATING',
 
561
    SYS_HANDSHAKE_TIMEOUT='START_STANDOFF_WAITING_WITH_NETWORK',
 
562
    enter=lambda m: m.authenticate(),
 
563
    )
 
564
START_AUTHENTICATING_WITH_METAQ = START_AUTHENTICATING.clone_with_metaq()
 
565
START_AUTHENTICATING_WITH_CONTQ = START_AUTHENTICATING.clone_with_contq()
 
566
START_AUTHENTICATING_WITH_BOTHQ = START_AUTHENTICATING.clone_with_bothq()
 
567
AUTHENTICATING = START_AUTHENTICATING.clone_with_no_start(
 
568
    'Doing the OAuth dance')
 
569
AUTHENTICATING_WITH_METAQ = AUTHENTICATING.clone_with_metaq()
 
570
AUTHENTICATING_WITH_CONTQ = AUTHENTICATING.clone_with_contq()
 
571
AUTHENTICATING_WITH_BOTHQ = AUTHENTICATING.clone_with_bothq()
965
572
 
966
573
AUTH_FAILED = AQErrorState(
967
574
    'AUTH_FAILED',
976
583
    "Some kind of strange error happened and I can't continue",
977
584
    enter=lambda m: m.restart())
978
585
 
979
 
SCANNING_START = NonActiveConnectedSDState(
980
 
    'SCANNING_START',
 
586
START_SCANNING = NonActiveConnectedSDState(
 
587
    'START_SCANNING',
981
588
    'start doing server rescan',
982
589
    SYS_SERVER_RESCAN_STARTING='SCANNING',
983
590
    SYS_META_QUEUE_WAITING='SCANNING_WITH_METAQ',
986
593
    SYS_CONTENT_QUEUE_DONE='SCANNING',
987
594
    enter=lambda m: m.server_rescan(),
988
595
    )
989
 
 
990
 
SCANNING_START_WITH_METAQ = NonActiveConnectedSDState(
991
 
    'SCANNING_START_WITH_METAQ',
992
 
    'start doing server rescan, meta queue is waiting',
993
 
    with_q='METAQ',
994
 
    SYS_SERVER_RESCAN_STARTING='SCANNING_WITH_METAQ',
995
 
    SYS_META_QUEUE_WAITING='SCANNING_WITH_METAQ',
996
 
    SYS_META_QUEUE_DONE='SCANNING',
997
 
    SYS_CONTENT_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
998
 
    SYS_CONTENT_QUEUE_DONE='SCANNING_WITH_METAQ',
999
 
    enter=lambda m: m.server_rescan(),
1000
 
    )
1001
 
 
1002
 
SCANNING_START_WITH_CONTQ = NonActiveConnectedSDState(
1003
 
    'SCANNING_START_WITH_CONTQ',
1004
 
    'start doing server rescan, content queue waiting',
1005
 
    with_q='CONTQ',
1006
 
    SYS_SERVER_RESCAN_STARTING='SCANNING_WITH_CONTQ',
1007
 
    SYS_META_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
1008
 
    SYS_META_QUEUE_DONE='SCANNING_WITH_CONTQ',
1009
 
    SYS_CONTENT_QUEUE_WAITING='SCANNING_WITH_CONTQ',
1010
 
    SYS_CONTENT_QUEUE_DONE='SCANNING',
1011
 
    enter=lambda m: m.server_rescan(),
1012
 
    )
1013
 
 
1014
 
SCANNING_START_WITH_BOTHQ = NonActiveConnectedSDState(
1015
 
    'SCANNING_START_WITH_BOTHQ',
1016
 
    'start doing server rescan, both request queues waiting',
1017
 
    with_q='CONTQ',
1018
 
    SYS_SERVER_RESCAN_STARTING='SCANNING_WITH_BOTHQ',
1019
 
    SYS_META_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
1020
 
    SYS_META_QUEUE_DONE='SCANNING_WITH_CONTQ',
1021
 
    SYS_CONTENT_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
1022
 
    SYS_CONTENT_QUEUE_DONE='SCANNING_WITH_METAQ',
1023
 
    enter=lambda m: m.server_rescan(),
1024
 
    )
1025
 
 
1026
 
SCANNING = NonActiveConnectedSDState(
1027
 
    'SCANNING',
1028
 
    'doing server rescan',
1029
 
    SYS_SERVER_RESCAN_DONE='IDLE',
1030
 
    SYS_SERVER_RESCAN_STARTING='SCANNING',
1031
 
    SYS_META_QUEUE_WAITING='SCANNING_WITH_METAQ',
1032
 
    SYS_META_QUEUE_DONE='SCANNING',
1033
 
    SYS_CONTENT_QUEUE_WAITING='SCANNING_WITH_CONTQ',
1034
 
    SYS_CONTENT_QUEUE_DONE='SCANNING',
1035
 
    )
1036
 
 
1037
 
SCANNING_WITH_METAQ = NonActiveConnectedSDState(
1038
 
    'SCANNING_WITH_METAQ',
1039
 
    'doing server rescan, meta queue is waiting',
1040
 
    with_q='METAQ',
1041
 
    SYS_SERVER_RESCAN_DONE='START_WORKING_ON_METADATA',
1042
 
    SYS_SERVER_RESCAN_STARTING='SCANNING_WITH_METAQ',
1043
 
    SYS_META_QUEUE_WAITING='SCANNING_WITH_METAQ',
1044
 
    SYS_META_QUEUE_DONE='SCANNING',
1045
 
    SYS_CONTENT_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
1046
 
    SYS_CONTENT_QUEUE_DONE='SCANNING_WITH_METAQ',
1047
 
    )
1048
 
 
1049
 
SCANNING_WITH_CONTQ = NonActiveConnectedSDState(
1050
 
    'SCANNING_WITH_CONTQ',
1051
 
    'doing server rescan, content queue waiting',
1052
 
    with_q='CONTQ',
1053
 
    SYS_SERVER_RESCAN_DONE='START_WORKING_ON_CONTENT',
1054
 
    SYS_SERVER_RESCAN_STARTING='SCANNING_WITH_CONTQ',
1055
 
    SYS_META_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
1056
 
    SYS_META_QUEUE_DONE='SCANNING_WITH_CONTQ',
1057
 
    SYS_CONTENT_QUEUE_WAITING='SCANNING_WITH_CONTQ',
1058
 
    SYS_CONTENT_QUEUE_DONE='SCANNING',
1059
 
    )
1060
 
 
1061
 
SCANNING_WITH_BOTHQ = NonActiveConnectedSDState(
1062
 
    'SCANNING_WITH_BOTHQ',
1063
 
    'doing server rescan, both request queues waiting',
1064
 
    with_q='CONTQ',
1065
 
    SYS_SERVER_RESCAN_DONE='START_WORKING_ON_METADATA_WITH_CONTQ',
1066
 
    SYS_SERVER_RESCAN_STARTING='SCANNING_WITH_BOTHQ',
1067
 
    SYS_META_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
1068
 
    SYS_META_QUEUE_DONE='SCANNING_WITH_CONTQ',
1069
 
    SYS_CONTENT_QUEUE_WAITING='SCANNING_WITH_BOTHQ',
1070
 
    SYS_CONTENT_QUEUE_DONE='SCANNING_WITH_METAQ',
1071
 
    )
 
596
START_SCANNING_WITH_METAQ = START_SCANNING.clone_with_metaq()
 
597
START_SCANNING_WITH_CONTQ = START_SCANNING.clone_with_contq()
 
598
START_SCANNING_WITH_BOTHQ = START_SCANNING.clone_with_bothq()
 
599
SCANNING = START_SCANNING.clone_with_no_start('doing server rescan',
 
600
                                              SYS_SERVER_RESCAN_DONE='IDLE')
 
601
SCANNING_WITH_METAQ = SCANNING.clone_with_metaq(
 
602
    SYS_SERVER_RESCAN_DONE='START_WORKING_ON_METADATA')
 
603
SCANNING_WITH_CONTQ = SCANNING.clone_with_contq(
 
604
    SYS_SERVER_RESCAN_DONE='START_WORKING_ON_CONTENT')
 
605
SCANNING_WITH_BOTHQ = SCANNING.clone_with_bothq(
 
606
    SYS_SERVER_RESCAN_DONE='START_WORKING_ON_METADATA_WITH_CONTQ')
1072
607
 
1073
608
IDLE = NonActiveConnectedSDState(
1074
609
    'IDLE',
1089
624
    SYS_CONTENT_QUEUE_DONE='WORKING_ON_METADATA',
1090
625
    enter=lambda m: m.action_q.meta_queue.run(),
1091
626
    )
1092
 
 
1093
 
WORKING_ON_METADATA = WorkingSDState(
1094
 
    'WORKING_ON_METADATA',
1095
 
    'working on metadata',
1096
 
    SYS_META_QUEUE_WAITING='WORKING_ON_METADATA',
1097
 
    SYS_META_QUEUE_DONE='IDLE',
1098
 
    SYS_CONTENT_QUEUE_WAITING='WORKING_ON_METADATA_WITH_CONTQ',
1099
 
    SYS_CONTENT_QUEUE_DONE='WORKING_ON_METADATA',
1100
 
    )
 
627
WORKING_ON_METADATA = START_WORKING_ON_METADATA.clone_with_no_start(
 
628
    'working on metadata')
1101
629
 
1102
630
START_WORKING_ON_CONTENT = WorkingSDState(
1103
631
    'START_WORKING_ON_CONTENT',
1108
636
    SYS_CONTENT_QUEUE_DONE='IDLE',
1109
637
    enter=lambda m: m.action_q.content_queue.run(),
1110
638
    )
1111
 
 
1112
 
WORKING_ON_CONTENT = WorkingSDState(
1113
 
    'WORKING_ON_CONTENT',
1114
 
    'working on content',
1115
 
    SYS_META_QUEUE_WAITING='START_WORKING_ON_BOTH',
1116
 
    SYS_META_QUEUE_DONE='WORKING_ON_CONTENT',
1117
 
    SYS_CONTENT_QUEUE_WAITING='WORKING_ON_CONTENT',
1118
 
    SYS_CONTENT_QUEUE_DONE='IDLE',
1119
 
    )
 
639
WORKING_ON_CONTENT = START_WORKING_ON_CONTENT.clone_with_no_start(
 
640
    'working on content')
1120
641
 
1121
642
START_WORKING_ON_METADATA_WITH_CONTQ = WorkingSDState(
1122
643
    'START_WORKING_ON_METADATA_WITH_CONTQ',
1128
649
    SYS_CONTENT_QUEUE_DONE='WORKING_ON_METADATA',
1129
650
    enter=lambda m: m.action_q.meta_queue.run(),
1130
651
    )
1131
 
 
1132
 
WORKING_ON_METADATA_WITH_CONTQ = WorkingSDState(
1133
 
    'WORKING_ON_METADATA_WITH_CONTQ',
1134
 
    'working on metadata; content work is waiting',
1135
 
    with_q='CONTQ',
1136
 
    SYS_META_QUEUE_WAITING='WORKING_ON_METADATA_WITH_CONTQ',
1137
 
    SYS_META_QUEUE_DONE='START_WORKING_ON_CONTENT',
1138
 
    SYS_CONTENT_QUEUE_WAITING='WORKING_ON_METADATA_WITH_CONTQ',
1139
 
    SYS_CONTENT_QUEUE_DONE='WORKING_ON_METADATA',
1140
 
    )
 
652
WORKING_ON_METADATA_WITH_CONTQ = \
 
653
    START_WORKING_ON_METADATA_WITH_CONTQ.clone_with_no_start(
 
654
    'working on metadata; content work is waiting')
1141
655
 
1142
656
START_WORKING_ON_BOTH = WorkingSDState(
1143
657
    'START_WORKING_ON_BOTH',
1144
658
    'start working on both content and metadata',
1145
 
    with_q='BOTHQ',
1146
659
    SYS_META_QUEUE_WAITING='WORKING_ON_BOTH',
1147
660
    SYS_META_QUEUE_DONE='WORKING_ON_CONTENT',
1148
661
    SYS_CONTENT_QUEUE_WAITING='WORKING_ON_BOTH',
1149
662
    SYS_CONTENT_QUEUE_DONE='WORKING_ON_METADATA',
1150
663
    enter=lambda m: m.action_q.meta_queue.run(),
1151
664
    )
1152
 
 
1153
 
WORKING_ON_BOTH = WorkingSDState(
1154
 
    'WORKING_ON_BOTH',
1155
 
    'working on both content and metadata',
1156
 
    with_q='BOTHQ',
1157
 
    SYS_META_QUEUE_WAITING='WORKING_ON_BOTH',
1158
 
    SYS_META_QUEUE_DONE='WORKING_ON_CONTENT',
1159
 
    SYS_CONTENT_QUEUE_WAITING='WORKING_ON_BOTH',
1160
 
    SYS_CONTENT_QUEUE_DONE='WORKING_ON_METADATA',
1161
 
    )
 
665
WORKING_ON_BOTH = START_WORKING_ON_BOTH.clone_with_no_start(
 
666
    'working on both content and metadata')
1162
667
 
1163
668
CLEANUP = SyncDaemonState(
1164
669
    'CLEANUP',
1165
 
    'doing cleanup (net down, user asked for shutdown)',
 
670
    'doing cleanup; net down, user asked for shutdown',
1166
671
    'CLEANUP_WITH_NETWORK', 'CLEANUP_WAITING',
1167
 
    'CLEANUP', 'CLEANUP', 'CLEANUP',
 
672
    'CLEANUP', 'CLEANUP', 'CLEANUP_WITH_CONNECTION_LOST',
1168
673
    SYS_CLEANUP_STARTED='CLEANUP',
1169
 
    SYS_CLEANUP_FINISHED='READY_FOR_NETWORK',
 
674
    SYS_CLEANUP_FINISHED='START_STANDOFF',
1170
675
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_METAQ',
1171
676
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_CONTQ',
1172
677
    SYS_META_QUEUE_DONE='CLEANUP', # cancelling meta_q.head can do this
1173
678
    SYS_CONTENT_QUEUE_DONE='CLEANUP', # ditto
1174
679
    )
1175
 
 
1176
 
CLEANUP_WITH_METAQ = SyncDaemonState(
1177
 
    'CLEANUP_WITH_METAQ',
1178
 
    'doing cleanup (net down, user asked for shutdown, meta_q waiting)',
1179
 
    'CLEANUP_WITH_NETWORK_WITH_METAQ', 'CLEANUP_WAITING_WITH_METAQ',
1180
 
    'CLEANUP_WITH_METAQ', 'CLEANUP_WITH_METAQ', 'CLEANUP_WITH_METAQ',
1181
 
    SYS_CLEANUP_STARTED='CLEANUP_WITH_METAQ',
1182
 
    SYS_CLEANUP_FINISHED='READY_FOR_NETWORK_WITH_METAQ',
1183
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_METAQ',
1184
 
    SYS_META_QUEUE_DONE='CLEANUP',
1185
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_BOTHQ',
1186
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_METAQ',
1187
 
    )
1188
 
 
1189
 
CLEANUP_WITH_CONTQ = SyncDaemonState(
1190
 
    'CLEANUP_WITH_CONTQ',
1191
 
    'doing cleanup (net down, user asked for shutdown, content_q waiting)',
1192
 
    'CLEANUP_WITH_NETWORK_WITH_CONTQ', 'CLEANUP_WAITING_WITH_CONTQ',
1193
 
    'CLEANUP_WITH_CONTQ', 'CLEANUP_WITH_CONTQ', 'CLEANUP_WITH_CONTQ',
1194
 
    SYS_CLEANUP_STARTED='CLEANUP_WITH_CONTQ',
1195
 
    SYS_CLEANUP_FINISHED='READY_FOR_NETWORK_WITH_CONTQ',
1196
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_BOTHQ',
1197
 
    SYS_META_QUEUE_DONE='CLEANUP_WITH_CONTQ',
1198
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_CONTQ',
1199
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP',
1200
 
    )
1201
 
 
1202
 
CLEANUP_WITH_BOTHQ = SyncDaemonState(
1203
 
    'CLEANUP_WITH_BOTHQ',
1204
 
    'doing cleanup (net down, user asked for shutdown, both _q\'s waiting)',
1205
 
    'CLEANUP_WITH_NETWORK_WITH_BOTHQ', 'CLEANUP_WAITING_WITH_BOTHQ',
1206
 
    'CLEANUP_WITH_BOTHQ', 'CLEANUP_WITH_BOTHQ', 'CLEANUP_WITH_BOTHQ',
1207
 
    SYS_CLEANUP_STARTED='CLEANUP_WITH_BOTHQ',
1208
 
    SYS_CLEANUP_FINISHED='READY_FOR_NETWORK_WITH_BOTHQ',
1209
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_BOTHQ',
1210
 
    SYS_META_QUEUE_DONE='CLEANUP_WITH_CONTQ',
1211
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_BOTHQ',
1212
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_METAQ',
1213
 
    )
 
680
CLEANUP_WITH_METAQ = CLEANUP.clone_with_metaq()
 
681
CLEANUP_WITH_CONTQ = CLEANUP.clone_with_contq()
 
682
CLEANUP_WITH_BOTHQ = CLEANUP.clone_with_bothq()
 
683
 
 
684
CLEANUP_WITH_CONNECTION_LOST = SyncDaemonState(
 
685
    'CLEANUP_WITH_CONNECTION_LOST',
 
686
    'doing cleanup; net down, user asked for shutdown, connection already lost',
 
687
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
688
    'CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
689
    'CLEANUP_WITH_CONNECTION_LOST',
 
690
    'CLEANUP_WITH_CONNECTION_LOST',
 
691
    'CLEANUP_WITH_CONNECTION_LOST',
 
692
    SYS_CLEANUP_STARTED='CLEANUP_WITH_CONNECTION_LOST',
 
693
    SYS_CLEANUP_FINISHED='START_STANDOFF',
 
694
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_CONNECTION_LOST_WITH_METAQ',
 
695
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_CONNECTION_LOST_WITH_CONTQ',
 
696
    SYS_META_QUEUE_DONE='CLEANUP_WITH_CONNECTION_LOST',
 
697
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_CONNECTION_LOST',
 
698
    )
 
699
CLEANUP_WITH_CONNECTION_LOST_WITH_METAQ = \
 
700
    CLEANUP_WITH_CONNECTION_LOST.clone_with_metaq()
 
701
CLEANUP_WITH_CONNECTION_LOST_WITH_CONTQ = \
 
702
    CLEANUP_WITH_CONNECTION_LOST.clone_with_contq()
 
703
CLEANUP_WITH_CONNECTION_LOST_WITH_BOTHQ = \
 
704
    CLEANUP_WITH_CONNECTION_LOST.clone_with_bothq()
1214
705
 
1215
706
START_CLEANUP_WAITING = SyncDaemonState(
1216
707
    'START_CLEANUP_WAITING',
1217
 
    'start doing cleanup (network dropped)',
1218
 
    'CLEANUP_WAITING_WITH_NETWORK', 'CLEANUP_WAITING',
1219
 
    'CLEANUP_WAITING', 'CLEANUP', 'CLEANUP_WAITING',
1220
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING',
1221
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_METAQ',
1222
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_CONTQ',
1223
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING',
1224
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING',
1225
 
    enter=lambda m: m.action_q.cleanup(),
1226
 
    )
1227
 
 
1228
 
START_CLEANUP_WAITING_WITH_CONTQ = SyncDaemonState(
1229
 
    'START_CLEANUP_WAITING_WITH_CONTQ',
1230
 
    'start doing cleanup (network dropped; contq waiting)',
1231
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1232
 
    'CLEANUP_WAITING_WITH_CONTQ',
1233
 
    'CLEANUP_WAITING_WITH_CONTQ', 'CLEANUP_WITH_CONTQ',
1234
 
    'CLEANUP_WAITING_WITH_CONTQ',
1235
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_CONTQ',
1236
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_BOTHQ',
1237
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_CONTQ',
1238
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_CONTQ',
1239
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING',
1240
 
    enter=lambda m: m.action_q.cleanup(),
1241
 
    )
1242
 
 
1243
 
START_CLEANUP_WAITING_WITH_BOTHQ = SyncDaemonState(
1244
 
    'START_CLEANUP_WAITING_WITH_BOTHQ',
1245
 
    'start doing cleanup (network dropped; bothq waiting)',
1246
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1247
 
    'CLEANUP_WAITING_WITH_BOTHQ',
1248
 
    'CLEANUP_WAITING_WITH_BOTHQ', 'CLEANUP_WITH_BOTHQ',
1249
 
    'CLEANUP_WAITING_WITH_BOTHQ',
1250
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_BOTHQ',
1251
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_BOTHQ',
1252
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_BOTHQ',
1253
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_CONTQ',
1254
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_METAQ',
1255
 
    enter=lambda m: m.action_q.cleanup(),
1256
 
    )
1257
 
 
1258
 
CLEANUP_WAITING = SyncDaemonState(
1259
 
    'CLEANUP_WAITING',
1260
 
    'doing cleanup (network dropped)',
1261
 
    'CLEANUP_WAITING_WITH_NETWORK', 'CLEANUP_WAITING',
1262
 
    'CLEANUP_WAITING', 'CLEANUP', 'CLEANUP_WAITING',
1263
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING',
1264
 
    SYS_CLEANUP_FINISHED='READY_WAITING',
1265
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_METAQ',
1266
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_CONTQ',
1267
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING',
1268
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING',
1269
 
    )
1270
 
 
1271
 
CLEANUP_WAITING_WITH_METAQ = SyncDaemonState(
1272
 
    'CLEANUP_WAITING_WITH_METAQ',
1273
 
    'doing cleanup (network dropped, meta_q waiting)',
1274
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ', 'CLEANUP_WAITING_WITH_METAQ',
1275
 
    'CLEANUP_WAITING_WITH_METAQ', 'CLEANUP_WITH_METAQ',
1276
 
    'CLEANUP_WAITING_WITH_METAQ',
1277
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_METAQ',
1278
 
    SYS_CLEANUP_FINISHED='READY_WAITING_WITH_METAQ',
1279
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_METAQ',
1280
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING',
1281
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_BOTHQ',
1282
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_METAQ',
1283
 
    )
1284
 
 
1285
 
CLEANUP_WAITING_WITH_CONTQ = SyncDaemonState(
1286
 
    'CLEANUP_WAITING_WITH_CONTQ',
1287
 
    'doing cleanup (network dropped, content_q waiting)',
1288
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ', 'CLEANUP_WAITING_WITH_CONTQ',
1289
 
    'CLEANUP_WAITING_WITH_CONTQ', 'CLEANUP_WITH_CONTQ',
1290
 
    'CLEANUP_WAITING_WITH_CONTQ',
1291
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_CONTQ',
1292
 
    SYS_CLEANUP_FINISHED='READY_WAITING_WITH_CONTQ',
1293
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_BOTHQ',
1294
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_CONTQ',
1295
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_CONTQ',
1296
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING',
1297
 
    )
1298
 
 
1299
 
CLEANUP_WAITING_WITH_BOTHQ = SyncDaemonState(
1300
 
    'CLEANUP_WAITING_WITH_BOTHQ',
1301
 
    'doing cleanup (network dropped, both _q\'s waiting)',
1302
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ', 'CLEANUP_WAITING_WITH_BOTHQ',
1303
 
    'CLEANUP_WAITING_WITH_BOTHQ', 'CLEANUP_WITH_BOTHQ',
1304
 
    'CLEANUP_WAITING_WITH_BOTHQ',
1305
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_BOTHQ',
1306
 
    SYS_CLEANUP_FINISHED='READY_WAITING_WITH_BOTHQ',
1307
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_BOTHQ',
1308
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_CONTQ',
1309
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_BOTHQ',
1310
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_METAQ',
1311
 
    )
 
708
    'start doing cleanup; network dropped',
 
709
    'CLEANUP_WAITING_WITH_NETWORK', 'CLEANUP_WAITING',
 
710
    'CLEANUP_WAITING', 'CLEANUP',
 
711
    'CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
712
    SYS_CLEANUP_STARTED='CLEANUP_WAITING',
 
713
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_METAQ',
 
714
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_CONTQ',
 
715
    SYS_META_QUEUE_DONE='CLEANUP_WAITING',
 
716
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING',
 
717
    enter=lambda m: m.action_q.cleanup(),
 
718
    )
 
719
START_CLEANUP_WAITING_WITH_CONTQ = START_CLEANUP_WAITING.clone_with_contq()
 
720
# START_CLEANUP_WAITING_WITH_BOTHQ = START_CLEANUP_WAITING.clone_with_bothq()
 
721
CLEANUP_WAITING = START_CLEANUP_WAITING.clone_with_no_start(
 
722
    'doing cleanup; network dropped',
 
723
    SYS_CLEANUP_FINISHED='START_STANDOFF_WAITING')
 
724
CLEANUP_WAITING_WITH_METAQ = CLEANUP_WAITING.clone_with_metaq()
 
725
CLEANUP_WAITING_WITH_CONTQ = CLEANUP_WAITING.clone_with_contq()
 
726
CLEANUP_WAITING_WITH_BOTHQ = CLEANUP_WAITING.clone_with_bothq()
 
727
 
1312
728
 
1313
729
CLEANUP_WITH_NETWORK = SyncDaemonState(
1314
730
    'CLEANUP_WITH_NETWORK',
1315
 
    'doing cleanup (net hiccup; user asked for shutdown)',
 
731
    'doing cleanup; net hiccup, user asked for shutdown',
1316
732
    'CLEANUP_WITH_NETWORK', 'CLEANUP_WAITING_WITH_NETWORK',
1317
 
    'CLEANUP', 'CLEANUP_WITH_NETWORK', 'CLEANUP_WITH_NETWORK',
 
733
    'CLEANUP', 'CLEANUP_WITH_NETWORK',
 
734
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
1318
735
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK',
 
736
    SYS_CLEANUP_FINISHED='START_STANDOFF_WITH_NETWORK',
 
737
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_METAQ',
 
738
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_CONTQ',
 
739
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK',
 
740
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK',
 
741
    )
 
742
CLEANUP_WITH_NETWORK_WITH_METAQ = CLEANUP_WITH_NETWORK.clone_with_metaq()
 
743
CLEANUP_WITH_NETWORK_WITH_CONTQ = CLEANUP_WITH_NETWORK.clone_with_contq()
 
744
CLEANUP_WITH_NETWORK_WITH_BOTHQ = CLEANUP_WITH_NETWORK.clone_with_bothq()
 
745
 
 
746
CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST = SyncDaemonState(
 
747
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
748
    'doing cleanup; net hiccup, user asked to shutdown, '
 
749
        'already got SYS_CONNECTION_LOST',
 
750
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
751
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
752
    'CLEANUP_WITH_CONNECTION_LOST',
 
753
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
754
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
755
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
1319
756
    SYS_CLEANUP_FINISHED='READY_WITH_NETWORK',
1320
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_METAQ',
1321
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1322
 
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK',
1323
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK',
1324
 
    )
1325
 
 
1326
 
CLEANUP_WITH_NETWORK_WITH_METAQ = SyncDaemonState(
1327
 
    'CLEANUP_WITH_NETWORK_WITH_METAQ',
1328
 
    'doing cleanup (net hiccup; user asked for shutdown; meta_q waiting)',
1329
 
    'CLEANUP_WITH_NETWORK_WITH_METAQ',
1330
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1331
 
    'CLEANUP_WITH_METAQ', 'CLEANUP_WITH_NETWORK_WITH_METAQ',
1332
 
    'CLEANUP_WITH_NETWORK_WITH_METAQ',
1333
 
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK_WITH_METAQ',
1334
 
    SYS_CLEANUP_FINISHED='READY_WITH_NETWORK_WITH_METAQ',
1335
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_METAQ',
1336
 
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK',
1337
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1338
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_METAQ',
1339
 
    )
1340
 
 
1341
 
CLEANUP_WITH_NETWORK_WITH_CONTQ = SyncDaemonState(
1342
 
    'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1343
 
    'doing cleanup (net hiccup; user asked for shutdown; content_q waiting)',
1344
 
    'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1345
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1346
 
    'CLEANUP_WITH_CONTQ', 'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1347
 
    'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1348
 
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1349
 
    SYS_CLEANUP_FINISHED='READY_WITH_NETWORK_WITH_CONTQ',
1350
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1351
 
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1352
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1353
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK',
1354
 
    )
1355
 
 
1356
 
CLEANUP_WITH_NETWORK_WITH_BOTHQ = SyncDaemonState(
1357
 
    'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1358
 
    'doing cleanup (net hiccup; user asked for shutdown; both _q\'s waiting)',
1359
 
    'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1360
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1361
 
    'CLEANUP_WITH_BOTHQ', 'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1362
 
    'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1363
 
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1364
 
    SYS_CLEANUP_FINISHED='READY_WITH_NETWORK_WITH_BOTHQ',
1365
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1366
 
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1367
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1368
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_METAQ',
1369
 
    )
 
757
    SYS_META_QUEUE_WAITING=\
 
758
        'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_METAQ',
 
759
    SYS_CONTENT_QUEUE_WAITING=\
 
760
        'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_CONTQ',
 
761
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
762
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
763
)
 
764
CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_METAQ = \
 
765
    CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_metaq()
 
766
CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_CONTQ = \
 
767
    CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_contq()
 
768
CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_BOTHQ = \
 
769
    CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_bothq()
1370
770
 
1371
771
CLEANUP_WAITING_WITH_NETWORK = SyncDaemonState(
1372
772
    'CLEANUP_WAITING_WITH_NETWORK',
1373
 
    'doing cleanup (network hiccup)',
 
773
    'doing cleanup; network hiccup',
1374
774
    'CLEANUP_WAITING_WITH_NETWORK', 'CLEANUP_WAITING_WITH_NETWORK',
1375
775
    'CLEANUP_WAITING', 'CLEANUP_WITH_NETWORK',
1376
 
    'CLEANUP_WAITING_WITH_NETWORK',
1377
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK',
1378
 
    SYS_CLEANUP_FINISHED='START_CONNECTING',
1379
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1380
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1381
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
1382
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
1383
 
    )
1384
 
 
1385
 
START_CLEANUP_WAITING_WITH_NETWORK = SyncDaemonState(
1386
 
    'START_CLEANUP_WAITING_WITH_NETWORK',
1387
 
    'doing cleanup (network hiccup)',
1388
 
    'CLEANUP_WAITING_WITH_NETWORK', 'CLEANUP_WAITING_WITH_NETWORK',
1389
 
    'CLEANUP_WAITING', 'CLEANUP_WITH_NETWORK', 'CLEANUP_WAITING_WITH_NETWORK',
1390
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK',
1391
 
    SYS_CLEANUP_FINISHED='START_CONNECTING',
1392
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1393
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1394
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
1395
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
1396
 
    enter=lambda m: m.action_q.cleanup(),
1397
 
    )
1398
 
 
1399
 
START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ = SyncDaemonState(
1400
 
    'START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1401
 
    'doing cleanup (network hiccup; cont_q waiting)',
1402
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1403
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1404
 
    'CLEANUP_WAITING_WITH_CONTQ',
1405
 
    'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1406
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1407
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1408
 
    SYS_CLEANUP_FINISHED='START_CONNECTING_WITH_CONTQ',
1409
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1410
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1411
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1412
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
1413
 
    enter=lambda m: m.action_q.cleanup(),
1414
 
    )
1415
 
 
1416
 
START_CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ = SyncDaemonState(
1417
 
    'START_CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1418
 
    'doing cleanup (network hiccup; both _q\'s waiting)',
1419
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1420
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1421
 
    'CLEANUP_WAITING_WITH_BOTHQ',
1422
 
    'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1423
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1424
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1425
 
    SYS_CLEANUP_FINISHED='START_CONNECTING_WITH_BOTHQ',
1426
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1427
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1428
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1429
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1430
 
    enter=lambda m: m.action_q.cleanup(),
1431
 
    )
1432
 
 
1433
 
CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ = SyncDaemonState(
1434
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1435
 
    'doing cleanup (network hiccup; meta_q waiting)',
1436
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1437
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1438
 
    'CLEANUP_WAITING_WITH_METAQ', 'CLEANUP_WITH_NETWORK_WITH_METAQ',
1439
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1440
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1441
 
    SYS_CLEANUP_FINISHED='START_CONNECTING_WITH_METAQ',
1442
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1443
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
1444
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1445
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1446
 
    )
1447
 
 
1448
 
CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ = SyncDaemonState(
1449
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1450
 
    'doing cleanup (network hiccup; content_q waiting)',
1451
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1452
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1453
 
    'CLEANUP_WAITING_WITH_CONTQ', 'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1454
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1455
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1456
 
    SYS_CLEANUP_FINISHED='START_CONNECTING_WITH_CONTQ',
1457
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1458
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1459
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1460
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
1461
 
    )
1462
 
 
1463
 
CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ = SyncDaemonState(
1464
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1465
 
    'doing cleanup (network hiccup; both _q\'s waiting)',
1466
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1467
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1468
 
    'CLEANUP_WAITING_WITH_BOTHQ', 'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1469
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1470
 
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1471
 
    SYS_CLEANUP_FINISHED='START_CONNECTING_WITH_BOTHQ',
1472
 
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1473
 
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1474
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1475
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
1476
 
    )
1477
 
 
1478
 
 
 
776
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
777
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK',
 
778
    SYS_CLEANUP_FINISHED='START_STANDOFF_WAITING_WITH_NETWORK',
 
779
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ',
 
780
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
 
781
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
 
782
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK',
 
783
    )
 
784
CLEANUP_WAITING_WITH_NETWORK_WITH_METAQ = \
 
785
    CLEANUP_WAITING_WITH_NETWORK.clone_with_metaq()
 
786
CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ = \
 
787
    CLEANUP_WAITING_WITH_NETWORK.clone_with_contq()
 
788
CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ = \
 
789
    CLEANUP_WAITING_WITH_NETWORK.clone_with_bothq()
 
790
 
 
791
START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST = SyncDaemonState(
 
792
    'START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
793
    'start doing cleanup; network hiccup, already got SYS_CONNECTION_LOST',
 
794
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
795
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
796
    'CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
797
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
 
798
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
799
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
800
    SYS_META_QUEUE_WAITING=\
 
801
        'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_METAQ',
 
802
    SYS_CONTENT_QUEUE_WAITING=\
 
803
        'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_CONTQ',
 
804
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
805
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
806
    enter=lambda m: m.action_q.cleanup(),
 
807
)
 
808
START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_CONTQ = \
 
809
    START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_contq()
 
810
CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST = \
 
811
    START_CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_no_start(
 
812
    'doing cleanup; network hiccup, already got SYS_CONNECTION_LOST',
 
813
    SYS_CLEANUP_FINISHED='START_CONNECTING')
 
814
CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_METAQ = \
 
815
    CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_metaq()
 
816
CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_CONTQ = \
 
817
    CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_contq()
 
818
CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_BOTHQ = \
 
819
    CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST.clone_with_bothq()
 
820
 
 
821
CLEANUP_WAITING_WITH_CONNECTION_LOST = SyncDaemonState(
 
822
    'CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
823
    'doing cleanup; network down, connection already lost',
 
824
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONNECTION_LOST',
 
825
    'CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
826
    'CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
827
    'CLEANUP_WITH_CONNECTION_LOST',
 
828
    'CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
829
    SYS_CLEANUP_STARTED='CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
830
    SYS_CLEANUP_FINISHED='READY_WAITING',
 
831
    SYS_META_QUEUE_WAITING='CLEANUP_WAITING_WITH_CONNECTION_LOST_WITH_METAQ',
 
832
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WAITING_WITH_CONNECTION_LOST_WITH_CONTQ',
 
833
    SYS_META_QUEUE_DONE='CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
834
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WAITING_WITH_CONNECTION_LOST',
 
835
    )
 
836
CLEANUP_WAITING_WITH_CONNECTION_LOST_WITH_METAQ = \
 
837
    CLEANUP_WAITING_WITH_CONNECTION_LOST.clone_with_metaq()
 
838
CLEANUP_WAITING_WITH_CONNECTION_LOST_WITH_CONTQ = \
 
839
    CLEANUP_WAITING_WITH_CONNECTION_LOST.clone_with_contq()
 
840
CLEANUP_WAITING_WITH_CONNECTION_LOST_WITH_BOTHQ = \
 
841
    CLEANUP_WAITING_WITH_CONNECTION_LOST.clone_with_bothq()
1479
842
 
1480
843
# XXX CONNECTED_CLEANUP should use the network to do a "better" cleanup
 
844
# XXX the way it stands the cloning methods are useless
1481
845
START_CONNECTED_CLEANUP = SyncDaemonState(
1482
846
    'START_CONNECTED_CLEANUP',
1483
847
    'start doing cleanup using the network'
1484
848
        ' (not yet implemented; actually starts a plain cleanup)',
1485
849
    'CLEANUP_WITH_NETWORK', 'CLEANUP_WAITING_WITH_NETWORK',
1486
 
    'CLEANUP', 'CLEANUP_WITH_NETWORK', 'CLEANUP_WITH_NETWORK',
 
850
    'CLEANUP', 'CLEANUP_WITH_NETWORK',
 
851
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST',
1487
852
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK',
1488
 
    SYS_CLEANUP_FINISHED='READY_WITH_NETWORK',
 
853
    SYS_CLEANUP_FINISHED='START_STANDOFF_WITH_NETWORK',
1489
854
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_METAQ',
1490
855
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1491
856
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK',
1500
865
    'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1501
866
    'CLEANUP_WAITING_WITH_NETWORK_WITH_CONTQ',
1502
867
    'CLEANUP_WITH_CONTQ', 'CLEANUP_WITH_NETWORK_WITH_CONTQ',
1503
 
    'CLEANUP_WITH_NETWORK_WITH_CONTQ',
 
868
    'CLEANUP_WITH_NETWORK_WITH_CONNECTION_LOST_WITH_CONTQ',
1504
869
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1505
 
    SYS_CLEANUP_FINISHED='READY_WITH_NETWORK_WITH_CONTQ',
 
870
    SYS_CLEANUP_FINISHED='START_STANDOFF_WITH_NETWORK_WITH_CONTQ',
1506
871
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1507
872
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1508
873
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1509
874
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK',
1510
875
    enter=lambda m: m.action_q.cleanup(),
1511
876
    )
1512
 
 
1513
 
START_CONNECTED_CLEANUP_WITH_BOTHQ = SyncDaemonState(
1514
 
    'START_CONNECTED_CLEANUP_WITH_BOTHQ',
1515
 
    'start doing cleanup using the network'
1516
 
        ' (not yet implemented; actually starts a plain cleanup)',
1517
 
    'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1518
 
    'CLEANUP_WAITING_WITH_NETWORK_WITH_BOTHQ',
1519
 
    'CLEANUP_WITH_BOTHQ', 'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1520
 
    'CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1521
 
    SYS_CLEANUP_STARTED='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1522
 
    SYS_CLEANUP_FINISHED='READY_WITH_NETWORK_WITH_BOTHQ',
1523
 
    SYS_META_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1524
 
    SYS_META_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_CONTQ',
1525
 
    SYS_CONTENT_QUEUE_WAITING='CLEANUP_WITH_NETWORK_WITH_BOTHQ',
1526
 
    SYS_CONTENT_QUEUE_DONE='CLEANUP_WITH_NETWORK_WITH_METAQ',
1527
 
    enter=lambda m: m.action_q.cleanup(),
1528
 
    )