Comment 14 for bug 487257

Revision history for this message
Facundo Batista (facundo) wrote : Re: UbuntuOne does not sync properly and sometimes not at all

The problem is identified in the following lines:

2009-11-24 16:03:54,641 - ubuntuone.SyncDaemon.EQ - DEBUG - push_event: SYS_HANDSHAKE_TIMEOUT, args:(), kw:{}
2009-11-24 16:03:54,641 - ubuntuone.SyncDaemon.ActionQueue - DEBUG - disconnected
2009-11-24 16:03:54,641 - ubuntuone.SyncDaemon.State - DEBUG - START_AUTHENTICATING_WITH_BOTHQ --[SYS_HANDSHAKE_TIMEOUT]--> START_STANDOFF_WAITING_WITH_NETWORK_WITH_BOTHQ
2009-11-24 16:03:54,642 - ubuntuone.SyncDaemon.EQ - DEBUG - push_event: SYS_STATE_CHANGED, args:(), kw:{'state': <SyncDaemonState START_STANDOFF_WAITING_WITH_NETWORK_WITH_BOTHQ>}
2009-11-24 16:03:54,642 - ubuntuone.SyncDaemon.ActionQueue - WARNING - connection lost: Connection was closed cleanly.
2009-11-24 16:04:49,087 - ubuntuone.SyncDaemon.Main - NOTE - ---- MARK (state: START_STANDOFF_WAITING_WITH_NETWORK_WITH_BOTHQ; queues: metadata: 13490; content: 6065; hash: 0, fsm-cache: hit=489656 miss=73594) ----

There's a timeout, a disconnection is triggered, but then the client gets into STANDOFF state, and it should reconnect after the "connection lost" was received.

The problem is easily identified in the code:

- AQ.disconnect() is called on timeout, it calls self.client.disconnect() (which does a transport.loseConnection) and puts self.client in None.

- After a while, the AQProtocol.connectionLost() is called, which does AQ.connectionLost(), but this check if self.client is None, and does *not* generates the SYS_CONNECTION_LOST, so the SD gets stuck in STANDOFF.