adding sharedds get

This commit is contained in:
Jaremy Creechley 2023-08-24 22:14:21 -07:00 committed by Dmitriy Ryajov
parent f66531de06
commit 0b2e016883
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
3 changed files with 41 additions and 11 deletions

View File

@ -47,7 +47,18 @@ method get*(
self: SharedDatastore,
key: Key
): Future[?!seq[byte]] {.async.} =
return success(newSeq[byte]())
var res = newThreadResult(DataBuffer)
res[].signal = ThreadSignalPtr.new().valueOr:
return failure newException(DatastoreError, "error creating signal")
get(res, self.tds, key)
await wait(res[].signal)
res[].signal.close()
echo "\nSharedDataStore:put:value: ", res[].repr
let data = res[].value.toSeq(byte)
return success(data)
method put*(
self: SharedDatastore,

View File

@ -98,7 +98,6 @@ proc startupDatastore(
ret[].state = Success
else:
ret[].state = Error
# ret[].value[].backendDatastore = ds.get()
ret[].state = Success
of TestBackend:
echo "startupDatastore: TestBackend"
@ -110,12 +109,30 @@ proc startupDatastore(
echo "startupDatastore: signal", ret[].signal.fireSync().get()
proc getTask*(
self: ThreadDatastorePtr,
ret: TResult[DataBuffer],
backend: ThreadBackendKind,
key: KeyBuffer,
ret: TResult[DataBuffer]
) =
# return ok(DataBuffer.new())
discard
print "\nthrbackend: getTask: ", ret[]
print "\nthrbackend: getTask:key: ", key
let data = DataBuffer.new("hello world!")
print "\nthrbackend: getTask:data: ", data
ret[].state = Success
ret[].value = data
print "thrbackend: putTask: fire", ret[].signal.fireSync().get()
proc get*(
ret: TResult[DataBuffer],
tds: ThreadDatastorePtr,
key: Key,
) =
echo "thrfrontend:put: "
let bkey = StringBuffer.new(key.id())
print "bkey: ", bkey
tds[].tp.spawn getTask(ret, tds[].backend, bkey)
proc putTask*(
ret: TResult[void],
@ -129,8 +146,6 @@ proc putTask*(
print "thrbackend: putTask: fire", ret[].signal.fireSync().get()
import os
proc put*(
ret: TResult[void],
tds: ThreadDatastorePtr,
@ -138,16 +153,12 @@ proc put*(
data: seq[byte]
): TResult[void] =
echo "thrfrontend:put: "
let bkey = StringBuffer.new(key.id())
let bval = DataBuffer.new(data)
print "bkey: ", bkey
print "bval: ", bval
tds[].tp.spawn putTask(ret, tds[].backend, bkey, bval)
os.sleep(500)
print "res:bkey: ", bkey
print "res:bval: ", bval
proc createThreadDatastore*(
ret: var TResult[ThreadDatastorePtr],

View File

@ -32,6 +32,14 @@ suite "Test Basic SharedDatastore":
let res1 = await sds.put(key1, "value for 1".toBytes())
echo "res1: ", res1.repr
echo "\n\n=== get ==="
let res2 = await sds.get(key1)
check res2.get() == "hello world!".toBytes()
var val = ""
for c in res2.get():
val &= char(c)
echo "res2: ", $val
# suite "Test Basic FSDatastore":
# let
# path = currentSourcePath() # get this file's name