convergencelabs / convergence-project

The project used for Convergence Project Management and Issue Reporting
https://convergence.io
42 stars 5 forks source link

The field 'NumberSetOperation.oldVal' cannot be null errors #264

Closed toebes closed 2 years ago

toebes commented 2 years ago

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:

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:

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)

mmacfadden commented 2 years ago

Not so how to explain unrecognized numbers. However, this definitely seems like a bug. I will get this fixed and released.