From 7f921901d7ffcbab4ff5c6f7f22eaa2fd5e88f03 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Wed, 13 Sep 2023 14:13:06 -0700 Subject: [PATCH] verifying types --- datastore/memoryds.nim | 2 +- datastore/query.nim | 4 ++-- datastore/threadproxyds.nim | 6 ++--- datastore/threads/databuffer.nim | 15 ++++++++----- datastore/threads/threadbackend.nim | 34 ++++++++++++++--------------- 5 files changed, 31 insertions(+), 30 deletions(-) diff --git a/datastore/memoryds.nim b/datastore/memoryds.nim index b76fcac..08ad853 100644 --- a/datastore/memoryds.nim +++ b/datastore/memoryds.nim @@ -112,7 +112,7 @@ method query*( iter.finished = true return success (Key.none, EmptyBytes) - let key = kb.toKey().expect("should not fail") + let key = kb.toKey() var ds: ValueBuffer if query.value: ds = self.store[kb] diff --git a/datastore/query.nim b/datastore/query.nim index 7f4555f..b5f03ab 100644 --- a/datastore/query.nim +++ b/datastore/query.nim @@ -116,7 +116,7 @@ proc toBuffer*(q: Query): QueryBuffer = proc toQuery*(qb: QueryBuffer): Query = ## convert QueryBuffer to regular Query Query( - key: qb.key.toKey().expect("key expected"), + key: qb.key.toKey(), value: qb.value, limit: qb.limit, offset: qb.offset, @@ -138,7 +138,7 @@ proc toQueryResponse*(qb: QueryResponseBuffer): QueryResponse = ## convert QueryReponseBuffer to regular QueryResponse let key = if qb.key.isNil: none(Key) - else: some qb.key.toKey().expect("key response should work") + else: some qb.key.toKey() let data = if qb.data.isNil: EmptyBytes else: qb.data.toSeq(byte) diff --git a/datastore/threadproxyds.nim b/datastore/threadproxyds.nim index 1ceb521..f82d0a2 100644 --- a/datastore/threadproxyds.nim +++ b/datastore/threadproxyds.nim @@ -87,13 +87,13 @@ method put*( data: seq[byte] ): Future[?!void] {.async.} = - echo "put new request thr: ", $getThreadId() + echoed "put new request thr: ", $getThreadId() var ret = await newThreadResult(void) try: put(ret, self.tds, key, data) echo "\n" - echo "wait put thr: ", $getThreadId() + echoed "wait put thr: ", $getThreadId() echo "\n" await sleepAsync(400.milliseconds) await wait(ret) @@ -104,7 +104,7 @@ method put*( finally: echo "\n" await sleepAsync(400.milliseconds) - echo "PUT RELEASE" + echoed "PUT RELEASE" ret.release() method put*( diff --git a/datastore/threads/databuffer.nim b/datastore/threads/databuffer.nim index 3002f46..d2d493c 100644 --- a/datastore/threads/databuffer.nim +++ b/datastore/threads/databuffer.nim @@ -42,20 +42,21 @@ proc `==`*(a, b: DataBuffer): bool = elif a[].buf == b[].buf: return true else: a.hash() == b.hash() -proc new*(tp: typedesc[DataBuffer], size: int = 0): DataBuffer = +proc new*[D: DataBuffer](tp: typedesc[D], size: int = 0): D = ## allocate new buffer with given size result = newSharedPtr(DataBufferHolder( buf: cast[typeof(result[].buf)](allocShared0(size)), size: size, )) echoed "DataBuffer:new: ", result.unsafeRawPtr().repr, + " tp ", $(typeof(D)), " @ ", result[].buf.pointer.repr, " -> ", result.toString().repr -proc new*[T: byte | char](tp: typedesc[DataBuffer], data: openArray[T]): DataBuffer = +proc new*[T: byte | char; D: DataBuffer](tp: typedesc[D], data: openArray[T]): D = ## allocate new buffer and copies indata from openArray ## - result = DataBuffer.new(data.len) + result = D.new(data.len) if data.len() > 0: copyMem(result[].buf, unsafeAddr data[0], data.len) @@ -85,6 +86,8 @@ import ../key import stew/results proc new*(tp: typedesc[KeyBuffer], key: Key): KeyBuffer = - KeyBuffer.new(key.id()) -proc toKey*(kb: KeyBuffer): Result[Key, ref CatchableError] = - Key.init(kb.toString()) + result = KeyBuffer.new(key.id()) + echoed "KeyBuffer:new: ", $result +proc toKey*(kb: KeyBuffer): Key = + let res = Key.init(kb.toString()) + res.expect("should always be valid") diff --git a/datastore/threads/threadbackend.nim b/datastore/threads/threadbackend.nim index ea99bc6..4db343c 100644 --- a/datastore/threads/threadbackend.nim +++ b/datastore/threads/threadbackend.nim @@ -72,8 +72,8 @@ proc hasTask*( tds: ThreadDatastorePtr, kb: KeyBuffer, ) = - without key =? kb.toKey(), err: - ret.failure(err) + + let key = kb.toKey() try: let res = waitFor tds[].ds.has(key) @@ -90,7 +90,7 @@ proc has*( tds: ThreadDatastorePtr, key: Key, ) = - let bkey = StringBuffer.new(key.id()) + let bkey = KeyBuffer.new(key) tds[].tp.spawn hasTask(ret, tds, bkey) proc getTask*( @@ -98,8 +98,7 @@ proc getTask*( tds: ThreadDatastorePtr, kb: KeyBuffer, ) = - without key =? kb.toKey(), err: - ret.failure(err) + let key = kb.toKey() try: let res = waitFor tds[].ds.get(key) if res.isErr: @@ -117,7 +116,7 @@ proc get*( tds: ThreadDatastorePtr, key: Key, ) = - let bkey = StringBuffer.new(key.id()) + let bkey = KeyBuffer.new(key) tds[].tp.spawn getTask(ret, tds, bkey) import std/os @@ -131,12 +130,12 @@ proc putTask*( os.sleep(400) var ret = ret - echo "putTask: ", $getThreadId() - echo "putTask:kb: ", kb.toString - echo "putTask:db: ", db.toString + echo "\n" + echoed "putTask: ", $getThreadId() + echoed "putTask:kb: ", kb.toString + echoed "putTask:db: ", db.toString - without key =? kb.toKey(), err: - ret.failure(err) + let key = kb.toKey() let data = db.toSeq(byte) let res = (waitFor tds[].ds.put(key, data)).catch @@ -148,7 +147,7 @@ proc putTask*( discard ret.fireSync() ret.release() - echo "putTask: FINISH\n" + echoed "putTask: FINISH\n" proc put*( ret: TResult[void], @@ -156,11 +155,11 @@ proc put*( key: Key, data: seq[byte] ) = - echo "put request args: ", $getThreadId() - let bkey = StringBuffer.new(key.id()) + echoed "put request args: ", $getThreadId() + let bkey = KeyBuffer.new(key) let bval = DataBuffer.new(data) - echo "spawn put request: ", $getThreadId() + echoed "spawn put request: ", $getThreadId() tds[].tp.spawn putTask(ret, tds, bkey, bval) @@ -170,8 +169,7 @@ proc deleteTask*( kb: KeyBuffer, ) = - without key =? kb.toKey(), err: - ret.failure(err) + let key = kb.toKey() let res = (waitFor tds[].ds.delete(key)).catch # print "thrbackend: putTask: fire", ret[].signal.fireSync().get() @@ -189,7 +187,7 @@ proc delete*( tds: ThreadDatastorePtr, key: Key, ) = - let bkey = StringBuffer.new(key.id()) + let bkey = KeyBuffer.new(key) tds[].tp.spawn deleteTask(ret, tds, bkey) # import os