passing put args

This commit is contained in:
Jaremy Creechley 2023-08-24 21:55:53 -07:00 committed by Dmitriy Ryajov
parent 3da60e021b
commit f66531de06
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
4 changed files with 53 additions and 8 deletions

View File

@ -34,7 +34,7 @@ proc `=destroy`*(x: var DataBuffer) =
if x.buf != nil and x.cnt != nil:
let res = atomicSubFetch(x.cnt, 1, ATOMIC_ACQUIRE)
if res == 0:
when isMainModule:
when isMainModule or true:
echo "buffer: FREE: ", repr x.buf.pointer, " ", x.cnt[]
deallocShared(x.buf)
deallocShared(x.cnt)

View File

@ -13,6 +13,8 @@ import ./datastore
import ./threadbackend
import threading/smartptrs
import pretty
export key, query, ThreadBackend
push: {.upraises: [].}
@ -53,10 +55,16 @@ method put*(
data: seq[byte]
): Future[?!void] {.async.} =
let signal = ThreadSignalPtr.new().valueOr:
var res = newThreadResult(void)
res[].signal = ThreadSignalPtr.new().valueOr:
return failure newException(DatastoreError, "error creating signal")
await wait(signal)
put(res, self.tds, key, data)
await wait(res[].signal)
res[].signal.close()
echo "\nSharedDataStore:put:value: ", res[].repr
return success()
method put*(
@ -93,4 +101,6 @@ proc newSharedDataStore*(
echo "\nnewSharedDataStore:state: ", res[].state.repr
echo "\nnewSharedDataStore:value: ", res[].value[].backend.repr
self.tds = res[].value
success self

View File

@ -12,6 +12,8 @@ import threading/smartptrs
import fsds
import pretty
export key, query, smartptrs, databuffer
push: {.upraises: [].}
@ -52,7 +54,7 @@ type
discard
ThreadDatastore* = object
tp: Taskpool
tp*: Taskpool
backend*: ThreadBackendKind
ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
@ -116,12 +118,36 @@ proc getTask*(
discard
proc putTask*(
self: ThreadDatastorePtr,
ret: TResult[void],
backend: ThreadBackendKind,
key: KeyBuffer,
data: DataBuffer,
ret: TResult[void]
) =
discard
print "\nthrbackend: putTask: ", ret[]
print "\nthrbackend: putTask:key: ", key
print "\nthrbackend: putTask:data: ", data
print "thrbackend: putTask: fire", ret[].signal.fireSync().get()
import os
proc put*(
ret: TResult[void],
tds: ThreadDatastorePtr,
key: Key,
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

@ -17,12 +17,21 @@ suite "Test Basic SharedDatastore":
test "check create":
var sds: SharedDatastore
let backend = ThreadBackend(
kind: TestBackend,
)
let sds = await newSharedDataStore(backend)
let res = await newSharedDataStore(backend)
check res.isOk()
sds = res.get()
# echo "sds: ", repr sds
echo "\n\n=== put ==="
let key1 = Key.init("/a").tryGet
let res1 = await sds.put(key1, "value for 1".toBytes())
echo "res1: ", res1.repr
# suite "Test Basic FSDatastore":
# let
# path = currentSourcePath() # get this file's name