Skip to content

Commit fb6c804

Browse files
authored
fix: remove the Fallback worker (#6254)
* fix: remove the Fallback worker This patch removes the `Fallback` case for when there are no web workers in the browser. If the browser is sufficiently old that it doesn't have web worker support, things are broken much earlier than this. Additionally, `monaco-editor` requires web workers for its own functionality. Lastly, we shouldn't ever attempt to run the complex CPU-bound functions in the main thread of the browser either. If this ever did actually get used, it's likely to wreck the experience even further. Fixes #5832 * chore: consolidate worker code This patch consolidates all the worker code into a single file, as it was no longer used in multiple places.
1 parent 4995243 commit fb6c804

File tree

6 files changed

+87
-129
lines changed

6 files changed

+87
-129
lines changed

src/languageSupport/languages/flux/lsp/monaco.flux.lsp.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ import FLUXLANGID from 'src/languageSupport/languages/flux/monaco.flux.syntax'
2020
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
2121
// @ts-ignore
2222
import fluxWorkerUrl from 'worker-plugin/loader!./worker/flux.worker'
23-
import Fallback from 'src/languageSupport/languages/flux/lsp/worker/flux.fallback'
2423
import {EditorType} from 'src/types'
2524

2625
// utils
2726
import {reportErrorThroughHoneyBadger} from 'src/shared/utils/errors'
28-
import {event} from 'src/cloud/utils/reporting'
2927

3028
// install Monaco language client services
3129
MonacoServices.install(monaco)
@@ -71,13 +69,7 @@ export function initLspWorker() {
7169
if (worker) {
7270
return
7371
}
74-
if (window.Worker) {
75-
event('Used LSP worker.')
76-
worker = new Worker(fluxWorkerUrl)
77-
} else {
78-
event('Used LSP fallback worker.')
79-
worker = new Fallback()
80-
}
72+
worker = new Worker(fluxWorkerUrl)
8173
worker.onerror = (err: ErrorEvent) => {
8274
const error: Error = {...err, name: 'worker.onerror'}
8375
reportErrorThroughHoneyBadger(error, {name: 'LSP worker'})

src/languageSupport/languages/flux/lsp/worker/buffer.ts

Lines changed: 0 additions & 63 deletions
This file was deleted.

src/languageSupport/languages/flux/lsp/worker/flux.fallback.ts

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/languageSupport/languages/flux/lsp/worker/flux.worker.ts

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,89 @@
1-
import Buffer from 'src/languageSupport/languages/flux/lsp/worker/buffer'
1+
import {Lsp} from '@influxdata/flux-lsp-browser'
2+
import {Methods} from 'src/languageSupport/languages/flux/lsp/utils'
3+
4+
const respond = (msg, cb) => {
5+
try {
6+
// LSP spec permits a blank response
7+
if (!msg) {
8+
return
9+
}
10+
const d = JSON.parse(msg)
11+
cb(d)
12+
} catch (e) {
13+
console.error(e)
14+
}
15+
}
16+
17+
class Buffer {
18+
private _i = 0
19+
private _o = 0
20+
private _initBuffer = new Array(100)
21+
private _serverStartSignaled = false
22+
private _initialized = false // ACK received from monaco
23+
private _server: Lsp
24+
25+
private _insertBuffer = req => {
26+
this._initBuffer[this._i % 100] = req
27+
this._i++
28+
}
29+
30+
private _consumeInitBuffer = async cb => {
31+
let msg = this._initBuffer[this._o % 100]
32+
do {
33+
const res = await this._server.send(JSON.stringify(msg))
34+
respond(res, cb)
35+
this._o++
36+
msg = this._initBuffer[this._o % 100]
37+
} while (!!msg)
38+
return
39+
}
40+
41+
send(data, cb) {
42+
// Handle race condition, because LSP is lazy loaded while init messages are received.
43+
switch (
44+
`${data.method}|${this._serverStartSignaled}|${this._initialized}`
45+
) {
46+
case `${Methods.Initialize}|false|false`:
47+
this._serverStartSignaled = true
48+
const initMsg = data
49+
start(cb).then(s => {
50+
this._server = s
51+
this._server
52+
.send(JSON.stringify(initMsg))
53+
.then(res => respond(res, cb))
54+
})
55+
break
56+
case `${Methods.Initialize}|true|false`: // initialize already received
57+
break
58+
case `${Methods.Initialized}|true|false`:
59+
case `${Methods.Initialized}|true|true`:
60+
this._server.send(JSON.stringify(data)).then(async _ => {
61+
await this._consumeInitBuffer(cb)
62+
this._initialized = true
63+
})
64+
break
65+
default:
66+
if (!this._initialized) {
67+
this._insertBuffer(data)
68+
} else {
69+
this._server.send(JSON.stringify(data)).then(res => respond(res, cb))
70+
}
71+
break
72+
}
73+
}
74+
}
75+
76+
async function start(cb): Promise<Lsp> {
77+
const {Lsp} = await import('@influxdata/flux-lsp-browser')
78+
const server = new Lsp()
79+
server.onMessage(d => respond(d, cb))
80+
server
81+
.run()
82+
.then(() => console.warn('lsp server has stopped'))
83+
.catch(err => console.error('lsp server has crashed', err))
84+
85+
return server
86+
}
287

388
const buffer = new Buffer()
489

src/languageSupport/languages/flux/lsp/worker/lspConnector.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/languageSupport/languages/flux/lsp/worker/utils.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)