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
a359edbda9
commit
d60bd35d73
@ -93,7 +93,15 @@ method close*(
|
|||||||
self: SharedDatastore
|
self: SharedDatastore
|
||||||
): Future[?!void] {.async.} =
|
): Future[?!void] {.async.} =
|
||||||
# TODO: how to handle failed close?
|
# 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*(
|
proc newSharedDataStore*(
|
||||||
# T: typedesc[SharedDatastore],
|
# T: typedesc[SharedDatastore],
|
||||||
|
|||||||
@ -56,6 +56,7 @@ type
|
|||||||
ThreadDatastore* = object
|
ThreadDatastore* = object
|
||||||
tp*: Taskpool
|
tp*: Taskpool
|
||||||
backend*: ThreadBackendKind
|
backend*: ThreadBackendKind
|
||||||
|
ds*: Datastore
|
||||||
|
|
||||||
ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
|
ThreadDatastorePtr* = SharedPtr[ThreadDatastore]
|
||||||
|
|
||||||
@ -64,10 +65,6 @@ type
|
|||||||
|
|
||||||
TestPtr* = SharedPtr[Test]
|
TestPtr* = SharedPtr[Test]
|
||||||
|
|
||||||
var
|
|
||||||
fsDatastore {.threadvar.}: FSDatastore ##\
|
|
||||||
## TODO: figure out a better way to capture this?
|
|
||||||
|
|
||||||
proc newThreadResult*[T](
|
proc newThreadResult*[T](
|
||||||
tp: typedesc[T]
|
tp: typedesc[T]
|
||||||
): Result[TResult[T], ref CatchableError] =
|
): Result[TResult[T], ref CatchableError] =
|
||||||
@ -79,39 +76,6 @@ proc newThreadResult*[T](
|
|||||||
res[].signal = signal.get()
|
res[].signal = signal.get()
|
||||||
ok res
|
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*(
|
proc getTask*(
|
||||||
ret: TResult[DataBuffer],
|
ret: TResult[DataBuffer],
|
||||||
backend: ThreadBackendKind,
|
backend: ThreadBackendKind,
|
||||||
@ -167,6 +131,8 @@ 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,
|
||||||
@ -184,3 +150,38 @@ 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