[Groonga-commit] groonga/express-kotoumi [master] Reconnect to the backend by extended version of fluent-logger itself

Back to archive index

YUKI Hiroshi null+****@clear*****
Tue Jan 29 17:25:44 JST 2013


YUKI Hiroshi	2013-01-29 17:25:44 +0900 (Tue, 29 Jan 2013)

  New Revision: 398aca8e3abf09eddd464956d6a77c459cde0265
  https://github.com/groonga/express-kotoumi/commit/398aca8e3abf09eddd464956d6a77c459cde0265

  Log:
    Reconnect to the backend by extended version of fluent-logger itself

  Added files:
    lib/backend/fluent-logger.js
  Modified files:
    lib/backend/connection.js

  Modified: lib/backend/connection.js (+5 -20)
===================================================================
--- lib/backend/connection.js    2013-01-29 16:05:14 +0900 (b31b923)
+++ lib/backend/connection.js    2013-01-29 17:25:44 +0900 (53a1df7)
@@ -7,7 +7,7 @@
  */
 
 var EventEmitter = require('events').EventEmitter;
-var fluent = require('fluent-logger');
+var fluent = require('./fluent-logger');
 var Receiver = require('./receiver').Receiver;
 
 var DEFAULT_FLUENT_TAG =
@@ -44,9 +44,10 @@ Connection.prototype._initSender = function(wait) {
   this._sender = this._params.sender;
   if (!this._params.sender) {
     var options = { host: this._params.hostName || DEFAULT_FLUENT_HOST_NAME,
-                    port: this._params.port || DEFAULT_FLUENT_PORT };
+                    port: this._params.port || DEFAULT_FLUENT_PORT,
+                    reconnect: true };
     var sender = fluent.createFluentSender(this._params.tag || DEFAULT_FLUENT_TAG,
-                                           options)
+                                           options);
     this._sender = sender;
   }
 };
@@ -132,26 +133,10 @@ Connection.prototype.emitMessage = function(type, body, callback, options) {
       }).bind(this), options.timeout);
     }
   }
-  options.delay = toPositiveInteger(options.delay);
-  setTimeout((function() {
-    this._sendEnvelope(envelope);
-  }).bind(this), options.delay);
+  this._sender.emit('message', envelope);
   return envelope;
 };
 
-Connection.prototype._sendEnvelope = function(envelope, wait) {
-  var errorHandler = (function(error) {
-    wait = wait ? wait * 2 : 1000;
-    setTimeout((function() {
-      this._sendEnvelope(envelope, wait);
-    }).bind(this), wait);
-  }).bind(this);
-  this._sender.on('error', errorHandler);
-  this._sender.emit('message', envelope, (function() {
-    this._sender.removeListener('error', errorHandler);
-  }).bind(this));
-};
-
 Connection.prototype.close = function() {
   this.removeAllListeners();
 

  Added: lib/backend/fluent-logger.js (+44 -0) 100644
===================================================================
--- /dev/null
+++ lib/backend/fluent-logger.js    2013-01-29 17:25:44 +0900 (9a0ba86)
@@ -0,0 +1,44 @@
+/**
+ * fluent-logger-node mod
+ *   "reconnect" option
+ */
+
+var fluent = require('fluent-logger');
+
+var OriginalFluentSender = fluent.FluentSender;
+
+function ExtendedFluentSender(tag, options) {
+  var sender = new OriginalFluentSender(tag, options);
+  sender.reconnect = options.reconnect || false;
+  return sender;
+}
+
+OriginalFluentSender.prototype._connect = function(callback, reconnecting){
+  var self = this;
+  if (self._socket === null) {
+    self._socket = new net.Socket();
+    self._socket.setTimeout(self.timeout);
+    self._socket.on('error', function(err) {
+      if (self._socket) {
+        self._socket.destroy();
+        self._socket = null;
+        if (self.reconnect && !reconnecting) {
+          self._connect(callback, true);
+        } else {
+          self._eventEmitter.emit('error', err);
+        }
+      }
+    });
+    self._socket.connect(self.port, self.host, function() {
+      callback();
+    });
+  } else {
+    process.nextTick(function() {
+      callback();
+    });
+  }
+};
+
+fluent.FluentSender = ExtendedFluentSender;
+
+module.exports = fluent;
-------------- next part --------------
HTML����������������������������...
Download 



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