diff --git a/datastore/memoryds.nim b/datastore/memoryds.nim index dd3192f..1910c43 100644 --- a/datastore/memoryds.nim +++ b/datastore/memoryds.nim @@ -70,6 +70,7 @@ method put*( let dk = KeyBuffer.new(key) let dv = ValueBuffer.new(data) + echo "MemoryDatastore:put: ", key, " => ", data.repr self.store[dk] = dv return success() diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index 0167608..d0fef14 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -1,5 +1,7 @@ - +import pkg/chronos import pkg/chronos/threadsync +import pkg/questionable +import pkg/questionable/results import stew/results import pkg/upraises import pkg/taskpools @@ -50,42 +52,58 @@ proc newThreadResult*[T]( proc getTask*( ret: TResult[DataBuffer], - key: KeyBuffer, + tds: ThreadDatastorePtr, + kb: KeyBuffer, ) = - # return ok(DataBuffer.new()) - print "\nthrbackend: getTask: ", ret[] - print "\nthrbackend: getTask:key: ", key - let data = DataBuffer.new("hello world!") - print "\nthrbackend: getTask:data: ", data - ret[].state = Success - ret[].value = data + without key =? kb.toKey(), err: + ret[].state = Error + try: + let res = waitFor tds[].ds.get(key) + if res.isErr: + ret[].state = Error + ret[].error = res.error().toBuffer() + else: + let db = DataBuffer.new res.get() + ret[].state = Success + ret[].value = db + + discard ret[].signal.fireSync() + except CatchableError as err: + ret[].state = Error + ret[].error = err.toBuffer() - print "thrbackend: putTask: fire", ret[].signal.fireSync() proc get*( ret: TResult[DataBuffer], tds: ThreadDatastorePtr, key: Key, ) = - echo "thrfrontend:put: " let bkey = StringBuffer.new(key.id()) - print "bkey: ", bkey - - tds[].tp.spawn getTask(ret, bkey) + tds[].tp.spawn getTask(ret, tds, bkey) import os proc putTask*( ret: TResult[void], - key: KeyBuffer, - data: DataBuffer, + tds: ThreadDatastorePtr, + kb: KeyBuffer, + db: DataBuffer, ) = - print "\nthrbackend: putTask: ", ret[] - print "\nthrbackend: putTask:key: ", key - print "\nthrbackend: putTask:data: ", data - os.sleep(200) - print "thrbackend: putTask: fire", ret[].signal.fireSync().get() + without key =? kb.toKey(), err: + ret[].state = Error + + let data = db.toSeq(byte) + let res = (waitFor tds[].ds.put(key, data)).catch + # print "thrbackend: putTask: fire", ret[].signal.fireSync().get() + if res.isErr: + ret[].state = Error + ret[].error = res.error().toBuffer() + else: + ret[].state = Success + + discard ret[].signal.fireSync() + proc put*( ret: TResult[void], @@ -99,4 +117,4 @@ proc put*( print "bkey: ", bkey print "bval: ", bval - tds[].tp.spawn putTask(ret, bkey, bval) + tds[].tp.spawn putTask(ret, tds, bkey, bval) diff --git a/tests/datastore/testsharedds.nim b/tests/datastore/testsharedds.nim index 0fcf9d7..fa777f0 100644 --- a/tests/datastore/testsharedds.nim +++ b/tests/datastore/testsharedds.nim @@ -63,7 +63,7 @@ suite "Test Basic FSDatastore": teardownAll: (await memStore.close()).get() - basicStoreTests(memStore, key, bytes, otherBytes) + basicStoreTests(ds, key, bytes, otherBytes) # suite "Test Misc FSDatastore": # let