From 20b54782ebba581bdebfa45825798fec563e6671 Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <gua@adhisimon.org> Date: Tue, 3 May 2016 23:35:17 +0700 Subject: [PATCH] retry if pending --- package.json | 1 + partner-cjk.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/package.json b/package.json index 445981c..fac11ba 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "dependencies": { "crypto": "0.0.3", "ini": "^1.3.4", + "lru-cache": "^4.0.1", "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", "winston": "^2.2.0", diff --git a/partner-cjk.js b/partner-cjk.js index 91ef012..9faa255 100644 --- a/partner-cjk.js +++ b/partner-cjk.js @@ -4,12 +4,16 @@ var xml = require('xml'); var url = require('url'); var http = require('http'); var xml2js = require('xml2js').parseString; +var LRU = require("lru-cache"); var config; var callbackReport; var aaa; var logger; var options; +var taskCache = LRU({max: 2000}); + +var sleepBeforeRetry = 30; function start(_config, _callbackReport, options) { config = _config; @@ -129,10 +133,25 @@ function topupResponseHandler(body) { } callbackReport(trxid, rc, message); + + if (rc == '68') { + task = taskCache.get(trxid); + if (!task) { + return; + } + + logger.info('Got pending status, retrying in ' + sleepBeforeRetry + 's'); + setTimeout(topupRequest, sleepBeforeRetry * 1000, task); + } else { + taskCache.del(trxid); + } }); } function topupRequest(task, retry) { + + taskCache.set(task.requestId, task); + var remoteProduct = task.remoteProduct.split(','); var params = { -- 1.9.0