Describe the Bug
We have seen a couple dozen error messages in the logs about The field 'NumberSetOperation.oldVal' cannot be null. For example:
server_1 | 00:47:56 ERROR RealtimeModelPersistenceStream - DomainId(convergence,scienceolympiad)/564d448a-3dd7-4500-bccc-050eaec1051c: Error applying operation: NewModelOperation(564d448a-3dd7-4500-bccc-050eaec1051c,175,2022-01-09T00:47:56.537536Z,2u0,AppliedNumberSetOperation(@:14,true,477723.037109375,None))
server_1 | com.orientechnologies.orient.core.exception.OValidationException: The field 'NumberSetOperation.oldVal' cannot be null, record: NumberSetOperation{elementId:@:14,noOp:true,val:477723.037109375,oldVal:null}
server_1 | DB name="5261490765449902716"
server_1 | Error Code="4"
server_1 | at com.orientechnologies.orient.core.record.impl.ODocument.validateField(ODocument.java:604) ~[com.orientechnologies.orientdb-core-3.0.37.jar:3.0.37]
server_1 | at com.orientechnologies.orient.core.record.impl.ODocument.validate(ODocument.java:2434) ~[com.orientechnologies.orientdb-core-3.0.37.jar:3.0.37]
server_1 | at com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract.saveInternal(ODatabaseDocumentAbstract.java:2118) ~[com.orientechnologies.orientdb-core-3.0.37.jar:3.0.37]
server_1 | at com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract.save(ODatabaseDocumentAbstract.java:2103) ~[com.orientechnologies.orientdb-core-3.0.37.jar:3.0.37]
server_1 | at com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract.save(ODatabaseDocumentAbstract.java:135) ~[com.orientechnologies.orientdb-core-3.0.37.jar:3.0.37]
server_1 | at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:2178) ~[com.orientechnologies.orientdb-core-3.0.37.jar:3.0.37]
server_1 | at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:2169) ~[com.orientechnologies.orientdb-core-3.0.37.jar:3.0.37]
server_1 | at com.convergencelabs.convergence.server.backend.datastore.domain.model.ModelOperationStore.$anonfun$createModelOperation$1(ModelOperationStore.scala:183) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.datastore.AbstractDatabasePersistence.withDb(AbstractDatabasePersistence.scala:37) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.datastore.domain.model.ModelOperationStore.createModelOperation(ModelOperationStore.scala:181) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.datastore.domain.model.ModelOperationProcessor.$anonfun$processModelOperation$2(ModelOperationProcessor.scala:50) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at scala.util.Success.flatMap(Try.scala:258) ~[org.scala-lang.scala-library-2.13.5.jar:?]
server_1 | at com.convergencelabs.convergence.server.backend.datastore.domain.model.ModelOperationProcessor.$anonfun$processModelOperation$1(ModelOperationProcessor.scala:47) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.db.PooledDatabaseProvider.$anonfun$withDatabase$3(PooledDatabaseProvider.scala:58) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.util.TryWithResource.tryWithResolvedResource(TryWithResource.scala:50) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.util.TryWithResource.com$convergencelabs$convergence$server$util$TryWithResource$$tryWithResource(TryWithResource.scala:36) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.util.TryWithResource$.apply(TryWithResource.scala:78) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.db.PooledDatabaseProvider.$anonfun$withDatabase$1(PooledDatabaseProvider.scala:56) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at scala.util.Success.flatMap(Try.scala:258) ~[org.scala-lang.scala-library-2.13.5.jar:?]
server_1 | at com.convergencelabs.convergence.server.backend.db.PooledDatabaseProvider.withDatabase(PooledDatabaseProvider.scala:55) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.datastore.AbstractDatabasePersistence.withDb(AbstractDatabasePersistence.scala:32) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.datastore.domain.model.ModelOperationProcessor.processModelOperation(ModelOperationProcessor.scala:41) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.services.domain.model.RealtimeModelPersistenceStream.onProcessOperation(RealtimeModelPersistenceStream.scala:115) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.services.domain.model.RealtimeModelPersistenceStream.$anonfun$streamActor$1(RealtimeModelPersistenceStream.scala:92) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at com.convergencelabs.convergence.server.backend.services.domain.model.RealtimeModelPersistenceStream.$anonfun$streamActor$1$adapted(RealtimeModelPersistenceStream.scala:90) ~[com.convergencelabs.convergence-server-1.0.0-rc.12.jar:1.0.0-rc.12]
server_1 | at akka.stream.impl.fusing.Map$$anon$1.onPush(Ops.scala:52) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:542) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:496) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:390) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:650) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:521) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:625) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.ActorGraphInterpreter.akka$stream$impl$fusing$ActorGraphInterpreter$$processEvent(ActorGraphInterpreter.scala:800) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.ActorGraphInterpreter$$anonfun$receive$1.applyOrElse(ActorGraphInterpreter.scala:818) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.actor.Actor.aroundReceive(Actor.scala:537) [com.typesafe.akka.akka-actor_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.actor.Actor.aroundReceive$(Actor.scala:535) [com.typesafe.akka.akka-actor_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.stream.impl.fusing.ActorGraphInterpreter.aroundReceive(ActorGraphInterpreter.scala:716) [com.typesafe.akka.akka-stream_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.actor.ActorCell.receiveMessage(ActorCell.scala:580) [com.typesafe.akka.akka-actor_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.actor.ActorCell.invoke(ActorCell.scala:548) [com.typesafe.akka.akka-actor_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270) [com.typesafe.akka.akka-actor_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.dispatch.Mailbox.run(Mailbox.scala:231) [com.typesafe.akka.akka-actor_2.13-2.6.15.jar:2.6.15]
server_1 | at akka.dispatch.Mailbox.exec(Mailbox.scala:243) [com.typesafe.akka.akka-actor_2.13-2.6.15.jar:2.6.15]
server_1 | at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) [?:?]
server_1 | at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) [?:?]
server_1 | at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) [?:?]
server_1 | at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) [?:?]
server_1 | at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) [?:?]
Step To Reproduce
It is unclear what is causing this. The actual values we have seen are all pretty odd and don't seem to match anything that our application sets:
437350.1838378906
325445.3039550781
264620.48583984375
204203.65698242188
579554.0539550781
382824.4089355469
361913.44580078125
342179.8369140625
308858.8991699219
131560.17895507812
110157.54711914062
Expected Behavior
The error won't come out (but we recognize that there might be something in our code that we need to look at)
Versions
Describe the Bug We have seen a couple dozen error messages in the logs about
The field 'NumberSetOperation.oldVal' cannot be null
. For example:Step To Reproduce It is unclear what is causing this. The actual values we have seen are all pretty odd and don't seem to match anything that our application sets:
Expected Behavior The error won't come out (but we recognize that there might be something in our code that we need to look at)