caosdb-server issueshttps://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues2024-03-04T08:35:37Zhttps://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/300LinkAhead renaming: Allow but deprecate old CAOSDB_CONFIG_ environment variab...2024-03-04T08:35:37ZDaniel HornungLinkAhead renaming: Allow but deprecate old CAOSDB_CONFIG_ environment variables.From `README_SETUP.md`:
> All configuration environment variables should be change from `CAOSDB_CONFIG_...` to
`LINKAHEAD_CONFIG_...`. The old environment variables will remain deprecated but valid for some
time, but mixing old and new...From `README_SETUP.md`:
> All configuration environment variables should be change from `CAOSDB_CONFIG_...` to
`LINKAHEAD_CONFIG_...`. The old environment variables will remain deprecated but valid for some
time, but mixing old and new variables is forbidden: If you rename one, you have to rename all.
- [ ] Deprecation and consistency check (either CAOSDB or LINKAHEAD, not both) is implemented.
- [ ] Followup issues created if necessaryLinkAhead RelaunchHenrik tom WördenHenrik tom Wördenhttps://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/250Extern: Documentation: Howto for setting up new users.2024-03-03T21:10:22ZDaniel HornungExtern: Documentation: Howto for setting up new users.---
extern: https://gitlab.com/caosdb/caosdb-server/-/issues/163
---
Documentation: Howto for setting up new users.
## DoD
- [ ] There is some great documentation for this issue.---
extern: https://gitlab.com/caosdb/caosdb-server/-/issues/163
---
Documentation: Howto for setting up new users.
## DoD
- [ ] There is some great documentation for this issue.Daniel HornungDaniel Hornunghttps://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/268Plan: String ID2023-01-09T16:57:50ZTimm Fitschent.fitschen@indiscale.comPlan: String ID# MVP
* pylib und webui können mit string ids umgehen, wenn diese statt integer vom server returned werden.
* server generiert string ids
* im `legacy-id` Mode gibt der server sowohl die (intern weiterhin verwendeten) integer ids als au...# MVP
* pylib und webui können mit string ids umgehen, wenn diese statt integer vom server returned werden.
* server generiert string ids
* im `legacy-id` Mode gibt der server sowohl die (intern weiterhin verwendeten) integer ids als auch die neuen string ids zurück
* im `legacy-id` Mode mapped der server integer ids auf die neuen string ids.
* Wenn der `legacy-id` Mode aus ist, werden die integer ids unterdrückt.
* Neue ID heißt `eid`.
# DoD
* [x] MVP definieren
* [x] Risikoanalyse der Umstellung
* [ ] Grobe Planung der nötigen Implementationsphasen (hier dokumentieren und issues erstellen)
* [ ] Alles im Story Telling vorstellen.
# See also
%"String ID"
# Risiken/Technical Dept
* pytinttests müssen teilweise refactored werden, weil cleanup häufig über "FIND Entity WITH id > 99" stattfindet.
* Die Umstellung bei den Entities selber dürfte kaum Probleme bereiten, insbesondere wenn der legacy-id mode an ist, sollten alte Clients die Umstellung überhaupt nicht bemerken.
* Probleme können bei der Abschaffung der alten Konvention von temporären ids auftauchen: Derzeit werden negative IDs als client ids verwendet. Diese sollten durch cuid ersetzt werden.
* Probleme können bei Reference Properties auftauchen: Alte Clients versuchen die Values als Integers zu parsen und sind gleichzeitig sehr restriktiv was mögliche Childnodes der Properties angeht.
* Weitestgehende Rückwärtskompatibilität zu wahren ist nur dann interessant, wenn dies auch beim versioning eingehalten werden kann.
* Risiken verbergen sich in den folgenden von uns verantworteten code bases: Server, MySQLBackend, WebUI, Pylib, Pyinttests, CaosadvancedTools, Customer Repos mit Erweiterungen in JS und Python, Demoinstanzen.
* Um nicht gezwungen zu sein, zu früh zu viel Code zu ändern, soll die implementation so gestaltet werden, dass vorerst nur pylib und webui umgestellt werden, mit der Fähigkeit sich im legacy-id mode so zu verhalten, als wenn eid einfach eine zusätzliche Eigenschaft von entities wäre.
# Implementationsphasen
Alle Phasen und deren nummerierte Unterpunkte sind so designed, dass sie direkt reviewed und gemerged werden können, ohne komplexe Abhängigkeiten.
## Phase 1 - Entities bekommen zusätzliche Eigenschaft `eid`.
1. Server: Entities (`EntityInterface.java`) bekommen in der internen representation eine weitere Membervariable: `eid`. Diese wird bei Insert-Transaktionen generiert (512 random bits, in Base36 codierung).
2. MySQL Backend: entities table bekommt weitere Spalte `eid BLOB DEFAULT NULL`. Diese wird bei retrieveEntity ausgelesen (Tests für retrieveEntity).
3. MySQL Backend, Server: `eid` wird in schreibende Transaktionen integriert (Unittests für MySQL und Server, noch keine integration tests).
4. Server: `eid` wird in XML Serialisierung integriert (Auch für Properties und Parents)
5. Server: ReferenceValue bekommen `eid` Membervariable, sodass Values von Reference Properties auch über die `eid` identifiziert werden können.
6. Pylib:
- Entity in Pylib bekommt `eid` property.
- Die parents von entities bekommen die `eid` property und können über `Entity.get_parent(eid)` gefunden werden.
- Die properties von entities bekommen die `eid` property und können über `Entity.get_property(eid)` gefunden werden.
- Container bekommen die `get_entity(eid)` methode. (Unittests)
- Die Generierung von negativen IDs als temporären ids wird auf die Nutzung von `cuid`s umgestellt. Dies ist im Server bereits möglich.
7. Pyinttests für `eid` mit insert/update/retrieve/delete - nur testen, dass die `eid` da ist.
8. WebUI:
- `data-entity-eid` attribute analog `data-entity-id`.
- `getEntityEID` methode analog `getEntityID`.
- Nutzung von negative IDs als temporären IDs wird auf Nutzung von `cuid` umgestellt.
## Phase 2 - Legacy-id Mode
9. Server:
- ServerProperty "LEGACY_ID_MODE = TRUE|FALSE" mit default TRUE. Wenn FALSE, werden nur eids ausgegeben und akzeptiert ansonsten ids und eids nebeneinander.
- Response bekommt `legacy-id` Eigenschaft, damit Clients verifizieren können, dass der Server sich im `legacy-id` mode befindet.
10. Pylib:
- pycaosdb.ini/config module bekommen `legacy-id` option (default: true).
- Exception, wenn sich Server und Pylib nicht im selben mode befinden.
11. WebUI:
- WebUI bekommt build property `BUILD_LEGACY_ID`.
- Alert, wenn Server und WebUI sich nicht im selben mode befinden.
## Phase 3 - Reference Values werden vom Server als `eìd` ausgegeben.
10. Pylib/WebUI/Server
- Pylib sucht im `legacy-id` mode beim Parsen von Reference Values nach `<Legacy-id id="{id}"/>` Nodes und gibt diese als Value aus. Pylib akzeptiert weiterhin ids als reference values.
- WebUI: Der `legacy-id` mode sorgt beim Compilieren des `webcaosdb.xsl` scripts dafür, dass `<Legacy-id id="{id}"/> ausgelesen wird.
- Server: Im LEGACY_ID mode werden ids und eids ausgegeben und aktzeptiert. Reference Values werden als `<Value>{eid}<Legacy-id id="{id}"/></Value>` xml-serialisiert.
Damit sollte die Einführung von `eid`s abgeschlossen sein. Pyinttests und WebUI Unittests sollten weiterhin passen.
Es folgen die Anpassungen der src/core/js/ Module in der WebUI und bei caosadvancedtools. Außerdem ist eine Duplizierung aller Pyinttests für `eid` ohne `legacy-id` mode zu erwägen. Dann kommen die customer repos.
Mit der Einführung von `eid`s sind die Weichen gestellt für eine universale, persistente Identifikation von Entities, die nicht mehr von der Server-Instanz abhängt. Dann sollte in Zukunft erlaubt werden, `eid`s beim Insert vorzugeben (mit entsprechenden Permissions) und außerdem das Namespace System eingeführt werden.
# Discussion/Ausblick
* URIs are case-sensitive!
* Handle System PID: e.g. 21.1000/ABCD1234 info:hdl/21.1000/ABCD1234 https://hdl.handle.net/21.1000/ABCD1234
* URN: e.g. urn:isbn:0451450523
* HTTP URIS: e.g. https://caosdb.example.com/entity/<namespace>/<eid>
* URI SCHEME: e.g. git, https, mailto, urn, doi rdf. org.caosdb:<namespace>/<eid> org.linkahead:<namespace>/<vid|eid>
* Namespaces: "core" - e.g. "core:unit", "core:comment", "core:datatype:integer", "DC" (Dublin Core Metadata Initiative) - e.g. "DC:Title"
* References ohne Namespace beziehen sich auf den Server der die Reference Property hat. References mit Namespace können evtl. vom Server aufgelöst werden. Jeder Server definiert einen eigenen Namespace unter dem Entities ohne explizite angabe des NS angelegt werden. Dieser sollte konfiguriert werden, default is `hostname` (Achtung docker).Timm Fitschent.fitschen@indiscale.comTimm Fitschent.fitschen@indiscale.com