Uploaded image for project: 'controller'
  1. controller
  2. CONTROLLER-1871

Excessive Optional.ofNullable() from QName/QNameModule.getRevision() from NormalizedNodeOutputStreamWriter

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Do
    • Icon: Medium Medium
    • Neon, Oxygen SR4, Fluorine SR2
    • Oxygen SR3
    • None
    • None

      I'm looking at a Java Flight Recording obtained from (internal) scale lab testing, based on Oxygen SR3 code, and see a lot (cumulated as in millions, with many tens of GBs) of "TLAB Allocations" related to an Optional.of() Optional.ofNullable() from QName/QNameModule.getRevision() from NormalizedNodeOutputStreamWriter.

      Wondering if perhaps we could improve upon this in any way? Realizing this may not be trivial, and generally speaking Optional is much preferred over using a @Nullable, but wondering if this is an exceptional case where the Optional should perhaps be avoided?

      Optional java.util.Optional.of(Object)	36282
      Optional java.util.Optional.ofNullable(Object)	31841
      Optional org.opendaylight.yangtools.yang.common.QNameModule.getRevision()	11703
      Optional org.opendaylight.yangtools.yang.common.QName.getRevision()	11703
      void org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeOutputStreamWriter.writeQName(QName)	11703
      void org.opendaylight.controller.cluster.datastore.node.utils.stream.AbstractNormalizedNodeDataOutput.startNode(QName, byte)	8215
      void org.opendaylight.controller.cluster.datastore.node.utils.stream.AbstractNormalizedNodeDataOutput.leafNode(YangInstanceIdentifier$NodeIdentifier, Object)	5324
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessAsSimpleNode(NormalizedNode)	5324
      NormalizedNodeWriter org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNode)	5324
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(Iterable)	4596
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNode)	3924
      NormalizedNodeWriter org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNode)	3924
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(Iterable)	2301
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNode)	2284
      NormalizedNodeWriter org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNode)	2284
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(Iterable)	1759
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter$OrderedNormalizedNodeWriter.writeMapEntryNode(MapEntryNode)	1485
      boolean org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNode)	1485
      NormalizedNodeWriter org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNode)	1485
      void org.opendaylight.controller.cluster.datastore.node.utils.stream.AbstractNormalizedNodeDataOutput.writeNormalizedNode(NormalizedNode)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeNode(NormalizedNodeDataOutput, DataTreeCandidateNode)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeChildren(NormalizedNodeDataOutput, Collection)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeNode(NormalizedNodeDataOutput, DataTreeCandidateNode)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeChildren(NormalizedNodeDataOutput, Collection)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeNode(NormalizedNodeDataOutput, DataTreeCandidateNode)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeChildren(NormalizedNodeDataOutput, Collection)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeNode(NormalizedNodeDataOutput, DataTreeCandidateNode)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeChildren(NormalizedNodeDataOutput, Collection)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeNode(NormalizedNodeDataOutput, DataTreeCandidateNode)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeChildren(NormalizedNodeDataOutput, Collection)	1023
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeNode(NormalizedNodeDataOutput, DataTreeCandidateNode)	1018
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeChildren(NormalizedNodeDataOutput, Collection)	1018
      void org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidateInputOutput.writeDataTreeCandidate(DataOutput, DataTreeCandidate)	1018
      CommitTransactionPayload org.opendaylight.controller.cluster.datastore.persisted.CommitTransactionPayload.create(TransactionIdentifier, DataTreeCandidate)	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree.startCommit(SimpleShardDataTreeCohort, DataTreeCandidate)	1018
      void org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.commit(FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.CohortEntry.commit(FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.finishCommit(ActorRef, CohortEntry)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(DataTreeCandidate)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$3.onSuccess(Object)	1018
      void org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulPreCommit(DataTreeCandidateTip)	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree$1.onSuccess(Void)	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree$1.onSuccess(Object)	1018
      void org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.doUserPreCommit(FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.userPreCommit(DataTreeCandidate, FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree.startPreCommit(SimpleShardDataTreeCohort)	1018
      void org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.preCommit(FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.CohortEntry.preCommit(FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCommit(CohortEntry)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(Void)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$2.onSuccess(Object)	1018
      void org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.successfulCanCommit()	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree.lambda$processNextPendingTransaction$0(ShardDataTree$CommitEntry)	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree$$Lambda$863.1527042624.accept(Object)	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextPending(Queue, ShardDataTreeCohort$State, Consumer)	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree.processNextPendingTransaction()	1018
      void org.opendaylight.controller.cluster.datastore.ShardDataTree.startCanCommit(SimpleShardDataTreeCohort)	1018
      void org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.canCommit(FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.CohortEntry.canCommit(FutureCallback)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleCanCommit(CohortEntry)	1018
      void org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleReadyLocalTransaction(ReadyLocalTransaction, ActorRef, Shard)	1018
      void org.opendaylight.controller.cluster.datastore.Shard.handleReadyLocalTransaction(ReadyLocalTransaction)	1018
      void org.opendaylight.controller.cluster.datastore.Shard.handleNonRaftCommand(Object)	1018
      void org.opendaylight.controller.cluster.raft.RaftActor.handleCommand(Object)	1018

            tpantelis Tom Pantelis
            vorburger Michael Vorburger
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: