Skip to content

Commit c0c2ee4

Browse files
authored
update mq export;perf: redis cache (#4465)
* perf: redis cache * update mq export * perf: website sync error tip * add error worker
1 parent c5db894 commit c0c2ee4

File tree

11 files changed

+64
-10
lines changed

11 files changed

+64
-10
lines changed

packages/global/core/dataset/constants.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ export const DatasetTypeMap = {
5151
export enum DatasetStatusEnum {
5252
active = 'active',
5353
syncing = 'syncing',
54-
waiting = 'waiting'
54+
waiting = 'waiting',
55+
error = 'error'
5556
}
5657
export const DatasetStatusMap = {
5758
[DatasetStatusEnum.active]: {
@@ -62,6 +63,9 @@ export const DatasetStatusMap = {
6263
},
6364
[DatasetStatusEnum.waiting]: {
6465
label: i18nT('common:core.dataset.status.waiting')
66+
},
67+
[DatasetStatusEnum.error]: {
68+
label: i18nT('dataset:status_error')
6569
}
6670
};
6771

packages/global/core/dataset/type.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ export type DatasetListItemType = {
209209

210210
export type DatasetItemType = Omit<DatasetSchemaType, 'vectorModel' | 'agentModel' | 'vlmModel'> & {
211211
status: `${DatasetStatusEnum}`;
212+
errorMsg?: string;
212213
vectorModel: EmbeddingModelItemType;
213214
agentModel: LLMModelItemType;
214215
vlmModel?: LLMModelItemType;

packages/service/common/bullmq/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ export function getWorker<DataType, ReturnType = void>(
6969
newWorker.on('error', (error) => {
7070
addLog.error(`MQ Worker [${name}]: ${error.message}`, error);
7171
});
72+
newWorker.on('failed', (jobId, error) => {
73+
addLog.error(`MQ Worker [${name}]: ${error.message}`, error);
74+
});
7275
workers.set(name, newWorker);
7376
return newWorker;
7477
}
78+
79+
export * from 'bullmq';

packages/service/common/vectorStore/controller.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { EmbeddingModelItemType } from '@fastgpt/global/core/ai/model.d';
77
import { MILVUS_ADDRESS, PG_ADDRESS, OCEANBASE_ADDRESS } from './constants';
88
import { MilvusCtrl } from './milvus/class';
99
import { setRedisCache, getRedisCache, delRedisCache, CacheKeyEnum } from '../redis/cache';
10+
import { throttle } from 'lodash';
1011

1112
const getVectorObj = () => {
1213
if (PG_ADDRESS) return new PgVectorCtrl();
@@ -15,7 +16,12 @@ const getVectorObj = () => {
1516

1617
return new PgVectorCtrl();
1718
};
19+
1820
const getChcheKey = (teamId: string) => `${CacheKeyEnum.team_vector_count}:${teamId}`;
21+
const onDelCache = throttle((teamId: string) => delRedisCache(getChcheKey(teamId)), 30000, {
22+
leading: true,
23+
trailing: true
24+
});
1925

2026
const Vector = getVectorObj();
2127

@@ -59,7 +65,7 @@ export const insertDatasetDataVector = async ({
5965
vector: vectors[0]
6066
});
6167

62-
delRedisCache(getChcheKey(props.teamId));
68+
onDelCache(props.teamId);
6369

6470
return {
6571
tokens,
@@ -69,6 +75,6 @@ export const insertDatasetDataVector = async ({
6975

7076
export const deleteDatasetDataVector = async (props: DelDatasetVectorCtrlProps) => {
7177
const result = await Vector.delete(props);
72-
delRedisCache(getChcheKey(props.teamId));
78+
onDelCache(props.teamId);
7379
return result;
7480
};

packages/service/core/dataset/websiteSync/index.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,44 @@ export const addWebsiteSyncJob = (data: WebsiteSyncJobData) => {
3434
export const getWebsiteSyncDatasetStatus = async (datasetId: string) => {
3535
const jobId = await websiteSyncQueue.getDeduplicationJobId(datasetId);
3636
if (!jobId) {
37-
return DatasetStatusEnum.active;
37+
return {
38+
status: DatasetStatusEnum.active,
39+
errorMsg: undefined
40+
};
3841
}
3942
const job = await websiteSyncQueue.getJob(jobId);
4043
if (!job) {
41-
return DatasetStatusEnum.active;
44+
return {
45+
status: DatasetStatusEnum.active,
46+
errorMsg: undefined
47+
};
4248
}
4349

4450
const jobState = await job.getState();
4551

52+
if (jobState === 'failed' || jobState === 'unknown') {
53+
return {
54+
status: DatasetStatusEnum.error,
55+
errorMsg: job.failedReason
56+
};
57+
}
4658
if (['waiting-children', 'waiting'].includes(jobState)) {
47-
return DatasetStatusEnum.waiting;
59+
return {
60+
status: DatasetStatusEnum.waiting,
61+
errorMsg: undefined
62+
};
4863
}
4964
if (jobState === 'active') {
50-
return DatasetStatusEnum.syncing;
65+
return {
66+
status: DatasetStatusEnum.syncing,
67+
errorMsg: undefined
68+
};
5169
}
5270

53-
return DatasetStatusEnum.active;
71+
return {
72+
status: DatasetStatusEnum.active,
73+
errorMsg: undefined
74+
};
5475
};
5576

5677
// Scheduler setting

packages/web/i18n/en/dataset.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@
124124
"split_sign_question": "question mark",
125125
"split_sign_semicolon": "semicolon",
126126
"start_sync_website_tip": "Confirm to start synchronizing data? \nThe old data will be deleted and retrieved again, please confirm!",
127+
"status_error": "Running exception",
127128
"sync_collection_failed": "Synchronization collection error, please check whether the source file can be accessed normally",
128129
"sync_schedule": "Timing synchronization",
129130
"sync_schedule_tip": "Only existing collections will be synchronized. \nIncludes linked collections and all collections in the API knowledge base. \nThe system will poll for updates every day, and the specific update time cannot be determined.",

packages/web/i18n/zh-CN/dataset.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
"split_sign_question": "问号",
126126
"split_sign_semicolon": "分号",
127127
"start_sync_website_tip": "确认开始同步数据?将会删除旧数据后重新获取,请确认!",
128+
"status_error": "运行异常",
128129
"sync_collection_failed": "同步集合错误,请检查是否能正常访问源文件",
129130
"sync_schedule": "定时同步",
130131
"sync_schedule_tip": "仅会同步已存在的集合。包括链接集合以及 API 知识库里所有集合。系统会每天进行轮询更新,无法确定具体的更新时间。",

packages/web/i18n/zh-Hant/dataset.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@
124124
"split_sign_question": "問號",
125125
"split_sign_semicolon": "分號",
126126
"start_sync_website_tip": "確認開始同步資料?\n將會刪除舊資料後重新獲取,請確認!",
127+
"status_error": "運行異常",
127128
"sync_collection_failed": "同步集合錯誤,請檢查是否能正常存取來源文件",
128129
"sync_schedule": "定時同步",
129130
"sync_schedule_tip": "只會同步已存在的集合。\n包括連結集合以及 API 知識庫裡所有集合。\n系統會每天進行輪詢更新,無法確定特定的更新時間。",

projects/app/next.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ const nextConfig = {
8383
serverComponentsExternalPackages: [
8484
'mongoose',
8585
'pg',
86+
'bullmq',
8687
'@zilliz/milvus2-sdk-node',
8788
"tiktoken",
8889
],

projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import HeaderTagPopOver from './HeaderTagPopOver';
3333
import MyBox from '@fastgpt/web/components/common/MyBox';
3434
import Icon from '@fastgpt/web/components/common/Icon';
3535
import MyTag from '@fastgpt/web/components/common/Tag/index';
36+
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
3637

3738
const FileSourceSelector = dynamic(() => import('../Import/components/FileSourceSelector'));
3839

@@ -321,6 +322,14 @@ const Header = ({}: {}) => {
321322
{t('common:core.dataset.status.waiting')}
322323
</MyTag>
323324
)}
325+
{datasetDetail.status === DatasetStatusEnum.error && (
326+
<MyTag colorSchema="red" showDot px={3} h={'36px'}>
327+
<HStack spacing={1}>
328+
<Box>{t('dataset:status_error')}</Box>
329+
<QuestionTip color={'red.500'} label={datasetDetail.errorMsg} />
330+
</HStack>
331+
</MyTag>
332+
)}
324333
</>
325334
) : (
326335
<Button

0 commit comments

Comments
 (0)