turn off sync if client is making too many requests

This commit is contained in:
Sandeep Somavarapu 2020-05-20 15:13:59 +02:00
parent 13393b13cf
commit 4c1c26d51e
4 changed files with 70 additions and 12 deletions

View file

@ -90,7 +90,7 @@ export class UserDataAutoSyncService extends Disposable implements IUserDataAuto
this.logService.info('Auto Sync: Did reset the local sync state.');
this.userDataSyncEnablementService.setEnablement(false);
this.logService.info('Auto Sync: Turned off sync because sync is turned off in the cloud');
} else if (userDataSyncError.code === UserDataSyncErrorCode.TooManyRequests) {
} else if (userDataSyncError.code === UserDataSyncErrorCode.LocalTooManyRequests) {
this.userDataSyncEnablementService.setEnablement(false);
this.logService.info('Auto Sync: Turned off sync because of making too many requests to server');
} else {

View file

@ -3,10 +3,41 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { Registry } from 'vs/platform/registry/common/platform';
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
import { UserDataSyncWorkbenchContribution } from 'vs/workbench/contrib/userDataSync/browser/userDataSync';
import { IUserDataAutoSyncService, UserDataSyncError, UserDataSyncErrorCode } from 'vs/platform/userDataSync/common/userDataSync';
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
import { Disposable } from 'vs/base/common/lifecycle';
import { localize } from 'vs/nls';
import { isWeb } from 'vs/base/common/platform';
class UserDataSyncReportIssueContribution extends Disposable implements IWorkbenchContribution {
constructor(
@IUserDataAutoSyncService userDataAutoSyncService: IUserDataAutoSyncService,
@INotificationService private readonly notificationService: INotificationService,
) {
super();
this._register(userDataAutoSyncService.onError(error => this.onAutoSyncError(error)));
}
private onAutoSyncError(error: UserDataSyncError): void {
switch (error.code) {
case UserDataSyncErrorCode.LocalTooManyRequests:
this.notificationService.notify({
severity: Severity.Error,
message: localize('too many requests', "Turned off syncing preferences on this device because it is making too many requests."),
});
return;
}
}
}
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
workbenchRegistry.registerWorkbenchContribution(UserDataSyncWorkbenchContribution, LifecyclePhase.Ready);
if (isWeb) {
workbenchRegistry.registerWorkbenchContribution(UserDataSyncReportIssueContribution, LifecyclePhase.Ready);
}

View file

@ -302,15 +302,6 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
}
});
return;
case UserDataSyncErrorCode.TooManyRequests:
this.notificationService.notify({
severity: Severity.Error,
message: localize('too many requests', "Turned off syncing because of making too many requests to server"),
actions: {
primary: [new Action('turn on sync', localize('turn on sync', "Turn on Preferences Sync..."), undefined, true, () => this.turnOn())]
}
});
return;
case UserDataSyncErrorCode.TooLarge:
if (error.resource === SyncResource.Keybindings || error.resource === SyncResource.Settings) {
this.disableSync(error.resource);

View file

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IUserDataSyncUtilService, CONTEXT_SYNC_STATE, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync';
import { IUserDataSyncUtilService, CONTEXT_SYNC_STATE, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, IUserDataAutoSyncService, SHOW_SYNC_LOG_COMMAND_ID } from 'vs/platform/userDataSync/common/userDataSync';
import { Registry } from 'vs/platform/registry/common/platform';
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
@ -15,6 +15,11 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { IFileService } from 'vs/platform/files/common/files';
import { IElectronService } from 'vs/platform/electron/node/electron';
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
import { Action } from 'vs/base/common/actions';
import { IWorkbenchIssueService } from 'vs/workbench/contrib/issue/electron-browser/issue';
import { Disposable } from 'vs/base/common/lifecycle';
import { ICommandService } from 'vs/platform/commands/common/commands';
class UserDataSyncServicesContribution implements IWorkbenchContribution {
@ -26,8 +31,39 @@ class UserDataSyncServicesContribution implements IWorkbenchContribution {
}
}
class UserDataSyncReportIssueContribution extends Disposable implements IWorkbenchContribution {
constructor(
@IUserDataAutoSyncService userDataAutoSyncService: IUserDataAutoSyncService,
@INotificationService private readonly notificationService: INotificationService,
@IWorkbenchIssueService private readonly workbenchIssueService: IWorkbenchIssueService,
@ICommandService private readonly commandService: ICommandService,
) {
super();
this._register(userDataAutoSyncService.onError(error => this.onAutoSyncError(error)));
}
private onAutoSyncError(error: UserDataSyncError): void {
switch (error.code) {
case UserDataSyncErrorCode.LocalTooManyRequests:
this.notificationService.notify({
severity: Severity.Error,
message: localize('too many requests', "Turned off syncing preferences on this device because it is making too many requests. Please report an issue by providing the sync logs."),
actions: {
primary: [
new Action('Show Sync Logs', localize('show sync logs', "Show Log"), undefined, true, () => this.commandService.executeCommand(SHOW_SYNC_LOG_COMMAND_ID)),
new Action('Report Issue', localize('report issue', "Report Issue"), undefined, true, () => this.workbenchIssueService.openReporter())
]
}
});
return;
}
}
}
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
workbenchRegistry.registerWorkbenchContribution(UserDataSyncServicesContribution, LifecyclePhase.Starting);
workbenchRegistry.registerWorkbenchContribution(UserDataSyncReportIssueContribution, LifecyclePhase.Restored);
registerAction2(class OpenSyncBackupsFolder extends Action2 {
constructor() {