mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-05-28 12:39:26 +00:00
passing put args
This commit is contained in:
parent
790b8449bd
commit
5501126b99
@ -34,7 +34,7 @@ proc `=destroy`*(x: var DataBuffer) =
|
|||||||
if x.buf != nil and x.cnt != nil:
|
if x.buf != nil and x.cnt != nil:
|
||||||
let res = atomicSubFetch(x.cnt, 1, ATOMIC_ACQUIRE)
|
let res = atomicSubFetch(x.cnt, 1, ATOMIC_ACQUIRE)
|
||||||
if res == 0:
|
if res == 0:
|
||||||
when isMainModule:
|
when isMainModule or true:
|
||||||
echo "buffer: FREE: ", repr x.buf.pointer, " ", x.cnt[]
|
echo "buffer: FREE: ", repr x.buf.pointer, " ", x.cnt[]
|
||||||
deallocShared(x.buf)
|
deallocShared(x.buf)
|
||||||
deallocShared(x.cnt)
|
deallocShared(x.cnt)
|
||||||
|
|||||||
@ -13,6 +13,8 @@ import ./datastore
|
|||||||
import ./threadbackend
|
import ./threadbackend
|
||||||
import threading/smartptrs
|
import threading/smartptrs
|
||||||
|
|
||||||
|
import pretty
|
||||||
|
|
||||||
export key, query, ThreadBackend
|
export key, query, ThreadBackend
|
||||||
|
|
||||||
push: {.upraises: [].}
|
push: {.upraises: [].}
|
||||||
@ -53,10 +55,16 @@ method put*(
|
|||||||
data: seq[byte]
|
data: seq[byte]
|
||||||
): Future[?!void] {.async.} =
|
): Future[?!void] {.async.} =
|
||||||
|
|
||||||
let signal = ThreadSignalPtr.new().valueOr:
|
var res = newThreadResult(void)
|
||||||
|
res[].signal = ThreadSignalPtr.new().valueOr:
|
||||||
return failure newException(DatastoreError, "error creating signal")
|
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()
|
return success()
|
||||||
|
|
||||||
method put*(
|
method put*(
|
||||||
@ -93,4 +101,6 @@ proc newSharedDataStore*(
|
|||||||
echo "\nnewSharedDataStore:state: ", res[].state.repr
|
echo "\nnewSharedDataStore:state: ", res[].state.repr
|
||||||
echo "\nnewSharedDataStore:value: ", res[].value[].backend.repr
|
echo "\nnewSharedDataStore:value: ", res[].value[].backend.repr
|
||||||
|
|
||||||
|
self.tds = res[].value
|
||||||
|
|
||||||
success self
|
success self
|
||||||
|
|||||||
@ -12,6 +12,8 @@ import threading/smartptrs
|
|||||||
|
|
||||||
import fsds
|
import fsds
|
||||||
|
|
||||||
|
import pretty
|
||||||
|
|
||||||
export key, query, smartptrs, databuffer
|
export key, query, smartptrs, databuffer
|
||||||
|
|
||||||
push: {.upraises: [].}
|
push: {.upraises: [].}
|
||||||
@ -52,7 +54,7 @@ type
|
|||||||
discard
|
discard
|
||||||
|
|
||||||
ThreadDatastore* = object
|
ThreadDatastore* = object
|
||||||
tp: Taskpool
|
tp*: Taskpool
|
||||||
backend*: ThreadBackendKind
|
backend*: ThreadBackendKind
|
||||||
|
|
||||||
ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
|
ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
|
||||||
@ -116,12 +118,36 @@ proc getTask*(
|
|||||||
discard
|
discard
|
||||||
|
|
||||||
proc putTask*(
|
proc putTask*(
|
||||||
self: ThreadDatastorePtr,
|
ret: TResult[void],
|
||||||
|
backend: ThreadBackendKind,
|
||||||
key: KeyBuffer,
|
key: KeyBuffer,
|
||||||
data: DataBuffer,
|
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*(
|
proc createThreadDatastore*(
|
||||||
ret: var TResult[ThreadDatastorePtr],
|
ret: var TResult[ThreadDatastorePtr],
|
||||||
|
|||||||
@ -17,12 +17,21 @@ suite "Test Basic SharedDatastore":
|
|||||||
|
|
||||||
test "check create":
|
test "check create":
|
||||||
|
|
||||||
|
var sds: SharedDatastore
|
||||||
|
|
||||||
let backend = ThreadBackend(
|
let backend = ThreadBackend(
|
||||||
kind: TestBackend,
|
kind: TestBackend,
|
||||||
)
|
)
|
||||||
let sds = await newSharedDataStore(backend)
|
let res = await newSharedDataStore(backend)
|
||||||
|
check res.isOk()
|
||||||
|
sds = res.get()
|
||||||
# echo "sds: ", repr sds
|
# 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":
|
# suite "Test Basic FSDatastore":
|
||||||
# let
|
# let
|
||||||
# path = currentSourcePath() # get this file's name
|
# path = currentSourcePath() # get this file's name
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user