<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:17:07 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-1953] SPIKE: propose an approach for scheduling tasks in Okapi</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-1953</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;We currently only have the scheduling capability in the storage modules as provided by RMB. There is a need to have a scheduling capability also in the BL modules (e.g mod-circulation, please link the appropriate stories). &lt;/p&gt;

&lt;p&gt;Since BL modules have no persistence and may run in multiple instance we need a solution that will ensure the scheduling is coordinated (the scheduled event happens only once).&lt;/p&gt;

&lt;p&gt;Also, any scheduled activities needed to be granted permissions to interact with other module endpoints.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;DRAFT PROPOSAL&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;One option is to do scheduling in Okapi;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;extend the module descriptor with a a new &quot;handler&quot; type that would also include a property that would indicate to Okapi that the handler should be called periodically (e.g &quot;tick&quot; = minute,quarter,hour) (should this really be part of the tenant API?)&lt;/li&gt;
	&lt;li&gt;have Okapi elect a designated scheduling instance that will call the &quot;handler&quot; and ensure the handler is called only once&lt;/li&gt;
	&lt;li&gt;have the scheduling Okapi instance call the &quot;handler&quot; with a token that include permission reported though modulePermissions.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="81188">FOLIO-1953</key>
            <summary>SPIKE: propose an approach for scheduling tasks in Okapi</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="10001" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p2.svg">P2</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="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d">Jakub Skoczen</reporter>
                                    <labels>
                            <label>platform-backlog</label>
                    </labels>
                <created>Tue, 9 Apr 2019 09:37:35 +0000</created>
                <updated>Thu, 9 Jul 2020 19:41:06 +0000</updated>
                            <resolved>Mon, 6 May 2019 12:45:42 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>15</watches>
                                                                <comments>
                                                            <comment id="193491" author="63e2a2771b13d42998e4e706" created="Wed, 10 Apr 2019 10:50:16 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A925f55a1-465f-4875-8818-49cbe9a45838&quot; class=&quot;user-hover&quot; rel=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; data-account-id=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; accountid=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; rel=&quot;noreferrer&quot;&gt;Kostyantyn Khodarev&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5af5ed55244bc90a106063c7&quot; class=&quot;user-hover&quot; rel=&quot;5af5ed55244bc90a106063c7&quot; data-account-id=&quot;5af5ed55244bc90a106063c7&quot; accountid=&quot;5af5ed55244bc90a106063c7&quot; rel=&quot;noreferrer&quot;&gt;Cate Boerema&lt;/a&gt; Below is a quick write up of what I think are the initial requirements &lt;sup&gt;1&lt;/sup&gt; and possible future extensions. Do these seem reasonable and fit with what we talked about? Have I missed anything?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Initial Requirements&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;All tasks &lt;sup&gt;2&lt;/sup&gt; are defined when a module is enabled for a tenant&lt;/li&gt;
	&lt;li&gt;A task can be granted permissions which allow it to make requests to other modules&lt;/li&gt;
	&lt;li&gt;Each execution of a task happens on only one module instance&lt;/li&gt;
	&lt;li&gt;A task can be scheduled to execute at an interval chosen by the module&lt;/li&gt;
	&lt;li&gt;Smallest execution interval can be 1 minute (no need for seconds precision, in practice this is likely to be  5 minutes or more)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;These closely mimic the current scheduling implementation in RAML Module Builder. The main differences are that it is tenant aware (rather than running as soon as the module is deployed) and limited to running on only a single instance.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Possible Future Extensions&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Schedule can be more complicated than only an interval between executions&lt;/li&gt;
	&lt;li&gt;A module can register new scheduled tasks (e.g. could register a specific task for expiry of a single request if we wanted)&lt;/li&gt;
	&lt;li&gt;Scheduled task can be run once (or a defined number of times)&lt;/li&gt;
	&lt;li&gt;A module can remove scheduled tasks (may need to consider ownership of tasks)&lt;/li&gt;
	&lt;li&gt;A module can change the schedule for a task&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;1) I&apos;ve tried to defer any description of how this could be accomplished to a later comment&lt;br/&gt;
