Skip to content

Unexpected Server Error when inserting an Entity

You can create a server state with the following snippet, that can cause the problem.

import caosdb as db
p1 = db.Property(name='p1', datatype=db.DOUBLE, unit='min').insert()
#p1 = db.Property(name='p1').retrieve()
p2 = db.Property(name='p2', datatype=db.TEXT).insert()
#p2 = db.Property(name='p2').retrieve()
#p1 = db.Property(name='p1', datatype=db.DOUBLE, unit='min').insert()
A = db.RecordType(name='A').add_property(p1).insert()
B = db.RecordType(name='B').add_parent(name='A').add_property(p2).insert()


cont = db.Container()
cont.append(db.RecordType(id=A.id, name=A.name)
            .add_property(id=p1.id, name=p1.name, datatype=db.DOUBLE,
                          importance=db.RECOMMENDED)
            .add_property(id=p1.id, name=p1.name, importance=db.RECOMMENDED))
cont.append(db.Property(id=p1.id, name=p1.name, datatype=db.DOUBLE, unit='min'))
cont.append(db.RecordType(id=B.id, name=B.name)
            .add_parent(id=A.id, name=A.name, inheritance=db.SUGGESTED))
cont.update()

When you now submit a query with "FIND RECORDTYPE B" you should get an unexpected server error. The server logs show the following:

java.lang.NullPointerException: Replacement was null
	at org.caosdb.server.database.DatabaseUtils.replace(DatabaseUtils.java:271) ~[classes/:?]
	at org.caosdb.server.database.DatabaseUtils.transformToDeepPropertyTree(DatabaseUtils.java:333) ~[classes/:?]
	at org.caosdb.server.database.backend.transaction.RetrieveProperties.process(RetrieveProperties.java:97) ~[classes/:?]
	at org.caosdb.server.database.backend.transaction.RetrieveProperties.process(RetrieveProperties.java:1) ~[classes/:?]
	at org.caosdb.server.database.CacheableBackendTransaction.execute(CacheableBackendTransaction.java:47) ~[classes/:?]
	at org.caosdb.server.database.BackendTransaction.execute(BackendTransaction.java:239) ~[classes/:?]
	at org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction.retrieveFullEntity(RetrieveFullEntityTransaction.java:121) ~[classes/:?]
	at org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction.retrieveFullEntitiesInContainer(RetrieveFullEntityTransaction.java:89) ~[classes/:?]
	at org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction.execute(RetrieveFullEntityTransaction.java:77) ~[classes/:?]
	at org.caosdb.server.database.BackendTransaction.executeTransaction(BackendTransaction.java:152) ~[classes/:?]
	at org.caosdb.server.transaction.TransactionInterface.execute(TransactionInterface.java:49) ~[classes/:?]
	at org.caosdb.server.transaction.Retrieve.retrieveFullEntities(Retrieve.java:117) ~[classes/:?]
	at org.caosdb.server.transaction.Retrieve.transaction(Retrieve.java:112) ~[classes/:?]

This was tested with the server having caching enabled and disabled.

Edited by Timm Fitschen
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information