<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:14:05 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 add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[OKAPI-661] Test effect of module renaming on Okapi dep resolution</title>
                <link>https://folio-org.atlassian.net/browse/OKAPI-661</link>
                <project id="10137" key="OKAPI">Okapi</project>
                    <description>&lt;p&gt;mod-finance has been renamed to mod-finance-storage. How will Okapi resolve dependencies with multiple modules that support the same interfaces, and what effect will that have on the snapshot CI build?&lt;/p&gt;</description>
                <environment></environment>
        <key id="54016">OKAPI-661</key>
            <summary>Test effect of module renaming on Okapi dep resolution</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10002" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p3.svg">P3</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="5f8314dfbdef80006f6f572d">Adam Dickmeiss</assignee>
                                                                <reporter accountid="5c706fbb47a54a6728e59df2">Wayne Schneider</reporter>
                                    <labels>
                            <label>ci</label>
                            <label>core</label>
                            <label>sprint47</label>
                            <label>sprint48</label>
                    </labels>
                <created>Thu, 27 Sep 2018 19:26:29 +0000</created>
                <updated>Wed, 4 May 2022 14:57:07 +0000</updated>
                            <resolved>Wed, 30 Jan 2019 15:52:08 +0000</resolved>
                                    <version>2.17.4</version>
                                    <fixVersion>2.24.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                <comments>
                                                            <comment id="124918" author="5c706fbb47a54a6728e59df2" created="Thu, 27 Sep 2018 19:43:40 +0000"  >&lt;p&gt;On a clean Okapi install, posted MDs for &lt;tt&gt;mod-finance-1.0.1-SNAPSHOT.28&lt;/tt&gt; and &lt;tt&gt;mod-finance-storage-1.0.1-SNAPSHOT.1&lt;/tt&gt; with the same content except for the module ID, and an MD for &lt;tt&gt;folio_finance-1.0.100017&lt;/tt&gt; which requires those interfaces. A request to the tenant&apos;s &lt;tt&gt;install&lt;/tt&gt; endpoint to enable &lt;tt&gt;folio_finance&lt;/tt&gt; resulted in:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
