mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-07 16:13:07 +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/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"
|
||||||
|
|||||||
@ -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()
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user