remotestorage.js icon indicating copy to clipboard operation
remotestorage.js copied to clipboard

getFile creates parent folders in Google Drive

Open kevincox opened this issue 5 years ago • 3 comments
trafficstars

See the following example:

let client = remoteStorage.remote.rs.scope("/com.example/");
client.getFile("some/folder/that/doesnt/exist");

This will create some/folder/that/doesnt. This is incredibly surprising for a read operation and can result in some applications that rely on folder listing to fail as now there are empty folders without the expected contents.

kevincox avatar Jun 17 '20 00:06 kevincox

Right, it shouldn't be necessary to create parent folders in situations where the file itself does not get created.

michielbdejong avatar Jun 17 '20 09:06 michielbdejong

This also seems in some circumstances to be able to cause the creation multiple copies of the nonexistent parent directory, if there are multiple requests in flight at once.

sorentycho avatar Aug 26 '20 02:08 sorentycho

I can confirm that Google Drive can often see multiple folders called "remotestorage", or multiple folders under "remotestorage". This is caused by the confluence of three things:

  1. Google Drive can have multiple folders with the same name (which the remoteStorage backend can't)
  2. referencing a file creates its parent folders, asychronously
  3. if a file is referenced multiple times then there can be multiple parent-folder creation requests in flight at once, as @sorentycho says

so this all leads to having two "remotestorage" folders. I think the code to create is probably a little bit lazy about sending multiple create requests for the same folder on the assumption that it doesn't actually matter if you create a folder that already exists... but for the Google Drive back end it actually does matter.

stuartlangridge avatar Oct 29 '21 15:10 stuartlangridge