mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-04 22:53:08 +00:00
rework ds
This commit is contained in:
parent
cff4540a58
commit
b557d60b6a
@ -93,7 +93,15 @@ method close*(
|
||||
self: SharedDatastore
|
||||
): Future[?!void] {.async.} =
|
||||
# TODO: how to handle failed close?
|
||||
return success()
|
||||
echo "ThreadDatastore: FREE: "
|
||||
result = success()
|
||||
|
||||
without res =? self.tds[].ds.close(), err:
|
||||
result = failure(err)
|
||||
|
||||
if self.tds[].tp != nil:
|
||||
## this can block... how to handle? maybe just leak?
|
||||
self.tds[].tp.shutdown()
|
||||
|
||||
proc newSharedDataStore*(
|
||||
# T: typedesc[SharedDatastore],
|
||||
|
||||
@ -56,6 +56,7 @@ type
|
||||
ThreadDatastore* = object
|
||||
tp*: Taskpool
|
||||
backend*: ThreadBackendKind
|
||||
ds*: Datastore
|
||||
|
||||
ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
|
||||
|
||||
@ -64,10 +65,6 @@ type
|
||||
|
||||
TestPtr* = SharedPtr[Test]
|
||||
|
||||
var
|
||||
fsDatastore {.threadvar.}: FSDatastore ##\
|
||||
## TODO: figure out a better way to capture this?
|
||||
|
||||
proc newThreadResult*[T](
|
||||
tp: typedesc[T]
|
||||
): Result[TResult[T], ref CatchableError] =
|
||||
@ -79,39 +76,6 @@ proc newThreadResult*[T](
|
||||
res[].signal = signal.get()
|
||||
ok res
|
||||
|
||||
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:
|
||||
fsDatastore = ds.get()
|
||||
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()
|
||||
|
||||
proc getTask*(
|
||||
ret: TResult[DataBuffer],
|
||||
backend: ThreadBackendKind,
|
||||
@ -167,6 +131,8 @@ 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,
|
||||
@ -184,3 +150,38 @@ 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