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

View File

@ -10,8 +10,6 @@ import ./datastore
import ./databuffer import ./databuffer
import threading/smartptrs import threading/smartptrs
import fsds
import pretty import pretty
export key, query, smartptrs, databuffer export key, query, smartptrs, databuffer
@ -131,8 +129,6 @@ proc put*(
tds[].tp.spawn putTask(ret, tds[].backend, bkey, bval) tds[].tp.spawn putTask(ret, tds[].backend, bkey, bval)
proc startupDatastore(ret: TResult[ThreadDatastorePtr], backend: ThreadBackend,) {.raises: [].}
proc createThreadDatastore*( proc createThreadDatastore*(
ret: TResult[ThreadDatastorePtr], ret: TResult[ThreadDatastorePtr],
backend: ThreadBackend, backend: ThreadBackend,
@ -150,38 +146,3 @@ proc createThreadDatastore*(
ret[].error = exc.toBuffer() ret[].error = exc.toBuffer()
discard 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()