2017-03-07 4 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つのステップにテストを簡素化した場合

EDIT

、私はまた、異なる結果を得ることができます。

  1. PUTのHTTPS:// {URL}/{DB}/{_revのDoesNotExist: "1-ffffffffffffffffffffffffffffffff"}

答えて

1

Cloudantは、最終的に一貫性のあるデータベースです。あなたはその効果を見ています。ほとんどの場合、クラスターは2回のapi呼び出しの間に一貫した状態に達する時間があり、予想される更新の競合が発生します。最初の呼び出しがまだクラスタの周りに複製されておらず、別のノードにヒットしたときに、不一致ウィンドウが表示されることがあります。それは貴重な洞察です:あなたの書き込みを読むことは安全ではありません。

+0

OK、私はあなたの答えを正しく解釈していることと、この動作が期待されていることを確かめるために、 "1-ffffffffffffffffffffffffffffff"(POSTをスキップする)などのリビジョンを使用して、私の元の質問を呼び出すだけで、テストを畳み込んでいた)、ドキュメントは、いくつかの時間に作成され、他の時間は "ドキュメントの更新の競合"を与えるでしょう。 APIユーザーから期待されるものと、呼び出しコードがどちらのケースにも対処できるはずのことについては、期待できません。 – Lin

関連する問題