<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:19:26 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-2269] Document distributed transaction use cases and solutions</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-2269</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;h2&gt;&lt;a name=&quot;Overview&quot;&gt;&lt;/a&gt;Overview&lt;/h2&gt;

&lt;p&gt;The tech leads recently discussed the topic of distributed transactions and possible solutions.  As a first step we agreed to document the scenarios and solutions (workarounds) employed, along with concrete examples.&lt;/p&gt;

&lt;p&gt;The acquisitions team has run into this problem frequently and has tried several different approaches.  For this reason it makes sense for them to take the lead in getting this documentation started.  &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=63e2a2771b13d42998e4e706&quot; class=&quot;user-hover&quot; rel=&quot;63e2a2771b13d42998e4e706&quot; data-account-id=&quot;63e2a2771b13d42998e4e706&quot; accountid=&quot;63e2a2771b13d42998e4e706&quot; rel=&quot;noreferrer&quot;&gt;Marc Johnson&lt;/a&gt; has also volunteered to contribute to this with examples from circulation.&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;Approach&quot;&gt;&lt;/a&gt;Approach&lt;/h2&gt;

&lt;p&gt;Create a wiki page with:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Introduction/Overview - what is the purpose of the page&lt;/li&gt;
	&lt;li&gt;Sections for each type of solution w/ explicit examples
	&lt;ul&gt;
		&lt;li&gt;Eventual consistency via vertx event bus (proactive)
		&lt;ul&gt;
			&lt;li&gt;PO/POL/Piece receiving/payment status&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;Eventual consistency via update on GET (reactive)
		&lt;ul&gt;
			&lt;li&gt;Calculation of invoice totals&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;Moving logic to Storage layer and using DB transactions
		&lt;ul&gt;
			&lt;li&gt;Transaction processing&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;etc.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Any other ideas that were discussed but not implemented for whatever reason (e.g. pub sub because it&apos;s not fully baked yet)&lt;/li&gt;
	&lt;li&gt;Links to related documentation e.g. spike deliverables&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Ideally we could provide initial lists of pros/cons for each of the documented approaches (probably in the respective sections).  At least add a sub-section where the pros/cons can be captured later on.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://folio-org.atlassian.net/wiki/display/TLG/Tech+Leads+Group+Home&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/wiki/display/TLG/Tech+Leads+Group+Home&lt;/a&gt; space in confluence might be a good home for this - suggestion, not a requirement&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;AcceptanceCriteria&quot;&gt;&lt;/a&gt;Acceptance Criteria&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;Wiki page is created as described above&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;NOTE:  Whoever takes this story may be asked to join the discussion in the tech leads meeting at some later date.  (Optional)&lt;/p&gt;</description>
                <environment></environment>
        <key id="81408">FOLIO-2269</key>
            <summary>Document distributed transaction use cases and solutions</summary>
                <type id="10005" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium">Story</type>
                            <parent id="10798">UXPROD-1144</parent>
                                    <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="5cf6c546b87c300f36eb7b9a">Craig McNally</assignee>
                                                                <reporter accountid="5cf6c546b87c300f36eb7b9a">Craig McNally</reporter>
                                    <labels>
                            <label>NFR</label>
                    </labels>
                <created>Wed, 18 Sep 2019 14:21:32 +0000</created>
                <updated>Wed, 3 Jun 2020 16:40:09 +0000</updated>
                            <resolved>Fri, 25 Oct 2019 13:53:21 +0000</resolved>
                                                                    <component>Documentation</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>5</watches>
                                                                <comments>
                                                            <comment id="193237" author="5cf6c546b87c300f36eb7b9a" created="Wed, 18 Sep 2019 14:27:19 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=61cd0ca0bce5e00069e98be7&quot; class=&quot;user-hover&quot; rel=&quot;61cd0ca0bce5e00069e98be7&quot; data-account-id=&quot;61cd0ca0bce5e00069e98be7&quot; accountid=&quot;61cd0ca0bce5e00069e98be7&quot; rel=&quot;noreferrer&quot;&gt;David Crossley&lt;/a&gt; I&apos;ve unassigned you (it was given to you automatically) - the acquisitions team will point and pull this story&lt;/p&gt;</comment>
                                                            <comment id="193241" author="63e2a2771b13d42998e4e706" created="Wed, 2 Oct 2019 10:45:53 +0000"  >&lt;p&gt;Given that no document has been set up for this yet, I thought I&apos;d provide some thoughts here.&lt;/p&gt;

&lt;p&gt;The most relevant example from circulation is when the item status is changed as part of circulation processes.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Updatingitemstatusduringcheckoutandcheckin&quot;&gt;&lt;/a&gt;Updating item status during check out and check in&lt;/h4&gt;

&lt;p&gt;Typically, when an item is checked out, a loan is created within circulation and the item status in inventory is changed to &lt;tt&gt;checked out&lt;/tt&gt;. If one of these operations fails, the other should be undone, which likely means the item status should be done first as it is likely easier to reverse.&lt;/p&gt;

&lt;p&gt;Similarly, when checking in an item, a loan could be closed, and the item status is likely to change, either to &lt;tt&gt;available&lt;/tt&gt; or a request fulfilment related status.&lt;/p&gt;

&lt;p&gt;This could get more complicated when there are other side effects applied from these changes, for example, loan action history or item status history.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Otherpossibleexamples&quot;&gt;&lt;/a&gt;Other possible examples&lt;/h4&gt;

&lt;ul&gt;
	&lt;li&gt;Creating instances via data import&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;&lt;a name=&quot;Whatdowemeanbydistributedtransactions&quot;&gt;&lt;/a&gt;What do we mean by distributed transactions&lt;/h4&gt;

&lt;p&gt;With the example above, it is relatively apparent that there are changes which need coordinating across contexts (circulation and inventory).&lt;/p&gt;

&lt;p&gt;As FOLIO uses distributed business logic and storage modules, we could also consider any operation that involves more than one record (maybe of the same type, maybe of different types) as a distributed transaction, even though these changes are in the same context.&lt;/p&gt;

&lt;p&gt;Using an example from above, during a check in, a loan might be closed and request fulfilment might start. It might be that both of these operations need to be reversed if one fails (it might also be that repeating the process is acceptable).&lt;/p&gt;</comment>
                                                            <comment id="193249" author="63519767d66d8108a1226c09" created="Mon, 21 Oct 2019 11:30:07 +0000"  >&lt;p&gt;Document created: &lt;a href=&quot;https://folio-org.atlassian.net/wiki/display/FOLIJET/Spike%3A+Distributed+transaction+use+cases+and+solutions&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/wiki/display/FOLIJET/Spike%3A+Distributed+transaction+use+cases+and+solutions&lt;/a&gt;. Information about Circulation from &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=63e2a2771b13d42998e4e706&quot; class=&quot;user-hover&quot; rel=&quot;63e2a2771b13d42998e4e706&quot; data-account-id=&quot;63e2a2771b13d42998e4e706&quot; accountid=&quot;63e2a2771b13d42998e4e706&quot; rel=&quot;noreferrer&quot;&gt;Marc Johnson&lt;/a&gt; added.&lt;/p&gt;</comment>
                                                            <comment id="193253" author="63e2a2771b13d42998e4e706" created="Tue, 22 Oct 2019 14:50:18 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5d89cef3c7d4e30dc28300ba&quot; class=&quot;user-hover&quot; rel=&quot;5d89cef3c7d4e30dc28300ba&quot; data-account-id=&quot;5d89cef3c7d4e30dc28300ba&quot; accountid=&quot;5d89cef3c7d4e30dc28300ba&quot; rel=&quot;noreferrer&quot;&gt;&#1042;&#1083;&#1072;&#1076;&#1080;&#1089;&#1083;&#1072;&#1074; &#1042;&#1077;&#1083;&#1080;&#1094;&#1082;&#1080;&#1081;&lt;/a&gt; That link appears to be broken, when I navigated to the page, it was actually at &lt;a href=&quot;https://folio-org.atlassian.net/wiki/pages/viewpage.action?pageId=1379386&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/wiki/pages/viewpage.action?pageId=1379386&lt;/a&gt; ?&lt;/p&gt;</comment>
                                                            <comment id="193258" author="63519767d66d8108a1226c09" created="Tue, 22 Oct 2019 14:56:26 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=63e2a2771b13d42998e4e706&quot; class=&quot;user-hover&quot; rel=&quot;63e2a2771b13d42998e4e706&quot; data-account-id=&quot;63e2a2771b13d42998e4e706&quot; accountid=&quot;63e2a2771b13d42998e4e706&quot; rel=&quot;noreferrer&quot;&gt;Marc Johnson&lt;/a&gt;, fixed.&lt;/p&gt;</comment>
                    </comments>
                    <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="10185"><![CDATA[Thunderjet]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10014" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue key="$xmlutils.escape($text)">Managing Ledgers, Funds, Budgets, Fiscals Years and tracking associated values</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzxuvb:1j</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="681">ACQ Sprint 74</customfieldvalue>
    <customfieldvalue id="703">ACQ Sprint 75</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10044" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10108" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                        <customfieldname>Tester Assignee</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5cf6c546b87c300f36eb7b9a</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 2 Oct 2019 10:45:53 +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>