Changing a File with Edit Mode leaves you with incomplete Representation
Created by: Henrik tom Wörden
Steps to reproduce:
- Find a file in the WebUI
- Start Edit Mode
- Edit the File (e.g. change description)
- Save
- The File Record that is shown now is incomplete: size, checksum and path are missing.
Imported comments:
By Alexander Schlemmer on 2020-10-28T19:39:52.054Z
added 1h 41m of time spent at 2020-10-28
By Alexander Schlemmer on 2020-10-28T19:38:51.735Z
mentioned in merge request !88 (merged)
By Alexander Schlemmer on 2020-10-28T16:13:29.727Z
It's funny that the new issue in the CaosDB-server-repo also has the ID #103 (closed): https://gitlab.com/caosdb/caosdb-server/-/issues/103
By Alexander Schlemmer on 2020-10-28T16:12:54.585Z
mentioned in issue caosdb-server#103
By Alexander Schlemmer on 2020-10-28T16:06:52.775Z
No, this issue is valid. But I'll create a second issue in the server repo.
By Alexander Schlemmer on 2020-10-28T16:06:13.451Z
Hi @fspreck, this is ok, because the issue actually is that the path still exists (see FileSystem), but the Entity loses it's reference to the path.
Regarding this issue:
- I will fix this problem in the webui / javascript interface for CaosDB.
- @timm.fitschen The problem arises, because the server seems to accept a File XML where the path is removed. This should not be allowed by the server. I will open a different issue for that.
By Alexander Schlemmer on 2020-10-28T13:12:32.905Z
assigned to @salexan
By Florian Spreckelsen on 2020-10-16T07:42:30.075Z
Should this be moved to server repo?
By Florian Spreckelsen on 2020-10-16T07:41:51.569Z
Trying to re-create the file record fails since CaosDB still thinks the target path exists:
db.File(name="bla", path=path).insert()
results in
EntityError: FILE (-1,'bla') CAUSED EntityError: This target path does already exist.
By Florian Spreckelsen on 2020-10-16T07:37:43.721Z
It's even worse, when you try to restore e.g. the path via the Python client, it results in a ServerErrorException.
MWE with demo profile:
tmp = db.execute_query("FIND FILE")[0]
path = tmp.path
# Change name of File Record in edit mode
tmp.retrieve() # doesn't have path or checksum anymore
# Restore path
tmp.path = path
tmp.update()
results in ServerErrorException with server output
linkahead | UNKNOWN ERROR
linkahead |
linkahead | java.lang.NullPointerException
linkahead | at org.caosdb.server.transaction.Update.init(Update.java:137)
linkahead | at org.caosdb.server.transaction.Transaction.execute(Transaction.java:131)
linkahead | at org.caosdb.server.resource.transaction.EntityResource.httpPutInChildClass(EntityResource.java:203)
linkahead | at org.caosdb.server.resource.AbstractCaosDBServerResource.httpPut(AbstractCaosDBServerResource.java:265)
linkahead | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
linkahead | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
linkahead | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
linkahead | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
linkahead | at org.restlet.resource.ServerResource.doHandle(ServerResource.java:508)
linkahead | at org.restlet.resource.ServerResource.put(ServerResource.java:1395)
linkahead | at org.restlet.resource.ServerResource.doHandle(ServerResource.java:595)
linkahead | at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:662)
linkahead | at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
linkahead | at org.restlet.resource.ServerResource.handle(ServerResource.java:1020)
linkahead | at org.restlet.resource.Finder.handle(Finder.java:236)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422)
linkahead | at org.restlet.routing.Router.handle(Router.java:641)
linkahead | at org.caosdb.server.CaosDBServer$2.handle(CaosDBServer.java:550)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422)
linkahead | at org.restlet.routing.Router.handle(Router.java:641)
linkahead | at org.caosdb.server.CaosDBServer$3.handle(CaosDBServer.java:568)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
linkahead | at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77)
linkahead | at org.restlet.Application.handle(Application.java:385)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422)
linkahead | at org.restlet.routing.Router.handle(Router.java:641)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422)
linkahead | at org.restlet.routing.Router.handle(Router.java:641)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150)
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197)
linkahead | at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
linkahead | at org.restlet.Component.handle(Component.java:408)
linkahead | at org.caosdb.server.CaosDBComponent.handle(CaosDBServer.java:881)
linkahead | at org.restlet.Server.handle(Server.java:507)
linkahead | at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)
linkahead | at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)
linkahead | at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:256)
linkahead | at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
linkahead | at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
linkahead | at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
linkahead | at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
linkahead | at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
linkahead | at java.base/java.lang.Thread.run(Thread.java:834)
linkahead | 2020-10-16 09:36:39 172.22.0.1 - 172.22.0.3 10443 PUT /Entity uniquename=true 500 - 370 36 https://localhost:10443 caosdb-pylib/0.4.1.dev0+1ce5652 - _DefaultCaosDBServerConnection -
linkahead | 07:36:39.436 [qtp712410791-42] ERROR REQUEST_ERRORS_LOGGER - SRID: ea721650-fae9-4075-92cc-3a2a97740313
linkahead | REQUEST: PUT https://localhost:10443/Entity?uniquename=true HTTPS/1.1
linkahead | REQUEST HEADERS: [Cookie: SessionToken=["S","PAM","admin",[],[],1602833663523,600000,"NEQ27CTP-R7GPLQ4H-SVYGZ52A-OE","a3d7b69966ef8c9f4224cc97e2ce7eb4eccad74cc34bba95c582e8a84123d4dbb77eef7a68e9c7cddd245e2aa69d4d552102e0aadb64ffb3da1d7a8f8c7fc3ae"];][User-Agent: caosdb-pylib/0.4.1.dev0 1ce5652 - _DefaultCaosDBServerConnection][Host: localhost:10443][Accept-Encoding: identity][Content-Length: 370]
linkahead | REQUEST ENTITY: <Update>
linkahead | <File id="126" cuid="126--75b751fc-8885-4e27-8a85-7be2a3c65852" name="Bla / 2019-023" path="/reports/report_g_2019-023.pdf">
linkahead | <Version id="d1f4c85580837fa9c3ce8cc0c3ab9a961e5db882" date="2020-10-16T09:34:02.868+0200">
linkahead | <Predecessor id="08a3f9406c1ce8782c568c8e0b5194c7f9c89fc6" date="2019-09-11T15:13:38.925+0200"/>
linkahead | </Version>
linkahead | </File>
linkahead | </Update>
linkahead |
linkahead | RESPONSE: HTTPS/1.1 - Internal Server Error (500) - The server encountered an unexpected condition which prevented it from fulfilling the request
linkahead | RESPONSE ENTITY:<?xml version="1.0" encoding="UTF-8"?>
linkahead | <?xml-stylesheet type="text/xsl" href="https://localhost:10443/webinterface/1602833542/webcaosdb.xsl" ?>
linkahead | <Response username="admin" realm="PAM" srid="ea721650-fae9-4075-92cc-3a2a97740313" timestamp="1602833799397" baseuri="https://localhost:10443">
linkahead | <UserInfo username="admin" realm="PAM">
linkahead | <Roles>
linkahead | <Role>administration</Role>
linkahead | </Roles>
linkahead | </UserInfo>
linkahead | <Error code="500" description="An unexpected server error has occurred.">SRID = ea721650-fae9-4075-92cc-3a2a97740313
linkahead |
linkahead | Please report this server error to and include the SRID into your report.</Error>
linkahead | </Response>
linkahead |
linkahead | java.lang.NullPointerException: null
linkahead | at org.caosdb.server.transaction.Update.init(Update.java:137) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.caosdb.server.transaction.Transaction.execute(Transaction.java:131) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.caosdb.server.resource.transaction.EntityResource.httpPutInChildClass(EntityResource.java:203) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.caosdb.server.resource.AbstractCaosDBServerResource.httpPut(AbstractCaosDBServerResource.java:265) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
linkahead | at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
linkahead | at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
linkahead | at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
linkahead | at org.restlet.resource.ServerResource.doHandle(ServerResource.java:508) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.resource.ServerResource.put(ServerResource.java:1395) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.resource.ServerResource.doHandle(ServerResource.java:595) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:662) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.resource.ServerResource.handle(ServerResource.java:1020) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.resource.Finder.handle(Finder.java:236) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.handle(Router.java:641) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.caosdb.server.CaosDBServer$2.handle(CaosDBServer.java:550) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.handle(Router.java:641) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.caosdb.server.CaosDBServer$3.handle(CaosDBServer.java:568) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.Application.handle(Application.java:385) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.handle(Router.java:641) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.doHandle(Router.java:422) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Router.handle(Router.java:641) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.doHandle(Filter.java:150) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.routing.Filter.handle(Filter.java:197) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.Component.handle(Component.java:408) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.caosdb.server.CaosDBComponent.handle(CaosDBServer.java:881) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.Server.handle(Server.java:507) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:256) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) ~[caosdb-server-0.3-SNAPSHOT-jar-with-dependencies.jar:?]
linkahead | at java.lang.Thread.run(Thread.java:834) ~[?:?]