2) I&apos;ve used the term task to be consistent with other parts of this issue&lt;/p&gt;</comment>
                                                            <comment id="193496" author="557058:925f55a1-465f-4875-8818-49cbe9a45838" created="Fri, 12 Apr 2019 15:36:24 +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;&lt;br/&gt;
Proposed solution fits our needs&lt;br/&gt;
It&apos;s possible to implement patron notices on top of described scheduling functionality. &lt;/p&gt;</comment>
                                                            <comment id="193501" author="5af5ed55244bc90a106063c7" created="Wed, 17 Apr 2019 11:01:18 +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; maybe you can take a look at the requirements outlined in the issues I&apos;ve linked up just to double check it&apos;s all covered.  For example, do we want to have the Okapi scheduler handle the closed library due date management stuff?  This is desired for hold shelf expiration period calculation.  What about short term hold shelf expiration periods?  Will this scheduler be able to be run frequently enough to expire those relatively quickly?  &lt;/p&gt;

&lt;p&gt;Here are the issues that seem relevant to look at: 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;UIREQ-246&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/UIREQ-246&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Hold Shelf Expiration Date Should Respect Closed Library Dates&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            UIREQ-246
        &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;
, 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;CIRC-292&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRC-292&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Set Item Status to &amp;quot;Pickup expired&amp;quot; when &amp;quot;Awaiting pickup&amp;quot; Item Expires or is Cancelled&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            CIRC-292
        &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;
 and 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;CIRCSTORE-133&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRCSTORE-133&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Request Expiration Job Takes Too Long for Short Term Expiry Periods&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            CIRCSTORE-133
        &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;
&lt;/p&gt;</comment>
                                                            <comment id="193509" author="63e2a2771b13d42998e4e706" created="Tue, 23 Apr 2019 14:25:16 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5af5ed55244bc90a106063c7&quot; class=&quot;user-hover&quot; rel=&quot;5af5ed55244bc90a106063c7&quot; data-account-id=&quot;5af5ed55244bc90a106063c7&quot; accountid=&quot;5af5ed55244bc90a106063c7&quot; rel=&quot;noreferrer&quot;&gt;Cate Boerema&lt;/a&gt; That will depend upon the approach.&lt;/p&gt;

&lt;p&gt;If my suggestion of initial requirements is accepted, then it should be possible to schedule task execution up to every minute (in another issue, there is a conversation about making loan due date only accurate to a minute precision).&lt;/p&gt;

&lt;p&gt;Where this gets more complicated is that if a task is executed every minute, we need to be careful about how much work that picks up (e.g. what question it asks about records to expire) and how long it takes to run.&lt;/p&gt;

&lt;p&gt;We need to either design the tasks to avoid overlapping the work they pick up, handle the overlap, or make sure the execute fast enough to not execute for longer than the interval between executions.&lt;/p&gt;

&lt;p&gt;These considerations will need to be taken into account for any story involving scheduled tasks. &lt;/p&gt;

