Browse Source

Merge pull request #56 from docker/revert-54-connection_pooling

Revert "added connection pooling to postgres to prevent client timeouts"
Mano Marks 8 years ago
parent
commit
0334f60f3e
2 changed files with 21 additions and 15 deletions
  1. 0 1
      result/package.json
  2. 21 14
      result/server.js

+ 0 - 1
result/package.json

@@ -15,7 +15,6 @@
     "method-override": "^2.3.5",
     "async": "^1.5.0",
     "pg": "^4.4.3",
-    "pg-pool": "1.6.0",
     "socket.io": "^1.3.7"
   }
 }

+ 21 - 14
result/server.js

@@ -1,25 +1,13 @@
 var express = require('express'),
     async = require('async'),
     pg = require("pg"),
-    Pool = require("pg-pool"),
     cookieParser = require('cookie-parser'),
-    bodyParser = require('body-parser'),  
+    bodyParser = require('body-parser'),
     methodOverride = require('method-override'),
     app = express(),
     server = require('http').Server(app),
     io = require('socket.io')(server);
 
-var config = {
-  host: 'localhost',
-  user: 'postgres',
-  password: '',
-  database: 'postgres',
-  max: 10, // max number of clients in pool
-  idleTimeoutMillis: 1000, // close & remove clients which have been idle > 1 second
-};
-
-var client = new Pool(config)
-
 io.set('transports', ['polling']);
 
 var port = process.env.PORT || 4000;
@@ -35,6 +23,14 @@ io.sockets.on('connection', function (socket) {
 
 async.retry(
   {times: 1000, interval: 1000},
+  function(callback) {
+    pg.connect('postgres://postgres@db/postgres', function(err, client, done) {
+      if (err) {
+        console.error("Waiting for db");
+      }
+      callback(err, client);
+    });
+  },
   function(err, client) {
     if (err) {
       return console.err("Giving up");
@@ -49,13 +45,24 @@ function getVotes(client) {
     if (err) {
       console.error("Error performing query: " + err);
     } else {
-      var votes = result.rows[0].count
+      var votes = collectVotesFromResult(result);
       io.sockets.emit("scores", JSON.stringify(votes));
     }
+
     setTimeout(function() {getVotes(client) }, 1000);
   });
 }
 
+function collectVotesFromResult(result) {
+  var votes = {a: 0, b: 0};
+
+  result.rows.forEach(function (row) {
+    votes[row.vote] = parseInt(row.count);
+  });
+
+  return votes;
+}
+
 app.use(cookieParser());
 app.use(bodyParser());
 app.use(methodOverride('X-HTTP-Method-Override'));