rework ds

This commit is contained in:
Jaremy Creechley 2023-08-28 18:00:42 -07:00 committed by Dmitriy Ryajov
parent d60bd35d73
commit 88e26f94ab
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4
2 changed files with 8 additions and 45 deletions

View File

@ -7,12 +7,13 @@ import pkg/questionable/results
import pkg/upraises
import pkg/taskpools
import pkg/stew/results
import pkg/threading/smartptrs
import ./key
import ./query
import ./datastore
import ./threadbackend
import threading/smartptrs
import ./fsds
import pretty
@ -98,14 +99,14 @@ method close*(
without res =? self.tds[].ds.close(), err:
result = failure(err)
# GC_unref(self.tds[].ds) ## TODO: is this needed?
if self.tds[].tp != nil:
## this can block... how to handle? maybe just leak?
self.tds[].tp.shutdown()
proc newSharedDataStore*(
# T: typedesc[SharedDatastore],
backend: ThreadBackend,
proc newSharedDataStore*[T: Datastore](
ds: Datastore,
): Future[?!SharedDatastore] {.async.} =
var
@ -113,11 +114,12 @@ proc newSharedDataStore*(
without res =? newThreadResult(ThreadDatastorePtr), err:
return failure(err)
try:
res[].value = newSharedPtr(ThreadDatastore)
echo "\nnewDataStore: threadId:", getThreadId()
res.createThreadDatastore(backend)
# GC_ref(ds)
res[].value[].ds = ds
await wait(res[].signal)
finally:
echo "closing signal"

View File

@ -10,8 +10,6 @@ import ./datastore
import ./databuffer
import threading/smartptrs
import fsds
import pretty
export key, query, smartptrs, databuffer
@ -131,8 +129,6 @@ proc put*(
tds[].tp.spawn putTask(ret, tds[].backend, bkey, bval)
proc startupDatastore(ret: TResult[ThreadDatastorePtr], backend: ThreadBackend,) {.raises: [].}
proc createThreadDatastore*(
ret: TResult[ThreadDatastorePtr],
backend: ThreadBackend,
@ -150,38 +146,3 @@ proc createThreadDatastore*(
ret[].error = exc.toBuffer()
discard
proc startupDatastore(
ret: TResult[ThreadDatastorePtr],
backend: ThreadBackend,
) {.raises: [].} =
## starts up a FS instance on a give thread
echo "\n"
echo "\nstartupDatastore: threadId:", getThreadId()
print "\nstartupDatastore: backend:\n", backend
echo ""
case backend.kind:
of FSBackend:
let ds = FSDatastore.new(
root = backend.root.toString(),
depth = backend.depth,
caseSensitive = backend.caseSensitive,
ignoreProtected = backend.ignoreProtected
)
if ds.isOk:
let ds = ds.get()
GC_ref(ds)
ret[].value[].ds = ds
ret[].state = Success
else:
ret[].state = Error
ret[].state = Success
of TestBackend:
echo "startupDatastore: TestBackend"
ret[].value[].backend = TestBackend
ret[].state = Success
else:
discard
# print "startupDatastore: signal", ret[].signal.fireSync()