summaryrefslogtreecommitdiffstats
path: root/sync/engine
diff options
context:
space:
mode:
authorhaitaol@chromium.org <haitaol@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-08 18:07:55 +0000
committerhaitaol@chromium.org <haitaol@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-08 18:07:55 +0000
commita9ce3d15cc8ad8e4469b4aeee114d379d3f5c51b (patch)
tree098bc6b68851cccb742c68a5c0809c3f5f5c6831 /sync/engine
parent174bdd0817c4060a87582d7fa835d7b511173627 (diff)
downloadchromium_src-a9ce3d15cc8ad8e4469b4aeee114d379d3f5c51b.zip
chromium_src-a9ce3d15cc8ad8e4469b4aeee114d379d3f5c51b.tar.gz
chromium_src-a9ce3d15cc8ad8e4469b4aeee114d379d3f5c51b.tar.bz2
Fix one case that can make sync backend stuck in auth error state.
In case like server outage/bug, sync backend can receive same invalid token in a row and stay in auth error state without frontend knowing it. This change makes backend report auth error again if this happens. Frontend will request token again but also use exponetial backoff to protect againest hammering token server too often. BUG=311420 Review URL: https://codereview.chromium.org/62423002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@233938 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/engine')
-rw-r--r--sync/engine/net/server_connection_manager.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/sync/engine/net/server_connection_manager.cc b/sync/engine/net/server_connection_manager.cc
index d668869..2cb7810 100644
--- a/sync/engine/net/server_connection_manager.cc
+++ b/sync/engine/net/server_connection_manager.cc
@@ -233,6 +233,14 @@ bool ServerConnectionManager::SetAuthToken(const std::string& auth_token) {
previously_invalidated_token = std::string();
return true;
}
+
+ // This could happen in case like server outage/bug. E.g. token returned by
+ // first request is considered invalid by sync server and because
+ // of token server's caching policy, etc, same token is returned on second
+ // request. Need to notify sync frontend again to request new token,
+ // otherwise backend will stay in SYNC_AUTH_ERROR state while frontend thinks
+ // everything is fine and takes no actions.
+ SetServerStatus(HttpResponse::SYNC_AUTH_ERROR);
return false;
}
@@ -252,8 +260,12 @@ void ServerConnectionManager::InvalidateAndClearAuthToken() {
void ServerConnectionManager::SetServerStatus(
HttpResponse::ServerConnectionCode server_status) {
- if (server_status_ == server_status)
+ // SYNC_AUTH_ERROR is permanent error. Need to notify observer to take
+ // action externally to resolve.
+ if (server_status != HttpResponse::SYNC_AUTH_ERROR &&
+ server_status_ == server_status) {
return;
+ }
server_status_ = server_status;
NotifyStatusChanged();
}