Skip to content

Commit d58fd3f

Browse files
committed
feat(orap): add ttl for tasks
fix(reku): sync checkpoint ttl with log records
1 parent 07cf484 commit d58fd3f

File tree

5 files changed

+22
-6
lines changed

5 files changed

+22
-6
lines changed

packages/orap/mock/demo/app.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export function startDemo(options: ListenOptions, storeConfig?: any) {
2929
.crosscheck({
3030
store,
3131
storeKeyPrefix: 'ora-stack:orap:demo:cc:',
32+
storeTtl: config.CROSSCHECKER_CACHE_TTL,
3233
pollingInterval: 3000,
3334
batchBlocksCount: 1,
3435
blockInterval: 12000,

packages/orap/mock/demo/config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { Logger } from '@ora-io/utils'
33
export const config = {
44
MAINNET_USDT_ADDR: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
55
TRANSFER_EVENT_NAME: 'Transfer',
6+
TASK_TTL: 60000,
7+
TASK_DONE_TTL: 60000,
8+
CROSSCHECKER_CACHE_TTL: 60000,
69
}
710

811
const logLevel = 'debug'

packages/orap/mock/demo/taskTransfer.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import type { Constructor } from '@ora-io/utils'
22
import { TaskStorable } from '../../index'
3-
import { logger } from './config'
3+
import { config, logger } from './config'
44

55
export class TransferTask extends TaskStorable {
66
static readonly taskPrefix: string = 'ora-stack:orap:demo:TransferTask:'
77
static readonly taskPrefixDone: string = 'ora-stack:orap:demo:Done-TransferTask:'
8+
static readonly taskTtl: number | undefined = config.TASK_TTL
9+
static readonly taskTtlDone: number | undefined = config.TASK_DONE_TTL
810

911
constructor(
1012
public id?: string,

packages/orap/task/storable.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ export abstract class TaskStorable extends TaskBase {
66
// overwrite these for store key customize
77
static readonly taskPrefix: string = 'Task:'
88
static readonly taskPrefixDone: string = 'Done-Task:'
9+
static readonly taskTtl: number | undefined = undefined
10+
static readonly taskTtlDone: number | undefined = undefined
911

1012
getTaskPrefix(): string {
1113
return (this.constructor as typeof TaskStorable).taskPrefix
@@ -15,10 +17,18 @@ export abstract class TaskStorable extends TaskBase {
1517
return (this.constructor as typeof TaskStorable).taskPrefixDone
1618
}
1719

20+
getTaskTtl(): number | undefined {
21+
return (this.constructor as typeof TaskStorable).taskTtl
22+
}
23+
24+
getTaskTtlDone(): number | undefined {
25+
return (this.constructor as typeof TaskStorable).taskTtlDone
26+
}
27+
1828
static async _load<T extends TaskStorable>(this: Constructor<T>, sm: StoreManager): Promise<T> {
1929
const instance = new this()
2030
// get all task keys
21-
const keys = await sm.keys(instance.getTaskPrefix() + '*', true)
31+
const keys = await sm.keys(`${instance.getTaskPrefix()}*`, true)
2232
// get the first task (del when finish)
2333
const serializedTask: string = (await sm.get(keys[0]))! // never undefined ensured by keys isWait=true
2434

@@ -30,15 +40,15 @@ export abstract class TaskStorable extends TaskBase {
3040
}
3141

3242
async save(sm: StoreManager) {
33-
await sm.set(this.getTaskPrefix() + this.toKey(), this.toString())
43+
await sm.set(this.getTaskPrefix() + this.toKey(), this.toString(), this.getTaskTtl())
3444
}
3545

3646
async remove(sm: StoreManager) {
3747
await sm.del(this.getTaskPrefix() + this.toKey())
3848
}
3949

4050
async done(sm: StoreManager) {
41-
await sm.set(this.getTaskPrefixDone() + this.toKey(), this.toString())
51+
await sm.set(this.getTaskPrefixDone() + this.toKey(), this.toString(), this.getTaskTtlDone())
4252
await this.remove(sm)
4353
}
4454
}

packages/reku/event/crosschecker/cache/manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ export class CrossCheckerCacheManager extends SimpleStoreManager {
8989
}
9090

9191
/**
92-
* ttl: no limit
92+
* ttl: should be consist with log records, otherwise will do redundant work
9393
* @param checkpoint
9494
*/
9595
async setCheckpoint(checkpoint: number) {
96-
await this.set(`${this.storeKeyPrefix}checkpoint`, checkpoint)
96+
await this.set(`${this.storeKeyPrefix}checkpoint`, checkpoint, this.ttl)
9797
}
9898

9999
async getCheckpoint(): Promise<number | undefined> {

0 commit comments

Comments
 (0)