ノードjsで、batchWriteItem()を使用してdynamoDBテーブルにレコードを書き込もうとしています。batchWriteItem()が矛盾した結果を返す
insertTransactionDetails()関数への最初の呼び出しで、2つのレコードを送信している同じ関数への2回目の呼び出し中に9個のレコードを挿入して送信しています。
テーブルに挿入される最終レコードは、実行ごとに異なります。
試験1: Iは、第1の機能呼び出しから3つのレコードに続く2回目の呼び出しから2つの記録、続いて第1のコールから4つのレコードを参照。 テスト2: 第1コールの2レコード、第2コールの2レコード、第1ファンクションコールの5レコードが続きます。
期待される結果は、第二の関数呼び出しからの2つのレコードに続く第一の関数呼び出しから9つのレコードを表示することでした。
何らかの理由で、計11レコード(9+ 2)の代わりに9レコードしか挿入されないことに気付きました。
私は多くのデバッグやオンライン検索を試みましたが、根本原因を理解できませんでした。ここで問題を見つけるのを助けてくれる人に本当に感謝します。どうもありがとう。
機能は、と呼ばれ、insertTransactionDetails(dataToInsert、0、bulkSearchParams)の両方の時間と呼ばれます。 dataToInsert [] []は2次元配列です。このテストデータのサイズは、それぞれ2コールに対してdataToInsert [0] [9]とdataToInsert [0] [2]となります。
batchWriteItem()によって返されたデータが下に貼り付けられ、UnprocessedItemsが空であることがわかります。{}これは、テーブルのプロビジョニングが問題ではないと信じさせています。
以下はコードです。
Logs: Bulk Search - insertTransactionDetails() - Success path: **{\"UnprocessedItems\":{},\"ConsumedCapacity\":[{\"TableName\":\"RaptorBulkSearchRequestTransactionDetails\",\"CapacityUnits\":18}]}**
dataToInsert[i][j] =
{
PutRequest: {
Item: {
'RequestID' : {S: bulkSearchParams.operationId.concat('-',bulkSearchParams.sourceID)},
'TimeStamp': {N: epochTime.toString()},
'TransactionID': {S: bulkSearchParams.cardNumber.toString().concat('-',data.response.transactionRecords[j].GUID)},
'TransactionItem': {S: JSON.stringify(data.response.transactionRecords[j])}
}
}
};
function insertTransactionDetails (dataToInsert,index,bulkSearchParams){
if (index < dataToInsert.length){
// Call DynamoDB to add the item to the table
var batchRequest = {
RequestItems: {
"RaptorBulkSearchRequestTransactionDetails": dataToInsert[index]
},
"ReturnConsumedCapacity": "TOTAL"
};
dynamodb.batchWriteItem(batchRequest, function(err, data) {
if (err) {
logErrorMessage(`Bulk Search - insertTransactionDetails() - Failure path: ${err}`, "routes.bulkSearch", bulkSearchParams.operationId, "NA");
index++;
insertTransactionDetails(dataToInsert,index,bulkSearchParams); //increment index for dataToInsert and insert the next set
} else {
logInfoMessage(`Bulk Search - insertTransactionDetails() - Success path: ${JSON.stringify(data)}`, "routes.bulkSearch", bulkSearchParams.operationId, "NA");
index++;
insertTransactionDetails(dataToInsert,index,bulkSearchParams); //increment index for dataToInsert and insert the next set
}
});
}
else{
//proceed to the next card if available
bulkSearchParams.index ++; //incrementing the index for cardNumber
processBulkSearch(bulkSearchParams);
}
}