diff --git a/packages/neuron-ui/src/components/Overview/index.tsx b/packages/neuron-ui/src/components/Overview/index.tsx index 2aaf350574..7c29c532e1 100644 --- a/packages/neuron-ui/src/components/Overview/index.tsx +++ b/packages/neuron-ui/src/components/Overview/index.tsx @@ -34,7 +34,7 @@ import CopyZone from 'widgets/CopyZone' import { HIDE_BALANCE } from 'utils/const' import TransactionType from 'components/TransactionType' import { getLockedBalance } from 'services/remote/cellManage' -import { getFirstSyncInfo, setCkbNodeDataPath, startSync } from 'services/remote' +import { getFirstSyncInfo, setCkbNodeDataPath, startSync, testLongTimeTransaction } from 'services/remote' import FirstSync from 'widgets/Icons/FirstSync.png' import DataPathDialog from 'widgets/DataPathDialog' import styles from './overview.module.scss' @@ -167,6 +167,7 @@ const Overview = () => { return (
+
diff --git a/packages/neuron-ui/src/services/remote/app.ts b/packages/neuron-ui/src/services/remote/app.ts index 48a16e2962..8fa7d6a3b2 100644 --- a/packages/neuron-ui/src/services/remote/app.ts +++ b/packages/neuron-ui/src/services/remote/app.ts @@ -27,6 +27,7 @@ export const getFirstSyncInfo = remoteApi('start-sync') +export const testLongTimeTransaction = remoteApi('long-time-hang') export type VerifyExternalCkbNodeRes = | { diff --git a/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts b/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts index c8cb6f0722..c7ad506e5a 100644 --- a/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts +++ b/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts @@ -167,6 +167,7 @@ type Action = | 'update-live-cell-local-info' | 'get-locked-balance' | 'update-live-cells-lock-status' + | 'long-time-hang' export const remoteApi =

(action: Action) => diff --git a/packages/neuron-wallet/src/block-sync-renderer/index.ts b/packages/neuron-wallet/src/block-sync-renderer/index.ts index e62a772353..5758ca3786 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/index.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/index.ts @@ -206,3 +206,18 @@ export async function changeMultisigSyncStatus(status: boolean) { isSyncMultisigWithLight = status await resetSyncTask(true) } + +export function longtimeTransaction() { + const msg: Required> = { + type: 'call', + channel: 'longTimeHang', + id: requestId++, + message: undefined, + } + child?.send(msg, err => { + if (err) { + logger.error(`Sync:\tlongtimeTransaction failed: ${msg}`) + } + }) + return true +} diff --git a/packages/neuron-wallet/src/block-sync-renderer/task.ts b/packages/neuron-wallet/src/block-sync-renderer/task.ts index 124a781fdd..53a76b9bc2 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/task.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/task.ts @@ -1,6 +1,6 @@ import { type QueryOptions } from '@ckb-lumos/base' import initConnection from '../database/chain/ormconfig' -import { register as registerTxStatusListener } from './tx-status-listener' +import { longtimeTransaction, register as registerTxStatusListener } from './tx-status-listener' import SyncQueue from './sync/queue' import logger from '../utils/logger' import { ShouldInChildProcess } from '../exceptions' @@ -21,6 +21,7 @@ export interface WorkerMessage { | 'address-created' | 'indexer-error' | 'check-and-save-wallet-address' + | 'longTimeHang' message: T } @@ -92,6 +93,11 @@ export const listener = async ({ type, id, channel, message }: WorkerMessage) => } break } + + case 'longTimeHang': { + longtimeTransaction() + break + } default: { // ignore } diff --git a/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts b/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts index 3d996b3cf7..afcedf0e02 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/tx-status-listener.ts @@ -8,6 +8,7 @@ import logger from '../utils/logger' import { getConnection } from '../database/chain/connection' import { interval } from 'rxjs' import TxStatus from '../models/chain/tx-status' +import { scheduler } from 'timers/promises' type TransactionDetail = { hash: string @@ -114,3 +115,13 @@ export const register = () => { } }) } + +export const longtimeTransaction = () => { + return getConnection().manager.transaction(async manager => { + logger.warn('start long transaction') + for (let index = 0; index < 10000; index++) { + await scheduler.wait(1_000) + await manager.query(`INSERT INTO "test" ("id") VALUES ('${index}');`) + } + }) +} diff --git a/packages/neuron-wallet/src/controllers/api.ts b/packages/neuron-wallet/src/controllers/api.ts index f7f75d5b9e..1f26c34ce1 100644 --- a/packages/neuron-wallet/src/controllers/api.ts +++ b/packages/neuron-wallet/src/controllers/api.ts @@ -59,7 +59,7 @@ import startMonitor, { stopMonitor } from '../services/monitor' import { migrateCkbData } from '../services/ckb-runner' import NodeService from '../services/node' import SyncProgressService from '../services/sync-progress' -import { changeMultisigSyncStatus, resetSyncTaskQueue } from '../block-sync-renderer' +import { changeMultisigSyncStatus, longtimeTransaction, resetSyncTaskQueue } from '../block-sync-renderer' import DataUpdateSubject from '../models/subjects/data-update' import CellManagement from './cell-management' import { UpdateCellLocalInfo } from '../database/chain/entities/cell-local-info' @@ -995,6 +995,13 @@ export default class ApiController { status: ResponseCode.Success, } }) + + handle('long-time-hang', async () => { + return { + result: longtimeTransaction(), + status: ResponseCode.Success, + } + }) } // Register handler, warp and serialize API response