<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:14:27 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[BGPCEP-904] Graph-impl is performing cross-datastore transactions</title>
                <link>https://jira.opendaylight.org/browse/BGPCEP-904</link>
                <project id="10108" key="BGPCEP">bgpcep</project>
                    <description>&lt;p&gt;ConnectedGraphServer is populating both Operational and Configuration datastores in a single transaction.&lt;/p&gt;

&lt;p&gt;This leads to sub-optimal performance and is deprecated funcitonality, which is going away in the next release.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="32593">BGPCEP-904</key>
            <summary>Graph-impl is performing cross-datastore transactions</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="2" iconUrl="https://jira.opendaylight.org/images/icons/priorities/critical.svg">High</priority>
                        <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="odd22">Olivier Dugeon</assignee>
                                    <reporter username="rovarga">Robert Varga</reporter>
                        <labels>
                    </labels>
                <created>Thu, 23 Apr 2020 09:30:51 +0000</created>
                <updated>Mon, 3 Aug 2020 11:23:51 +0000</updated>
                            <resolved>Mon, 3 Aug 2020 11:23:51 +0000</resolved>
                                                    <fixVersion>Aluminium</fixVersion>
                                    <component>General</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="68043" author="odd22" created="Thu, 23 Apr 2020 10:26:49 +0000"  >&lt;p&gt;Good catch. Indeed, ConnectedGraphServer initializes both Operational and Configuration datastore. Initialize Configuration is wrongly placed. I&apos;ll split initialization in two separate transactions.&lt;/p&gt;</comment>
                            <comment id="68048" author="rovarga" created="Thu, 23 Apr 2020 13:35:49 +0000"  >&lt;p&gt;I wonder, what is the intent in actually writing to CONFIG here? I mean that&apos;s persisted by default, so should it really be initialized each startup...&lt;/p&gt;</comment>
                            <comment id="68049" author="odd22" created="Thu, 23 Apr 2020 13:44:43 +0000"  >&lt;p&gt;Graph in Config Datastore is here to give the possibility to manually provide a topology or complete an automatic topology discovery (e.g. through BGP-LS). But Path Algorithms are working on the connected graph which is computed from the Operational Graph. So, GraphListener is here to listen to Graph Configuration and populate Graph Operational like LinkstateGraphBuilder done with Linkstate Routes.&lt;/p&gt;

&lt;p&gt;If Graph Configuration is not initialized, I&apos;m afraid that GraphListener could not start correctly. I&apos;m thinking to initialize Graph Configuration in GraphListener class, but, this is more complex as simply split the Graph initialization in two separate transactions.&lt;/p&gt;

&lt;p&gt;Now, regarding persistence, I could add some trigger to initialize the Graph Configuration only if it&apos;s not exist if it makes sense.&lt;/p&gt;</comment>
                            <comment id="68051" author="rovarga" created="Thu, 23 Apr 2020 15:03:00 +0000"  >&lt;p&gt;Why would the GraphListener not start? I mean it should be just fine with no config being present, right?&lt;/p&gt;

&lt;p&gt;Also, the init actually actively overwrite config datastore &#8211; so even if there was something there, you&apos;ll end up wiping it on start &#8211; that does not feel like config at all. As for the BGP-LS discovery, etc. that certainly should not go through config &#8211; it very much feels liek you really want to have multiple instances in oper and each instance having a semantic meaning. The user-supplied configuration (which would be persisted) would live in config, but code components would never actively write to it and instead move it to oper &#8211; this is very much what BGP already does anyway ...&lt;/p&gt;</comment>
                            <comment id="68052" author="odd22" created="Thu, 23 Apr 2020 16:43:14 +0000"  >&lt;blockquote&gt;&lt;p&gt;Why would the GraphListener not start? I mean it should be just fine with no config being present, right?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I try to launch the Graph without the creation of initial GraphModel top node in config datastore, but in this case, you are unable to add some graph in config. I need at least to create the graph-model top node in the config datastore. Now, I agree that it is certainly the role of GraphListnener to do that instead of ConnectedGraphServer.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Also, the init actually actively overwrite config datastore &#8211; so even if there was something there, you&apos;ll end up wiping it on start &#8211; that does not feel like config at all.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I just would create the graph-model top node in the config datastore like I do for the operational datastore. Perhaps we could do this differently with some xml file. But well, It is just the top node with no graph inside. Just let me know what it is the better design.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;As for the BGP-LS discovery, etc. that certainly should not go through config &#8211; it very much feels liek you really want to have multiple instances in oper and each instance having a semantic meaning. The user-supplied configuration (which would be persisted) would live in config, but code components would never actively write to it and instead move it to oper &#8211; this is very much what BGP already does anyway ...&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;As mention, Graph model in configuration is just here to give the possibility to provide a graph with the REST API instead of through BGP-LS. This allows an operator to provide a network topology that it collect through another tools which not speaks BGP-LS. This could be also helpful to provide static topology or complement a topology acquired through BGP-LS. In all cases, the active topology on which Path Computation Algorithms oper is the Connected Graph Model issue from the Graph Model in operational datastore.&lt;/p&gt;

&lt;p&gt;Just let me know where is the best place to create the graph-model top node for the Configuration datastore&lt;/p&gt;</comment>
                            <comment id="68053" author="odd22" created="Thu, 23 Apr 2020 17:18:26 +0000"  >&lt;p&gt;So, I finally simply drop initialization of GraphModel in Configuration datastore&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03s1z:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>