[
    {
        &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;mod-finance-storage-1.0.1-SNAPSHOT.1&quot;&lt;/span&gt;,
        &lt;span class=&quot;code-quote&quot;&gt;&quot;action&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;enable&quot;&lt;/span&gt;
    },
    {
        &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;folio_finance-1.0.100017&quot;&lt;/span&gt;,
        &lt;span class=&quot;code-quote&quot;&gt;&quot;action&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;enable&quot;&lt;/span&gt;
    }
]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Okapi log shows:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
2018-09-27 19:39:36,303 INFO  ProxyContext         700577/proxy REQ 10.0.2.2:51294 supertenant POST /_/proxy/tenants/test/install okapi-2.17.4
2018-09-27 19:39:36,308 INFO  TenantManager        mod available: folio_finance-1.0.100017
2018-09-27 19:39:36,308 INFO  TenantManager        mod available: mod-finance-1.0.1-SNAPSHOT.28
2018-09-27 19:39:36,308 INFO  TenantManager        mod available: mod-finance-storage-1.0.1-SNAPSHOT.1
2018-09-27 19:39:36,308 INFO  TenantManager        mod available: okapi-2.17.4
2018-09-27 19:39:36,309 INFO  TenantManager        &lt;span class=&quot;code-keyword&quot;&gt;outer&lt;/span&gt; loop i=0 tml.size=1
2018-09-27 19:39:36,309 INFO  TenantManager        getNextTM: loop id=folio_finance-1.0.100017 action=enable
2018-09-27 19:39:36,309 INFO  TenantManager        getNextMT: &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; tm &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; action=enable
2018-09-27 19:39:36,309 INFO  ModuleManager        addModuleDependencies folio_finance-1.0.100017
2018-09-27 19:39:36,310 INFO  ModuleManager        addModuleDependencies mod-finance-storage-1.0.1-SNAPSHOT.1
2018-09-27 19:39:36,310 INFO  ModuleManager        Dependency OK already enabled id=mod-finance-storage-1.0.1-SNAPSHOT.1
2018-09-27 19:39:36,311 INFO  ModuleManager        Dependency OK already enabled id=mod-finance-storage-1.0.1-SNAPSHOT.1
2018-09-27 19:39:36,312 INFO  ModuleManager        Dependency OK already enabled id=mod-finance-storage-1.0.1-SNAPSHOT.1
2018-09-27 19:39:36,312 INFO  ModuleManager        Dependency OK already enabled id=mod-finance-storage-1.0.1-SNAPSHOT.1
2018-09-27 19:39:36,313 INFO  ModuleManager        Dependency OK already enabled id=mod-finance-storage-1.0.1-SNAPSHOT.1
2018-09-27 19:39:36,313 INFO  TenantManager        &lt;span class=&quot;code-keyword&quot;&gt;outer&lt;/span&gt; loop i=1 tml.size=2
2018-09-27 19:39:36,314 INFO  TenantManager        getNextTM: loop id=mod-finance-storage-1.0.1-SNAPSHOT.1 action=enable
2018-09-27 19:39:36,314 INFO  TenantManager        getNextTM: loop id=folio_finance-1.0.100017 action=enable
2018-09-27 19:39:36,314 INFO  TenantManager        getNextTM done &lt;span class=&quot;code-keyword&quot;&gt;null&lt;/span&gt;
2018-09-27 19:39:36,314 INFO  TenantManager        installModules.returning OK
2018-09-27 19:39:36,315 INFO  InternalModule       installUpgradeModules returns:
[ {
  &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt; : &lt;span class=&quot;code-quote&quot;&gt;&quot;mod-finance-storage-1.0.1-SNAPSHOT.1&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;action&quot;&lt;/span&gt; : &lt;span class=&quot;code-quote&quot;&gt;&quot;enable&quot;&lt;/span&gt;
}, {
  &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt; : &lt;span class=&quot;code-quote&quot;&gt;&quot;folio_finance-1.0.100017&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;action&quot;&lt;/span&gt; : &lt;span class=&quot;code-quote&quot;&gt;&quot;enable&quot;&lt;/span&gt;
} ]
2018-09-27 19:39:36,316 INFO  ProxyContext         700577/proxy RES 200 12851us okapi-2.17.4 /_/proxy/tenants/test/install..
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This happens to be what we want, but I&apos;m not sure why Okapi picked mod-finance-storage over mod-finance. &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f8314dfbdef80006f6f572d&quot; class=&quot;user-hover&quot; rel=&quot;5f8314dfbdef80006f6f572d&quot; data-account-id=&quot;5f8314dfbdef80006f6f572d&quot; accountid=&quot;5f8314dfbdef80006f6f572d&quot; rel=&quot;noreferrer&quot;&gt;Adam Dickmeiss&lt;/a&gt;, any ideas?&lt;/p&gt;</comment>
                                                            <comment id="124919" author="5c706fbb47a54a6728e59df2" created="Thu, 4 Oct 2018 18:36:17 +0000"  >&lt;p&gt;I moved this issue into the Okapi project and unassigned myself. I&apos;m not sure it&apos;s a bug, or if it&apos;s just undefined behavior. Feel free to close out if it doesn&apos;t seem useful to investigate. With respect to our immediate issue, Okapi seems to be (accidentally?) doing what we want it to do (picking mod-finance-storage over mod-finance to resolve the dependencies expressed by folio_finance).&lt;/p&gt;</comment>
                                                            <comment id="124920" author="5f8314dfbdef80006f6f572d" created="Tue, 9 Oct 2018 19:22:05 +0000"  >&lt;p&gt;If you enable only folio_finance, you are right that it&apos;s currently undefined what it does. I think it should make an error in this &amp;#8211; because there are multiple modules providing the interface.&lt;/p&gt;