&lt;p&gt;Does that make sense?&lt;/p&gt;</comment>
                                                            <comment id="193515" author="5af5ed55244bc90a106063c7" created="Wed, 24 Apr 2019 13:32:02 +0000"  >&lt;p&gt;Yes - thanks!  &lt;/p&gt;</comment>
                                                            <comment id="193518" author="5f8314dfbdef80006f6f572d" created="Wed, 24 Apr 2019 14:08:46 +0000"  >&lt;p&gt;Similar to &lt;tt&gt;_tenant&lt;/tt&gt; and &lt;tt&gt;_tenantPermissions&lt;/tt&gt; WRT path and permissions a new interface &lt;tt&gt;_timer&lt;/tt&gt; could be provided:&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;provides&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;_timer&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;1.0&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;interfaceType&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;system&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;handlers&quot;&lt;/span&gt;: [
        {
          &lt;span class=&quot;code-quote&quot;&gt;&quot;methods&quot;&lt;/span&gt;: [ &lt;span class=&quot;code-quote&quot;&gt;&quot;POST&quot;&lt;/span&gt; ],
          &lt;span class=&quot;code-quote&quot;&gt;&quot;pathPattern&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/mypath&quot;&lt;/span&gt;,
          &lt;span class=&quot;code-quote&quot;&gt;&quot;modulePermissions&quot;&lt;/span&gt; : [ &lt;span class=&quot;code-quote&quot;&gt;&quot;someperm&quot;&lt;/span&gt; ],
          &lt;span class=&quot;code-quote&quot;&gt;&quot;wait&quot;&lt;/span&gt; : &lt;span class=&quot;code-quote&quot;&gt;&quot;5&quot;&lt;/span&gt;,
          &lt;span class=&quot;code-quote&quot;&gt;&quot;unit&quot;&lt;/span&gt; : &lt;span class=&quot;code-quote&quot;&gt;&quot;minute&quot;&lt;/span&gt;
        }
      ]
    }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In this example once very 5 minutes.&lt;/p&gt;</comment>
                                                            <comment id="193530" author="63e2a2771b13d42998e4e706" created="Wed, 24 Apr 2019 16:04:12 +0000"  >&lt;p&gt;&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;&lt;/p&gt;

&lt;p&gt;Will this design allow the module to define multiple tasks (with different endpoints and waits), either with multiple provisions of the interface or multiple handlers? I think that&#8217;s the aspect I care most about, as I think it&#8217;s important that a module can schedule more than one task.&lt;/p&gt;

&lt;p&gt;As to expressing this as an interface provision, I&#8217;ll defer the decision to you. If that fits better with Okapi&#8217;s model or it&#8217;s expedient to do so, then fine by me. &lt;/p&gt;

&lt;p&gt;Personally, tasks are different to interfaces. Whilst trying to follow that thought process, I tried to turn it into a sentence: &lt;tt&gt;To schedule a task, a module provides the timer system interface for a specified endpoint and wait period&lt;/tt&gt;. Does that reflect the model you describe?&lt;/p&gt;

&lt;p&gt;It would mean specifying an interface provision with a variable endpoint(s), which is unlike any other interface I&#8217;m aware of. Do we have other circumstances where we do that?&lt;/p&gt;

