#90112 Turn off sync when this server error happen

This commit is contained in:
Sandeep Somavarapu 2020-02-06 03:28:06 +01:00
parent e374e95680
commit 3dc9649504
4 changed files with 9 additions and 11 deletions

View file

@ -130,6 +130,7 @@ export enum UserDataSyncErrorCode {
Rejected = 'Rejected', Rejected = 'Rejected',
TooLarge = 'TooLarge', TooLarge = 'TooLarge',
TooManyFailures = 'TooManyFailures', TooManyFailures = 'TooManyFailures',
NoRef = 'NoRef',
Unknown = 'Unknown', Unknown = 'Unknown',
} }

View file

@ -49,12 +49,12 @@ export class UserDataSyncStoreService extends Disposable implements IUserDataSyn
} }
if (!isSuccess(context)) { if (!isSuccess(context)) {
throw new Error('Server returned ' + context.res.statusCode); throw new UserDataSyncStoreError('Server returned ' + context.res.statusCode, UserDataSyncErrorCode.Unknown, source);
} }
const ref = context.res.headers['etag']; const ref = context.res.headers['etag'];
if (!ref) { if (!ref) {
throw new Error('Server did not return the ref'); throw new UserDataSyncStoreError('Server did not return the ref', UserDataSyncErrorCode.NoRef, source);
} }
const content = await asText(context); const content = await asText(context);
return { ref, content }; return { ref, content };
@ -74,12 +74,12 @@ export class UserDataSyncStoreService extends Disposable implements IUserDataSyn
const context = await this.request({ type: 'POST', url, data, headers }, source, CancellationToken.None); const context = await this.request({ type: 'POST', url, data, headers }, source, CancellationToken.None);
if (!isSuccess(context)) { if (!isSuccess(context)) {
throw new Error('Server returned ' + context.res.statusCode); throw new UserDataSyncStoreError('Server returned ' + context.res.statusCode, UserDataSyncErrorCode.Unknown, source);
} }
const newRef = context.res.headers['etag']; const newRef = context.res.headers['etag'];
if (!newRef) { if (!newRef) {
throw new Error('Server did not return the ref'); throw new UserDataSyncStoreError('Server did not return the ref', UserDataSyncErrorCode.NoRef, source);
} }
return newRef; return newRef;
} }
@ -95,14 +95,14 @@ export class UserDataSyncStoreService extends Disposable implements IUserDataSyn
const context = await this.request({ type: 'DELETE', url, headers }, undefined, CancellationToken.None); const context = await this.request({ type: 'DELETE', url, headers }, undefined, CancellationToken.None);
if (!isSuccess(context)) { if (!isSuccess(context)) {
throw new Error('Server returned ' + context.res.statusCode); throw new UserDataSyncStoreError('Server returned ' + context.res.statusCode, UserDataSyncErrorCode.Unknown);
} }
} }
private async request(options: IRequestOptions, source: SyncSource | undefined, token: CancellationToken): Promise<IRequestContext> { private async request(options: IRequestOptions, source: SyncSource | undefined, token: CancellationToken): Promise<IRequestContext> {
const authToken = await this.authTokenService.getToken(); const authToken = await this.authTokenService.getToken();
if (!authToken) { if (!authToken) {
throw new Error('No Auth Token Available.'); throw new UserDataSyncStoreError('No Auth Token Available', UserDataSyncErrorCode.Unauthroized, source);
} }
options.headers = options.headers || {}; options.headers = options.headers || {};
options.headers['authorization'] = `Bearer ${authToken}`; options.headers['authorization'] = `Bearer ${authToken}`;

View file

@ -23,7 +23,6 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { isWeb } from 'vs/base/common/platform'; import { isWeb } from 'vs/base/common/platform';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { UserDataAutoSyncService } from 'vs/workbench/contrib/userDataSync/browser/userDataAutoSyncService';
import { UserDataSyncTrigger } from 'vs/workbench/contrib/userDataSync/browser/userDataSyncTrigger'; import { UserDataSyncTrigger } from 'vs/workbench/contrib/userDataSync/browser/userDataSyncTrigger';
import { timeout } from 'vs/base/common/async'; import { timeout } from 'vs/base/common/async';
import { IOutputService } from 'vs/workbench/contrib/output/common/output'; import { IOutputService } from 'vs/workbench/contrib/output/common/output';
@ -118,9 +117,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
this._register(userDataAutoSyncService.onError(({ code, source }) => this.onAutoSyncError(code, source))); this._register(userDataAutoSyncService.onError(({ code, source }) => this.onAutoSyncError(code, source)));
this.registerActions(); this.registerActions();
this.initializeActiveAccount().then(_ => { this.initializeActiveAccount().then(_ => {
if (isWeb) { if (!isWeb) {
this._register(instantiationService.createInstance(UserDataAutoSyncService));
} else {
this._register(instantiationService.createInstance(UserDataSyncTrigger).onDidTriggerSync(() => userDataAutoSyncService.triggerAutoSync())); this._register(instantiationService.createInstance(UserDataSyncTrigger).onDidTriggerSync(() => userDataAutoSyncService.triggerAutoSync()));
} }
}); });

View file

@ -69,7 +69,7 @@ import { UserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDa
import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyncService'; import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyncService';
import { SettingsSynchroniser } from 'vs/platform/userDataSync/common/settingsSync'; import { SettingsSynchroniser } from 'vs/platform/userDataSync/common/settingsSync';
import { UserDataAuthTokenService } from 'vs/platform/userDataSync/common/userDataAuthTokenService'; import { UserDataAuthTokenService } from 'vs/platform/userDataSync/common/userDataAuthTokenService';
import { UserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDataAutoSyncService'; import { UserDataAutoSyncService } from 'vs/workbench/contrib/userDataSync/browser/userDataAutoSyncService';
import { AccessibilityService } from 'vs/platform/accessibility/common/accessibilityService'; import { AccessibilityService } from 'vs/platform/accessibility/common/accessibilityService';
registerSingleton(IExtensionManagementService, ExtensionManagementService); registerSingleton(IExtensionManagementService, ExtensionManagementService);