[GENIUS-280] Centralize node identifier parsing Created: 11/Oct/19 Updated: 22/Sep/20 |
|
| Status: | In Review |
| Project: | genius |
| Component/s: | mdsalutils |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Improvement | Priority: | Medium |
| Reporter: | Robert Varga | Assignee: | Apurba Mukherjee |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||
| Description |
|
There are currently 14 places which are splitting a String on ':' and do something with it – usually extracting DPN/DPID. All of this is done though String.split(), which is massively inefficient: ./itm/itm-impl/src/main/java/org/opendaylight/genius/itm/rpc/ItmManagerRpcService.java: String[] nodeId = node.getId().getValue().split(":");
./itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTepInstanceRecoveryHandler.java: String[] params = entityId.split(":");
./interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesNodeStateListener.java: final String[] node = id.getId().getValue().split(":");
./interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/pmcounters/NodeConnectorStatsImpl.java: String dpId = nodeId.getValue().split(":")[1];
./interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/pmcounters/NodeConnectorStatsImpl.java: String dpId = nodeId.getValue().split(":")[1];
./fcapsapplication/fcapsapplication-impl/src/main/java/org/opendaylight/genius/fcapsapp/performancecounter/PacketInCounterHandler.java: String[] nodeNo = id.split(":");
./fcapsapplication/fcapsapplication-impl/src/main/java/org/opendaylight/genius/fcapsapp/performancecounter/PacketInCounterHandler.java: dpnId = dpnId.split(":")[1];
./fcapsapplication/fcapsapplication-impl/src/main/java/org/opendaylight/genius/fcapsapp/performancecounter/FlowNodeConnectorInventoryTranslatorImpl.java: String[] switchId = node.split(":");
./networkutils/networkutils/src/main/java/org/opendaylight/genius/networkutils/impl/VniUtilsImpl.java: String[] configureVniRangeSplit = configureVniRange.split(":");
./networkutils/networkutils/src/main/java/org/opendaylight/genius/networkutils/impl/RDUtilsImpl.java: String[] configureRDSplit = NwConstants.RD_DEFAULT_LOW_VALUE.split(":");
./networkutils/networkutils/src/main/java/org/opendaylight/genius/networkutils/impl/RDUtilsImpl.java: configureRDSplit = configuredRDStartValue.split(":");
./alivenessmonitor/alivenessmonitor-impl-protocols/src/main/java/org/opendaylight/genius/alivenessmonitor/protocols/internal/AbstractAlivenessProtocolHandler.java: String[] addressPart = macAddress.split(":");
./ipv6util/api/src/main/java/org/opendaylight/genius/ipv6util/api/Ipv6Util.java: String[] octets = target.split(":");
./mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MDSALManager.java: String[] split = dpnString.split(":");
Provide an explicitly-documented utility which will perform a split-and-parse operation, in the most efficient manner possible and migrate all appropriate callsites to use it. |
| Comments |
| Comment by Robert Varga [ 11/Oct/19 ] |
|
The splitter implementations should work on String.indexOf(':') – note char! – and then issuing a String.subString(offset + 1), so that we do not instantiate unnecesary objects. |
| Comment by Apurba Mukherjee [ 22/Sep/20 ] |
|
Pushed a patch for this. I have done a basic comparison testing. For a dummy string (openflow:12345678:37:compute:9876540:78:node:564789:21) String.split(":") takes 12 to 17 ms while the new API takes max 1 ms. |