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

Handle unavailable files with no storage/peers better #153

Open
pvh opened this issue Aug 24, 2023 · 7 comments
Open

Handle unavailable files with no storage/peers better #153

pvh opened this issue Aug 24, 2023 · 7 comments

Comments

@pvh
Copy link
Member

pvh commented Aug 24, 2023

If you try to open a valid documentId that wasn't saved anywhere (and you're not connected to anyone) it should fail gracefully instead of hanging on isReady().

@acurrieclark
Copy link
Collaborator

Ah, that should be in already. There is a passing test in there right now, but maybe it's not actually testing what I think it is.

@acurrieclark
Copy link
Collaborator

Just spotted it has a network adapter in that test. Will adjust and see what I can sort

@acurrieclark
Copy link
Collaborator

OK, that passes too. What situation are you seeing this in?

@pvh
Copy link
Member Author

pvh commented Aug 24, 2023

In here: https://github.com/automerge/automerge.github.io/blob/repo-updates/docs/quickstart.md

I had a version with no StorageAdapter -- if you reload the page then the document no longer exists to load, but if you called change() you'd get the !isReady() error.

Maybe the issue is that if the document is no bueno, we should return null instead of the change function? Maybe it's just a matter of updating what error message is reported?

@acurrieclark
Copy link
Collaborator

So in that situation, the unavailable event is firing and handle.doc() would return undefined. It's just that if you don't look for any of those signs, then you get a "not ready" error when you try to change?

@pvh
Copy link
Member Author

pvh commented Aug 25, 2023 via email

@acurrieclark
Copy link
Collaborator

Been thinking about this a little today. It kind of goes back to my initial argument about how a user might access a document. There should always be a check done to make sure that the handle contains a valid document before you try to read from it or change it. At the moment that would be:

const handle = repo.find(id);

const doc = await handle.doc();

if (doc) {
  // do things with the handle
} else {
  // there is an error with the document
  console.log(handle.state)
}

There is also handle.whenReady() which at the moment will resolve or throw an error. It doesn't currently reject if the doc becomes unavailable, which it probably should do.

My instinct is that while reading a non-ready document shouldn't throw, changing a non-ready document probably should.

Essentially, the rule should always be "check the document is ready before doing anything with it".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants