<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:18:44 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>[FOLIO-2169] SPIKE investigate schema migrations in platform-core storage modules</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-2169</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;&lt;b&gt;Problem statement&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;FOLIO offers the following facilities for schema upgrades:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Okapi offers hooks for performing modules upgrades (from version A to version B) that may include data migrations&lt;/li&gt;
	&lt;li&gt;RMB offers automatic DB migrations based on &lt;em&gt;fromModuleVersion&lt;/em&gt; settings in schema.json and allows attaching custom SQL scripts to those migrations&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;What has not been sufficiently tested and verified is the complete flow for performing a module upgrade in a running FOLIO environment that includes a, potentially breaking, schema change. &lt;/p&gt;

&lt;p&gt;This process should include automatic migration of the existing data (stored in JSON document format) and migration of any DB entities (tables, columns, views, indices, etc).&lt;/p&gt;

&lt;p&gt;The upgrade procedure should allow for a safe upgrade &amp;#8211; it should be possible to restore original data in case the migration goes wrong.&lt;/p&gt;

&lt;p&gt;See 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;UXPROD-1815&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/UXPROD-1815&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;support for upgrading schemas without complete reload of data (DB migrations) - PoC + devops guide&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            UXPROD-1815
        &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 details and the TC tech debt presentation: &lt;a href=&quot;https://docs.google.com/presentation/d/1Cz5-xhvMdCdm7SXYLhIQE8KV9YIsQW1faNUIWmMANx8&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.google.com/presentation/d/1Cz5-xhvMdCdm7SXYLhIQE8KV9YIsQW1faNUIWmMANx8&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
        <key id="81330">FOLIO-2169</key>
            <summary>SPIKE investigate schema migrations in platform-core storage modules</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="557058:de4eac47-6d4e-4b50-9c3c-4a82ed705e52">Taras Spashchenko</assignee>
                                                                <reporter accountid="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d">Jakub Skoczen</reporter>
                                    <labels>
                            <label>platform-backlog</label>
                    </labels>
                <created>Tue, 16 Jul 2019 08:03:11 +0000</created>
                <updated>Wed, 3 Jun 2020 16:40:00 +0000</updated>
                            <resolved>Fri, 23 Aug 2019 14:38:42 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>6</watches>
                                                                <comments>
                                                            <comment id="192343" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Thu, 1 Aug 2019 12:15:49 +0000"  >&lt;p&gt;Taras&apos; document: &lt;a href=&quot;https://docs.google.com/document/d/1z6rgZK6EVERzRsvTnTKrCHeE5odaNoSJZqVyipuaEFM/edit?pli=1#&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.google.com/document/d/1z6rgZK6EVERzRsvTnTKrCHeE5odaNoSJZqVyipuaEFM/edit?pli=1#&lt;/a&gt;&lt;/p&gt;</comment>
                                                            <comment id="192345" author="5ee89462f7aa140abd82d11d" created="Fri, 16 Aug 2019 07:23:50 +0000"  >&lt;p&gt;Many modules are based on RMB.&lt;br/&gt;
Some are not:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Grails based modules: &lt;a href=&quot;https://github.com/folio-org/mod-agreements&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/mod-agreements&lt;/a&gt; , &lt;a href=&quot;https://github.com/folio-org/mod-licenses&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/mod-licenses&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Node.js based module: &lt;a href=&quot;https://github.com/folio-org/mod-graphql&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/mod-graphql&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The documentation should mention what migration task are needed for all Okapi modules and which are specific for RMB based modules. There are several way to accomplish this, one possibility is to add the general tasks to the Okapi documentation and the RMB specific tasks to the RMB documentation, with a link to each other.&lt;/p&gt;</comment>
                                                            <comment id="192348" author="557058:de4eac47-6d4e-4b50-9c3c-4a82ed705e52" created="Fri, 23 Aug 2019 14:38:19 +0000"  >&lt;p&gt;&lt;a href=&quot;https://github.com/folio-org/raml-module-builder/blob/master/DB-schema-migration.md&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/raml-module-builder/blob/master/DB-schema-migration.md&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="11064">UXPROD-1815</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="11213">UXPROD-2120</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </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|hzzwnj:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1856">CP: sprint 70</customfieldvalue>
    <customfieldvalue id="1780">CP: sprint 69</customfieldvalue>
    <customfieldvalue id="1158">CP: sprint 68</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10044" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 16 Aug 2019 07:23:50 +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>