mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-05-17 07:09:58 +00:00
split out sig acquire
This commit is contained in:
parent
9bca62b235
commit
ae91c6a07d
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user