Как CouchDB рассчитывает номер ревизии - PullRequest
7 голосов
/ 10 мая 2011

Я пытаюсь понять, как CouchDB вычисляет идентификатор ревизии для документа. Из источника я замечаю, что он рассчитывается по этому коду:

couch_util:md5(term_to_binary([Deleted, OldStart, OldRev, Body, Atts2]))

И я знаю, что если я создаю новый пустой документ без вложений, CouchDB всегда дает ему ревизию 1-967a00dff5e02add41819138abb3284d, которая в десятичном выражении << 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >> .

Однако, если я наберу в командной строке erlang следующее (false для удаленного, 0 для OldStart, 0 для OldRev, пустое тело и никаких вложений):

erlang:md5(term_to_binary([false, 0, 0, [], []])).                   

Я всегда получаю

<<26,196,244,40,211,149,193,185,214,6,230,61,54,138,62,132>>

назад.

Так что же я здесь делаю не так - как я могу определить реальную ревизию, которую генерирует кушетка?

1 Ответ

6 голосов
/ 11 мая 2011

После прочтения ответа на Emit Tuples From Erlang Views в CouchDB я понял, что неправильно делал не упаковку пустого проплиста для body в кортеж. Я не уверен, почему кушетка это делает, но вот в чем проблема.

erlang:md5(term_to_binary([false, 0, 0, {[]}, []])).

Дает правильный ответ

<< 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >>

...