mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-03 14:13:09 +00:00
rework ds
This commit is contained in:
parent
d60bd35d73
commit
88e26f94ab
@ -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"
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user