-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
UX design for persistence failure user notification #154
Comments
The desire here is to have a UI specification for how the application should behave when persistence errors occur, sufficient to cover all cases/varieties of persistence failure. There are two specific goals to support here:
There are some complicating factors:
Actions which trigger persistence:
Possible reasons for persistence to fail (this list is not comprehensive, but summarizes the cases which I think we might handle distinctly):
* Merging could be attempted in principle, but doubtful this could be done in a way that the user would perceive as correct. |
Note that, above, "Overwrite" is very similar (nearly functionally equivalent) to "Retry"; the distinction is that more recent changes are known to exist on the server which would be overwritten by the Retry attempt. |
Questions:
My comments:
|
Assigning to Victor for responses to questions. |
Yes, we will know which ones failed and which were successful.
Yes, but it limits our options for how we do this (would be incompatible with #160.) Would prefer to stay generic if possible.
The result is that the back-end now is up-to-date for one of the children, but changes to the parent and child are not present. If you were to view the same layout from another client instance, you'd see the Layout and the first child as they appeared before the save, but the second child would contain the changes from editing. As to what you'd see within the original window, a variety of behaviors could be implemented. I think currently you'd see the latest changes, but I don't think that's desired behavior. Which one is "right" depends, I think, on what else has happened in the UI leading up to that point. If you give a dialog that says "Revert or Retry" and you choose revert, you should get the old version of the object (including the one that successfully saved, ideally *); if you retry, you should see the new version when it's been retrieved. There are alternate models for presenting persistent state in the UI, though. You could just always show the user's latest edits and keep retrying persistence in the background (as discussed for #160). * We can do this in semi-nominal cases where persistence failed, and the client detected it and rolled back changes. But we can't do this in all cases. If two-of-three persist operations fails, and my computer explodes before I can choose between Revert or Retry, I'm just going to be stuck with a mixed state in the database.
For small operations (e.g. Create), yes, failure should be very immediate. For long-running actions like Duplicate, it may be much less than immediate. We can block the UI if needed until actions resolve.
I agree that Retry should only do so for failed items, yes. In both cases, you can play with the ordering of operations to minimize disruption. For Copy, if you wait until everything else has successfully written before updating the destination to point to the new objects, you're pretty safe. Move is simpler (involves changes to three objects); I think the ordering we use here is to add it to the destination, then update the location of the moved object, then remove it from its original location. If you interrupt that at any point, you don't get what you wanted, but you get something that's recoverable (the object will be in its original location, or its new location, or both)
I can't think of any cases where it would absolutely have to be, so long as we effectively communicate the state of the system. If an object has unpersisted changes, I think we should at least visually indicate that. |
Still need to handle certain cases where a failed action isn't bubbling back up to the user. Flesh out scenarios that we haven't defined yet and eval for severity / priority. See #58. |
Given that #58 is resolved, believe this is no longer an active issue. |
#58 needs some design. Modal dialog is feeling like the best solution here. Victor created something similar to this a little while ago to handle overwrite situations - may use that, or clean that up.
The text was updated successfully, but these errors were encountered: