From eb435971f095972269c7a0fb94368162896bfdf1 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Tue, 29 Aug 2023 12:55:38 -0700 Subject: [PATCH] impl delete --- datastore/threadbackend.nim | 28 +++++++++++++++++++++++++++- datastore/threadproxyds.nim | 15 ++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/datastore/threadbackend.nim b/datastore/threadbackend.nim index d0fef14..9eb528b 100644 --- a/datastore/threadbackend.nim +++ b/datastore/threadbackend.nim @@ -81,7 +81,6 @@ proc get*( let bkey = StringBuffer.new(key.id()) tds[].tp.spawn getTask(ret, tds, bkey) -import os proc putTask*( ret: TResult[void], @@ -118,3 +117,30 @@ proc put*( print "bval: ", bval tds[].tp.spawn putTask(ret, tds, bkey, bval) + +proc deleteTask*( + ret: TResult[void], + tds: ThreadDatastorePtr, + kb: KeyBuffer, +) = + + without key =? kb.toKey(), err: + ret[].state = Error + + let res = (waitFor tds[].ds.delete(key)).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 delete*( + ret: TResult[void], + tds: ThreadDatastorePtr, + key: Key, +) = + let bkey = StringBuffer.new(key.id()) + tds[].tp.spawn deleteTask(ret, tds, bkey) diff --git a/datastore/threadproxyds.nim b/datastore/threadproxyds.nim index 111008f..7ddbd8a 100644 --- a/datastore/threadproxyds.nim +++ b/datastore/threadproxyds.nim @@ -23,7 +23,6 @@ push: {.upraises: [].} type ThreadProxyDatastore* = ref object of Datastore - # stores*: Table[Key, ThreadProxyDatastore] tds: ThreadDatastorePtr method has*( @@ -36,8 +35,22 @@ method delete*( self: ThreadProxyDatastore, key: Key ): Future[?!void] {.async.} = + + without ret =? newThreadResult(void), err: + return failure(err) + + echo "res: ", ret + try: + delete(ret, self.tds, key) + await wait(ret[].signal) + finally: + echo "closing signal" + ret[].signal.close() + + echo "\nSharedDataStore:put:value: ", ret[].repr return success() + method delete*( self: ThreadProxyDatastore, keys: seq[Key]