mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-13 19:58:09 +00:00
UBERF-8877: Fix indexer concurrency (#7416)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
cb9720f340
commit
9421887f01
1
.vscode/launch.json
vendored
1
.vscode/launch.json
vendored
@ -85,7 +85,6 @@
|
||||
"SERVER_SECRET": "secret",
|
||||
"REKONI_URL": "http://localhost:4004",
|
||||
"MODEL_JSON": "${workspaceRoot}/models/all/bundle/model.json",
|
||||
"REGION":"pg",
|
||||
"ELASTIC_INDEX_NAME": "local_storage_index",
|
||||
"STATS_URL":"http://host.docker.internal:4900",
|
||||
"ACCOUNTS_URL": "http://localhost:3000",
|
||||
|
@ -364,7 +364,8 @@ export class LiveQuery implements WithTx, Client {
|
||||
total: 0,
|
||||
options: options as FindOptions<Doc>,
|
||||
callbacks: new Map(),
|
||||
refresh: reduceCalls(() => this.doRefresh(q))
|
||||
refresh: reduceCalls(() => this.doRefresh(q)),
|
||||
refreshId: 0
|
||||
}
|
||||
if (callback !== undefined) {
|
||||
q.callbacks.set(callback.callbackId, callback.callback as unknown as Callback)
|
||||
@ -787,8 +788,9 @@ export class LiveQuery implements WithTx, Client {
|
||||
}
|
||||
|
||||
private async doRefresh (q: Query): Promise<void> {
|
||||
const qid = ++q.refreshId
|
||||
const res = await this.client.findAll(q._class, q.query, q.options)
|
||||
if (!deepEqual(res, q.result) || (res.total !== q.total && q.options?.total === true)) {
|
||||
if (q.refreshId === qid && (!deepEqual(res, q.result) || (res.total !== q.total && q.options?.total === true))) {
|
||||
q.result = new ResultArray(res, this.getHierarchy())
|
||||
q.total = res.total
|
||||
await this.callback(q)
|
||||
|
@ -12,6 +12,6 @@ export interface Query {
|
||||
options?: FindOptions<Doc>
|
||||
total: number
|
||||
callbacks: Map<string, Callback>
|
||||
|
||||
refresh: () => Promise<void>
|
||||
refreshId: number
|
||||
}
|
||||
|
@ -402,7 +402,7 @@ export class FullTextIndexPipeline implements FullTextPipeline {
|
||||
): Promise<{ classUpdate: Ref<Class<Doc>>[], processed: number }> {
|
||||
const _classUpdate = new Set<Ref<Class<Doc>>>()
|
||||
let processed = 0
|
||||
await rateLimiter.add(async () => {
|
||||
await rateLimiter.exec(async () => {
|
||||
let st = Date.now()
|
||||
|
||||
let groupBy = await this.storage.groupBy(ctx, DOMAIN_DOC_INDEX_STATE, 'objectClass', { needIndex: true })
|
||||
|
Loading…
Reference in New Issue
Block a user