[OPNFLWPLUG-702] Excessive data in inventory in Beryllium SR2 Created: 24/May/16 Updated: 27/Sep/21 Resolved: 06/Jun/17 |
|
| Status: | Resolved |
| Project: | OpenFlowPlugin |
| Component/s: | General |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | ||
| Reporter: | Colin Dixon | Assignee: | Unassigned |
| Resolution: | Won't Do | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Operating System: All |
||
| Attachments: |
|
| External issue ID: | 5954 |
| Description |
|
Staring in Beryllium SR2, we get ~1440 lines of JSON for table features for every table in every switch, which for OVS results in ~368,640 lines and 18 MB per switch. While I applaud us gathering all the information we can, we need to find a way to make this less painful. See the attached JSON for querying: |
| Comments |
| Comment by Colin Dixon [ 24/May/16 ] |
|
Attachment odl-inv.json.zip has been added with description: json for a single OVS switch in the inventory generating 18MB of data |
| Comment by Michal Rehak [ 24/May/16 ] |
|
Hi Colin - right, those huge ugly data are table-features. But app working with table-features would have to read it every time via rpc. Which is probably a good trade off, but we need to discuss that with NIC and DIDM the impact. |
| Comment by Colin Dixon [ 24/May/16 ] |
|
That would be one approach and it would certainly be better than the current situation. It's unfortunate that we can't have the data there but not read it by default. |
| Comment by Anil Vishnoi [ 24/May/16 ] |
|
I think recently we added a nob to the enable/disable the table features in lithium plugin and we are working on implementing the same in He plugin as well. But this is short term solution, but i agree we should go with rpc based solution. RPCs are accessible to both controller internal application as well as external application, so both type of application can fetch it. The issue with rpc approach is, if number of application increases and plugin start getting more table feature request, that will put load on the openflowjava, for processing the same information. Alternate solution is to dump these table features under different tree node "/node/openflow:xxx/table-features/1/", so if application need to read it, they should go to other path, rather than the "node/table/flow" path where frequently used information is stored. |
| Comment by Michal Rehak [ 25/May/16 ] |
|
Also we can create new root container to hold large table features (outside inventory). |
| Comment by Anil Vishnoi [ 25/May/16 ] |
|
That will scatter the node related information across the model and that probably will create more problem for the applications. What about another augmentation on the node – "flow-capable-node-table-features"? |
| Comment by Michal Rehak [ 25/May/16 ] |
|
That would open optimization door for java-api access (reading, listening). |
| Comment by Colin Dixon [ 25/May/16 ] |
|
Do we know if the depth= parameter of RESTCONF still works? That might be a work around. Also, only storing non-empty tables would help a lot, but I understand it's still information. |
| Comment by Colin Dixon [ 25/May/16 ] |
|
Was this a change in functionality between Beryllium release and SR2? My guess is most people would see generating an extra ~370,000 lines of data as a significant change in behavior to be introduced in an SR. I see this patch: which seems to offer a way to disable this, but was just after SR2. Does that work? Would it be a partial fix? |
| Comment by Anil Vishnoi [ 26/May/16 ] |
|
Table features functionality was part of the beryllium release from the first release. We do have patches up for review that provides option to disable/enable the functionality. https://git.opendaylight.org/gerrit/#/c/39150/6 For Helium plugin, table features are enabled by default, because DIDM/NIC project needs table features. We can't disable it till they move to alternate way to fetch the table features (rpc) or enable it specifically for their own project. |
| Comment by Michal Rehak [ 30/May/16 ] |
|
The real reason for suddenly having table features is that ovs started to announce them since version 2.4. We had table features with cpqd during Li already. Now we have at least 2 projects (NIC, DIDM) which rely on reading table features from DS/operational. So disabling table features is not really a solution. I guess we should inspect first if use-cases of those projects conflict and need to get notified upon table features changed. If not then we can assume:
|
| Comment by Anil Vishnoi [ 31/May/16 ] |
|
He design only fetch is once when switch connects to the controller, because as of now i believe table feature config is not supported. I think this is not just a problem with plugin performance, but for applications as well. It generates around 3.5 MB of data per switch, so any external application that's listening for the change notification through web socket, will get this huge amount of data and processing 3.5MB of data per switch will pretty much kill the performance of the external application. I personally feel that we should recommend applications to use rpc to fetch the table features. |
| Comment by Colin Dixon [ 17/Jun/16 ] |
|
It sounds like, in the short-run, the only way to fix this would be to move the table features information somewhere else: either an RPC or a separate model. In the long run, it seems like we'd like a more generic way for people get just want they want from RESTCONF. Maybe the answer is iterative depth-limited calls? That is you first get the list of switches, then you can just fetch what you want about the switches? |
| Comment by Jozef Bacigal [ 06/Jun/17 ] |
|
Closing this bug because there will be no more releases in Beryllium. |