Skip to content

Commit

Permalink
refactor: remove couchr from plugin manager
Browse files Browse the repository at this point in the history
  • Loading branch information
gr2m committed Aug 11, 2015
1 parent 25ad1bb commit acabebe
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 47 deletions.
17 changes: 13 additions & 4 deletions lib/plugins/manager/account_manager.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
var events = require('events')

var couchr = require('couchr')
var follow = require('follow')
var request = require('request').defaults({json: true})

exports.start = function (manager, callback) {
var am = {}
Expand All @@ -14,7 +15,11 @@ exports.start = function (manager, callback) {
}

var user_db = manager._resolve('_users')
var feed = couchr.changes(user_db, {include_docs: true})
var feed = follow({
db: user_db,
include_docs: true,
since: 'now'
})

feed.on('change', function (change) {
am.emit('change', change)
Expand All @@ -37,7 +42,7 @@ exports.start = function (manager, callback) {
// BUG: https://issues.apache.org/jira/browse/COUCHDB-1888
var couchRoot = manager._resolve('')

couchr.get(couchRoot, function (err, result) {
request.get(couchRoot, function (err, result) {
if (err) {
return callback(err, null)
}
Expand All @@ -51,7 +56,11 @@ exports.start = function (manager, callback) {
'updatedAt', 'signedUpAt', 'type'
]

couchr.put(config_db + '/couch_httpd_auth/public_fields', JSON.stringify(publicFields.join(',')), function () {
request({
method: 'put',
url: config_db + '/couch_httpd_auth/public_fields',
body: publicFields.join(',')
}, function () {
callback(null, am)
})
} else {
Expand Down
27 changes: 16 additions & 11 deletions lib/plugins/manager/changes_pool.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ var url = require('url')

var _ = require('lodash')
var async = require('async')
var couchr = require('couchr')
var follow = require('follow')
var request = require('request').defaults({json: true})

var db_updates = require('./db_updates')

Expand Down Expand Up @@ -63,11 +64,7 @@ exports.createDbUpdatesPool = function (couch_url) {
}, 5000)

// start listening to db update events from couchdb
db_updates.listen(couch_url, function (err, data) {
if (err) {
console.log('[changes_pool] Error: ' + err)
}

db_updates.listen(couch_url, function (data) {
// update idle pool and refresh queue
if (data.type === 'deleted') {
exports.removeDB(updated, idle, data.db_name)
Expand Down Expand Up @@ -140,12 +137,15 @@ exports.createLegacyPool = function (couch_url) {

var queue = async.queue(function (task, callback) {
var db_url = url.resolve(couch_url, encodeURIComponent(task.name))
var q = {
var qs = {
start_key: '"$"',
end_key: '"${}"',
include_docs: true
}
couchr.get(db_url + '/_all_docs', q, function (err, body, res) {
request.get({
url: db_url + '/_all_docs',
qs: qs
}, function (err, res, body) {
if (err) {
return callback(err)
}
Expand All @@ -156,7 +156,9 @@ exports.createLegacyPool = function (couch_url) {

var f = function (db, query, callback) {
var db_url = url.resolve(couch_url, encodeURIComponent(db))
var feed = couchr.changes(db_url, query)
console.log('query')
console.log(query)
var feed = follow(db_url, query)
feed.on('change', function (change) {
if (change.doc) {
callback(null, change)
Expand Down Expand Up @@ -230,7 +232,10 @@ exports.requestChanges = function (req, callback) {
// don't do continuous or longpoll feeds
req.query.feed = 'normal'
// request the changes feed for the query
couchr.get(req.db_url + '/_changes', req.query, function (err, data) {
request.get({
url: req.db_url + '/_changes',
qs: req.query
}, function (err, response, data) {
if (err) {
// let the worker handle errors
req.callback(err)
Expand Down Expand Up @@ -315,7 +320,7 @@ exports.refreshOldest = function (queue, pool) {
exports.updateSince = function (req, callback) {
if (!req.query.hasOwnProperty('since') || req.query.since === 'now') {
// get the latest update seq from couchdb
couchr.get(req.db_url, function (err, data) {
request.get(req.db_url, function (err, response, data) {
if (err) {
return callback(err)
}
Expand Down
21 changes: 16 additions & 5 deletions lib/plugins/manager/config_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ var events = require('events')
var url = require('url')

var async = require('async')
var couchr = require('couchr')
var follow = require('follow')
var request = require('request').defaults({json: true})

exports.start = function (manager, callback) {
var cm = {}
Expand Down Expand Up @@ -41,7 +42,10 @@ exports.start = function (manager, callback) {
app_config = results.app.config
plugin_configs = exports.combinePluginConfigDocs(results.plugins)

var app_feed = couchr.changes(app_db)
var app_feed = follow({
db: app_db,
since: 'now'
})
app_feed.on('change', function (change) {
if (change.id === 'config') {
exports.appConfig(app_db, function (err, doc) {
Expand All @@ -55,7 +59,11 @@ exports.start = function (manager, callback) {
}
})

var plugin_feed = couchr.changes(plugins_db, {include_docs: true})
var plugin_feed = follow({
db: plugins_db,
since: 'now',
include_docs: true
})
plugin_feed.on('change', function (change) {
var doc = change.doc
if (exports.isPluginDoc(doc)) {
Expand Down Expand Up @@ -102,7 +110,7 @@ exports.combinePluginConfigDocs = function (docs) {
}

exports.appConfig = function (app_db_url, callback) {
couchr.get(url.resolve(app_db_url, 'config'), function (err, body) {
request.get(url.resolve(app_db_url, 'config'), function (err, response, body) {
return callback(err, body)
})
}
Expand All @@ -118,7 +126,10 @@ exports.isPluginDoc = function (doc) {
exports.allPluginDocs = function (plugin_db_url, callback) {
var all_docs = url.resolve(plugin_db_url, '_all_docs')

couchr.get(all_docs, {include_docs: true}, function (err, data) {
request.get({
url: all_docs,
qs: {include_docs: true}
}, function (err, response, data) {
if (err) {
return callback(err)
}
Expand Down
41 changes: 14 additions & 27 deletions lib/plugins/manager/db_updates.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
*/
var url = require('url')

var _ = require('lodash')
var couchr = require('couchr')
var follow = require('follow')
var request = require('request').defaults({json: true})

exports.dbUpdatesURL = function (couch_url) {
return url.resolve(couch_url, '/_db_updates')
Expand All @@ -17,29 +17,13 @@ exports.dbUpdatesURL = function (couch_url) {
exports.listen = function (couch_url, handler,/* opt */ prev_error) {
var updates_url = exports.dbUpdatesURL(couch_url)

var q = {
feed: 'continuous',
heartbeat: true
}

var opt = {
callback_on_data: handler,
headers: {'Connection': 'Keep-Alive'}
}

couchr.request('GET', updates_url, q, opt, function (err) {
if (!err) {
// successfully received db_update event
return exports.listen(couch_url, handler, false)
}

// log error from /_db_updates
if (!prev_error || !_.isEqual(prev_error, err)) console.error('[db_updates] ' + err)
// retry request, if first error, retry immediately,
// otherwise wait 1 second before trying again
return setTimeout(function () {
exports.listen(couch_url, handler, err)
}, prev_error ? 1000 : 0)
var feed = follow({
db: updates_url,
since: 'now'
})
feed.on('change', handler)
feed.on('error', function (error) {
console.log('[changes_pool] Error: ' + error)
})
}

Expand All @@ -51,13 +35,16 @@ exports.listen = function (couch_url, handler,/* opt */ prev_error) {
exports.available = function (couch_url, callback) {
// bit of a hack to get around the lack of support for feed=normal on
// the /_db_updates feature branch
var q = {
var qs = {
feed: 'longpoll',
timeout: 0
}

var updates_url = exports.dbUpdatesURL(couch_url)
couchr.get(updates_url, q, function (err, data, res) {
request.get({
url: updates_url,
qs: qs
}, function (err, res) {
if (res && res.statusCode === 400) {
// Bad Request response due to 'illegal database name'
// This means it doesn't recognise /_db_updates as
Expand Down

0 comments on commit acabebe

Please sign in to comment.