diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts index a13de17a56f..f9b6ca36539 100644 --- a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts @@ -63,7 +63,8 @@ import { UserDataAutoSync } from 'vs/platform/userDataSync/electron-browser/user import { SettingsSynchroniser } from 'vs/platform/userDataSync/common/settingsSync'; import { UserDataAuthTokenService } from 'vs/platform/userDataSync/common/userDataAuthTokenService'; import { GlobalStorageDatabaseChannelClient } from 'vs/platform/storage/node/storageIpc'; -import { IStorageMainService, SimpleStorageMainService } from 'vs/platform/storage/node/storageMainService'; +import { NativeStorageService } from 'vs/platform/storage/node/storageService'; +import { IStorageService } from 'vs/platform/storage/common/storage'; export interface ISharedProcessConfiguration { readonly machineId: string; @@ -115,10 +116,18 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat disposables.add(logService); logService.info('main', JSON.stringify(configuration)); + const mainProcessService = new MainProcessService(server, mainRouter); + services.set(IMainProcessService, mainProcessService); + const configurationService = new ConfigurationService(environmentService.settingsResource); disposables.add(configurationService); await configurationService.initialize(); + const storageService = new NativeStorageService(new GlobalStorageDatabaseChannelClient(mainProcessService.getChannel('storage')), logService, environmentService); + await storageService.initialize(); + services.set(IStorageService, storageService); + disposables.add(toDisposable(() => storageService.flush())); + services.set(IEnvironmentService, environmentService); services.set(IProductService, { _serviceBrand: undefined, ...product }); services.set(ILogService, logService); @@ -126,12 +135,6 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat services.set(IRequestService, new SyncDescriptor(RequestService)); services.set(ILoggerService, new SyncDescriptor(LoggerService)); - const mainProcessService = new MainProcessService(server, mainRouter); - services.set(IMainProcessService, mainProcessService); - - const storageMainService = new SimpleStorageMainService(new GlobalStorageDatabaseChannelClient(mainProcessService.getChannel('storage'))); - await storageMainService.initialize(); - services.set(IStorageMainService, storageMainService); const electronService = createChannelSender(mainProcessService.getChannel('electron'), { context: configuration.windowId }); services.set(IElectronService, electronService); diff --git a/src/vs/platform/storage/node/storageMainService.ts b/src/vs/platform/storage/node/storageMainService.ts index 5bd80590357..034b15dcde9 100644 --- a/src/vs/platform/storage/node/storageMainService.ts +++ b/src/vs/platform/storage/node/storageMainService.ts @@ -9,7 +9,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ILogService, LogLevel } from 'vs/platform/log/common/log'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { SQLiteStorageDatabase, ISQLiteStorageDatabaseLoggingOptions } from 'vs/base/parts/storage/node/storage'; -import { Storage, IStorage, InMemoryStorageDatabase, IStorageDatabase } from 'vs/base/parts/storage/common/storage'; +import { Storage, IStorage, InMemoryStorageDatabase } from 'vs/base/parts/storage/common/storage'; import { join } from 'vs/base/common/path'; export const IStorageMainService = createDecorator('storageMainService'); @@ -191,17 +191,3 @@ export class StorageMainService extends AbstractStorageMainService implements IS }; } } - -export class SimpleStorageMainService extends AbstractStorageMainService implements IStorageMainService { - - constructor( - private database: IStorageDatabase - ) { - super(); - } - - protected createStorage(): IStorage { - return new Storage(this.database); - } - -} diff --git a/src/vs/platform/storage/node/storageService.ts b/src/vs/platform/storage/node/storageService.ts index db8c578e75b..d51956f6ac4 100644 --- a/src/vs/platform/storage/node/storageService.ts +++ b/src/vs/platform/storage/node/storageService.ts @@ -58,7 +58,7 @@ export class NativeStorageService extends Disposable implements IStorageService this._onDidChangeStorage.fire({ key, scope }); } - initialize(payload: IWorkspaceInitializationPayload): Promise { + initialize(payload?: IWorkspaceInitializationPayload): Promise { if (!this.initializePromise) { this.initializePromise = this.doInitialize(payload); } @@ -66,12 +66,12 @@ export class NativeStorageService extends Disposable implements IStorageService return this.initializePromise; } - private async doInitialize(payload: IWorkspaceInitializationPayload): Promise { + private async doInitialize(payload?: IWorkspaceInitializationPayload): Promise { // Init all storage locations await Promise.all([ this.initializeGlobalStorage(), - this.initializeWorkspaceStorage(payload) + payload ? this.initializeWorkspaceStorage(payload) : Promise.resolve() ]); // On some OS we do not get enough time to persist state on shutdown (e.g. when @@ -196,6 +196,10 @@ export class NativeStorageService extends Disposable implements IStorageService this.getStorage(scope).delete(key); } + private getStorage(scope: StorageScope): IStorage { + return assertIsDefined(scope === StorageScope.GLOBAL ? this.globalStorage : this.workspaceStorage); + } + private doFlushWhenIdle(): void { // Dispose any previous idle runner @@ -227,15 +231,11 @@ export class NativeStorageService extends Disposable implements IStorageService // Do it await Promise.all([ - this.getStorage(StorageScope.GLOBAL).close(), - this.getStorage(StorageScope.WORKSPACE).close() + this.globalStorage.close(), + this.workspaceStorage ? this.workspaceStorage.close() : Promise.resolve() ]); } - private getStorage(scope: StorageScope): IStorage { - return assertIsDefined(scope === StorageScope.GLOBAL ? this.globalStorage : this.workspaceStorage); - } - async logStorage(): Promise { const [workspaceStorage, workspaceStoragePath] = assertAllDefined(this.workspaceStorage, this.workspaceStoragePath);