&lt;p&gt;However, if you along with folio_finance enable the one you really want it should work fine.. Ie pick what you choose. At least that&apos;s what I see when I make a unit test for this.&lt;/p&gt;
</comment>
                                                            <comment id="124921" author="5c706fbb47a54a6728e59df2" created="Tue, 9 Oct 2018 19:37:31 +0000"  >&lt;p&gt;Yes, that does make sense. I wonder if it would be helpful to return a structured error, so that the user can know what to do when they run into this situation?&lt;/p&gt;

&lt;p&gt;It would make the task of doing a &quot;top-down&quot; installation a little more challenging, since you may need to do it in multiple passes (that is, post your install list, discover which dependencies are met by multiple implementations, then re-post with the ambiguities resolved). Or would there be a better way to do this?&lt;/p&gt;

&lt;p&gt;Maybe we should support some form of disambiguation in the &lt;tt&gt;requires&lt;/tt&gt; key of the module descriptor? Because we are depending on interfaces rather than implementations, it&apos;s not quite as straightforward as what you can do with apt&apos;s &lt;tt&gt;Depends&lt;/tt&gt; (e.g. &lt;tt&gt;A | B&lt;/tt&gt; to satisfy the dep with A or B, trying to install first A and then B if neither is currently installed).&lt;/p&gt;</comment>
                                                            <comment id="124922" author="5f8314dfbdef80006f6f572d" created="Wed, 10 Oct 2018 12:53:55 +0000"  >&lt;p&gt;Here&apos;s how to deal with renaming a module.&lt;/p&gt;

&lt;p&gt;0. Specify it in install. The install was exactly meant for you to choose what modules you want to use .. especially when there are multiple modules offering the same interface.. Not much yet.. But it&apos;s like choosing your email-agent of choice in Debian ..&lt;/p&gt;

&lt;p&gt;1. Remove the old module from the repository entirely.. If the interface is unchanged and it really is the same implementation why keep it?&lt;/p&gt;

&lt;p&gt;2. Change the interface provided/required.. If the major interface change or the interface is renamed, it is essentially like linking a new module .. This requires both consumer and producers of the module.. So this is actually not very optimal.&lt;/p&gt;

&lt;p&gt;3 (NOT POSSIBLE YET). Add some module require thingy.. But that requires all consumers to depend on a particular module rather than an interface.. Thus all consumers must be updated. It violates the whole interface dependency thingy.. What if you want to rename mod-codex-mux?? &lt;/p&gt;

&lt;p&gt;4 (NOT POSSIBLE YET). Add a new field &quot;replaces&quot;: &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;mod-1&amp;quot;, &amp;quot;mod-2&amp;#93;&lt;/span&gt; .. field in the module descriptor.. This is like replaces in Debian and ONLY requires the producer to make a change.. And clearly, that is less work than requiring consumers to do the same. This would work for codex or login too with multiple interfaces..&lt;/p&gt;

&lt;p&gt;If we foresee more renames in the future solution 4 could be implemented. It is relatively easy to do.&lt;/p&gt;</comment>
                                                            <comment id="124923" author="5f8314dfbdef80006f6f572d" created="Thu, 11 Oct 2018 10:49:53 +0000"  >&lt;p&gt;I&apos;ll keep this open for now. . Opened 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;OKAPI-665&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/OKAPI-665&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Report conflict when multiple modules provides compatible interface&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium&quot; /&gt;
            OKAPI-665
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 for at  least not choosing a &quot;random&quot; module when multiple modules satisfy a dependency.&lt;/p&gt;</comment>
                                                            <comment id="124924" author="5f8314dfbdef80006f6f572d" created="Wed, 30 Jan 2019 15:51:46 +0000"  >&lt;p&gt;Implemented (SOLUTION 4 before)&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
 &quot;id&quot; : &quot;new-module-1.2.0&quot;
 &quot;replaces&quot;: [ &quot;old-module&quot; ]
},
..
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="54024">OKAPI-665</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79552">FOLIO-1727</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81176">FOLIO-1938</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81074">FOLIO-1753</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="54013">OKAPI-648</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="56436">MODINVSTOR-900</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10144"><![CDATA[Core: Platform]]></customfieldvalue>

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

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Tue, 9 Oct 2018 19:22:05 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>