First, I appreciate the discussion in this thread as this is all new to me.
What use cases should we support first?
I'd be for looking
into the document use case first, and hold off with the
transactional/Operational Transformation one for now. This mainly because
is seems to be a lot simpler.
qmx suggested using something similar to CouchDB. CouchDB uses a revision
field for each document to handle/detect conflicts.
The following is a concrete example of how this works with CouchDB:
Create a database:
curl -X PUT
http://127.0.0.1:5984/agsync
{"ok":true}
Get a uuid:
curl -X GET
http://127.0.0.1:5984/_uuids
{"uuids":["f11075199bcea80849204660d7000d53"]}
Create a car object(document) using the above uuid:
curl -X PUT
http://127.0.0.1:5984/agsync/f11075199bcea80849204660d7000d53-d
'{"car": {"make":"Toyota",
"color":"red"}}'
{"ok":true,"id":"f11075199bcea80849204660d7000d53","rev":"1-dffbd1dbd1b9ecbffc1b02a34cbaea0b"}
Notice that the server returned a new document revision.
Now clientA updates the car object, notice that we are specifying the
document revision:
curl -X PUT
http://127.0.0.1:5984/agsync/f11075199bcea80849204660d7000d53-d
'{"_rev":"1-dffbd1dbd1b9ecbffc1b02a34cbaea0b", "car":
{"make":"Toyota","color":"blue"}}'
{"ok":true,"id":"f11075199bcea80849204660d7000d53","rev":"2-588a9da2e252e9a3d2fc0634610a0c25"}
Also, notice how the server returned a new document revision.
Now, clientB still has the old revision and tries to update the car object:
curl -v -X PUT
http://127.0.0.1:5984/agsync/f11075199bcea80849204660d7000d53 -d
'{"_rev":"1-dffbd1dbd1b9ecbffc1b02a34cbaea0b", "car":
{"make":"Toyota","color":"yellow"}}'
< HTTP/1.1 409 Conflict
{"error":"conflict","reason":"Document update
conflict."}
This conflict would the have to be handled by the client. Could we start
out with something similar and as simple as this and evolve it?
On 11 December 2013 08:30, Erik Jan de Wit <edewit(a)redhat.com> wrote:
>
> Just because I want to start with a simple use case doesn't mean you can
> dismiss the use case.
>
I don’t want to dismiss anything just wanted to know what you think about
my idea to combine a pipe and store to create a pipe that continues to work
when the user goes offline. Obviously you don’t feel my idea makes any
sense and I think that you sync isn’t a super powerful feature to have
(there are to many pre conditions in my opinion), but we could have it, not
dismissing it.
What do others think about this discussion? What use cases should we
support first? Can you think of other ways/things to sync?
_______________________________________________
aerogear-dev mailing list
aerogear-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev