Skip to content

Commit 43a1c61

Browse files
committed
Better Error Handling For Workers
1 parent 2b89578 commit 43a1c61

File tree

1 file changed

+42
-25
lines changed

1 file changed

+42
-25
lines changed

src/block-cache-cluster.js

+42-25
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ if (cluster.isMaster) {
2828
pool.delete(worker.id)
2929
let cb = _callbacks.get(this)
3030
if (cb) {
31-
return cb(new Error('Worker Exited Unexpectedly'))
31+
cb(new Error('Worker Exited Unexpectedly'))
3232
}
3333
return spawnWorker()
3434
})
@@ -78,35 +78,47 @@ if (cluster.isMaster) {
7878
}
7979
}
8080
content (temps, cb) {
81-
let worker = this._freeWorker()
82-
if (worker) {
83-
_callbacks.set(worker, cb)
84-
worker.send({type: type.content, temps})
85-
} else {
86-
let queue = _queue.get(this)
87-
queue.unshift({type: type.content, temps, cb: cb})
81+
try {
82+
let worker = this._freeWorker()
83+
if (worker) {
84+
_callbacks.set(worker, cb)
85+
worker.send({ type: type.content, temps })
86+
} else {
87+
let queue = _queue.get(this)
88+
queue.unshift({ type: type.content, temps, cb: cb })
89+
}
90+
} catch (err) {
91+
return cb(err)
8892
}
8993
}
9094

91-
contentFilter (temps, cb){
92-
let worker = this._freeWorker()
93-
if (worker) {
94-
_callbacks.set(worker, cb)
95-
worker.send({type: type.contentFilter, temps})
96-
} else {
97-
let queue = _queue.get(this)
98-
queue.unshift({type: type.contentFilter, temps, cb: cb})
95+
contentFilter (temps, cb) {
96+
try {
97+
let worker = this._freeWorker()
98+
if (worker) {
99+
_callbacks.set(worker, cb)
100+
worker.send({ type: type.contentFilter, temps })
101+
} else {
102+
let queue = _queue.get(this)
103+
queue.unshift({ type: type.contentFilter, temps, cb: cb })
104+
}
105+
} catch (err) {
106+
return cb(err)
99107
}
100108
}
101109

102110
closestBlock (temps, key, filter, cb) {
103-
let worker = this._freeWorker()
104-
if (worker) {
105-
_callbacks.set(worker, cb)
106-
worker.send({type: type.closestBlock, temps, key, filter})
107-
} else {
108-
let queue = _queue.get(this)
109-
queue.unshift({type: type.closestBlock, temps, key, filter, cb: cb})
111+
try {
112+
let worker = this._freeWorker()
113+
if (worker) {
114+
_callbacks.set(worker, cb)
115+
worker.send({ type: type.closestBlock, temps, key, filter })
116+
} else {
117+
let queue = _queue.get(this)
118+
queue.unshift({ type: type.closestBlock, temps, key, filter, cb: cb })
119+
}
120+
} catch (err) {
121+
return cb(err)
110122
}
111123
}
112124
_free(threadId) {
@@ -116,9 +128,14 @@ if (cluster.isMaster) {
116128
if (next) {
117129
let pool = _pool.get(this)
118130
let worker = pool.get(threadId)
119-
_callbacks.set(worker, next.cb)
131+
let cb = next.cb
132+
_callbacks.set(worker, cb)
120133
delete next.cb
121-
worker.send({...next})
134+
try {
135+
worker.send({ ...next })
136+
} catch (err) {
137+
return cb(err)
138+
}
122139
}
123140
})
124141
}

0 commit comments

Comments
 (0)