&lt;p&gt;(A less important aside, we&#8217;ve defined a period of time in &lt;a href=&quot;https://github.com/folio-org/mod-circulation-storage/blob/master/ramls/period.json&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;other places in the system&lt;/a&gt;, where the duration is an integer and the interval/unit is plural, as i think it reads easier, for any duration other than one)&lt;/p&gt;

&lt;p&gt;Anyway, just my thoughts, feel free to ignore.&lt;/p&gt;</comment>
                                                            <comment id="193537" author="5f8314dfbdef80006f6f572d" created="Thu, 25 Apr 2019 12:00:52 +0000"  >&lt;p&gt;Since handlers is an array you can define zero or more of _timer(s).&lt;/p&gt;

&lt;p&gt;This is an interface that the module provides. Don&apos;t see to invent a new notion of task. This is Web service call like any and very similar to _tenant.&lt;/p&gt;

&lt;p&gt;path.. Use the pathPattern &lt;b&gt;should&lt;/b&gt; be honored by Okapi. So even for that one it&apos;s possible to use another one.. Although why?&lt;/p&gt;

&lt;p&gt;Suppose the path / pathPattern is fixed, then the module can not distinguish between different handler calls. And that&apos;s a problem that I&apos;d like to avoid, by simply giving the freedom to choose any path.&lt;/p&gt;

&lt;p&gt;The BODY to to be sent is &quot;empty&quot; in version 1.0. I think a module should use POST, but if the timer call has no side effects, then method GET could be used instead and Okapi would send a GET instead.&lt;/p&gt;

&lt;p&gt;For the time/period specs.. I&apos;ll look at the link and update my proposal example accordingly.&lt;/p&gt;</comment>
                                                            <comment id="193545" author="5f8314dfbdef80006f6f572d" created="Thu, 25 Apr 2019 12:09:13 +0000"  >&lt;p&gt;&lt;tt&gt;intervalId&lt;/tt&gt; .. ? come on.. &lt;tt&gt;unit&lt;/tt&gt; is better.. But that&apos;s too late to change now.&lt;/p&gt;</comment>
                                                            <comment id="193554" author="63e2a2771b13d42998e4e706" created="Fri, 26 Apr 2019 12:11:08 +0000"  >&lt;p&gt;&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; Thanks for your thoughts.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;intervalId .. ? come on.. unit is better.. But that&apos;s too late to change now.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Yeah, &lt;tt&gt;intervalId&lt;/tt&gt; isn&apos;t great, and &lt;tt&gt;unit&lt;/tt&gt; is likely better. That structure is only used in a few limited places, it might be better for Okapi to not follow that lead.&lt;/p&gt;

&lt;p&gt;My main point about that was the plurality of the units.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Since handlers is an array you can define zero or more of _timer(s).&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Ok. Modules would define a handler for each scheduled task they want triggering?&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;I think a module should use POST&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I agree, I think tasks should likely be &lt;tt&gt;POST&lt;/tt&gt;. Maybe we can agree on that as a convention?&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Suppose the path / pathPattern is fixed, then the module can not distinguish between different handler calls. And that&apos;s a problem that I&apos;d like to avoid, by simply giving the freedom to choose any path.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I wasn&apos;t suggesting fixing the path / pathPattern.&lt;/p&gt;

&lt;p&gt;This is an interface that the module provides. Don&apos;t see to invent a new notion of task.&lt;/p&gt;

&lt;p&gt;My comments about this being an interface come from my understanding of what a FOLIO interface commonly is. That this is being modelled as a special Okapi interface means the constraints are likely different (e.g. being able to be defined in RAML), which is why I defer to you about this modelling.&lt;/p&gt;

&lt;p&gt;As usual, feel free to ignore / disregard as you see fit&lt;/p&gt;</comment>
                                                            <comment id="193559" author="5f8314dfbdef80006f6f572d" created="Fri, 26 Apr 2019 13:29:53 +0000"  >&lt;p&gt;Appreciate the feedback. Hopefully that means this can be implemented soon(ish)&lt;/p&gt;</comment>
                                                            <comment id="193562" author="63e2a2771b13d42998e4e706" created="Fri, 26 Apr 2019 13:54:24 +0000"  >&lt;p&gt;&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; My understanding from &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5af5ed55244bc90a106063c7&quot; class=&quot;user-hover&quot; rel=&quot;5af5ed55244bc90a106063c7&quot; data-account-id=&quot;5af5ed55244bc90a106063c7&quot; accountid=&quot;5af5ed55244bc90a106063c7&quot; rel=&quot;noreferrer&quot;&gt;Cate Boerema&lt;/a&gt; is that there is a hope this is implemented soon.&lt;/p&gt;

&lt;p&gt;I imagine we wait until &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt; is back for a story to get planned in. Unless others have any thoughts, I tried to add some folks as watchers. &lt;/p&gt;</comment>
                                                            <comment id="193566" author="5af5ed55244bc90a106063c7" created="Fri, 26 Apr 2019 14:00:14 +0000"  >&lt;p&gt;Thanks &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; and &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;.  Yes, there is great urgency to get this done, as it blocks many features including two or three that are needed for Chalmers go-live and must be done in Q2.  &lt;/p&gt;</comment>
                                                            <comment id="193573" author="5cf6c546b87c300f36eb7b9a" created="Fri, 26 Apr 2019 15:02:52 +0000"  >&lt;blockquote&gt;&lt;p&gt;have the scheduling Okapi instance call the &quot;handler&quot; with a token that include permission reported though modulePermissions.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;So which user would the call be made as?  I ask with record metadata in mind - e.g. if a record is created or modified&lt;/p&gt;</comment>
                                                            <comment id="193576" author="63e2a2771b13d42998e4e706" created="Fri, 26 Apr 2019 15:18:04 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5cf6c546b87c300f36eb7b9a&quot; class=&quot;user-hover&quot; rel=&quot;5cf6c546b87c300f36eb7b9a&quot; data-account-id=&quot;5cf6c546b87c300f36eb7b9a&quot; accountid=&quot;5cf6c546b87c300f36eb7b9a&quot; rel=&quot;noreferrer&quot;&gt;Craig McNally&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;So which user would the call be made as? I ask with record metadata in mind - e.g. if a record is created or modified&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Ah, good question.&lt;/p&gt;

&lt;p&gt;My focus has been on permissions, and I hope that is covered by granting the handler module permissions. Is that the case?&lt;/p&gt;

&lt;p&gt;That would mean there wasn&apos;t a user as such.&lt;/p&gt;</comment>
                                                            <comment id="193580" author="5cf6c546b87c300f36eb7b9a" created="Fri, 26 Apr 2019 15:26:13 +0000"  >&lt;p&gt;I&apos;m fairly positive there is a JIRA issue with a lengthy discussion of system users and situations similar to this, though I can&apos;t seem to find it.&lt;/p&gt;

&lt;p&gt;**&lt;b&gt;Update&lt;/b&gt;**:  Found it:  &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-1781&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/browse/FOLIO-1781&lt;/a&gt;&lt;/p&gt;</comment>
                                                            <comment id="193583" author="5cf6c546b87c300f36eb7b9a" created="Fri, 26 Apr 2019 15:30:09 +0000"  >&lt;p&gt;Ah, I think &lt;a href=&quot;https://folio-org.atlassian.net/browse/RMB-353&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/browse/RMB-353&lt;/a&gt; is relevant here&lt;/p&gt;</comment>
                                                            <comment id="193586" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Mon, 29 Apr 2019 08:38:16 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5cf6c546b87c300f36eb7b9a&quot; class=&quot;user-hover&quot; rel=&quot;5cf6c546b87c300f36eb7b9a&quot; data-account-id=&quot;5cf6c546b87c300f36eb7b9a&quot; accountid=&quot;5cf6c546b87c300f36eb7b9a&quot; rel=&quot;noreferrer&quot;&gt;Craig McNally&lt;/a&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; The _timer would work the same as the tenant init call here &amp;#8211; it would be made from Okapi without a user but within the context of the particular tenant and the call will include a token that includes whatever modulePermissions have been specified in the ModuleDescriptor (so the module can make further calls). 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;RMB-353&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/RMB-353&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Metadata without user id&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;
            RMB-353
        &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;
 is only relevant to the bug that we had in RMB when dealing with change metadata for calls without an explicit user.&lt;/p&gt;</comment>
                                                            <comment id="193590" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Mon, 29 Apr 2019 08:41:48 +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; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A925f55a1-465f-4875-8818-49cbe9a45838&quot; class=&quot;user-hover&quot; rel=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; data-account-id=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; accountid=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; rel=&quot;noreferrer&quot;&gt;Kostyantyn Khodarev&lt;/a&gt; &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; I recommend we change &lt;tt&gt;wait&lt;/tt&gt; into &lt;tt&gt;duration&lt;/tt&gt; and keep &lt;tt&gt;unit&lt;/tt&gt; as the property to designate the unit for the timeout/duration. We should &lt;b&gt;not&lt;/b&gt; use &lt;tt&gt;intervalId&lt;/tt&gt; &amp;#8211; the usage of this term in mod-circulation-storage to denote the enum for the unit seems very wrong to me, almost feels like a bug. The widely used convention in FOLIO is to use xxxId properties to denote foreign keys of type UUID and intervalId breaks that convention. &lt;/p&gt;</comment>
                                                            <comment id="193593" author="63e2a2771b13d42998e4e706" created="Mon, 29 Apr 2019 12:42:14 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;it would be made from Okapi without a user but within the context of the particular tenant and the call will include a token that includes whatever modulePermissions have been specified in the ModuleDescriptor (so the module can make further calls). 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;RMB-353&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/RMB-353&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Metadata without user id&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;
            RMB-353
        &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;
 is only relevant to the bug that we had in RMB when dealing with change metadata for calls without an explicit user.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Am I following this correctly, any endpoints invoked as a scheduled task will not have a user header, and therefore any downstream requests to other modules or database changes won&apos;t either?&lt;/p&gt;

&lt;p&gt;And hence, 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;RMB-353&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/RMB-353&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Metadata without user id&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;
            RMB-353
        &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;
 will need to be fixed and used in all modules that are involved in scheduled tasks?&lt;/p&gt;</comment>
                                                            <comment id="193597" author="63e2a2771b13d42998e4e706" created="Mon, 29 Apr 2019 13:00:02 +0000"  >&lt;p&gt;&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; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;I recommend we change wait into duration&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Duration in this sense would mean &lt;tt&gt;the duration between timer occurrences&lt;/tt&gt;?&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;intervalId &#8211; the usage of this term in mod-circulation-storage to denote the enum for the unit seems very wrong to me, almost feels like a bug. The widely used convention in FOLIO is to use xxxId properties to denote foreign keys of type UUID and intervalId breaks that convention.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I agree that interval isn&apos;t good terminology, especially in a more general context. At the time I couldn&apos;t think of anything better (it was agreed in 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;CIRCSTORE-7&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/CIRCSTORE-7&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Implement Loan Policies web service endpoint v1&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;
            CIRCSTORE-7
        &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;
, and I think it is terminology used by the domain). &lt;/p&gt;

