[ 
https://issues.apache.org/jira/browse/COUCHDB-1670?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13572655#comment-13572655
 ] 

Jens Alfke commented on COUCHDB-1670:
-------------------------------------

> since is opaque. You have to pass back exactly what you got from couchdb.

I don't think that's a reasonable expectation. The JSON is going to be 
transformed anyway (to insert the _rev), so at some point it's going to be 
translated into an internal format and then regenerated. The output has to be 
an equivalent JSON document, but that doesn't mean byte-for-byte equivalence. 
For instance, object keys could be in a different order, Unicode escapes could 
be turned into literals or vice versa, and numbers might be represented 
differently, like changing to/from scientific notation or suppressing trailing 
zeros after the decimal point.
                
> Replicator crashes if numbers in checkpoint docs are expressed in scientific 
> notation
> -------------------------------------------------------------------------------------
>
>                 Key: COUCHDB-1670
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1670
>             Project: CouchDB
>          Issue Type: Bug
>          Components: Replication
>            Reporter: Jens Alfke
>
> The CouchDB 1.2 replicator process crashes with an Erlang exception when 
> parsing a checkpoint document read back from a remote database, if numbers in 
> the document were JSON-encoded in scientific notation instead of as integers. 
> This includes the properties source_last_seq, end_last_seq, start_last_seq.
> That is, the following encoding works fine:
>     ..., "source_last_seq": 1234567, ...
> whereas this completely-equivalent encoding causes an exception:
>     ..., "source_last_seq": 1.234567e+06, ...
> This issue raised its head as a result of a CouchDB-compatible engine I'm 
> writing (the Couchbase Sync Gateway) which can serve as a passive replication 
> endpoint. It's implemented in Go, and the Go JSON package has the side effect 
> of (a) parsing all JSON numbers into type 'double', and (b) encoding all 
> doubles into JSON using scientific notation if they're more than six digits 
> long. The net effect is that when CouchDB stores a checkpoint into the Sync 
> Adapter's database and then later reads it back, it barfs due to the 
> scientific notation.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to