<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:55:55 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>[CONTROLLER-1587] Fix blueprint assumptions around odl:rpc-service</title>
                <link>https://jira.opendaylight.org/browse/CONTROLLER-1587</link>
                <project id="10113" key="CONTROLLER">controller</project>
                    <description>&lt;p&gt;The odl:rpc-service extension makes assumptions about RPC lifecycle which are not strictly true when the definition is translated to DOMRpcIdentifier, most notably about when an RPC implementation is registered.&lt;/p&gt;

&lt;p&gt;Current codebase happens to work due to how sal-remoterpc-connector integrates with DOMRpcRouter, but that integration needs to be redone to fix BUG-3128. That in turn breaks assumptions in blueprint.&lt;/p&gt;

&lt;p&gt;Refine the odl:rpc-service contract to cover registration semantics with respect to routed RPCs and implement it in a way, which will not break in absence of sal-remoterpc-connector.&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="26141">CONTROLLER-1587</key>
            <summary>Fix blueprint assumptions around odl:rpc-service</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                                <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="rovarga">Robert Varga</assignee>
                                    <reporter username="rovarga">Robert Varga</reporter>
                        <labels>
                    </labels>
                <created>Fri, 20 Jan 2017 10:26:34 +0000</created>
                <updated>Tue, 25 Jul 2023 08:24:20 +0000</updated>
                            <resolved>Thu, 9 Feb 2017 10:30:10 +0000</resolved>
                                                                    <component>blueprint</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="51719" author="rovarga" created="Fri, 20 Jan 2017 15:29:08 +0000"  >&lt;p&gt;Additional analysis shows that the problem is interaction between blueprint&apos;s (and by extension end-user&apos;s) expectation versus how RPC routing works.&lt;/p&gt;

&lt;p&gt;Current BP odl:rpc-service and odl:rpc-implementation can only work as envisioned for binding FooService completely composed of global RPCs. It acts as a dependency activation gate before the component activates.&lt;/p&gt;

&lt;p&gt;Routed RPCs (&apos;actions&apos; to use RFC7950 term) work in a rather different way, as they come and go as their contexts change. In this case BP wiring really wants to express a dependency on &apos;someone has promised to instantiate actions&apos;.&lt;/p&gt;

&lt;p&gt;That contract is currently &apos;provided&apos; by sal-remoterpc-connector by blanked-subscribing as an implementation for all actions. This has the side-effect of rendering BP dependency wiring in this case not working, for example for OFP&apos;s lldp-speaker.xml &amp;#8211; it depends on PacketProcessingService, which is supposed to be exported from openflowplugin&apos;s blueprint (i.e. OFP instance registers actions for each connect OF switch). But lldp-speaker activation will not be blocked waiting for openflowplugin, but rather it will activate immediately due to sal-remoterpc-connector pretending to provide that promise. &lt;/p&gt;

&lt;p&gt;Another layer of features is to have beans dynamically start when a specific action (on a context) is registered, but making that work means we have to actually react to actions and RPCs disappearing &amp;#8211; this is out of scope of this issue, but needs to be considered in the solution domain here.&lt;/p&gt;

&lt;p&gt;To solve this issue and BUG-3128 without breaking the world, we will need to provide a partial fix for this issue, then fix sal-remoterpc-connector (and DOMRpcBroker) and then finalize the fix for this issue.&lt;/p&gt;</comment>
                            <comment id="51720" author="rovarga" created="Fri, 20 Jan 2017 15:54:46 +0000"  >&lt;p&gt;The fix is to provide a clear split between actions and rpcs, in a way which is forward-compatible with YANG 1.1 and Java Binding V2 (where each action is its own entity).&lt;/p&gt;

&lt;p&gt;This will be done by defining a odl:action-service and odl:action-provider, which mirror the semantics of odl:rpc-&lt;/p&gt;
{service,implementation}
&lt;p&gt;.&lt;/p&gt;

&lt;p&gt;An odl:action-provider designates a bean, which holds the promise to instantiate action instances. As soon as that bean is instantiated, the promise is fulfilled and the promise is populated into DOMRpcRegistry.&lt;/p&gt;

&lt;p&gt;An odl:action-service declares a dependency to have at least one odl:action-provider active.&lt;/p&gt;

&lt;p&gt;The terms odl:action-instance and odl:action-implementation are reserved for future use. odl:action-implementation will provide an implementation of an action on a particular context (much like odl:routed-rpc-implementation). odl:action-instance will be used to reference to action-implementation. This will be added to XSD, but will be left unimplemented until such time as true dynamic services are needed.&lt;/p&gt;

&lt;p&gt;The first part of the fix is to provide these concepts and add a basic compatible implementation, i.e. odl:action-service will be always considered to be fulfilled if a model for it exists. The code will also detect and warn about ambiguous use of odl:rpc-service when the specified interface also contains an action (routed RPC).&lt;/p&gt;</comment>
                            <comment id="51721" author="rovarga" created="Thu, 26 Jan 2017 18:03:46 +0000"  >&lt;p&gt;DOMRpcService contract clarification: &lt;a href=&quot;https://git.opendaylight.org/gerrit/51034&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/51034&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="51722" author="rovarga" created="Fri, 27 Jan 2017 12:53:57 +0000"  >&lt;p&gt;New action-provider/action-service contracts: &lt;a href=&quot;https://git.opendaylight.org/gerrit/50784&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/50784&lt;/a&gt;&lt;br/&gt;
