Skip to content

Commit

Permalink
database/master: Add clearTimeout too free gc
Browse files Browse the repository at this point in the history
  • Loading branch information
sogehige committed May 6, 2018
1 parent c80285c commit 294099b
Showing 1 changed file with 32 additions and 126 deletions.
158 changes: 32 additions & 126 deletions libs/databases/master.js
Expand Up @@ -10,6 +10,8 @@ class IMasterController extends Interface {
constructor () {
super('master')

this.timeouts = {}

cluster.on('message', (worker, message) => {
if (message.type !== 'db') return
debug('db:master:incoming')(`Got data from Worker#${worker.id}\n${util.inspect(message)}`)
Expand All @@ -35,29 +37,35 @@ class IMasterController extends Interface {
else setTimeout(() => this.connect(), 10)
}

async sendRequest (resolve, reject, id, data) {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
this.returnData(resolve, reject, id)
} catch (e) {
if (!_.isNil(this.timeouts.sendRequest)) clearTimeout(this.timeouts.sendRequest)
this.timeouts.sendRequest = setTimeout(() => this.sendRequest(resolve, reject, id), 10, data)
}
}

async returnData (resolve, reject, id) {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else {
if (!_.isNil(this.timeouts.returnData)) clearTimeout(this.timeouts.returnData)
this.timeouts.returnData = setTimeout(() => this.returnData(resolve, reject, id), 10)
}
}

async find (table, where) {
const id = crypto.randomBytes(64).toString('hex')
const data = { type: 'db', fnc: 'find', table: table, where: where, id: id }

return new Promise((resolve, reject) => {
let sendRequest = (resolve, reject, id) => {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
returnData(resolve, reject, id)
} catch (e) {
setTimeout(() => sendRequest(resolve, reject, id), 10)
}
}
let returnData = (resolve, reject, id) => {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else setTimeout(() => returnData(resolve, reject, id), 10)
}
sendRequest(resolve, reject, id)
this.sendRequest(resolve, reject, id, data)
})
}

Expand All @@ -66,24 +74,7 @@ class IMasterController extends Interface {
const data = { type: 'db', fnc: 'findOne', table: table, where: where, id: id }

return new Promise((resolve, reject) => {
let sendRequest = (resolve, reject, id) => {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
returnData(resolve, reject, id)
} catch (e) {
setTimeout(() => sendRequest(resolve, reject, id), 10)
}
}
let returnData = (resolve, reject, id) => {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else setTimeout(() => returnData(resolve, reject, id), 10)
}
sendRequest(resolve, reject, id)
this.sendRequest(resolve, reject, id, data)
})
}

Expand All @@ -92,24 +83,7 @@ class IMasterController extends Interface {
const data = { type: 'db', fnc: 'insert', table: table, object: object, id: id }

return new Promise((resolve, reject) => {
let sendRequest = (resolve, reject, id) => {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
returnData(resolve, reject, id)
} catch (e) {
setTimeout(() => sendRequest(resolve, reject, id), 10)
}
}
let returnData = (resolve, reject, id) => {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else setTimeout(() => returnData(resolve, reject, id), 10)
}
sendRequest(resolve, reject, id)
this.sendRequest(resolve, reject, id, data)
})
}

Expand All @@ -118,24 +92,7 @@ class IMasterController extends Interface {
const data = { type: 'db', fnc: 'remove', table: table, where: where, id: id }

return new Promise((resolve, reject) => {
let sendRequest = (resolve, reject, id) => {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
returnData(resolve, reject, id)
} catch (e) {
setTimeout(() => sendRequest(resolve, reject, id), 10)
}
}
let returnData = (resolve, reject, id) => {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else setTimeout(() => returnData(resolve, reject, id), 10)
}
sendRequest(resolve, reject, id)
this.sendRequest(resolve, reject, id, data)
})
}

Expand All @@ -144,24 +101,7 @@ class IMasterController extends Interface {
const data = { type: 'db', fnc: 'update', table: table, where: where, object: object, id: id }

return new Promise((resolve, reject) => {
let sendRequest = (resolve, reject, id) => {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
returnData(resolve, reject, id)
} catch (e) {
setTimeout(() => sendRequest(resolve, reject, id), 10)
}
}
let returnData = (resolve, reject, id) => {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else setTimeout(() => returnData(resolve, reject, id), 10)
}
sendRequest(resolve, reject, id)
this.sendRequest(resolve, reject, id, data)
})
}

Expand All @@ -170,24 +110,7 @@ class IMasterController extends Interface {
const data = { type: 'db', fnc: 'incrementOne', table: table, where: where, object: object, id: id }

return new Promise((resolve, reject) => {
let sendRequest = (resolve, reject, id) => {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
returnData(resolve, reject, id)
} catch (e) {
setTimeout(() => sendRequest(resolve, reject, id), 10)
}
}
let returnData = (resolve, reject, id) => {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else setTimeout(() => returnData(resolve, reject, id), 10)
}
sendRequest(resolve, reject, id)
this.sendRequest(resolve, reject, id, data)
})
}

Expand All @@ -196,24 +119,7 @@ class IMasterController extends Interface {
const data = { type: 'db', fnc: 'increment', table: table, where: where, object: object, id: id }

return new Promise((resolve, reject) => {
let sendRequest = (resolve, reject, id) => {
try {
_.sample(cluster.workers).send(data)
debug('db:master:request:id')(id)
returnData(resolve, reject, id)
} catch (e) {
setTimeout(() => sendRequest(resolve, reject, id), 10)
}
}
let returnData = (resolve, reject, id) => {
let dataFromWorker = _.find(this.data, (o) => o.id === id)
if (!_.isNil(dataFromWorker)) {
const items = dataFromWorker.items
_.remove(this.data, (o) => o.id === id)
resolve(items)
} else setTimeout(() => returnData(resolve, reject, id), 10)
}
sendRequest(resolve, reject, id)
this.sendRequest(resolve, reject, id, data)
})
}
}
Expand Down

0 comments on commit 294099b

Please sign in to comment.