more changes

This commit is contained in:
Jaremy Creechley 2023-08-24 18:48:56 -07:00 committed by Dmitriy Ryajov
parent ec4b442125
commit 368c25172e
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
2 changed files with 22 additions and 21 deletions

View File

@ -75,16 +75,17 @@ method close*(
# TODO: how to handle failed close?
return success()
func new*[S: ref Datastore](
T: typedesc[SharedDatastore],
func newSharedDataStore*(
# T: typedesc[SharedDatastore],
backend: ThreadBackend,
): ?!SharedDatastore =
var
self = SharedDatastore()
res = TResult[ThreadDatastore].new()
res = newThreadResult(ThreadDatastore)
res[].signal = newSignal()
self.tds = ThreadDatastore.new(backend, res)
res.createThreadDatastore(backend)
await wait(res[].signal)
success self

View File

@ -26,8 +26,8 @@ type
ThreadResult*[T: DataBuffer | void] = object
state*: ThreadResultKind
signal*: ThreadSignalPtr
val*: T
err*: CatchableErrorBuffer
value*: T
error*: CatchableErrorBuffer
TResult*[T] = UniquePtr[ThreadResult[T]]
@ -45,20 +45,19 @@ type
of SQliteBackend:
discard
ThreadDatastore* = object
taskpool: Taskpool
ThreadDatastore = object
tp: Taskpool
backendDatastore: Datastore
ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
proc new*[T](tp: typedesc[TResult[T]]): TResult[T] =
proc newThreadResult*[T](tp: typedesc[TResult[T]]): TResult[T] =
newUniquePtr(ThreadResult[T])
proc startupDatastore(
signal: ThreadSignalPtr,
backend: ThreadBackend,
ret: TResult[ThreadDatastorePtr],
): bool =
backend: ThreadBackend,
) =
## starts up a FS instance on a give thread
case backend.kind:
of FSBackend:
@ -72,14 +71,14 @@ proc startupDatastore(
let tds = newSharedPtr(ThreadDatastore)
tds[].backendDatastore = ds.get()
ret[].val = tds
ret[].value = tds
ret[].state = Success
else:
ret[].state = Error
else:
discard
ret[].signal.fireSync().get()
discard ret[].signal.fireSync().get()
proc getTask*(
self: ThreadDatastorePtr,
@ -107,17 +106,18 @@ proc putTask*(
# except Exception as exc:
# return TResult[void].new()
func new*(
T: typedesc[ThreadDatastore],
signal: ThreadSignalPtr,
func createThreadDatastore*(
ret: TResult[ThreadDatastorePtr],
backend: ThreadBackend,
ret: TResult[ThreadDatastore]
) =
var self = T()
self.tp = Taskpool.new(num_threads = 1) ##\
try:
ret[].value[].tp = Taskpool.new(num_threads = 1) ##\
## Default to one thread, multiple threads \
## will require more work
ret[].value[].tp.spawn startupDatastore(ret, backend)
let pending = self.tp.spawn startupDatastore(signal, backend)
except Exception as exc:
ret[].state = Error
ret[].error = exc.toBuffer()