From 73899e7fcfa2d12a70d514cea3a90bef86b77f9f Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Fri, 25 Aug 2023 14:34:11 -0700 Subject: [PATCH] switching up --- datastore/sharedds.nim | 16 ++++++++-------- datastore/threadbackend.nim | 15 ++++++++++++--- tests/datastore/testsharedds.nim | 4 +++- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/datastore/sharedds.nim b/datastore/sharedds.nim index a48ad5d..8cc0d0a 100644 --- a/datastore/sharedds.nim +++ b/datastore/sharedds.nim @@ -6,6 +6,7 @@ import pkg/questionable import pkg/questionable/results import pkg/upraises import pkg/taskpools +import pkg/stew/results import ./key import ./query @@ -48,9 +49,8 @@ method get*( key: Key ): Future[?!seq[byte]] {.async.} = - var res = newThreadResult(DataBuffer) - res[].signal = ThreadSignalPtr.new().valueOr: - return failure newException(DatastoreError, "error creating signal") + var res = ?newThreadResult(DataBuffer) + echo "res: ", res get(res, self.tds, key) await wait(res[].signal) @@ -66,18 +66,18 @@ method put*( data: seq[byte] ): Future[?!void] {.async.} = - var res = newThreadResult(void) - res[].signal = ThreadSignalPtr.new().valueOr: - return failure newException(DatastoreError, "error creating signal") + var res = ?newThreadResult(void) + echo "res: ", res put(res, self.tds, key, data) await wait(res[].signal) + echo "closing signal" res[].signal.close() echo "\nSharedDataStore:put:value: ", res[].repr - return success() + method put*( self: SharedDatastore, batch: seq[BatchEntry] @@ -98,7 +98,7 @@ proc newSharedDataStore*( var self = SharedDatastore() - res = newThreadResult(ThreadDatastorePtr) + res = ?newThreadResult(ThreadDatastorePtr) res[].value = newSharedPtr(ThreadDatastore) res[].signal = ThreadSignalPtr.new().valueOr: diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index 2332764..acc2470 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -68,8 +68,14 @@ var fsDatastore {.threadvar.}: FSDatastore ##\ ## TODO: figure out a better way to capture this? -proc newThreadResult*[T](tp: typedesc[T]): TResult[T] = - newSharedPtr(ThreadResult[T]) +proc newThreadResult*[T](tp: typedesc[T]): Result[TResult[T], ref CatchableError] = + let res = newSharedPtr(ThreadResult[T]) + let signal = ThreadSignalPtr.new() + if signal.isErr: + return err((ref CatchableError)(msg: signal.error())) + else: + res[].signal = signal.get() + ok res proc startupDatastore( ret: TResult[ThreadDatastorePtr], @@ -134,6 +140,8 @@ proc get*( tds[].tp.spawn getTask(ret, tds[].backend, bkey) +import os + proc putTask*( ret: TResult[void], backend: ThreadBackendKind, @@ -144,6 +152,7 @@ proc putTask*( print "\nthrbackend: putTask:key: ", key print "\nthrbackend: putTask:data: ", data + os.sleep(200) print "thrbackend: putTask: fire", ret[].signal.fireSync().get() proc put*( @@ -151,7 +160,7 @@ proc put*( tds: ThreadDatastorePtr, key: Key, data: seq[byte] -): TResult[void] = +) = echo "thrfrontend:put: " let bkey = StringBuffer.new(key.id()) let bval = DataBuffer.new(data) diff --git a/tests/datastore/testsharedds.nim b/tests/datastore/testsharedds.nim index 4974f6d..1f87056 100644 --- a/tests/datastore/testsharedds.nim +++ b/tests/datastore/testsharedds.nim @@ -31,7 +31,9 @@ suite "Test Basic SharedDatastore": echo "\n\n=== put ===" let key1 = Key.init("/a").tryGet - let res1 = await sds.put(key1, "value for 1".toBytes()) + # let res1 = await sds.put(key1, "value for 1".toBytes()) + let res1 = sds.put(key1, "value for 1".toBytes()) + res1.cancel() echo "res1: ", res1.repr echo "\n\n=== get ==="