Comments (8)
The filestore simply uses the Java classes File
and Path
, so there is actually a method to identify relative paths, but it is just as simple getting the absolute path from a relative path. The big question, which we talked about today, is where it would be best to perform the translation.
from datahike.
As discussed on Slack, I think it is best for us to require absolute paths in general, since we want to be able to address stores globally if possible. Currently we infer the hostname for the file store backend automatically, but we could also require to set it manually to fully identify the filesystem. That might be a bit less comfortable and still leaves room to use local hostnames that are not uniquely globally identified.
from datahike.
Sorry that this happened. There should be at least a proper exception message that describes the problem and some documentation.
from datahike.
We just need to check whether the user has provided an absolute path to the file store and otherwise throw an informative error message.
from datahike.
I think it would be nicer though to accept relative paths as this is what I would expect and apparently I am not alone with this. Btw, ./store-dir
works already for deletion, but even if we leave it like this, we should check the path on store creation.
So I would say, we have following options:
- Disallow creation of relative paths
- Accept relative paths prefixed with
./
- Accept relative paths generally
- Accept relative paths but throw a warning if a relative path is being used
- in this case possibly provide a way to silence the warning, e.g. with a dynamic var or config option
- Have different store creation functions for stores that are save for distributed use which only accept absolute paths and simple stores that accept relative paths
None of the solutions above require much work, it is merely a design decision.
Which one would you prefer?
from datahike.
I don't get why we need absolute paths to globally address stores. But I would expect to be able to use relative paths.
So I tend to option 3 because relative paths for java.io.File are not prefixed.
I wouldn't mind only using absolute paths with a proper error message though I currently don't see an easy way to know if a path is absolute or not. We would have to check if the first char of the path is either a slash or a letter and if it's a letter then it needs to be followed by a colon. And what if someone wants to use a network drive like a nas or something, is that possible?
But maybe you've got a better way to solve that depending on the implementation details of the filestore.
from datahike.
The problem is that the database stores the store configuration in its store and it identifies itself through the path for the filestore backend (see store-identity
). Relative paths are not uniquely determined even on the same machine and hence can not be disambiguated unless the path is resolved first. This can create problems now if you try to connect to the relative path database from another relative or absolute path configuration. A simple solution is what @jsmassa described, to replace the relative path in the config before Datahike operates on it.
In general we should aim for having DB configurations that allow to connect from anywhere to the database if you have credentials, then we can store the config in Datahike itself and run recursive queries with Datalog over the databases.
from datahike.
The filestore simply uses the Java classes
File
andPath
, so there is actually a method to identify relative paths, but it is just as simple getting the absolute path from a relative path. The big question, which we talked about today, is where it would be best to perform the translation.
I think it is best to resolve the paths when the config is loaded, e.g. in load-config
. konserve can still support relative paths as is, but Datahike should internally operate on fully resolved configurations.
from datahike.
Related Issues (20)
- [Bug]: prep-lib is broken HOT 5
- [Bug]: CI token not valid, no release possible
- [Bug]: can't import datahike.api at repl: Unable to resolve symbol: abs HOT 3
- CI: compile and upload native-image binaries to GitHub Releases HOT 2
- Reflection warnings need to be fixed for native Datahike
- [Bug]: datahike.migrate has a problem with schema/double (which cbor converts to float) HOT 2
- [Bug]: unneeded dependencies pulled HOT 7
- Integrate HTTP server HOT 4
- Improve connection handling HOT 1
- [Bug]: NullPointerException trying to transact from CLI HOT 8
- [Bug]: FileNotFoundException over resources/datahike-logo.txt HOT 2
- [Bug]: Inconsistent treatment of invalid constant values HOT 2
- [Bug]: Unable to use Datahike as a git library HOT 2
- [Bug]: `pull-many` query with 3 attr-ids on a range of 500 entities takes ~2,900 ms
- Ability to disable `ensure-stored-config-consistency` HOT 7
- chore: simplify state management
- [Bug]: :config-does-not-match-stored-db for file storage when using VPN HOT 5
- [Bug]: Problem with bump org.babashka/tools-deps-native from 0.1.1 to 0.1.2 and `datahike-logo.txt` not being packaged into the jar
- [Bug]: Metadata is incorrect for various functions
- [Bug]: Changing cache size throws exception HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from datahike.