fix: async store

This commit is contained in:
pablo 2025-08-12 12:29:57 +03:00
parent b50240942f
commit faadd4f68c
No known key found for this signature in database
GPG Key ID: 78F35FCC60FDC63A
3 changed files with 17 additions and 17 deletions

View File

@ -11,7 +11,7 @@ type
normalLength: int
nextBatchId: int
BucketState* = object
BucketState* {.pure} = object
budget*: int
budgetCap*: int
lastTimeFull*: Moment
@ -22,7 +22,7 @@ type
const BUCKET_STATE_KEY = "rate_limit_bucket_state"
proc new*[T](M: type[RateLimitStore[T]], db: DbConn): M =
proc new*[T](M: type[RateLimitStore[T]], db: DbConn): Future[M] {.async} =
result = M(db: db, criticalLength: 0, normalLength: 0, nextBatchId: 1)
# Initialize cached lengths from database

View File

@ -33,7 +33,7 @@ suite "Queue RateLimitManager":
asyncTest "sendOrEnqueue - immediate send when capacity available":
## Given
let store: RateLimitStore[string] = RateLimitStore[string].new(db)
let store: RateLimitStore[string] = await RateLimitStore[string].new(db)
let manager = await RateLimitManager[string].new(
store, mockSender, capacity = 10, duration = chronos.milliseconds(100)
)
@ -52,7 +52,7 @@ suite "Queue RateLimitManager":
asyncTest "sendOrEnqueue - multiple messages":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let manager = await RateLimitManager[string].new(
store, mockSender, capacity = 10, duration = chronos.milliseconds(100)
)
@ -73,7 +73,7 @@ suite "Queue RateLimitManager":
asyncTest "start and stop - drop large batch":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let manager = await RateLimitManager[string].new(
store,
mockSender,
@ -90,7 +90,7 @@ suite "Queue RateLimitManager":
asyncTest "enqueue - enqueue critical only when exceeded":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let manager = await RateLimitManager[string].new(
store,
mockSender,
@ -134,7 +134,7 @@ suite "Queue RateLimitManager":
asyncTest "enqueue - enqueue normal on 70% capacity":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let manager = await RateLimitManager[string].new(
store,
mockSender,
@ -179,7 +179,7 @@ suite "Queue RateLimitManager":
asyncTest "enqueue - process queued messages":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let manager = await RateLimitManager[string].new(
store,
mockSender,

View File

@ -21,7 +21,7 @@ suite "SqliteRateLimitStore Tests":
asyncTest "newSqliteRateLimitStore - empty state":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
## When
let loadedState = await store.loadBucketState()
@ -31,7 +31,7 @@ suite "SqliteRateLimitStore Tests":
asyncTest "saveBucketState and loadBucketState - state persistence":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let now = Moment.now()
echo "now: ", now.epochSeconds()
@ -51,7 +51,7 @@ suite "SqliteRateLimitStore Tests":
asyncTest "queue operations - empty store":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
## When/Then
check store.getQueueLength(QueueType.Critical) == 0
@ -65,7 +65,7 @@ suite "SqliteRateLimitStore Tests":
asyncTest "addToQueue and popFromQueue - single batch":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let msgs = @[("msg1", "Hello"), ("msg2", "World")]
## When
@ -92,7 +92,7 @@ suite "SqliteRateLimitStore Tests":
asyncTest "addToQueue and popFromQueue - multiple batches FIFO":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let batch1 = @[("msg1", "First")]
let batch2 = @[("msg2", "Second")]
let batch3 = @[("msg3", "Third")]
@ -130,7 +130,7 @@ suite "SqliteRateLimitStore Tests":
asyncTest "queue isolation - critical and normal queues are separate":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
let criticalMsgs = @[("crit1", "Critical Message")]
let normalMsgs = @[("norm1", "Normal Message")]
@ -167,14 +167,14 @@ suite "SqliteRateLimitStore Tests":
let msgs = @[("persist1", "Persistent Message")]
block:
let store1 = RateLimitStore[string].new(db)
let store1 = await RateLimitStore[string].new(db)
let addResult = await store1.pushToQueue(QueueType.Critical, msgs)
check addResult == true
check store1.getQueueLength(QueueType.Critical) == 1
## When - Create new store instance
block:
let store2 = RateLimitStore[string].new(db)
let store2 =await RateLimitStore[string].new(db)
## Then - Queue length should be restored from database
check store2.getQueueLength(QueueType.Critical) == 1
@ -186,7 +186,7 @@ suite "SqliteRateLimitStore Tests":
asyncTest "large batch handling":
## Given
let store = RateLimitStore[string].new(db)
let store = await RateLimitStore[string].new(db)
var largeBatch: seq[tuple[msgId: string, msg: string]]
for i in 1 .. 100: