-
Notifications
You must be signed in to change notification settings - Fork 20
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
Design reliable expiration #26
Comments
Note that this is not about marking a task as The problem with deleting tasks is that the only way to combine an Update and a Delete operation is into a Delete (since the deleted properties are all gone). And that is a kind of data loss. So, we want to make sure that a task is only actually deleted from the DB when it's very unlikely that it will conflict with an update. One way to do that may be to only delete tasks when their |
I think this will be one of the "gc" operations, and should probably be done only after a sync. Scan the DB for expired tasks (using the definition of expired described above) and add Delete operations for those tasks. The result for users will be that any further operations on that task will be ignored, which is not terribly confusing. |
Having data actually deleted and not merely hidden is an important property. Can we do something like this?
|
The problem is that we don't store tasks, we store operations, and those operations need to be transposable. An This actually mirrors TW -- I guess the idea behind "actually deleted" is user data sovereignty? Like when I delete a facebook post it'd be nice if facebook actually deleted it instead of just marking it invisible? I get that, but going back to the data model, we store operations, and those are in an immutable chain. So even if I add a Note, again, that Google Docs (the canonical example of an OT-based document) have the same characteristic: you can't delete changes in a gdoc history, but you can make a new gdoc and copy the latest state into it, then delete the entire old document. |
The sync model is such that there's a point in the list of operations that is committed. That can be used to determine when to delete an expired task -- basically, when an op after its expiration time has been committed.
That might need to be recorded as an operation? Needs a bit more thought.
The text was updated successfully, but these errors were encountered: