electron-json-storage icon indicating copy to clipboard operation
electron-json-storage copied to clipboard

Racing issue on concurrent read

Open davidliudev opened this issue 2 years ago • 3 comments

During concurrent read it crashes on lockfile library. It seems that the lockfile lib that this lib reference has a bug

https://github.com/npm/lockfile/blob/6590779867ee9bdc5dbebddc962640759892bb91/lockfile.js#L286

Notice that this line var st = fs.statSync(path) When it tries to read the path, the lock file is already being deleted by another concurrent read. Thus this line will throw and there is no catch. As a result this line crash with the following exception:

There is error loading the config  somefilename , err= Error: ENOENT: no such file or directory, stat 'somefilename.json.lock'
    at statSync (VM40 node:fs:1538:3)
    at e.statSync (VM116 asar_bundle:5:4539)
    at exports.lockSync (lockfile.js:286:1)
    at exports.lockSync (lock.js:84:1)
    at exports.getSync (storage.js:240:1)
    at exports.getSync (storage.js:243:1)

davidliudev avatar Aug 27 '22 16:08 davidliudev

Need either to patch the original lockfile lib (which the owner already archived it), or probably should fork that lib and fix this issue.

davidliudev avatar Aug 27 '22 16:08 davidliudev

Hm, it might make sense to vendor lockfile through https://github.com/jviotti/vendorpull. I'll send a PR to do this, and then we can try to land a lockfile patch

jviotti avatar Sep 12 '22 13:09 jviotti

OK, I vendored the module here: https://github.com/electron-userland/electron-json-storage/pull/187.

What is the patch you need on lockfile? Are you trying to retry fs.statSync? Given that you can reproduce the problem, if you have a patch you can confirm works for you, I'll happily apply it and release a new version :)

jviotti avatar Sep 12 '22 13:09 jviotti