[NETVIRT-1503] Extensive object allocation from Uuid Matcher Created: 13/Nov/18  Updated: 23/Nov/18  Resolved: 23/Nov/18

Status: Resolved
Project: netvirt
Component/s: None
Affects Version/s: Oxygen-SR3
Fix Version/s: Fluorine-SR2, Neon

Type: Bug Priority: Medium
Reporter: Michael Vorburger Assignee: Michael Vorburger
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

I'm looking at a Java Flight Recording obtained from (internal) scale lab testing, based on Oxygen SR3 code, and was wondering if the following code path which appears as a big "TLAB allocation" could be optimized:

void java.util.regex.Matcher.<init>(Pattern, CharSequence)	7491
Matcher java.util.regex.Pattern.matcher(CharSequence)	7491
void org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid.<init>(String)	6932
Object java.lang.invoke.LambdaForm$DMH.167258716.newInvokeSpecial_L_L(Object, Object)	6638
Object java.lang.invoke.LambdaForm$BMH.900683535.reinvoke(Object, Object)	6638
Object java.lang.invoke.LambdaForm$MH.242644271.invokeExact_MT(Object, Object, Object)	6638
Object org.opendaylight.mdsal.binding.dom.codec.impl.EncapsulatedValueCodec.deserialize(Object)	6638
Object org.opendaylight.mdsal.binding.dom.codec.impl.LeafNodeCodecContext.deserializeObject(NormalizedNode)	6630
Object org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.getBindingChildValue(Method, NormalizedNodeContainer)	6630
Object org.opendaylight.mdsal.binding.dom.codec.impl.KeyedListNodeCodecContext.getBindingChildValue(Method, NormalizedNodeContainer)	6630
Object org.opendaylight.mdsal.binding.dom.codec.impl.LazyDataObject.getBindingData(Method)	6630
Object org.opendaylight.mdsal.binding.dom.codec.impl.LazyDataObject.invoke(Object, Method, Object[])	6160
Uuid com.sun.proxy.$Proxy453.getRouterId()	3063
Uuid org.opendaylight.netvirt.neutronvpn.NeutronvpnUtils.getVpnForRouter(Uuid, Boolean)	3063
void org.opendaylight.netvirt.neutronvpn.NeutronPortChangeListener.handleRouterInterfaceAdded(Port)	1654
void org.opendaylight.netvirt.neutronvpn.NeutronPortChangeListener.add(InstanceIdentifier, Port)	1654
void org.opendaylight.netvirt.neutronvpn.NeutronPortChangeListener.add(InstanceIdentifier, DataObject)	1654
void org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase$DataTreeChangeHandler.run()	1654
void java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)	1654
void java.util.concurrent.ThreadPoolExecutor$Worker.run()	1654
void java.lang.Thread.run()	1654


 Comments   
Comment by Robert Varga [ 13/Nov/18 ]

vorburger yes, multiple options:

  1. use Stream.anyMatch() instead of full list materialization followed by a List.contains()
  2. realize this is a primary key, so issue a read()+exists() requests before doing further processing

 

Comment by Michael Vorburger [ 13/Nov/18 ]

skitt would you be willing to self assign this issue to you, review rovarga's proposed change for this (big Thank You!), take care of pack-porting that (and potentially getting it d/s'd, if we don't rebase) or should we look for someone else to own this one?

Comment by Michael Vorburger [ 16/Nov/18 ]

c/77904 cherry-picked from Neon to Fluorine. Oxygen code is quite different (above was found on Oxygen).

skitt on email said he was "looking into the regexes in Uuid", so assigning to him.

Comment by Michael Vorburger [ 22/Nov/18 ]

>  Oxygen code is quite different (above was found on Oxygen)

I'm removing Oxygen from Fix Version for this one (c/77904 is in Neon and Fluorine); you win some, loose some!

Generated at Wed Feb 07 20:24:13 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.