verifying types

This commit is contained in:
Jaremy Creechley 2023-09-13 14:13:06 -07:00
parent cf3f1defd6
commit 7f921901d7
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
5 changed files with 31 additions and 30 deletions

View File

@ -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]

View File

@ -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)

View File

@ -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*(

View File

@ -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")

View File

@ -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