add locks in memory store to very it's not the issue

This commit is contained in:
Jaremy Creechley 2023-09-19 18:48:19 -07:00
parent 9ff163e0ef
commit 0d34d048d5
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
2 changed files with 20 additions and 11 deletions

View File

@ -17,9 +17,11 @@ export key, query
push: {.upraises: [].}
type
import std/locks
type
MemoryDatastore* = ref object of Datastore
lock*: Lock
store*: Table[KeyBuffer, ValueBuffer]
method has*(
@ -28,7 +30,8 @@ method has*(
): Future[?!bool] {.async.} =
let dk = KeyBuffer.new(key)
return success self.store.hasKey(dk)
withLock(self.lock):
return success self.store.hasKey(dk)
method delete*(
self: MemoryDatastore,
@ -37,7 +40,8 @@ method delete*(
let dk = KeyBuffer.new(key)
var val: ValueBuffer
discard self.store.pop(dk, val)
withLock(self.lock):
discard self.store.pop(dk, val)
return success()
method delete*(
@ -56,11 +60,12 @@ method get*(
): Future[?!seq[byte]] {.async.} =
let dk = KeyBuffer.new(key)
if self.store.hasKey(dk):
let res = self.store[dk].toSeq(byte)
return success res
else:
return failure (ref DatastoreError)(msg: "no such key")
withLock(self.lock):
if self.store.hasKey(dk):
let res = self.store[dk].toSeq(byte)
return success res
else:
return failure (ref DatastoreError)(msg: "no such key")
method put*(
self: MemoryDatastore,
@ -70,7 +75,8 @@ method put*(
let dk = KeyBuffer.new(key)
let dv = ValueBuffer.new(data)
self.store[dk] = dv
withLock(self.lock):
self.store[dk] = dv
return success()
method put*(
@ -114,8 +120,9 @@ method query*(
let key = kb.toKey()
var ds: ValueBuffer
if query.value:
ds = self.store[kb]
withLock(self.lock):
if query.value:
ds = self.store[kb]
let data = if ds.isNil: EmptyBytes else: ds.toSeq(byte)
return success (key.some, data)
@ -129,4 +136,5 @@ method close*(self: MemoryDatastore): Future[?!void] {.async.} =
func new*(tp: typedesc[MemoryDatastore]): MemoryDatastore =
var self = tp()
self.lock.initLock()
return self

View File

@ -16,6 +16,7 @@ import ./querycommontests
import pretty
proc testThreadProxy() =
suite "Test Basic ThreadProxyDatastore":
var