&lt;p&gt;The `ID` postfix was me sitting on the fence over the topic of whether enumerated values were to become reference records (and so would need the postfix).&lt;/p&gt;</comment>
                                                            <comment id="193602" author="5cf6c546b87c300f36eb7b9a" created="Mon, 29 Apr 2019 13:45:34 +0000"  >&lt;p&gt;how about &lt;tt&gt;period&lt;/tt&gt; or &lt;tt&gt;delay&lt;/tt&gt;?&lt;/p&gt;</comment>
                                                            <comment id="193605" author="5cf6c546b87c300f36eb7b9a" created="Mon, 29 Apr 2019 14:06:56 +0000"  >&lt;blockquote&gt;
&lt;p&gt;Am I following this correctly, any endpoints invoked as a scheduled task will not have a user header, and therefore any downstream requests to other modules or database changes won&apos;t either?&lt;/p&gt;

&lt;p&gt;And hence, 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;RMB-353&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/RMB-353&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Metadata without user id&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;
            RMB-353
        &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;
 will need to be fixed and used in all modules that are involved in scheduled tasks?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;If I understand correctly, I think that&apos;s right &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;...  From the aforementioned JIRA:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When a record is updated in anonymous request (no information about user id in request for example after an login attempt has failed) metadata is not populated.  This causes error in the trigger if record has been previously saved with metadata.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;So what&apos;s preventing the same problem from occurring here?  &lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;I have an record which has been created by a user, and has metadata associated with it.&lt;/li&gt;
	&lt;li&gt;A scheduled task runs and updates that record&lt;/li&gt;
	&lt;li&gt;the trigger fires and ...&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That said, I think 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;RMB-353&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/RMB-353&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Metadata without user id&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;
            RMB-353
        &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;
 will take care of this though, right?  I haven&apos;t looked at the code but I&apos;m guessing (hoping?) all that would be required is an upgrade to RMB 25.0.0+ in modules which might run into this.&lt;/p&gt;</comment>
                                                            <comment id="193609" author="557058:925f55a1-465f-4875-8818-49cbe9a45838" created="Thu, 2 May 2019 10:02:42 +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; want to add to initial requirements, future solution should support:&lt;/p&gt;

