From 0b2e016883dbc83579bd1aef6bc94a2d200fa1e2 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Thu, 24 Aug 2023 22:14:21 -0700 Subject: [PATCH] adding sharedds get --- datastore/sharedds.nim | 13 ++++++++++++- datastore/threadbackend.nim | 31 +++++++++++++++++++++---------- tests/datastore/testsharedds.nim | 8 ++++++++ 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/datastore/sharedds.nim b/datastore/sharedds.nim index e071d86..a48ad5d 100644 --- a/datastore/sharedds.nim +++ b/datastore/sharedds.nim @@ -47,7 +47,18 @@ method get*( self: SharedDatastore, key: Key ): Future[?!seq[byte]] {.async.} = - return success(newSeq[byte]()) + + var res = newThreadResult(DataBuffer) + res[].signal = ThreadSignalPtr.new().valueOr: + return failure newException(DatastoreError, "error creating signal") + + get(res, self.tds, key) + await wait(res[].signal) + res[].signal.close() + + echo "\nSharedDataStore:put:value: ", res[].repr + let data = res[].value.toSeq(byte) + return success(data) method put*( self: SharedDatastore, diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index 7fc3841..2332764 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -98,7 +98,6 @@ proc startupDatastore( ret[].state = Success else: ret[].state = Error - # ret[].value[].backendDatastore = ds.get() ret[].state = Success of TestBackend: echo "startupDatastore: TestBackend" @@ -110,12 +109,30 @@ proc startupDatastore( echo "startupDatastore: signal", ret[].signal.fireSync().get() proc getTask*( - self: ThreadDatastorePtr, + ret: TResult[DataBuffer], + backend: ThreadBackendKind, key: KeyBuffer, - ret: TResult[DataBuffer] ) = # return ok(DataBuffer.new()) - discard + 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 + + print "thrbackend: putTask: fire", ret[].signal.fireSync().get() + +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, tds[].backend, bkey) proc putTask*( ret: TResult[void], @@ -129,8 +146,6 @@ proc putTask*( print "thrbackend: putTask: fire", ret[].signal.fireSync().get() -import os - proc put*( ret: TResult[void], tds: ThreadDatastorePtr, @@ -138,16 +153,12 @@ proc put*( data: seq[byte] ): TResult[void] = echo "thrfrontend:put: " - let bkey = StringBuffer.new(key.id()) let bval = DataBuffer.new(data) print "bkey: ", bkey print "bval: ", bval tds[].tp.spawn putTask(ret, tds[].backend, bkey, bval) - os.sleep(500) - print "res:bkey: ", bkey - print "res:bval: ", bval proc createThreadDatastore*( ret: var TResult[ThreadDatastorePtr], diff --git a/tests/datastore/testsharedds.nim b/tests/datastore/testsharedds.nim index 85fda1f..2010744 100644 --- a/tests/datastore/testsharedds.nim +++ b/tests/datastore/testsharedds.nim @@ -32,6 +32,14 @@ suite "Test Basic SharedDatastore": let res1 = await sds.put(key1, "value for 1".toBytes()) echo "res1: ", res1.repr + echo "\n\n=== get ===" + let res2 = await sds.get(key1) + check res2.get() == "hello world!".toBytes() + var val = "" + for c in res2.get(): + val &= char(c) + echo "res2: ", $val + # suite "Test Basic FSDatastore": # let # path = currentSourcePath() # get this file's name