switching up

This commit is contained in:
Jaremy Creechley 2023-08-25 14:34:11 -07:00
parent ef402c4276
commit 73899e7fcf
No known key found for this signature in database
GPG Key ID: 4E66FB67B21D3300
3 changed files with 23 additions and 12 deletions

View File

@ -6,6 +6,7 @@ import pkg/questionable
import pkg/questionable/results
import pkg/upraises
import pkg/taskpools
import pkg/stew/results
import ./key
import ./query
@ -48,9 +49,8 @@ method get*(
key: Key
): Future[?!seq[byte]] {.async.} =
var res = newThreadResult(DataBuffer)
res[].signal = ThreadSignalPtr.new().valueOr:
return failure newException(DatastoreError, "error creating signal")
var res = ?newThreadResult(DataBuffer)
echo "res: ", res
get(res, self.tds, key)
await wait(res[].signal)
@ -66,18 +66,18 @@ method put*(
data: seq[byte]
): Future[?!void] {.async.} =
var res = newThreadResult(void)
res[].signal = ThreadSignalPtr.new().valueOr:
return failure newException(DatastoreError, "error creating signal")
var res = ?newThreadResult(void)
echo "res: ", res
put(res, self.tds, key, data)
await wait(res[].signal)
echo "closing signal"
res[].signal.close()
echo "\nSharedDataStore:put:value: ", res[].repr
return success()
method put*(
self: SharedDatastore,
batch: seq[BatchEntry]
@ -98,7 +98,7 @@ proc newSharedDataStore*(
var
self = SharedDatastore()
res = newThreadResult(ThreadDatastorePtr)
res = ?newThreadResult(ThreadDatastorePtr)
res[].value = newSharedPtr(ThreadDatastore)
res[].signal = ThreadSignalPtr.new().valueOr:

View File

@ -68,8 +68,14 @@ var
fsDatastore {.threadvar.}: FSDatastore ##\
## TODO: figure out a better way to capture this?
proc newThreadResult*[T](tp: typedesc[T]): TResult[T] =
newSharedPtr(ThreadResult[T])
proc newThreadResult*[T](tp: typedesc[T]): Result[TResult[T], ref CatchableError] =
let res = newSharedPtr(ThreadResult[T])
let signal = ThreadSignalPtr.new()
if signal.isErr:
return err((ref CatchableError)(msg: signal.error()))
else:
res[].signal = signal.get()
ok res
proc startupDatastore(
ret: TResult[ThreadDatastorePtr],
@ -134,6 +140,8 @@ proc get*(
tds[].tp.spawn getTask(ret, tds[].backend, bkey)
import os
proc putTask*(
ret: TResult[void],
backend: ThreadBackendKind,
@ -144,6 +152,7 @@ proc putTask*(
print "\nthrbackend: putTask:key: ", key
print "\nthrbackend: putTask:data: ", data
os.sleep(200)
print "thrbackend: putTask: fire", ret[].signal.fireSync().get()
proc put*(
@ -151,7 +160,7 @@ proc put*(
tds: ThreadDatastorePtr,
key: Key,
data: seq[byte]
): TResult[void] =
) =
echo "thrfrontend:put: "
let bkey = StringBuffer.new(key.id())
let bval = DataBuffer.new(data)

View File

@ -31,7 +31,9 @@ suite "Test Basic SharedDatastore":
echo "\n\n=== put ==="
let key1 = Key.init("/a").tryGet
let res1 = await sds.put(key1, "value for 1".toBytes())
# let res1 = await sds.put(key1, "value for 1".toBytes())
let res1 = sds.put(key1, "value for 1".toBytes())
res1.cancel()
echo "res1: ", res1.repr
echo "\n\n=== get ==="