From 11a15dce37b69243edfeabb8796388ba72c0491a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 5 Jan 2016 12:33:49 +0100 Subject: [PATCH 1/4] Ignore errors when loading an invalid blob store --- spec/file-system-blob-store-spec.coffee | 26 +++++++++++++++++++++++++ src/file-system-blob-store.js | 19 +++++++++++++----- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/spec/file-system-blob-store-spec.coffee b/spec/file-system-blob-store-spec.coffee index c1cc29449..5147e59ee 100644 --- a/spec/file-system-blob-store-spec.coffee +++ b/spec/file-system-blob-store-spec.coffee @@ -1,4 +1,6 @@ temp = require 'temp' +path = require 'path' +fs = require 'fs-plus' FileSystemBlobStore = require '../src/file-system-blob-store' describe "FileSystemBlobStore", -> @@ -77,3 +79,27 @@ describe "FileSystemBlobStore", -> expect(blobStore.get("b", "invalidation-key-2")).toBeUndefined() expect(blobStore.get("b", "invalidation-key-3")).toBeUndefined() expect(blobStore.get("c", "invalidation-key-4")).toBeUndefined() + + it "ignores errors when loading an invalid blob store", -> + blobStore.set("a", "invalidation-key-1", new Buffer("a")) + blobStore.set("b", "invalidation-key-2", new Buffer("b")) + blobStore.save() + + # Simulate corruption + fs.writeFileSync(path.join(storageDirectory, "MAP"), new Buffer([0])) + fs.writeFileSync(path.join(storageDirectory, "INVKEYS"), new Buffer([0])) + fs.writeFileSync(path.join(storageDirectory, "BLOB"), new Buffer([0])) + + blobStore = FileSystemBlobStore.load(storageDirectory) + + expect(blobStore.get("a", "invalidation-key-1")).toBeUndefined() + expect(blobStore.get("b", "invalidation-key-2")).toBeUndefined() + + blobStore.set("a", "invalidation-key-1", new Buffer("x")) + blobStore.set("b", "invalidation-key-2", new Buffer("y")) + blobStore.save() + + blobStore = FileSystemBlobStore.load(storageDirectory) + + expect(blobStore.get("a", "invalidation-key-1")).toEqual(new Buffer("x")) + expect(blobStore.get("b", "invalidation-key-2")).toEqual(new Buffer("y")) diff --git a/src/file-system-blob-store.js b/src/file-system-blob-store.js index e565a8857..7bbbdcb14 100644 --- a/src/file-system-blob-store.js +++ b/src/file-system-blob-store.js @@ -12,12 +12,16 @@ class FileSystemBlobStore { } constructor (directory) { - this.inMemoryBlobs = new Map() - this.invalidationKeys = {} this.blobFilename = path.join(directory, 'BLOB') this.blobMapFilename = path.join(directory, 'MAP') this.invalidationKeysFilename = path.join(directory, 'INVKEYS') this.lockFilename = path.join(directory, 'LOCK') + this.reset() + } + + reset () { + this.inMemoryBlobs = new Map() + this.invalidationKeys = {} this.storedBlob = new Buffer(0) this.storedBlobMap = {} } @@ -32,9 +36,14 @@ class FileSystemBlobStore { if (!fs.existsSync(this.invalidationKeysFilename)) { return } - this.storedBlob = fs.readFileSync(this.blobFilename) - this.storedBlobMap = JSON.parse(fs.readFileSync(this.blobMapFilename)) - this.invalidationKeys = JSON.parse(fs.readFileSync(this.invalidationKeysFilename)) + + try { + this.storedBlob = fs.readFileSync(this.blobFilename) + this.storedBlobMap = JSON.parse(fs.readFileSync(this.blobMapFilename)) + this.invalidationKeys = JSON.parse(fs.readFileSync(this.invalidationKeysFilename)) + } catch (e) { + this.reset() + } } save () { From e0dbf94d2d792b33ba741d32f9e77dfa869762de Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 13 Jan 2016 16:29:22 -0500 Subject: [PATCH 2/4] 1.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eee53b978..ade0e0261 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.4.0-beta3", + "version": "1.4.0", "description": "A hackable text editor for the 21st Century.", "main": "./src/browser/main.js", "repository": { From dc413b8cd8ec4217ec561cacdf01ec005d270fdf Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 5 Jan 2016 17:23:32 -0800 Subject: [PATCH 3/4] :arrow_up: text-buffer --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ade0e0261..8b23a51c8 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "service-hub": "^0.7.0", "source-map-support": "^0.3.2", "temp": "0.8.1", - "text-buffer": "8.1.2", + "text-buffer": "8.1.4", "typescript-simple": "1.0.0", "underscore-plus": "^1.6.6", "yargs": "^3.23.0" From 2cf2ccbc0410ee11ac7f76494c2733e638432681 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 25 Jan 2016 09:41:07 -0800 Subject: [PATCH 4/4] Prepare 1.4.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8b23a51c8..140cbdf0d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.4.0", + "version": "1.4.1", "description": "A hackable text editor for the 21st Century.", "main": "./src/browser/main.js", "repository": {