This commit is contained in:
Jaremy Creechley 2023-08-24 21:07:07 -07:00 committed by Dmitriy Ryajov
parent ab850d4114
commit a3cff9861b
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
2 changed files with 14 additions and 13 deletions

View File

@ -81,7 +81,7 @@ proc newSharedDataStore*(
self = SharedDatastore() self = SharedDatastore()
res = newThreadResult(ThreadDatastorePtr) res = newThreadResult(ThreadDatastorePtr)
res[].value = newUniquePtr(ThreadDatastore) res[].value = newSharedPtr(ThreadDatastore)
res[].signal = ThreadSignalPtr.new().valueOr: res[].signal = ThreadSignalPtr.new().valueOr:
return failure newException(DatastoreError, "error creating signal") return failure newException(DatastoreError, "error creating signal")

View File

@ -32,6 +32,7 @@ type
TResult*[T] = SharedPtr[ThreadResult[T]] TResult*[T] = SharedPtr[ThreadResult[T]]
ThreadBackendKind* {.pure.} = enum ThreadBackendKind* {.pure.} = enum
NoBackend
TestBackend TestBackend
FSBackend FSBackend
SQliteBackend SQliteBackend
@ -47,20 +48,20 @@ type
discard discard
of TestBackend: of TestBackend:
count*: int count*: int
of NoBackend:
discard
ThreadDatastore* = object ThreadDatastore* = object
tp: Taskpool tp: Taskpool
backendDatastore: ThreadBackendKind backendDatastore: ThreadBackendKind
ThreadDatastorePtr* = UniquePtr[ThreadDatastore] ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
Test* = object Test* = object
count*: int count*: ThreadBackendKind
TestPtr* = SharedPtr[Test] TestPtr* = SharedPtr[Test]
var fsBackend {.threadvar.}: FSDatastore
proc newThreadResult*[T](tp: typedesc[T]): TResult[T] = proc newThreadResult*[T](tp: typedesc[T]): TResult[T] =
newSharedPtr(ThreadResult[T]) newSharedPtr(ThreadResult[T])
@ -70,9 +71,6 @@ proc startupDatastore(
count: TestPtr, count: TestPtr,
) {.raises: [].} = ) {.raises: [].} =
## starts up a FS instance on a give thread ## starts up a FS instance on a give thread
var
ret: TResult[ThreadDatastorePtr]
backend: ThreadBackend
echo "\n\nstartupDatastore: ret:\n", ret.repr echo "\n\nstartupDatastore: ret:\n", ret.repr
echo "\nstartupDatastore: backend:\n", backend.repr echo "\nstartupDatastore: backend:\n", backend.repr
@ -88,13 +86,15 @@ proc startupDatastore(
ignoreProtected = backend.ignoreProtected ignoreProtected = backend.ignoreProtected
) )
if ds.isOk: if ds.isOk:
fsBackend = ds.get() # ret[].value[].backendDatastore = ds.get()
ret[].state = Success ret[].state = Success
else: else:
ret[].state = Error ret[].state = Error
ret[].error = newException(DatastoreError, "error creating signal").toBuffer() # ret[].value[].backendDatastore = ds.get()
ret[].state = Success
of TestBackend: of TestBackend:
echo "startupDatastore: TestBackend" echo "startupDatastore: TestBackend"
ret[].value[].backendDatastore = TestBackend
ret[].state = Success ret[].state = Success
else: else:
discard discard
@ -119,16 +119,17 @@ proc putTask*(
discard discard
proc createThreadDatastore*( proc createThreadDatastore*(
ret: TResult[ThreadDatastorePtr], ret: var TResult[ThreadDatastorePtr],
backend: ThreadBackend, backend: ThreadBackend,
) = ) =
try: try:
echo "createThreadDatastore: start" echo "createThreadDatastore: start"
ret[].value[].tp = Taskpool.new(num_threads = 2) ret[].value[].tp = Taskpool.new(num_threads = 2)
echo "\n\ncreateThreadDatastore:tp:\n", ret[].repr # echo "\n\ncreateThreadDatastore:tp:\n", ret[].repr
echo "\n\ncreateThreadDatastore:value:\n", ret[].value.repr
ret[].value[].tp.spawn startupDatastore( ret[].value[].tp.spawn startupDatastore(
ret, backend, newSharedPtr(Test(count: 22))) ret, backend, newSharedPtr(Test(count: FSBackend)))
echo "createThreadDatastore: done" echo "createThreadDatastore: done"
ret[].state = Success ret[].state = Success