&lt;p&gt;1. Task scheduling&lt;br/&gt;
2. Clustering&lt;br/&gt;
3. Authentication (calls between modules)&lt;/p&gt;

&lt;p&gt;What is cluster in Okapi world? Does attached picture reflect Okapi cluster structure?&lt;br/&gt;
 &lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;a id=&quot;64169_thumb&quot; href=&quot;/rest/api/3/attachment/content/64169&quot; title=&quot;okapi_cluster.png&quot; file-preview-type=&quot;image&quot; file-preview-id=&quot;64169&quot; file-preview-title=&quot;okapi_cluster.png&quot;&gt;&lt;jira-attachment-thumbnail url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/64169?default=false&quot; jira-url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/64169&quot; filename=&quot;okapi_cluster.png&quot;&gt;&lt;img src=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/64169&quot; data-attachment-name=&quot;okapi_cluster.png&quot; data-attachment-type=&quot;thumbnail&quot; data-media-services-id=&quot;1646b849-557a-4b1e-ba76-edae7dcfb0bd&quot; data-media-services-type=&quot;file&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/jira-attachment-thumbnail&gt;&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;</comment>
                                                            <comment id="193613" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Tue, 7 May 2019 11:20:25 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A925f55a1-465f-4875-8818-49cbe9a45838&quot; class=&quot;user-hover&quot; rel=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; data-account-id=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; accountid=&quot;557058:925f55a1-465f-4875-8818-49cbe9a45838&quot; rel=&quot;noreferrer&quot;&gt;Kostyantyn Khodarev&lt;/a&gt; the initial implementation (see 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;OKAPI-730&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/OKAPI-730&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;system call timer&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;
            OKAPI-730
        &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;
) shipped with 2.28 will already support this:&lt;/p&gt;

