[Groonga-commit] groonga/express-kotoumi [master] Override FluentSender#emit to retry operations easily

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index