Skip to content

submit ops failed due to version mismatched (code 5002) #8

Closed
@zbryikt

Description

@zbryikt

I've noticed that when using sharedb-postgres, sometimes server produces following errors (code 5002) if ops are submitted in a high frequency ( 3 ~ 4 ops a second from different sources ) :

Uncaught Error: Op submit failed. Versions mismatched during op transform:
    at Connection.handleMessage (bundle.js:16893)
    at WebSocket.socket.onmessage (bundle.js:16846)

This error is gone if switching back to memory DB.

tracing the source code I found that when doing transformOp, getOps of sharedb-postgres returns incorrect range - it always returns ranges one version earlier, i.e., getOps("col", "doc", 10, 11) will give us the op with version 9.

I also tried with the patch by @billwashere in the pull request and it still had this issue.

another clue is that the version field in the op table in database is always plus 1 to the field of v in op.

so I went here and simply shift range by 1 like this:

SELECT version, operation FROM ops WHERE collection = $1 AND doc_id = $2 AND version > $3 AND version <= $4'

then it seems to have this issue fixed. Not quite sure but I guess there might be some inconsistent in versioning between sharedb and sharedb-postgres and the corresponding database field?

I've put the test code here in this repo so you can quickly verify it. It's adopted from rich-text example of sharedb itself, with a simple instruction in README.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions