YUKI Hiroshi
null+****@clear*****
Tue Jan 29 18:08:50 JST 2013
YUKI Hiroshi 2013-01-29 18:08:50 +0900 (Tue, 29 Jan 2013) New Revision: 75e01fcb80a8407b6c66dd3d18de2b49b4201e94 https://github.com/groonga/express-kotoumi/commit/75e01fcb80a8407b6c66dd3d18de2b49b4201e94 Log: Override FluentSender#emit to retry operations easily Modified files: lib/backend/fluent-logger.js Modified: lib/backend/fluent-logger.js (+30 -7) =================================================================== --- lib/backend/fluent-logger.js 2013-01-29 17:34:40 +0900 (7eb7bf8) +++ lib/backend/fluent-logger.js 2013-01-29 18:08:50 +0900 (a3fe2e0) @@ -11,11 +11,36 @@ var OriginalFluentSender = sender.FluentSender; function ExtendedFluentSender(tag, options) { options = options || {}; var sender = new OriginalFluentSender(tag, options); - sender.reconnect = options.reconnect || false; + sender.maxRetryCount = options.maxRetryCount || 0; + sender.retryDelay = options.retryDelay || 1000; return sender; } -OriginalFluentSender.prototype._connect = function(callback, reconnecting) { +OriginalFluentSender.prototype.emit = function(label, data, callback, retryCount){ + var self = this; + var item = self._makePacketItem(label, data); + item.callback = callback; + self._sendQueue.push(item); + self._sendQueueTail++; + self._connect( + function() { + self._flushSendQueue(); + }, + function() { + retryCount = retryCount || 0; + if (self.maxRetryCount && retryCount < self.maxRetryCount) { + setTimeout(function() { + self.emit(label, data, callback, retryCount + 1); + }, self.retryDelay); + return true; + } else { + return false; + } + } + ); +}; + +OriginalFluentSender.prototype._connect = function(successCallback, retryCallback) { var self = this; if (self._socket === null) { self._socket = new net.Socket(); @@ -24,19 +49,17 @@ OriginalFluentSender.prototype._connect = function(callback, reconnecting) { if (self._socket) { self._socket.destroy(); self._socket = null; - if (self.reconnect && !reconnecting) { - self._connect(callback, true); - } else { + if (!retryCallback || !retryCallback()) { self._eventEmitter.emit('error', err); } } }); self._socket.connect(self.port, self.host, function() { - callback(); + successCallback(); }); } else { process.nextTick(function() { - callback(); + successCallback(); }); } }; -------------- next part -------------- HTML����������������������������... Download