OFP fix (requiring the above): &lt;a href=&quot;https://git.opendaylight.org/gerrit/51115&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/51115&lt;/a&gt;&lt;br/&gt;
Final activation: &lt;a href=&quot;https://git.opendaylight.org/gerrit/51114&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/51114&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="51723" author="rovarga" created="Thu, 2 Feb 2017 11:52:26 +0000"  >&lt;p&gt;boron: &lt;a href=&quot;https://git.opendaylight.org/gerrit/51204&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/51204&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="51724" author="tcechval@cisco.com" created="Thu, 9 Feb 2017 09:55:05 +0000"  >&lt;p&gt;rpc error&lt;/p&gt;</comment>
                            <comment id="51729" author="tcechval@cisco.com" created="Thu, 9 Feb 2017 09:55:05 +0000"  >&lt;p&gt;Attachment rpcerror.txt has been added with description: rpc error&lt;/p&gt;</comment>
                            <comment id="51725" author="tcechval@cisco.com" created="Thu, 9 Feb 2017 09:57:08 +0000"  >&lt;p&gt;log&lt;/p&gt;</comment>
                            <comment id="51730" author="tcechval@cisco.com" created="Thu, 9 Feb 2017 09:57:08 +0000"  >&lt;p&gt;Attachment karaf_log_error.txt has been added with description: log&lt;/p&gt;</comment>
                            <comment id="51726" author="tcechval@cisco.com" created="Thu, 9 Feb 2017 10:04:27 +0000"  >&lt;p&gt;This does not quite work in cluster singleton service&lt;/p&gt;

&lt;p&gt;our blueprint configuration&lt;br/&gt;
&lt;a href=&quot;https://github.com/opendaylight/groupbasedpolicy/blob/master/renderers/vpp/src/main/resources/org/opendaylight/blueprint/vpp-renderer.xml&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/opendaylight/groupbasedpolicy/blob/master/renderers/vpp/src/main/resources/org/opendaylight/blueprint/vpp-renderer.xml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;    &amp;lt;bean id=&quot;vppRenderer&quot; class=&quot;org.opendaylight.controller.config.yang.config.vpp_provider.impl.GbpVppProviderInstance&quot;&lt;br/&gt;
        init-method=&quot;initialize&quot; destroy-method=&quot;close&quot;&amp;gt;&lt;br/&gt;
        &amp;lt;argument ref=&quot;dataBroker&quot;/&amp;gt;&lt;br/&gt;
        &amp;lt;argument ref=&quot;broker&quot;/&amp;gt;&lt;br/&gt;
        &amp;lt;argument ref=&quot;clusterSingletonService&quot; /&amp;gt;&lt;br/&gt;
    &amp;lt;/bean&amp;gt;&lt;/p&gt;

&lt;p&gt;    &amp;lt;odl:rpc-implementation ref=&quot;vppRenderer&quot;/&amp;gt;&lt;/p&gt;

&lt;p&gt;Errors are returned, when sending RPCs to follower node (not leader).&lt;br/&gt;
Please see rpc_error and log in the attachment.&lt;/p&gt;

&lt;p&gt;NPE is caught here on line 104&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/opendaylight/groupbasedpolicy/blob/master/renderers/vpp/src/main/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/GbpVppProviderInstance.java&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/opendaylight/groupbasedpolicy/blob/master/renderers/vpp/src/main/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/GbpVppProviderInstance.java&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;    @Override&lt;br/&gt;
    public Future&amp;lt;RpcResult&amp;lt;Void&amp;gt;&amp;gt; createVirtualBridgeDomainOnNodes(CreateVirtualBridgeDomainOnNodesInput input) &lt;/p&gt;
{
        return renderer.getVppRpcServiceImpl().createVirtualBridgeDomain(input);
    }


&lt;p&gt;However, RPCs are processed correctly when sent to the leader node.&lt;/p&gt;</comment>
                            <comment id="51727" author="rovarga" created="Thu, 9 Feb 2017 10:12:55 +0000"  >&lt;p&gt;Of course it does not. The reason for that is that the GbpVppProviderInstance is not fully initialized by the time it gets registered as a provider &amp;#8211; i.e. instantiateServiceInstance() has not been called.&lt;/p&gt;

&lt;p&gt;This effectively means you cannot use odl:rpc-implementation to inject the bean as an implementation &amp;#8211; you have to do it yourself from instantiateServiceInstance()... unless there is a blueprint way to have GbpVppProviderInstance bean created based on singleton service.&lt;/p&gt;</comment>
                            <comment id="51728" author="rovarga" created="Thu, 9 Feb 2017 10:30:10 +0000"  >&lt;p&gt;So with the current setup you are registering an implementation on each node, even before it is fully initialized. Once singleton does its thing, one of the implementations will become operational &amp;#8211; but there is a time window when you already have registered it, but it is not initialized.&lt;/p&gt;

&lt;p&gt;RPCs are always routed to the closest registered instance, in this case it will end up always being the local one &amp;#8211; whether it is operational or not.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="25846">CONTROLLER-1292</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="13609" name="karaf_log_error.txt" size="25907" author="tcechval" created="Thu, 9 Feb 2017 09:57:08 +0000"/>
                            <attachment id="13608" name="rpcerror.txt" size="8992" author="tcechval" created="Thu, 9 Feb 2017 09:55:05 +0000"/>
                    </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_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>7608</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10201" key="com.atlassian.jira.plugin.system.customfieldtypes:url">
                        <customfieldname>External issue URL</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[https://bugs.opendaylight.org/show_bug.cgi?id=7608]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10206" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Issue Type</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10300"><![CDATA[Bug]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10204" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>ODL SR Target Milestone</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10344"><![CDATA[Boron-3]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i02rhr:</customfieldvalue>

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