otajor
otajor

Reputation: 953

DynamoDB put returning successfully but not storing data

The situation is that I want to store some information in a DynamoDB database, and then send a notification only if I am sure that this information has been stored successfully. Here's what my code looks like:

const putObj = Bluebird.promisify(docClient.put, { context: docClient })

// ... a promise chain collecting information...
            const params = {
              TableName: 'my_table',
              Item: {
                name: itemName
              }
            }
            return putObj(params)
              .then((data) => {
                if (Ramda.equals(data, {})) {
                  // ... send notification here
              .catch((err) => {
                throw err
              })

I assume that if there is an error storing the data, this will be caught in the catch block and the notification will not be sent. However, I'm seeing in some cases that notifications are being sent despite the fact that the respective information has not been stored in the database. This only happens infrequently - in almost all cases the code functions as desired.

Any ideas about why/how this could be happening, and what I can do to stop it. DynamoDB doesn't return any useful information into the .then - it is only an empty object in case of success, and I'm already checking this before sending the notification.

Upvotes: 0

Views: 1596

Answers (1)

E.J. Brennan
E.J. Brennan

Reputation: 46849

Are you using 'eventually consistent' or 'strongly consistent' reads?

When you read data from a DynamoDB table, the response might not reflect the results of a recently completed write operation. The response might include some stale data. If you repeat your read request after a short time, the response should return the latest data.

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html

You may need to retry your read, or else change the read consistency value.

Upvotes: 3

Related Questions