&lt;p&gt;1. scheduling will be limited to a simple timer (you could extend this to a full scheduler by providing an external module or by implementing additional scheduling logic in your module)&lt;br/&gt;
2. clustering will be supported (and yes, your Okapi cluster diagram is correct). Okapi will ensure only one module instance receives the timer call. &lt;br/&gt;
3. authentication and authorization will be provided by Okapi exactly like it is provided for standard interfaces. When you add a handler for the &quot;_timer&quot; interface in your module, you will use &lt;tt&gt;modulePermissions&lt;/tt&gt; to request any permissions you need to make calls to other modules and those permissions will be included in the authentication token your handler receives.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="10960">UXPROD-1586</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="10962">UXPROD-1587</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="10978">UXPROD-1636</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="79899">FOLIO-1786</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10006">
                    <name>Gantt End to Start</name>
                                            <outwardlinks description="has to be done before">
                                        <issuelink>
            <issuekey id="10172">UXPROD-82</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="10177">UXPROD-87</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="47875">CIRC-292</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="10674">UXPROD-1085</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="29759">CIRCSTORE-133</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="25846">UIREQ-246</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="10194">UXPROD-105</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="12999">UXPROD-499</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="13030">UXPROD-527</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="13015">UXPROD-1858</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="47868">CIRC-272</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81232">FOLIO-2010</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="38821">MODSENDER-8</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="54072">OKAPI-730</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="80519">FOLIO-889</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10007">
                    <name>Requires</name>
                                            <outwardlinks description="requires">
                                        <issuelink>
            <issuekey id="47868">CIRC-272</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="64169" name="okapi_cluster.png" size="8910" author="557058:925f55a1-465f-4875-8818-49cbe9a45838" created="Thu, 2 May 2019 10:02:09 +0000"/>
                    </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|hzx7fj:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1533">CP: sprint 62</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>Wed, 10 Apr 2019 10:50:16 +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>