2017-03-07 2 views
0

Cloudant 데이터베이스에서 개정판이 정의되지 않은 문서에서 PUT을 호출 할 때 예상되는 동작은 무엇입니까?존재하지 않는 항목에 대해 rev가있는 클라우드 PUT의 예상되는 동작은 무엇입니까?

문서는 말한다 :

업데이트 (또는 생성) 문서, HTTPS에 대한 업데이트 된 JSON 컨텐츠와 (새 문서 작성에 필요하지) 최신 _rev 값과 PUT 요청을하려면 : //$USERNAME.cloudant.com/$DATABASE/$DOCUMENT_ID.

나는 개정판을 제공하면 db가 일치하지 않았 음을 감지하고 요청을 거부한다고 가정했습니다. 내 테스트의 경우 일관성없는 행동을 보입니다. 대부분의 경우 예상되는 409, 문서 업데이트 충돌이 발생합니다. 그러나 때때로 문서 작성이 끝나고 (201) 다음 번 개정이 지정됩니다.

내 테스트는 문서를 만든 다음 해당 리비전을 사용하여 다른 문서를 업데이트하는 것으로 구성됩니다.

  1. POST에 https : // {URL}/{dB} {_id : "T1"} - 반환 개정
  2. PUT에 https 저장 : // {URL}/{dB}/T2를 {_rev : 개정이 1-79c389ffdbcfe6c33ced242a13f2b6f2처럼 무언가를 반환하는 경우}

그래서, 다음 PUT이 성공한 경우에, 그것은 (2-76054ab954c0ef41e9b82f732116154b 같은) 다음 버전을 반환합니다. 나는 한 단계로 테스트를 단순화 경우

편집

, 나 또한 다른 결과를 얻을 수 있습니다.

  1. PUT에 https : // {URL}/{dB}/DoesNotExist {_rev : "1 ffffffffffffffffffffffffffffffff은"}

답변

1

Cloudant는 결국 일관성있는 데이터베이스입니다. 당신은 그 효과를보고 있습니다. 대부분의 경우 클러스터는 두 번의 api 호출간에 일관된 상태에 도달 할 시간이 있으며 예상되는 업데이트 충돌이 발생합니다. 때로는 첫 번째 호출이 아직 클러스터에서 복제되지 않았고 다른 노드에 도달했기 때문에 불일치 창을 클릭하는 경우가 있습니다. 귀중한 통찰력 : 귀하의 글을 읽는 것이 안전하지 않습니다.

+0

OK, 올바르게 해석했는지 그리고이 동작이 예상되는지 확인하십시오. "1-ffffffffffffffffffffffffffffff"(POST 생략)와 같은 개정을 사용하여 존재하지 않는 문서에서 PUT을 수행 할 때 테스트를 복잡하게하는 원래의 질문을 호출하면) 문서가 생성되고 다른 시간은 "문서 업데이트 충돌"이 발생합니다. API 사용자는 기대할 수있는 것이 무엇인지, 우리의 호출 코드는 두 가지 경우 모두를 처리 할 수 ​​있어야합니다. – Lin