From a848998fbe0875a2e659caebbf7431368caa7cc5 Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Fri, 6 Jan 2023 16:42:32 +0800 Subject: [PATCH 1/4] fix: Remove old indexer data and fix typo. --- packages/neuron-ui/src/locales/en.json | 2 +- .../src/controllers/app/index.ts | 3 + .../neuron-wallet/src/services/indexer.ts | 9 +++ .../neuron-wallet/src/services/settings.ts | 8 ++ .../tests/services/indexer.test.ts | 75 +++++++++++++++++++ 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 packages/neuron-wallet/tests/services/indexer.test.ts diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 283ba5aa61..a14ac6c820 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -506,7 +506,7 @@ "experimental-message-hardware": "This is an experimental feature. Please pay attention to the risk and use with caution.", "experimental-message": "This is an experimental feature, it could change at any time. Please use with caution.", "rebuild-sync": "For better user experience, Neuron has adopted a new storage, which requires a migrating of data (estimated 20 ~ 60min).\nSorry for the inconvenience.", - "migrate": "Migrating", + "migrate": "Migrate", "secp256k1/blake160-address-required": "Secp256k1/blake160 address is required", "fields": { "wallet": "Wallet", diff --git a/packages/neuron-wallet/src/controllers/app/index.ts b/packages/neuron-wallet/src/controllers/app/index.ts index 336dc88cba..7ff6f90e50 100644 --- a/packages/neuron-wallet/src/controllers/app/index.ts +++ b/packages/neuron-wallet/src/controllers/app/index.ts @@ -15,6 +15,7 @@ import SyncApiController from 'controllers/sync-api' import { SETTINGS_WINDOW_TITLE } from 'utils/const' import { stopCkbNode } from 'services/ckb-runner' import startMonitor from 'services/monitor' +import IndexerService from 'services/indexer' const app = electronApp @@ -52,6 +53,8 @@ export default class AppController { await this.openWindow() startMonitor() + + IndexerService.cleanOldIndexerData() } /** diff --git a/packages/neuron-wallet/src/services/indexer.ts b/packages/neuron-wallet/src/services/indexer.ts index 0b9009d0cd..34da534354 100644 --- a/packages/neuron-wallet/src/services/indexer.ts +++ b/packages/neuron-wallet/src/services/indexer.ts @@ -29,6 +29,15 @@ export default class IndexerService { await startMonitor('ckb') } + static cleanOldIndexerData() { + const oldIndexerDataPath = SettingsService.getInstance().indexerDataPath + if (oldIndexerDataPath && fs.existsSync(oldIndexerDataPath)) { + logger.debug(`Removing old indexer data ${oldIndexerDataPath}`) + fs.rmSync(oldIndexerDataPath, { recursive: true, force: true }) + SettingsService.getInstance().indexerDataPath = '' + } + } + clearData = () => { const dataPath = this.getDataPath() logger.debug(`Removing data ${dataPath}`) diff --git a/packages/neuron-wallet/src/services/settings.ts b/packages/neuron-wallet/src/services/settings.ts index 2e0c8dde7e..dff8009fcb 100644 --- a/packages/neuron-wallet/src/services/settings.ts +++ b/packages/neuron-wallet/src/services/settings.ts @@ -24,6 +24,14 @@ export default class SettingsService extends Store { return this.readSync('locale') } + get indexerDataPath(): string { + return this.readSync('indexerDataPath') + } + + set indexerDataPath(dataPath: string) { + this.writeSync('indexerDataPath', dataPath) + } + set locale(lng: Locale) { if (locales.includes(lng)) { this.writeSync('locale', lng) diff --git a/packages/neuron-wallet/tests/services/indexer.test.ts b/packages/neuron-wallet/tests/services/indexer.test.ts new file mode 100644 index 0000000000..40ab1f28cd --- /dev/null +++ b/packages/neuron-wallet/tests/services/indexer.test.ts @@ -0,0 +1,75 @@ +import IndexerService from '../../src/services/indexer' + +const existsSyncMock = jest.fn() +const rmSyncMock = jest.fn() + +jest.mock('fs', () => { + return { + existsSync: () => existsSyncMock(), + readFileSync: () => jest.fn(), + writeFileSync: () => jest.fn(), + rmSync: () => rmSyncMock() + } +}) + +const setIndexerDataPathMock = jest.fn() +const getIndexerDataPathMock = jest.fn() +jest.mock('../../src/services/settings', () => { + return class { + static getInstance() { + return { + get indexerDataPath() { + return getIndexerDataPathMock() + }, + set indexerDataPath(value: string) { + setIndexerDataPathMock(value) + } + } + } + } +}) + +jest.mock('../../src/utils/logger', () => ({ + debug: () => jest.fn() +})) + +jest.mock('../../src/models/synced-block-number', () => ({ + +})) + +jest.mock('../../src/database/chain', () => ({ + +})) + +jest.mock('../../src/services/monitor', () => ({ + +})) + +describe('test IndexerService', () => { + beforeEach(() => { + existsSyncMock.mockReset() + rmSyncMock.mockReset() + setIndexerDataPathMock.mockReset() + getIndexerDataPathMock.mockReset() + }) + describe('test remove old indexer data', () => { + it('old indexer data path exist', () => { + existsSyncMock.mockReturnValueOnce(true) + getIndexerDataPathMock.mockReturnValueOnce('indexer-path') + IndexerService.cleanOldIndexerData() + expect(rmSyncMock).toBeCalled() + expect(setIndexerDataPathMock).toBeCalledWith('') + }) + it('old indexer data not exist', () => { + existsSyncMock.mockReturnValueOnce(false) + IndexerService.cleanOldIndexerData() + expect(rmSyncMock).toBeCalledTimes(0) + }) + it('old indexer data is empty', () => { + getIndexerDataPathMock.mockReturnValueOnce('') + existsSyncMock.mockReturnValueOnce(true) + IndexerService.cleanOldIndexerData() + expect(rmSyncMock).toBeCalledTimes(0) + }) + }) +}) \ No newline at end of file From 9f01a84fc4d29329aa45509bb1c17664074ef8cf Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Fri, 6 Jan 2023 17:00:32 +0800 Subject: [PATCH 2/4] fix: Add end line --- packages/neuron-wallet/tests/services/indexer.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neuron-wallet/tests/services/indexer.test.ts b/packages/neuron-wallet/tests/services/indexer.test.ts index 40ab1f28cd..22a31c2ec6 100644 --- a/packages/neuron-wallet/tests/services/indexer.test.ts +++ b/packages/neuron-wallet/tests/services/indexer.test.ts @@ -72,4 +72,4 @@ describe('test IndexerService', () => { expect(rmSyncMock).toBeCalledTimes(0) }) }) -}) \ No newline at end of file +}) From 2c876c04eefa16c3f595b8ccfb89b50abbecf9b2 Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Fri, 27 Jan 2023 14:54:52 +0800 Subject: [PATCH 3/4] fix: Remove after migrating success. 1. If users have migrating success, delete the old indexer path after 10S if ckb is running. 2. If users have not migrated, delete the old indexer path after migrating success. --- packages/neuron-wallet/src/controllers/app/index.ts | 3 --- packages/neuron-wallet/src/services/ckb-runner.ts | 12 ++++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/neuron-wallet/src/controllers/app/index.ts b/packages/neuron-wallet/src/controllers/app/index.ts index 7ff6f90e50..336dc88cba 100644 --- a/packages/neuron-wallet/src/controllers/app/index.ts +++ b/packages/neuron-wallet/src/controllers/app/index.ts @@ -15,7 +15,6 @@ import SyncApiController from 'controllers/sync-api' import { SETTINGS_WINDOW_TITLE } from 'utils/const' import { stopCkbNode } from 'services/ckb-runner' import startMonitor from 'services/monitor' -import IndexerService from 'services/indexer' const app = electronApp @@ -53,8 +52,6 @@ export default class AppController { await this.openWindow() startMonitor() - - IndexerService.cleanOldIndexerData() } /** diff --git a/packages/neuron-wallet/src/services/ckb-runner.ts b/packages/neuron-wallet/src/services/ckb-runner.ts index 127e4a2f74..80196d748f 100644 --- a/packages/neuron-wallet/src/services/ckb-runner.ts +++ b/packages/neuron-wallet/src/services/ckb-runner.ts @@ -7,6 +7,7 @@ import logger from 'utils/logger' import SettingsService from './settings' import MigrateSubject from 'models/subjects/migrate-subject' import { resetSyncTaskQueue } from 'block-sync-renderer' +import IndexerService from './indexer' const platform = (): string => { switch (process.platform) { @@ -66,6 +67,14 @@ let isLookingValidTarget: boolean = false let lastLogTime: number export const getLookingValidTargetStatus = () => isLookingValidTarget +const removeOldIndexerIfRunSuccess = () => { + setTimeout(() => { + if (ckb !== null) { + IndexerService.cleanOldIndexerData() + } + }, 10000) +} + export const startCkbNode = async () => { await initCkb() @@ -114,6 +123,8 @@ export const startCkbNode = async () => { ckb = null }) resetSyncTaskQueue.push(true) + + removeOldIndexerIfRunSuccess() } export const stopCkbNode = () => { @@ -156,6 +167,7 @@ export function migrateCkbData() { logger.info(`CKB migrate:\tprocess process exited with code ${code}`) if (code === 0) { MigrateSubject.next({ type: 'finish' }) + IndexerService.cleanOldIndexerData() } else { MigrateSubject.next({ type: 'failed', reason: lastErrorData }) } From 0e6a80aeff6a81aa3710fddf0e4d8baf137549b2 Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Tue, 31 Jan 2023 17:23:24 +0800 Subject: [PATCH 4/4] fix: Add mock fn --- packages/neuron-wallet/tests/services/ckb-runner.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/neuron-wallet/tests/services/ckb-runner.test.ts b/packages/neuron-wallet/tests/services/ckb-runner.test.ts index aa31c8cd00..8c3982b387 100644 --- a/packages/neuron-wallet/tests/services/ckb-runner.test.ts +++ b/packages/neuron-wallet/tests/services/ckb-runner.test.ts @@ -69,6 +69,9 @@ jest.mock('../../src/block-sync-renderer', () => ({ push: jest.fn() } })) +jest.mock('../../src/services/indexer', () => ({ + cleanOldIndexerData: jest.fn() +})) const { startCkbNode, stopCkbNode, getLookingValidTargetStatus, migrateCkbData } = require('../../src/services/ckb-runner') describe('ckb runner', () => {