From f66531de0665095c27682db7f77080f495a220b3 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Thu, 24 Aug 2023 21:55:53 -0700 Subject: [PATCH] passing put args --- datastore/databuffer.nim | 2 +- datastore/sharedds.nim | 14 +++++++++++-- datastore/threadbackend.nim | 34 ++++++++++++++++++++++++++++---- tests/datastore/testsharedds.nim | 11 ++++++++++- 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/datastore/databuffer.nim b/datastore/databuffer.nim index 1367b40..d1e78aa 100644 --- a/datastore/databuffer.nim +++ b/datastore/databuffer.nim @@ -34,7 +34,7 @@ proc `=destroy`*(x: var DataBuffer) = if x.buf != nil and x.cnt != nil: let res = atomicSubFetch(x.cnt, 1, ATOMIC_ACQUIRE) if res == 0: - when isMainModule: + when isMainModule or true: echo "buffer: FREE: ", repr x.buf.pointer, " ", x.cnt[] deallocShared(x.buf) deallocShared(x.cnt) diff --git a/datastore/sharedds.nim b/datastore/sharedds.nim index eb4eeea..e071d86 100644 --- a/datastore/sharedds.nim +++ b/datastore/sharedds.nim @@ -13,6 +13,8 @@ import ./datastore import ./threadbackend import threading/smartptrs +import pretty + export key, query, ThreadBackend push: {.upraises: [].} @@ -53,10 +55,16 @@ method put*( data: seq[byte] ): Future[?!void] {.async.} = - let signal = ThreadSignalPtr.new().valueOr: + var res = newThreadResult(void) + res[].signal = ThreadSignalPtr.new().valueOr: return failure newException(DatastoreError, "error creating signal") - await wait(signal) + put(res, self.tds, key, data) + await wait(res[].signal) + res[].signal.close() + + echo "\nSharedDataStore:put:value: ", res[].repr + return success() method put*( @@ -93,4 +101,6 @@ proc newSharedDataStore*( echo "\nnewSharedDataStore:state: ", res[].state.repr echo "\nnewSharedDataStore:value: ", res[].value[].backend.repr + self.tds = res[].value + success self diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index acc36c5..7fc3841 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -12,6 +12,8 @@ import threading/smartptrs import fsds +import pretty + export key, query, smartptrs, databuffer push: {.upraises: [].} @@ -52,7 +54,7 @@ type discard ThreadDatastore* = object - tp: Taskpool + tp*: Taskpool backend*: ThreadBackendKind ThreadDatastorePtr* = SharedPtr[ThreadDatastore] @@ -116,12 +118,36 @@ proc getTask*( discard proc putTask*( - self: ThreadDatastorePtr, + ret: TResult[void], + backend: ThreadBackendKind, key: KeyBuffer, data: DataBuffer, - ret: TResult[void] ) = - discard + print "\nthrbackend: putTask: ", ret[] + print "\nthrbackend: putTask:key: ", key + print "\nthrbackend: putTask:data: ", data + + print "thrbackend: putTask: fire", ret[].signal.fireSync().get() + +import os + +proc put*( + ret: TResult[void], + tds: ThreadDatastorePtr, + key: Key, + 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 285dbf5..85fda1f 100644 --- a/tests/datastore/testsharedds.nim +++ b/tests/datastore/testsharedds.nim @@ -17,12 +17,21 @@ suite "Test Basic SharedDatastore": test "check create": + var sds: SharedDatastore + let backend = ThreadBackend( kind: TestBackend, ) - let sds = await newSharedDataStore(backend) + let res = await newSharedDataStore(backend) + check res.isOk() + sds = res.get() # echo "sds: ", repr sds + echo "\n\n=== put ===" + let key1 = Key.init("/a").tryGet + let res1 = await sds.put(key1, "value for 1".toBytes()) + echo "res1: ", res1.repr + # suite "Test Basic FSDatastore": # let # path = currentSourcePath() # get this file's name