nodejsでAerospikeにレコード追加する場合のリトライ処理

  • 0
    Like
  • 0
    Comment

    nodejsでAerospikeにレコードを追加する

    client.put(key, rec, function (error) {
      if (error) {
        console.log('error: %s', error.message)
        //TODO: retry
      } else {
        console.log('Record written to database successfully.')
      } 
    })
    

    エラーになった時リトライする

    function retryPutItemToDataStore(client, key, record, retryTimes, retryDelay, callback) {
            let retryCount = 0
            function retry() {
                client.put(key, record, function (error) {
                    ++retryCount
                    if (error) {
                        if (retryCount >= retryTimes) {
                            logger.error('Putitem Error: %s [%d]\n%s', error.message, error.code, error.stack)
                            callback(err)
                        } else {
                            setTimeout(run, retryDelay);
                        }
                    } else {
                        //success, send the record out
                        callback(null, record)
                    }
                })
            }
            retry()
        }
    

    レコードの追加処理は下記に変換する

    client.put(key, rec, function (error) {
        if (error) {
            console.log('error: %s', error.message)
            //retry
            retryPutItemToDataStore(client, key, record, 5, 1000, function(err, data) {
            if (err) {
                   //5回リトライしてもエラーの場合
                   process.exit(-1)
               } else {
                     logger.info('Record written to database successfully.')
               }
            })
        } else {
            console.log('Record written to database successfully.')
       } 
    })