Skip to content

Commit e46d6c8

Browse files
authored
revert atomic write for user data (microsoft#187537)
microsoft#187245 revert atomic write for user data
1 parent 6243562 commit e46d6c8

File tree

3 files changed

+7
-9
lines changed

3 files changed

+7
-9
lines changed

src/vs/platform/extensionManagement/common/extensionsProfileScannerService.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { URI, UriComponents } from 'vs/base/common/uri';
1212
import { Metadata, isIExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement';
1313
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
1414
import { IExtension, IExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
15-
import { FileOperationResult, IFileService, hasFileAtomicWriteCapability, toFileOperationResult } from 'vs/platform/files/common/files';
15+
import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files';
1616
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
1717
import { ILogService } from 'vs/platform/log/common/log';
1818
import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile';
@@ -290,8 +290,7 @@ export abstract class AbstractExtensionsProfileScannerService extends Disposable
290290
relativeLocation: this.toRelativePath(e.location),
291291
metadata: e.metadata
292292
}));
293-
const fsp = this.fileService.getProvider(file.scheme);
294-
await this.fileService.writeFile(file, VSBuffer.fromString(JSON.stringify(storedProfileExtensions)), fsp && hasFileAtomicWriteCapability(fsp) ? { atomic: { postfix: '.vsctmp' } } : undefined);
293+
await this.fileService.writeFile(file, VSBuffer.fromString(JSON.stringify(storedProfileExtensions)));
295294
}
296295

297296
return extensions;

src/vs/platform/extensionManagement/node/extensionManagementService.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ export class ExtensionsScanner extends Disposable {
425425
@IFileService private readonly fileService: IFileService,
426426
@IExtensionsScannerService private readonly extensionsScannerService: IExtensionsScannerService,
427427
@IExtensionsProfileScannerService private readonly extensionsProfileScannerService: IExtensionsProfileScannerService,
428+
@IUriIdentityService private readonly uriIdentityService: IUriIdentityService,
428429
@ILogService private readonly logService: ILogService,
429430
) {
430431
super();
@@ -582,7 +583,9 @@ export class ExtensionsScanner extends Disposable {
582583

583584
private async deleteExtensionFromLocation(id: string, location: URI, type: string): Promise<void> {
584585
this.logService.trace(`Deleting ${type} extension from disk`, id, location.fsPath);
585-
await this.fileService.del(location, { recursive: true, atomic: { postfix: `.${hash(generateUuid()).toString(16)}${DELETED_FOLDER_POSTFIX}` } });
586+
const renamedLocation = this.uriIdentityService.extUri.joinPath(this.uriIdentityService.extUri.dirname(location), `${this.uriIdentityService.extUri.basename(location)}.${hash(generateUuid()).toString(16)}${DELETED_FOLDER_POSTFIX}`);
587+
await this.rename({ id }, location.fsPath, renamedLocation.fsPath, Date.now() + (2 * 60 * 1000) /* Retry for 2 minutes */);
588+
await this.fileService.del(renamedLocation, { recursive: true });
586589
this.logService.info(`Deleted ${type} extension from disk`, id, location.fsPath);
587590
}
588591

src/vs/platform/userData/common/fileUserDataProvider.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
*--------------------------------------------------------------------------------------------*/
55
import { Event, Emitter } from 'vs/base/common/event';
66
import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
7-
import { IFileSystemProviderWithFileReadWriteCapability, IFileChange, IWatchOptions, IStat, IFileOverwriteOptions, FileType, IFileWriteOptions, IFileDeleteOptions, FileSystemProviderCapabilities, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileFolderCopyCapability, hasFileFolderCopyCapability, hasFileAtomicWriteCapability } from 'vs/platform/files/common/files';
7+
import { IFileSystemProviderWithFileReadWriteCapability, IFileChange, IWatchOptions, IStat, IFileOverwriteOptions, FileType, IFileWriteOptions, IFileDeleteOptions, FileSystemProviderCapabilities, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileFolderCopyCapability, hasFileFolderCopyCapability } from 'vs/platform/files/common/files';
88
import { URI } from 'vs/base/common/uri';
99
import { CancellationToken } from 'vs/base/common/cancellation';
1010
import { newWriteableStream, ReadableStreamEvents } from 'vs/base/common/stream';
1111
import { ILogService } from 'vs/platform/log/common/log';
1212
import { TernarySearchTree } from 'vs/base/common/ternarySearchTree';
1313
import { VSBuffer } from 'vs/base/common/buffer';
14-
import { isObject } from 'vs/base/common/types';
1514

1615
/**
1716
* This is a wrapper on top of the local filesystem provider which will
@@ -86,9 +85,6 @@ export class FileUserDataProvider extends Disposable implements
8685
}
8786

8887
writeFile(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise<void> {
89-
if (!isObject(opts.atomic) && hasFileAtomicWriteCapability(this.fileSystemProvider)) {
90-
opts = { ...opts, atomic: { postfix: '.vsctmp' } };
91-
}
9288
return this.fileSystemProvider.writeFile(this.toFileSystemResource(resource), content, opts);
9389
}
9490

0 commit comments

Comments
 (0)