split out sig acquire

This commit is contained in:
Jaremy Creechley 2023-09-14 18:18:14 -07:00
parent 9bca62b235
commit ae91c6a07d
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
2 changed files with 35 additions and 20 deletions

View File

@ -26,11 +26,13 @@ method has*(
key: Key key: Key
): Future[?!bool] {.async.} = ): Future[?!bool] {.async.} =
var ret = await newThreadResult(bool) var ret = newThreadResult(bool)
let sig = SharedSignal.new(0)
try: try:
has(ret, self.tds, key) await sig.acquireSig()
await wait(ret) sig.has(ret, self.tds, key)
await sig.wait()
return ret.convert(bool) return ret.convert(bool)
finally: finally:
ret.release() ret.release()
@ -40,11 +42,13 @@ method delete*(
key: Key key: Key
): Future[?!void] {.async.} = ): Future[?!void] {.async.} =
var ret = await newThreadResult(void) let sig = SharedSignal.new(0)
var ret = newThreadResult(void)
try: try:
delete(ret, self.tds, key) await sig.acquireSig()
await wait(ret) sig.delete(ret, self.tds, key)
await sig.wait()
finally: finally:
ret.release() ret.release()
@ -71,11 +75,12 @@ method get*(
## probably be switched to use a single ThreadSignal ## probably be switched to use a single ThreadSignal
## for the entire batch ## for the entire batch
var ret = await newThreadResult(ValueBuffer) let sig = SharedSignal.new(0)
var ret = newThreadResult(ValueBuffer)
try: try:
get(ret, self.tds, key) sig.get(ret, self.tds, key)
await wait(ret) await sig.wait()
finally: finally:
ret.release() ret.release()
@ -148,7 +153,9 @@ method query*(
query: Query query: Query
): Future[?!QueryIter] {.async.} = ): Future[?!QueryIter] {.async.} =
var ret = await newThreadResult(QueryResponseBuffer) let sig = SharedSignal.new(0)
await sig.acquireSig()
var ret = newThreadResult(QueryResponseBuffer)
# echo "\n\n=== Query Start === " # echo "\n\n=== Query Start === "
@ -169,8 +176,8 @@ method query*(
iterWrapper.finished = iter[].it.finished iterWrapper.finished = iter[].it.finished
if not iter[].it.finished: if not iter[].it.finished:
iterWrapper.readyForNext = false iterWrapper.readyForNext = false
query(ret, self.tds, iter) sig.query(ret, self.tds, iter)
await wait(ret) await sig.wait()
iterWrapper.readyForNext = true iterWrapper.readyForNext = true
# echo "" # echo ""
# print "query:post: ", ret[].results # print "query:post: ", ret[].results

View File

@ -68,6 +68,7 @@ type
QueryIterPtr* = SharedPtr[QueryIterStore] QueryIterPtr* = SharedPtr[QueryIterStore]
proc hasTask*( proc hasTask*(
sig: SharedSignal,
ret: TResult[bool], ret: TResult[bool],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
kb: KeyBuffer, kb: KeyBuffer,
@ -81,19 +82,21 @@ proc hasTask*(
ret.failure(res.error()) ret.failure(res.error())
else: else:
ret.success(res.get()) ret.success(res.get())
discard ret.fireSync() discard sig.fireSync()
except CatchableError as err: except CatchableError as err:
ret.failure(err) ret.failure(err)
proc has*( proc has*(
sig: SharedSignal,
ret: TResult[bool], ret: TResult[bool],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
key: Key, key: Key,
) = ) =
let bkey = KeyBuffer.new(key) let bkey = KeyBuffer.new(key)
tds[].tp.spawn hasTask(ret, tds, bkey) tds[].tp.spawn hasTask(sig, ret, tds, bkey)
proc getTask*( proc getTask*(
sig: SharedSignal,
ret: TResult[DataBuffer], ret: TResult[DataBuffer],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
kb: KeyBuffer, kb: KeyBuffer,
@ -107,17 +110,18 @@ proc getTask*(
let db = DataBuffer.new res.get() let db = DataBuffer.new res.get()
ret.success(db) ret.success(db)
discard ret.fireSync() discard sig.fireSync()
except CatchableError as err: except CatchableError as err:
ret.failure(err) ret.failure(err)
proc get*( proc get*(
sig: SharedSignal,
ret: TResult[DataBuffer], ret: TResult[DataBuffer],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
key: Key, key: Key,
) = ) =
let bkey = KeyBuffer.new(key) let bkey = KeyBuffer.new(key)
tds[].tp.spawn getTask(ret, tds, bkey) tds[].tp.spawn getTask(sig, ret, tds, bkey)
import std/os import std/os
@ -153,6 +157,7 @@ proc putTask*(
proc deleteTask*( proc deleteTask*(
sig: SharedSignal,
ret: TResult[void], ret: TResult[void],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
kb: KeyBuffer, kb: KeyBuffer,
@ -167,21 +172,23 @@ proc deleteTask*(
else: else:
ret.success() ret.success()
discard ret.fireSync() discard sig.fireSync()
# import pretty # import pretty
proc delete*( proc delete*(
sig: SharedSignal,
ret: TResult[void], ret: TResult[void],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
key: Key, key: Key,
) = ) =
let bkey = KeyBuffer.new(key) let bkey = KeyBuffer.new(key)
tds[].tp.spawn deleteTask(ret, tds, bkey) tds[].tp.spawn deleteTask(sig, ret, tds, bkey)
# import os # import os
proc queryTask*( proc queryTask*(
sig: SharedSignal,
ret: TResult[QueryResponseBuffer], ret: TResult[QueryResponseBuffer],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
qiter: QueryIterPtr, qiter: QueryIterPtr,
@ -202,11 +209,12 @@ proc queryTask*(
except Exception as exc: except Exception as exc:
ret.failure(exc) ret.failure(exc)
discard ret.fireSync() discard sig.fireSync()
proc query*( proc query*(
sig: SharedSignal,
ret: TResult[QueryResponseBuffer], ret: TResult[QueryResponseBuffer],
tds: ThreadDatastorePtr, tds: ThreadDatastorePtr,
qiter: QueryIterPtr, qiter: QueryIterPtr,
) = ) =
tds[].tp.spawn queryTask(ret, tds, qiter) tds[].tp.spawn queryTask(sig, ret, tds, qiter)