Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Unified Diff: chrome/browser/sync/engine/syncer_proto_util.cc

Issue 7861013: Fix the false-positive detection of commit errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Another attempt at detecting errors Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/sync/engine/syncer_proto_util.h ('k') | chrome/browser/sync/glue/sync_backend_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/engine/syncer_proto_util.cc
diff --git a/chrome/browser/sync/engine/syncer_proto_util.cc b/chrome/browser/sync/engine/syncer_proto_util.cc
index 26eed05cb70a36c211394a58ce8269ff6ed074a5..10a30ca24f4a101589e5982cffe15b6601b4fc37 100644
--- a/chrome/browser/sync/engine/syncer_proto_util.cc
+++ b/chrome/browser/sync/engine/syncer_proto_util.cc
@@ -19,7 +19,7 @@
#include "chrome/browser/sync/syncable/syncable.h"
#include "chrome/browser/sync/util/time.h"
-using browser_sync::SyncProtocolErrorType;
+using browser_sync::SyncOperationResultType;
using std::string;
using std::stringstream;
using syncable::BASE_VERSION;
@@ -38,6 +38,44 @@ using sessions::SyncSession;
namespace {
+SyncOperationResult ServerConnectionErrorToSyncOperationResult(
+ const browser_sync::HttpResponse::ServerConnectionCode server_status)
+{
+ SyncOperationResult result;
+
+ switch (server_status) {
+ case browser_sync::HttpResponse::CONNECTION_UNAVAILABLE:
+ result.error_type = NETWORK_CONNECTION_UNAVAILABLE;
+ break;
+ case browser_sync::HttpResponse::IO_ERROR:
+ result.error_type = NETWORK_IO_ERROR;
+ break;
+ case browser_sync::HttpResponse::SYNC_SERVER_ERROR:
+ // FIXME: how does this happen? Can we map this to TRANSIENT_ERROR or
+ // NON_RETRIABLE_ERROR?
+ result.error_type = SYNC_SERVER_ERROR;
+ break;
+ case browser_sync::HttpResponse::SYNC_AUTH_ERROR:
+ // FIXME: how does this compare to invalid credential?
+ result.error_type = SYNC_AUTH_ERROR;
+ break;
+ case browser_sync::HttpResponse::RETRY:
+ result.error_type = TRANSIENT_ERROR;
+ break;
+
+ // If we succeeded in contacting the server, then the server will provide us
+ // with all the data we need to compute a SyncOperationResult. We don't
+ // handle that here.
+ case browser_sync::HttpResponse::SERVER_CONNECTION_OK:
+ case browser_sync::HttpResponse::NONE:
+ default:
+ NOTREACHED();
+ result.error_type = INVALID;
+ }
+
+ return result;
+}
+
// Time to backoff syncing after receiving a throttled response.
static const int kSyncDelayAfterThrottled = 2 * 60 * 60; // 2 hours
void LogResponseProfilingData(const ClientToServerResponse& response) {
@@ -203,11 +241,11 @@ bool IsVeryFirstGetUpdates(const ClientToServerMessage& message) {
return true;
}
-SyncProtocolErrorType ConvertSyncProtocolErrorTypePBToLocalType(
+SyncOperationResultType ConvertSyncProtocolErrorTypePBToLocalType(
const sync_pb::ClientToServerResponse::ErrorType& error_type) {
switch (error_type) {
case ClientToServerResponse::SUCCESS:
- return browser_sync::SYNC_SUCCESS;
+ return browser_sync::OPERATION_SUCCESS;
case ClientToServerResponse::NOT_MY_BIRTHDAY:
return browser_sync::NOT_MY_BIRTHDAY;
case ClientToServerResponse::THROTTLED:
@@ -251,9 +289,9 @@ browser_sync::ClientAction ConvertClientActionPBToLocalClientAction(
}
}
-browser_sync::SyncProtocolError ConvertErrorPBToLocalType(
+browser_sync::SyncOperationResult ConvertErrorPBToLocalType(
const sync_pb::ClientToServerResponse::Error& error) {
- browser_sync::SyncProtocolError sync_protocol_error;
+ browser_sync::SyncOperationResult sync_protocol_error;
sync_protocol_error.error_type = ConvertSyncProtocolErrorTypePBToLocalType(
error.error_type());
sync_protocol_error.error_description = error.error_description();
@@ -264,9 +302,9 @@ browser_sync::SyncProtocolError ConvertErrorPBToLocalType(
}
// TODO(lipalani) : Rename these function names as per the CR for issue 7740067.
-browser_sync::SyncProtocolError ConvertLegacyErrorCodeToNewError(
+browser_sync::SyncOperationResult ConvertLegacyErrorCodeToNewError(
const sync_pb::ClientToServerResponse::ErrorType& error_type) {
- browser_sync::SyncProtocolError error;
+ browser_sync::SyncOperationResult error;
error.error_type = ConvertSyncProtocolErrorTypePBToLocalType(error_type);
if (error_type == ClientToServerResponse::CLEAR_PENDING ||
error_type == ClientToServerResponse::NOT_MY_BIRTHDAY) {
@@ -278,7 +316,7 @@ browser_sync::SyncProtocolError ConvertLegacyErrorCodeToNewError(
} // namespace
// static
-bool SyncerProtoUtil::PostClientToServerMessage(
+SyncOperationResult SyncerProtoUtil::PostClientToServerMessage(
const ClientToServerMessage& msg,
ClientToServerResponse* response,
SyncSession* session) {
@@ -291,14 +329,26 @@ bool SyncerProtoUtil::PostClientToServerMessage(
ScopedDirLookup dir(session->context()->directory_manager(),
session->context()->account_name());
- if (!dir.good())
- return false;
+ if (!dir.good()) {
+ SyncOperationResult result;
+ result.error_type = DIRECTORY_LOOKUP_FAILED;
+ return result;
+ }
if (!PostAndProcessHeaders(session->context()->connection_manager(), session,
- msg, response))
- return false;
+ msg, response)) {
+ // There was an error establishing communication with the server.
+ // We can not proceed beyond this point.
+ const browser_sync::HttpResponse::ServerConnectionCode server_status =
+ session->context()->connection_manager()->server_status();
+
+ DCHECK(server_status != browser_sync::HttpResponse::NONE);
+ DCHECK(server_status != browser_sync::HttpResponse::SERVER_CONNECTION_OK);
+
+ return ServerConnectionErrorToSyncOperationResult(server_status);
+ }
- browser_sync::SyncProtocolError sync_protocol_error;
+ browser_sync::SyncOperationResult sync_protocol_error;
// Birthday mismatch overrides any error that is sent by the server.
if (!VerifyResponseBirthday(dir, response)) {
@@ -327,27 +377,25 @@ bool SyncerProtoUtil::PostClientToServerMessage(
case browser_sync::UNKNOWN_ERROR:
LOG(WARNING) << "Sync protocol out-of-date. The server is using a more "
<< "recent version.";
- return false;
- case browser_sync::SYNC_SUCCESS:
+ break;
+ case browser_sync::OPERATION_SUCCESS:
LogResponseProfilingData(*response);
- return true;
+ break;
case browser_sync::THROTTLED:
LOG(WARNING) << "Client silenced by server.";
session->delegate()->OnSilencedUntil(base::TimeTicks::Now() +
GetThrottleDelay(*response));
- return false;
- case browser_sync::TRANSIENT_ERROR:
- return false;
+ break;
case browser_sync::MIGRATION_DONE:
HandleMigrationDoneResponse(response, session);
- return false;
- case browser_sync::CLEAR_PENDING:
- case browser_sync::NOT_MY_BIRTHDAY:
- return false;
- default:
+ break;
+ case INVALID:
NOTREACHED();
- return false;
+ default:
+ break;
}
+
+ return sync_protocol_error;
}
// static
« no previous file with comments | « chrome/browser/sync/engine/syncer_proto_util.h ('k') | chrome/browser/sync/glue/sync_backend_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698