incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Lehnardt <...@apache.org>
Subject Re: 412 on update
Date Wed, 22 Oct 2008 21:59:46 GMT

On Oct 21, 2008, at 18:23 , Jonathan Moss wrote:

> Thanks Bradford,
>
> That allowed me to track down the issue.  It seems that when the PHP  
> classes serialize the document in json for saving the _rev is cast  
> to an integer. The rev numbers are often larger than the maximum  
> integer value PHP supports and it therefore I end up with a -ve  
> number and the revisions obviously don't match and I get a 412 -  
> conflict.
>
> I then cast the value to a float which is done elsewhere in the  
> library. This still resulted in a 412. So I looked at the raw put  
> data from the request and compared it to the raw get data I got in  
> the first place.  The only difference was the by casting to a float  
> _rev was encoded as:
>
> "_rev":123456789
>
> whereas I received it as:
>
> "_rev":"123456789"
>
> By casting as a string just before json encoding I now get a much  
> happier 201 status code during my testing. Should the server really  
> be quibbling over the data type? Not a problem if it does but it was  
> a difficult one to track down.

and from Nick:

> Why are you casting it from a string in the first place? Just treat  
> it as an
> opaque value and return it to the server as sent to you. Besides,  
> you can't
> represent every possible 64 bit integer in a double anyway.

For a brief time, CouchDB's revision ids were integers. That is when  
CouchSimple was written and I was probably too lazy to keep the wiki  
updated. Sorry! :)

Cheers
Jan
--

>
>
> Regards,
> Jon
>> I believe a 412 is a conflict,  anyone care to prove me wrong?
>>
>>
>>
>> ----- Original Message ----
>> From: Jonathan Moss <jonathan.moss@tangentlabs.co.uk>
>> To: couchdb-user@incubator.apache.org
>> Sent: Tuesday, October 21, 2008 3:07:43 AM
>> Subject: Re: 412 on update
>>
>>
>>> Hi everyone,
>>>
>>> I am using the CouchDB PHP library (from http://couchprojects.googlecode.com/svn/trunk/libraries/php/)

>>>  to communicate with the database an I am having some issues  
>>> updating a design document. When I try to save the design document  
>>> I receive a 412 HTTP status code. The code below is a  
>>> simplification of what I am doing but should explain what I am  
>>> trying to do.
>>>
>>> $objCouch = new Couch(array("host" => localhost, "port" => 5984));
>>> $objDesignDoc = $objCouch->database($strDB)->get("_design/ 
>>> ADesignDoc";
>>> $objFunction = new stdClass();
>>> $objFunction->map = "function(doc){if(doc.Type = 'ANode') 
>>> {emit(doc.Name, doc);}}";
>>> $objDesignDoc->views->$strFunc = $objFunction;
>>> $objDesignDoc->save();
>>> echo "Status: " . $objDesignDoc->lastStatusCode . "\n";
>>>
>>> What does a 412 status code mean in this context and does anyone  
>>> have any idea what I can do to fix it?
>>>
>>> Regards,
>>> Jon
>>>
>>
>> I should have mentioned I am using version 0.8.1 of CouchDB
>>
>> Thanks,
>> Jon
>>
>>
>> __________________________________________________
>> Do You Yahoo!?
>> Tired of spam?  Yahoo! Mail has the best spam protection around http://mail.yahoo.com
>


Mime
View raw message