Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Understand how bad URIs can end up in our system #41987

Closed
adamretter opened this issue Jan 22, 2018 · 28 comments
Closed

Understand how bad URIs can end up in our system #41987

adamretter opened this issue Jan 22, 2018 · 28 comments
Assignees
Labels
info-needed Issue requires more information from poster *not-reproducible Issue cannot be reproduced by VS Code Team member as described

Comments

@adamretter
Copy link

adamretter commented Jan 22, 2018

  • VSCode Version: 1.19.2
  • OS Version: macOS Sierra 10.12.6

Steps to Reproduce:

  1. Click the Go menu, then Go to File...

  2. An error drop down appears which says: [UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character.

screen shot 2018-01-22 at 17 32 22

  1. You can only click Close on the error.

  2. The command drop down is now visible, but it is impossible to close or dismiss.

screen shot 2018-01-22 at 17 32 31

Does this issue occur when all extensions are disabled?: Yes

@bpasero bpasero added the info-needed Issue requires more information from poster label Jan 23, 2018
@bpasero
Copy link
Member

bpasero commented Jan 23, 2018

@adamretter any clues how you got into that state?

@jrieken for the URI error, it looks like an entry in quick open is producing a URI which is not valid. Maybe as part of a remote scenario?

@jrieken
Copy link
Member

jrieken commented Jan 23, 2018

Maybe as part of a remote scenario?

@bpasero What makes you think this? @adamretter will know if he is experimenting with new, proposed api for handling remote resources.

@bpasero
Copy link
Member

bpasero commented Jan 23, 2018

@jrieken because I would doubt this error comes from a file URI created with URI.file. But you know better where URIs come in that have authority components.

@jrieken
Copy link
Member

jrieken commented Jan 23, 2018

from a file URI created with URI.file. But you know better where URIs come in that have authority components.

Common mistake which would cause this is when someone calls URI.file with an encoded uri, instead of calling parse.

@adamretter
Copy link
Author

adamretter commented Jan 23, 2018

@bpasero @jrieken As far as I know I am just using VSCode in a normal way.

I am not doing anything special. I just have some C/C++ extensions and the LLDB extension. I use VSCode as a nice editor for writing C++. NOTE - I have also started with --disable-extensions and the problem still occurs.

It just happened when I opened VSCode one day.

Is there anyway to get a Stack trace for where the error is reported?

@bpasero
Copy link
Member

bpasero commented Jan 23, 2018

@adamretter yeah I would be interested in the stack trace:

Please see if you can find any logged output that could help us find the source of the issue:

  • run code --verbose from the command line and attach the output
  • in Code select Help | Toggle Developer Tools and select the Console
  • attach any output you see in the Console you can find

Thanks!

@jrieken
Copy link
Member

jrieken commented Jan 23, 2018

Also, before doing Click the Go menu, then Go to File... open Developer Tools, select Sources, and enable 'Pause on exceptions' including 'Pause on caught exceptions'. Execution should pause when the error happens. Then attach a screenshot of the full test tools, ideally expand some of the interesting locals and the call stack.

@bpasero bpasero added this to the January 2018 milestone Jan 23, 2018
@adamretter
Copy link
Author

@bpasero here is the stack trace from the Developer Tools console:

messageService.ts:126 [UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character: Error: [UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character
    at file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:97:321
    at t.e (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:97:635)
    at new t (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:99:397)
    at t.e.with (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:98:373)
    at Object.t.dirname (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:130:931)
    at new t (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:3219:887)
    at t.create (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:90:103)
    at e._createInstance (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:1209:289)
    at e.createInstance (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:1208:560)
    at file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:3218:502

The output on the terminal from the --verbose flag is very similar:

[67284:0123/115932.512660:INFO:CONSOLE(1224)] "%cTRACE", source: file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js (1224)
[67284:0123/120132.639120:INFO:CONSOLE(2744)] "[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character: Error: [UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character
    at file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:97:321
    at t.e (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:97:635)
    at new t (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:99:397)
    at t.e.with (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:98:373)
    at Object.t.dirname (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:130:931)
    at new t (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:3219:887)
    at t.create (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:90:103)
    at e._createInstance (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:1209:289)
    at e.createInstance (file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:1208:560)
    at file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:3218:502", source: file:///Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js (2744)

@jrieken The screenshot of catching the exception from Developer Tools:
screen shot 2018-01-23 at 12 01 24

bpasero added a commit that referenced this issue Jan 23, 2018
@bpasero
Copy link
Member

bpasero commented Jan 23, 2018

@adamretter thanks!

@jrieken @isidorn this seems to originate from resources.dirname() which we added specifically for remote resources and which is adopted in quite some places (scary that it can throw).

The editor history (where this crash happens) is persisted here using resource.toJSON() and being loaded again using URI.revive here.

What am I doing wrong?

Also, the error seems to happen with a file URI actually:

image

The full path seems to be in the authority?

@jrieken
Copy link
Member

jrieken commented Jan 24, 2018

I have quite high confidence in URI.toJSON and URI.revive because both are on the hot path of IPC. I believe the data that's provided when creating/reviving a uri is flawed, otherwise the initial construction would have failed (we trust revive data, nothing else). Can the raw data be manually retrieved from storage?

@bpasero bpasero added bug Issue identified by VS Code Team member as probable bug and removed info-needed Issue requires more information from poster labels Jan 24, 2018
@bpasero bpasero closed this as completed Jan 24, 2018
bpasero added a commit that referenced this issue Jan 24, 2018
@jrieken
Copy link
Member

jrieken commented Jan 24, 2018

@bpasero How is this fix? The changes in 2d01d1c might workaround this but isn't the real problem here that somehow (from the history service?) completely bogus URIs are fed into the system?

@bpasero
Copy link
Member

bpasero commented Jan 24, 2018

@jrieken the history service is just accepting URIs from editors to show in the recently opened, there is nothing the history service controls about how the URIs are being created. I can make dirname explode quite easily with this code before my fix:

dirname(URI.from({ scheme: 'file', authority: '/users/someone/portal.h' }))

@jrieken
Copy link
Member

jrieken commented Jan 24, 2018

I am not saying the change is invalid, indeed every of the ~1000 references to URI.file or URI.parse can throw in the same way.

What I am saying is that we should really understand why we have a URI like that in the system and not be satisfied with tackling symptoms.

@bpasero
Copy link
Member

bpasero commented Jan 24, 2018

@jrieken I am trying to understand if an extension could craft a URI that would result in the weird form. For example, as extension I cannot use the URI.with method it seems, making it harder to craft a URI with authority and no path.

I tried a few things but could not trigger it (via workspace.openTextDocument). I would still like to understand if an extension could "inject" such a URI into our system somehow or if this is a serialization/deserialization issue on our end in our code.

@bpasero bpasero reopened this Jan 24, 2018
@bpasero bpasero added info-needed Issue requires more information from poster and removed bug Issue identified by VS Code Team member as probable bug labels Jan 24, 2018
@bpasero bpasero removed this from the January 2018 milestone Jan 24, 2018
@bpasero bpasero changed the title Clicking "Go to File..." results in a UriError Understand how bad URIs can end up in our system Jan 24, 2018
@jrieken
Copy link
Member

jrieken commented Jan 24, 2018

For example, as extension I cannot use the URI.with method it seems,

You can use with but it will explode in the same way: https://github.com/Microsoft/vscode/blob/master/src/vs/vscode.d.ts#L1256.

Theory: The URIs that are around have no path, just scheme and authority (which is valid). Still, such scheme/auth-only uris shouldn't be working in our system, because the fsPath is empty unless both authority and path are set. That means we should never be able to open them and hence they shouldn't end up in the history.

@jrieken
Copy link
Member

jrieken commented Jan 24, 2018

I have something like this in mind, but that doesn't reproduce it

        const uri = vscode.Uri.parse('').with({
            scheme: 'file',
            authority: '/Users/jrieken/Code/_samples/virtual/snippets/super.code-snippet'
        });

        return vscode.window.showTextDocument(uri);

@bpasero
Copy link
Member

bpasero commented Jan 25, 2018

Yeah the thing that is weird is that it is not even a custom schema, but an actual file URI.

@adamretter would be nice if you could somehow reproduce this. What I would expect to see is that some action you do that should open a file in the editor, actually does not work and from then on quick open history will also not work. To reproduce this:

  • run code --user-data-dir <some folder> from the command line to get a fresh start of Code where everything should work
  • use it for some time (possibly the C++ extension?
  • try to use quick open and see if you get into this state again

@jrieken
Copy link
Member

jrieken commented Jan 25, 2018

Also, another thing to try for @adamretter is the dump the stored history. Please do the following: open Developer Tools, select Application, select Local Storage, Files, and enter 'history.entries' into the search box. It will show different key-value pairs for different workspaces. Please locate the workspace in question and share its value with us. Thanks

@adamretter
Copy link
Author

@jrieken here is the history.entries storage:

[{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/transaction.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/transaction.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/transaction.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/transaction.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/transaction.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/transaction.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/transaction_db.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/transaction_db.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/transaction_db.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/portal.h","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/portal.h","path":"/Users/aretter/code/rocksdb/java/rocksjni/portal.h","scheme":"file"}},{"editorInputJSON":{"typeId":"workbench.editorinputs.preferencesEditorInput","deserialized":"{\"name\":\"Workspace Settings\",\"description\":\".vscode\",\"detailsSerialized\":\"{\\\"resource\\\":\\\"vscode://defaultsettings/1/settings.json\\\"}\",\"masterSerialized\":\"{\\\"resource\\\":\\\"file:///Users/aretter/code/rocksdb/.vscode/settings.json\\\",\\\"resourceJSON\\\":{\\\"$mid\\\":1,\\\"fsPath\\\":\\\"/Users/aretter/code/rocksdb/.vscode/settings.json\\\",\\\"external\\\":\\\"file:///Users/aretter/code/rocksdb/.vscode/settings.json\\\",\\\"path\\\":\\\"/Users/aretter/code/rocksdb/.vscode/settings.json\\\",\\\"scheme\\\":\\\"file\\\"},\\\"encoding\\\":\\\"utf8\\\"}\",\"detailsTypeId\":\"workbench.editorinputs.defaultpreferences\",\"masterTypeId\":\"workbench.editors.files.fileEditorInput\"}"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/rocksjni.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/rocksjni.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/rocksjni.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/comparatorjnicallback.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/comparatorjnicallback.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/comparatorjnicallback.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/comparator.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/comparator.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/comparator.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/jnicallback.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/jnicallback.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/jnicallback.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/comparatorjnicallback.h","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/comparatorjnicallback.h","path":"/Users/aretter/code/rocksdb/java/rocksjni/comparatorjnicallback.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/rocksdb.h","external":"file:///Users/aretter/code/rocksdb/rocksdb.h","path":"/Users/aretter/code/rocksdb/rocksdb.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/.vscode/extensions/ms-vscode.cpptools-0.14.2/ReleaseNotes.html","external":"file:///Users/aretter/.vscode/extensions/ms-vscode.cpptools-0.14.2/ReleaseNotes.html","path":"/Users/aretter/.vscode/extensions/ms-vscode.cpptools-0.14.2/ReleaseNotes.html","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/options.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/options.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/options.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/columnfamilyhandle.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/columnfamilyhandle.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/columnfamilyhandle.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/transactions/transaction_base.cc","external":"file:///Users/aretter/code/rocksdb/utilities/transactions/transaction_base.cc","path":"/Users/aretter/code/rocksdb/utilities/transactions/transaction_base.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/db.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/db.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/db.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/include/org_rocksdb_ColumnFamilyDescriptor.h","external":"file:///Users/aretter/code/rocksdb/java/include/org_rocksdb_ColumnFamilyDescriptor.h","path":"/Users/aretter/code/rocksdb/java/include/org_rocksdb_ColumnFamilyDescriptor.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/Makefile","external":"file:///Users/aretter/code/rocksdb/java/Makefile","path":"/Users/aretter/code/rocksdb/java/Makefile","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/src.mk","external":"file:///Users/aretter/code/rocksdb/src.mk","path":"/Users/aretter/code/rocksdb/src.mk","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/column_family.h","external":"file:///Users/aretter/code/rocksdb/db/column_family.h","path":"/Users/aretter/code/rocksdb/db/column_family.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/include/org_rocksdb_Transaction.h","external":"file:///Users/aretter/code/rocksdb/java/include/org_rocksdb_Transaction.h","path":"/Users/aretter/code/rocksdb/java/include/org_rocksdb_Transaction.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/transactions/pessimistic_transaction.h","external":"file:///Users/aretter/code/rocksdb/utilities/transactions/pessimistic_transaction.h","path":"/Users/aretter/code/rocksdb/utilities/transactions/pessimistic_transaction.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/transactions/pessimistic_transaction.cc","external":"file:///Users/aretter/code/rocksdb/utilities/transactions/pessimistic_transaction.cc","path":"/Users/aretter/code/rocksdb/utilities/transactions/pessimistic_transaction.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/transactions/optimistic_transaction.h","external":"file:///Users/aretter/code/rocksdb/utilities/transactions/optimistic_transaction.h","path":"/Users/aretter/code/rocksdb/utilities/transactions/optimistic_transaction.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/rocksdb.cc","external":"file:///Users/aretter/code/rocksdb/rocksdb.cc","path":"/Users/aretter/code/rocksdb/rocksdb.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/advanced_options.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/advanced_options.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/advanced_options.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/options.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/options.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/options.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/sst_file_writerjni.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/sst_file_writerjni.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/sst_file_writerjni.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/loggerjnicallback.h","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/loggerjnicallback.h","path":"/Users/aretter/code/rocksdb/java/rocksjni/loggerjnicallback.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/dbformat.h","external":"file:///Users/aretter/code/rocksdb/db/dbformat.h","path":"/Users/aretter/code/rocksdb/db/dbformat.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/table/sst_file_writer.cc","external":"file:///Users/aretter/code/rocksdb/table/sst_file_writer.cc","path":"/Users/aretter/code/rocksdb/table/sst_file_writer.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/slice.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/slice.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/slice.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/loggerjnicallback.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/loggerjnicallback.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/loggerjnicallback.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/merge_operator.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/merge_operator.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/merge_operator.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/write_batch.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/write_batch.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/write_batch.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/.vscode/c_cpp_properties.json","external":"file:///Users/aretter/code/rocksdb/.vscode/c_cpp_properties.json","path":"/Users/aretter/code/rocksdb/.vscode/c_cpp_properties.json","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/.vscode/launch.json","external":"file:///Users/aretter/code/rocksdb/.vscode/launch.json","path":"/Users/aretter/code/rocksdb/.vscode/launch.json","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/.vscode/extensions/ms-vscode.cpptools-0.13.0/ReleaseNotes.html","external":"file:///Users/aretter/.vscode/extensions/ms-vscode.cpptools-0.13.0/ReleaseNotes.html","path":"/Users/aretter/.vscode/extensions/ms-vscode.cpptools-0.13.0/ReleaseNotes.html","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/WriteBatch.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/WriteBatch.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/WriteBatch.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/writebatchhandlerjnicallback.h","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/writebatchhandlerjnicallback.h","path":"/Users/aretter/code/rocksdb/java/rocksjni/writebatchhandlerjnicallback.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/writebatchhandlerjnicallback.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/writebatchhandlerjnicallback.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/writebatchhandlerjnicallback.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/write_batch.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/write_batch.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/write_batch.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/Makefile","external":"file:///Users/aretter/code/rocksdb/Makefile","path":"/Users/aretter/code/rocksdb/Makefile","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/transactions/transaction_base.h","external":"file:///Users/aretter/code/rocksdb/utilities/transactions/transaction_base.h","path":"/Users/aretter/code/rocksdb/utilities/transactions/transaction_base.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/write_batch.cc","external":"file:///Users/aretter/code/rocksdb/db/write_batch.cc","path":"/Users/aretter/code/rocksdb/db/write_batch.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/env_librados.md","external":"file:///Users/aretter/code/rocksdb/utilities/env_librados.md","path":"/Users/aretter/code/rocksdb/utilities/env_librados.md","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/env_librados.cc","external":"file:///Users/aretter/code/rocksdb/utilities/env_librados.cc","path":"/Users/aretter/code/rocksdb/utilities/env_librados.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/env_mirror.cc","external":"file:///Users/aretter/code/rocksdb/utilities/env_mirror.cc","path":"/Users/aretter/code/rocksdb/utilities/env_mirror.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/CMakeLists.txt","external":"file:///Users/aretter/code/rocksdb/java/CMakeLists.txt","path":"/Users/aretter/code/rocksdb/java/CMakeLists.txt","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/backupablejni.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/backupablejni.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/backupablejni.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/util_merge_operators_test.cc","external":"file:///Users/aretter/code/rocksdb/utilities/util_merge_operators_test.cc","path":"/Users/aretter/code/rocksdb/utilities/util_merge_operators_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/write_batch_test.cc","external":"file:///Users/aretter/code/rocksdb/db/write_batch_test.cc","path":"/Users/aretter/code/rocksdb/db/write_batch_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/memtable.h","external":"file:///Users/aretter/code/rocksdb/db/memtable.h","path":"/Users/aretter/code/rocksdb/db/memtable.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/write_batch_test.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/write_batch_test.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/write_batch_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/memtable.cc","external":"file:///Users/aretter/code/rocksdb/db/memtable.cc","path":"/Users/aretter/code/rocksdb/db/memtable.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/sst_file_writer.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/sst_file_writer.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/sst_file_writer.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/ratelimiterjni.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/ratelimiterjni.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/ratelimiterjni.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/build_tools/build_detect_platform","external":"file:///Users/aretter/code/rocksdb/build_tools/build_detect_platform","path":"/Users/aretter/code/rocksdb/build_tools/build_detect_platform","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/env_options.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/env_options.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/env_options.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/env.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/env.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/env.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/filter.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/filter.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/filter.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/build_tools/make_package.sh","external":"file:///Users/aretter/code/rocksdb/build_tools/make_package.sh","path":"/Users/aretter/code/rocksdb/build_tools/make_package.sh","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/db_test.cc","external":"file:///Users/aretter/code/rocksdb/db/db_test.cc","path":"/Users/aretter/code/rocksdb/db/db_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend.h","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend.h","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend.cc","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend.cc","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators.h","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators.h","path":"/Users/aretter/code/rocksdb/utilities/merge_operators.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/merge_operator.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/merge_operator.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/merge_operator.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/backupable_db.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/backupable_db.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/backupable_db.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/BackupableDBOptions.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/BackupableDBOptions.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/BackupableDBOptions.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/RestoreOptions.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/RestoreOptions.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/RestoreOptions.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/restorejni.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/restorejni.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/restorejni.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/FlushOptions.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/FlushOptions.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/FlushOptions.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/env.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/env.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/env.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/cache.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/cache.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/cache.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/transaction_log.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/transaction_log.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/transaction_log.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/universal_compaction.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/universal_compaction.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/universal_compaction.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/benchmark/src/main/java/org/rocksdb/benchmark/DbBenchmark.java","external":"file:///Users/aretter/code/rocksdb/java/benchmark/src/main/java/org/rocksdb/benchmark/DbBenchmark.java","path":"/Users/aretter/code/rocksdb/java/benchmark/src/main/java/org/rocksdb/benchmark/DbBenchmark.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/column_family.cc","external":"file:///Users/aretter/code/rocksdb/db/column_family.cc","path":"/Users/aretter/code/rocksdb/db/column_family.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/options_util.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/options_util.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/options_util.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/option_change_migration.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/option_change_migration.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/option_change_migration.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/options/options_util.cc","external":"file:///Users/aretter/code/rocksdb/utilities/options/options_util.cc","path":"/Users/aretter/code/rocksdb/utilities/options/options_util.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/Documents/exist-versioning-release-v4.md","external":"file:///Users/aretter/Documents/exist-versioning-release-v4.md","path":"/Users/aretter/Documents/exist-versioning-release-v4.md","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc","external":"file:///Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc","path":"/Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/Documents/exist-versioning-release-v3.md","external":"file:///Users/aretter/Documents/exist-versioning-release-v3.md","path":"/Users/aretter/Documents/exist-versioning-release-v3.md","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/Documents/exist-versioning-release-v2.md","external":"file:///Users/aretter/Documents/exist-versioning-release-v2.md","path":"/Users/aretter/Documents/exist-versioning-release-v2.md","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/Documents/exist-versioning-release.md","external":"file:///Users/aretter/Documents/exist-versioning-release.md","path":"/Users/aretter/Documents/exist-versioning-release.md","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/rate_limiter.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/rate_limiter.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/rate_limiter.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/bloom.cc","external":"file:///Users/aretter/code/rocksdb/util/bloom.cc","path":"/Users/aretter/code/rocksdb/util/bloom.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/table.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/table.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/table.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/table.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/table.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/table.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/leveldb_options.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/leveldb_options.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/leveldb_options.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/leveldb_options/leveldb_options.cc","external":"file:///Users/aretter/code/rocksdb/utilities/leveldb_options/leveldb_options.cc","path":"/Users/aretter/code/rocksdb/utilities/leveldb_options/leveldb_options.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/table/plain_table_factory.cc","external":"file:///Users/aretter/code/rocksdb/table/plain_table_factory.cc","path":"/Users/aretter/code/rocksdb/table/plain_table_factory.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/write_batch_with_index.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/write_batch_with_index.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/write_batch_with_index.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/slice.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/slice.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/slice.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/slice.cc","external":"file:///Users/aretter/code/rocksdb/util/slice.cc","path":"/Users/aretter/code/rocksdb/util/slice.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/coding.h","external":"file:///Users/aretter/code/rocksdb/util/coding.h","path":"/Users/aretter/code/rocksdb/util/coding.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc","external":"file:///Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc","path":"/Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/WBWIRocksIterator.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/WBWIRocksIterator.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/WBWIRocksIterator.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/write_batch_with_index.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/write_batch_with_index.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/write_batch_with_index.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/Slice.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/Slice.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/Slice.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/util/BytewiseComparatorTest.java","external":"file:///Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/util/BytewiseComparatorTest.java","path":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/util/BytewiseComparatorTest.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/ttl.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/ttl.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/ttl.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/statistics.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/statistics.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/statistics.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/snapshot.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/snapshot.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/snapshot.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/third-party/gtest-1.7.0/fused-src/gtest/gtest.h","external":"file:///Users/aretter/code/rocksdb/third-party/gtest-1.7.0/fused-src/gtest/gtest.h","path":"/Users/aretter/code/rocksdb/third-party/gtest-1.7.0/fused-src/gtest/gtest.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/transaction_log.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/transaction_log.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/transaction_log.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/TransactionLogIterator.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/TransactionLogIterator.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/TransactionLogIterator.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/snapshot_impl.cc","external":"file:///Users/aretter/code/rocksdb/db/snapshot_impl.cc","path":"/Users/aretter/code/rocksdb/db/snapshot_impl.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/adam.patch","external":"file:///Users/aretter/code/rocksdb/adam.patch","path":"/Users/aretter/code/rocksdb/adam.patch","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/comparator1.patch","external":"file:///Users/aretter/code/rocksdb/comparator1.patch","path":"/Users/aretter/code/rocksdb/comparator1.patch","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/include/jni.h","external":"file:///Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/include/jni.h","path":"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/include/jni.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/stackable_db.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/stackable_db.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/stackable_db.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include/darwin/jni_md.h","external":"file:///Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include/darwin/jni_md.h","path":"/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include/darwin/jni_md.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/status.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/status.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/status.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/status.cc","external":"file:///Users/aretter/code/rocksdb/util/status.cc","path":"/Users/aretter/code/rocksdb/util/status.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/db_impl.h","external":"file:///Users/aretter/code/rocksdb/db/db_impl.h","path":"/Users/aretter/code/rocksdb/db/db_impl.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/db_impl.cc","external":"file:///Users/aretter/code/rocksdb/db/db_impl.cc","path":"/Users/aretter/code/rocksdb/db/db_impl.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/tools/db_bench_tool.cc","external":"file:///Users/aretter/code/rocksdb/tools/db_bench_tool.cc","path":"/Users/aretter/code/rocksdb/tools/db_bench_tool.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/db_test_util.h","external":"file:///Users/aretter/code/rocksdb/db/db_test_util.h","path":"/Users/aretter/code/rocksdb/db/db_test_util.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/db_test_util.cc","external":"file:///Users/aretter/code/rocksdb/db/db_test_util.cc","path":"/Users/aretter/code/rocksdb/db/db_test_util.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/compaction_filter.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/compaction_filter.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/compaction_filter.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/transaction_log_impl.cc","external":"file:///Users/aretter/code/rocksdb/db/transaction_log_impl.cc","path":"/Users/aretter/code/rocksdb/db/transaction_log_impl.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/exist-algolia-index/src/main/scala/org/humanistika/exist/index/algolia/AlgoliaStreamListener.scala","external":"file:///Users/aretter/code/exist-algolia-index/src/main/scala/org/humanistika/exist/index/algolia/AlgoliaStreamListener.scala","path":"/Users/aretter/code/exist-algolia-index/src/main/scala/org/humanistika/exist/index/algolia/AlgoliaStreamListener.scala","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/InfoLogLevel.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/InfoLogLevel.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/InfoLogLevel.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/statistics.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/statistics.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/statistics.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/metadata.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/metadata.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/metadata.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/merge_operator.cc","external":"file:///Users/aretter/code/rocksdb/db/merge_operator.cc","path":"/Users/aretter/code/rocksdb/db/merge_operator.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/heap.h","external":"file:///Users/aretter/code/rocksdb/util/heap.h","path":"/Users/aretter/code/rocksdb/util/heap.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/uint64add.cc","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/uint64add.cc","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/uint64add.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/put.cc","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/put.cc","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/put.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/event_logger.cc","external":"file:///Users/aretter/code/rocksdb/util/event_logger.cc","path":"/Users/aretter/code/rocksdb/util/event_logger.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/tools/db_bench.cc","external":"file:///Users/aretter/code/rocksdb/tools/db_bench.cc","path":"/Users/aretter/code/rocksdb/tools/db_bench.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/rocksjni/iterator.cc","external":"file:///Users/aretter/code/rocksdb/java/rocksjni/iterator.cc","path":"/Users/aretter/code/rocksdb/java/rocksjni/iterator.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/include/darwin/jni_md.h","external":"file:///Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/include/darwin/jni_md.h","path":"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/include/darwin/jni_md.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/WriteBatchTest.java","external":"file:///Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/WriteBatchTest.java","path":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/WriteBatchTest.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/native_value_index/either_test.cc.BAK","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/native_value_index/either_test.cc.BAK","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/native_value_index/either_test.cc.BAK","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/usr/include/sys/_types/_size_t.h","external":"file:///usr/include/sys/_types/_size_t.h","path":"/usr/include/sys/_types/_size_t.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/SliceTest.java","external":"file:///Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/SliceTest.java","path":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/SliceTest.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/Library/Application Support/Code/User/settings.json","external":"file:///Users/aretter/Library/Application%20Support/Code/User/settings.json","path":"/Users/aretter/Library/Application Support/Code/User/settings.json","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/.vscode/settings.json","external":"file:///Users/aretter/code/rocksdb/.vscode/settings.json","path":"/Users/aretter/code/rocksdb/.vscode/settings.json","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/DBOptions.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/DBOptions.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/DBOptions.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/db_iter.cc","external":"file:///Users/aretter/code/rocksdb/db/db_iter.cc","path":"/Users/aretter/code/rocksdb/db/db_iter.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/db_iterator_test.cc","external":"file:///Users/aretter/code/rocksdb/db/db_iterator_test.cc","path":"/Users/aretter/code/rocksdb/db/db_iterator_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/column_family_test.cc","external":"file:///Users/aretter/code/rocksdb/db/column_family_test.cc","path":"/Users/aretter/code/rocksdb/db/column_family_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/managed_iterator.cc","external":"file:///Users/aretter/code/rocksdb/db/managed_iterator.cc","path":"/Users/aretter/code/rocksdb/db/managed_iterator.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/iterator.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/iterator.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/iterator.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/manual_compaction_test.cc","external":"file:///Users/aretter/code/rocksdb/db/manual_compaction_test.cc","path":"/Users/aretter/code/rocksdb/db/manual_compaction_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/rate_limiter.h","external":"file:///Users/aretter/code/rocksdb/util/rate_limiter.h","path":"/Users/aretter/code/rocksdb/util/rate_limiter.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/rate_limiter.cc","external":"file:///Users/aretter/code/rocksdb/util/rate_limiter.cc","path":"/Users/aretter/code/rocksdb/util/rate_limiter.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend2.cc","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend2.cc","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend2.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fjava%2Frocksjni%2Fportal.h","scheme":"file","authority":"/users/aretter/code/rocksdb/java/rocksjni/portal.h"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Finclude%2Frocksdb%2Fstatus.h","scheme":"file","authority":"/users/aretter/code/rocksdb/include/rocksdb/status.h"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/Logger.java","external":"file:///Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/Logger.java","path":"/Users/aretter/code/rocksdb/java/src/main/java/org/rocksdb/Logger.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Finclude%2Frocksdb%2Futilities%2Fstackable_db.h","scheme":"file","authority":"/users/aretter/code/rocksdb/include/rocksdb/utilities/stackable_db.h"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fdb%2Fcolumn_family.h","scheme":"file","authority":"/users/aretter/code/rocksdb/db/column_family.h"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fdb%2Fmemtable.h","scheme":"file","authority":"/users/aretter/code/rocksdb/db/memtable.h"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/comparator.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/comparator.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/comparator.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/comparator.cc","external":"file:///Users/aretter/code/rocksdb/util/comparator.cc","path":"/Users/aretter/code/rocksdb/util/comparator.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/dbformat.cc","external":"file:///Users/aretter/code/rocksdb/db/dbformat.cc","path":"/Users/aretter/code/rocksdb/db/dbformat.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fdb%2Fdbformat.h","scheme":"file","authority":"/users/aretter/code/rocksdb/db/dbformat.h"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/port/port_posix.cc","external":"file:///Users/aretter/code/rocksdb/port/port_posix.cc","path":"/Users/aretter/code/rocksdb/port/port_posix.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/table/table_test.cc","external":"file:///Users/aretter/code/rocksdb/table/table_test.cc","path":"/Users/aretter/code/rocksdb/table/table_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Finclude%2Frocksdb%2Fslice.h","scheme":"file","authority":"/users/aretter/code/rocksdb/include/rocksdb/slice.h"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/wal_manager_test.cc","external":"file:///Users/aretter/code/rocksdb/db/wal_manager_test.cc","path":"/Users/aretter/code/rocksdb/db/wal_manager_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/compact_files_test.cc","external":"file:///Users/aretter/code/rocksdb/db/compact_files_test.cc","path":"/Users/aretter/code/rocksdb/db/compact_files_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/compaction_job_test.cc","external":"file:///Users/aretter/code/rocksdb/db/compaction_job_test.cc","path":"/Users/aretter/code/rocksdb/db/compaction_job_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/db/compaction_picker_test.cc","external":"file:///Users/aretter/code/rocksdb/db/compaction_picker_test.cc","path":"/Users/aretter/code/rocksdb/db/compaction_picker_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/util/log_buffer.cc","external":"file:///Users/aretter/code/rocksdb/util/log_buffer.cc","path":"/Users/aretter/code/rocksdb/util/log_buffer.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/StatsCallbackMock.java","external":"file:///Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/StatsCallbackMock.java","path":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/StatsCallbackMock.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/StatisticsCollectorTest.java","external":"file:///Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/StatisticsCollectorTest.java","path":"/Users/aretter/code/rocksdb/java/src/test/java/org/rocksdb/StatisticsCollectorTest.java","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/slice_transform.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/slice_transform.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/slice_transform.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc","external":"file:///Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc","path":"/Users/aretter/code/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/include/rocksdb/write_batch_base.h","external":"file:///Users/aretter/code/rocksdb/include/rocksdb/write_batch_base.h","path":"/Users/aretter/code/rocksdb/include/rocksdb/write_batch_base.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/wbwi-merge-test.cc","external":"file:///Users/aretter/code/rocksdb/wbwi-merge-test.cc","path":"/Users/aretter/code/rocksdb/wbwi-merge-test.cc","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fthird-party%2Fgtest-1.7.0%2Ffused-src%2Fgtest%2Fgtest.h","scheme":"file","authority":"/users/aretter/code/rocksdb/third-party/gtest-1.7.0/fused-src/gtest/gtest.h"}},{"resourceJSON":{"$mid":1,"fsPath":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend2.h","external":"file:///Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend2.h","path":"/Users/aretter/code/rocksdb/utilities/merge_operators/string_append/stringappend2.h","scheme":"file"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Finclude%2Frocksdb%2Fenv.h","scheme":"file","authority":"/users/aretter/code/rocksdb/include/rocksdb/env.h"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Finclude%2Frocksdb%2Fmerge_operator.h","scheme":"file","authority":"/users/aretter/code/rocksdb/include/rocksdb/merge_operator.h"}},{"resourceJSON":{"$mid":1,"fsPath":"","external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fdb%2Fcompaction.h","scheme":"file","authority":"/users/aretter/code/rocksdb/db/compaction.h"}}]

@adamretter
Copy link
Author

@bpasero I have not been able to reproduce this yet on a different --user-data-dir

@bpasero
Copy link
Member

bpasero commented Jan 26, 2018

@jrieken I think your theory might be right:

{  
      "resourceJSON":{  
         "$mid":1,
         "fsPath":"",
         "external":"file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fjava%2Frocksjni%2Fportal.h",
         "scheme":"file",
         "authority":"/users/aretter/code/rocksdb/java/rocksjni/portal.h"
      }
}

That seems to be a URI where the "/" is URI encoded to be %2F.

I am still not sure how such a URI can be crafted, e.g. tried this:

vscode.Uri.file('%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fjava%2Frocksjni%2Fportal.h') but that did not work.

Also, opening such a URI as editor will fail immediately and as such we remove the history entry again right after, so it should never appear as history entry unless it can be opened properly. Tried with this code from core:

const uri = URI.revive({
	"$mid": 1,
	"fsPath": "",
	"external": "file://%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fjava%2Frocksjni%2Fportal.h",
	"scheme": "file",
	"authority": "/users/aretter/code/rocksdb/java/rocksjni/portal.h"
});

return this.editorService.openEditor({ resource: uri });

@adamretter
Copy link
Author

@bpasero @jrieken is it okay if I now delete that stored data, so I can get back to having a working VSCode?

@bpasero
Copy link
Member

bpasero commented Jan 26, 2018

@adamretter yeah, you can also use our insiders build as a workaround until we pushed the fix to stable.

@jrieken
Copy link
Member

jrieken commented Jan 26, 2018

That seems to be a URI where the "/" is URI encoded to be %2F.

It must do that because the authority component uses slashes. If they aren't encoded a toString/parse cycle would change the URI.

vscode.Uri.file('%2Fusers%2Faretter%2Fcode%2Frocksdb%2Fjava%2Frocksjni%2Fportal.h') but that did not work.

URI 101 - The value of _external is what toString returns and shall never be passed to URI.file but only to URI.parse. When calling file no decoding happens.

I believe the problem is somewhere else, not in calling toString or toJSON but somehow a URI is constructed with the path as authority.... Question is where/how does happen.

@bpasero Are there other ways to get into the history? Does this only happen when an editor has been opened successfully?

@bpasero
Copy link
Member

bpasero commented Jan 26, 2018

Will check...

@bpasero bpasero added this to the January 2018 milestone Jan 26, 2018
@bpasero
Copy link
Member

bpasero commented Feb 1, 2018

Whenever an editor changes, the history will check if the resource of the editor that was opened can be handled by the file service to decide if the resource should be added to the history or not. This is not a very good check because it is possible to e.g. open a markdown preview on a file and the file that is being previewed would actually be added into the history. Another check is probably required to verify that the editor that opened is a file editor input.

Given that, I am able to open a markdown preview from an extension and trick the history from accepting the URI of that preview into the history. However, I am still not able to produce a malformed URI and get it into the history, because the preview will show an error directly when the underlying resource cannot be found. Thing is, the history will remove the resource directly when detecting that the editor failed to open.

I will push a change to check for file editor inputs to enter the history but it might not actually fix this issue.

@adamretter let us know if you ever see this again with current stable (where the error still exists) and you can remember how you got into that state.

@bpasero bpasero added the workbench-history History item issues label Feb 1, 2018
@bpasero bpasero removed this from the January 2018 milestone Feb 1, 2018
@bpasero bpasero added *not-reproducible Issue cannot be reproduced by VS Code Team member as described and removed info-needed Issue requires more information from poster labels Feb 1, 2018
@vscodebot vscodebot bot closed this as completed Feb 1, 2018
@bpasero bpasero added the bug Issue identified by VS Code Team member as probable bug label Feb 1, 2018
@bpasero bpasero reopened this Feb 1, 2018
@microsoft microsoft deleted a comment from vscodebot bot Feb 1, 2018
@bpasero bpasero removed the bug Issue identified by VS Code Team member as probable bug label May 11, 2018
@bpasero bpasero added info-needed Issue requires more information from poster and removed workbench-history History item issues labels May 24, 2018
@vscodebot vscodebot bot closed this as completed May 31, 2018
@vscodebot
Copy link

vscodebot bot commented May 31, 2018

This issue has been closed automatically because it needs more information and has not had recent activity. See also our issue reporting guidelines.

Happy Coding!

@adamretter
Copy link
Author

@bpasero I haven't seen the issue since I first reported it. So I guess it is fixed.

Thanks to everyone who spent time looking into this :-)

@vscodebot vscodebot bot locked and limited conversation to collaborators Jul 15, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
info-needed Issue requires more information from poster *not-reproducible Issue cannot be reproduced by VS Code Team member as described
Projects
None yet
Development

No branches or pull requests

3 participants