<!-- 
RSS generated by JIRA (6.3.4#6332-sha1:51bc225ef474afe3128b2f66878477f322397b16) at Thu Jan 26 17:00:51 UTC 2017

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.
For example:
https://issues.apache.org/jira/si/jira.issueviews:issue-xml/OAK-5446/OAK-5446.xml?field=key&amp;field=summary
-->
<rss version="0.92" >
<channel>
    <title>ASF JIRA</title>
    <link>https://issues.apache.org/jira</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>6.3.4</version>
        <build-number>6332</build-number>
        <build-date>15-08-2014</build-date>
    </build-info>

<item>
            <title>[OAK-5446] leaseUpdateThread might be blocked by leaseUpdateCheck</title>
                <link>https://issues.apache.org/jira/browse/OAK-5446</link>
                <project id="12313221" key="OAK">Jackrabbit Oak</project>
                    <description>&lt;p&gt;Fighting with cluster nodes losing their lease and shutting down oak-core in a cloud environment. For reasons unknown at this point in time, the whole process seems to skip about two minutes of real time.&lt;/p&gt;

&lt;p&gt;This is a situation from which oak currently does not recover. Code analysis shows that &lt;tt&gt;ClusterNodeInfo&lt;/tt&gt; is handed the &lt;tt&gt;LeaseCheckDocumentStoreWrapper&lt;/tt&gt; instance to use as store. This is fatal since any action the &lt;tt&gt;renewLease()&lt;/tt&gt; tries to do will first invoke the &lt;tt&gt;performLeaseCheck()&lt;/tt&gt;. The lease check will, when the &lt;tt&gt;FailureMargin&lt;/tt&gt; is reached, &lt;em&gt;stall the renewLease() thread&lt;/em&gt; for 5 retry attempts and then declare the lease to be lost.&lt;/p&gt;

&lt;p&gt;The &lt;tt&gt;ClusterNodeInfo&lt;/tt&gt; should instead be using the &quot;real&quot; &lt;tt&gt;DocumentStore&lt;/tt&gt;, not the wrapped one, IMO.&lt;/p&gt;</description>
                <environment></environment>
        <key id="13034225">OAK-5446</key>
            <summary>leaseUpdateThread might be blocked by leaseUpdateCheck</summary>
                <type id="1" iconUrl="https://issues.apache.org/jira/images/icons/issuetypes/bug.png">Bug</type>
                                            <priority id="3" iconUrl="https://issues.apache.org/jira/images/icons/priorities/major.png">Major</priority>
                        <status id="1" iconUrl="https://issues.apache.org/jira/images/icons/statuses/open.png" description="The issue is open and ready for the assignee to start work on it.">Open</status>
                    <statusCategory id="2" key="new" colorName="blue-gray"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="reschke">Julian Reschke</assignee>
                                    <reporter username="stefan.eissing">Stefan Eissing</reporter>
                        <labels>
                            <label>candidate_oak_1_4</label>
                    </labels>
                <created>Thu, 12 Jan 2017 09:58:36 +0000</created>
                <updated>Thu, 26 Jan 2017 16:58:54 +0000</updated>
                                            <version>1.4</version>
                    <version>1.5.14</version>
                                    <fixVersion>1.6</fixVersion>
                                    <component>core</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                <comments>
                            <comment id="15821151" author="reschke" created="Thu, 12 Jan 2017 14:46:22 +0000"  >&lt;p&gt;Would be good to have a unit test (looking now).&lt;/p&gt;

&lt;p&gt;FWIW, another way to avoid this would be to special case the CLUSTER collection in the &lt;tt&gt;LeaseCheckDocumentStoreWrapper&lt;/tt&gt;.&lt;/p&gt;</comment>
                            <comment id="15823646" author="mreutegg" created="Mon, 16 Jan 2017 09:01:18 +0000"  >&lt;p&gt;I agree, there should be a test. Looks like &lt;a href=&quot;https://issues.apache.org/jira/browse/OAK-3399&quot; title=&quot;5sec retry loop before declaring lease failure (was: as a last resort try to update it there)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OAK-3399&quot;&gt;&lt;del&gt;OAK-3399&lt;/del&gt;&lt;/a&gt; didn&apos;t have one. &lt;/p&gt;</comment>
                            <comment id="15823823" author="reschke" created="Mon, 16 Jan 2017 11:46:40 +0000"  >&lt;p&gt;I&apos;ll try to come up with a test case.&lt;/p&gt;</comment>
                            <comment id="15824121" author="reschke" created="Mon, 16 Jan 2017 15:03:38 +0000"  >&lt;p&gt;Hmmm.&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;    public DocumentNodeStore(DocumentMK.Builder builder) {
        this.blobStore = builder.getBlobStore();
        this.statisticsProvider = builder.getStatisticsProvider();
        this.nodeStoreStatsCollector = builder.getNodeStoreStatsCollector();
        if (builder.isUseSimpleRevision()) {
            this.simpleRevisionCounter = new AtomicInteger(0);
        }
        DocumentStore s = builder.getDocumentStore();
        if (builder.getTiming()) {
            s = new TimingDocumentStoreWrapper(s);
        }
        if (builder.getLogging()) {
            s = new LoggingDocumentStoreWrapper(s);
        }
        if (builder.getReadOnlyMode()) {
            s = ReadOnlyDocumentStoreWrapperFactory.getInstance(s);
            readOnlyMode = true;
        } else {
            readOnlyMode = false;
        }
        this.executor = builder.getExecutor();
        this.clock = builder.getClock();

        int cid = builder.getClusterId();
        cid = Integer.getInteger(&quot;oak.documentMK.clusterId&quot;, cid);
        if (readOnlyMode) {
            clusterNodeInfo = ClusterNodeInfo.getReadOnlyInstance(s);
        } else {
            clusterNodeInfo = ClusterNodeInfo.getInstance(s, cid);
        }
        // TODO we should ensure revisions generated from now on
        // are never &quot;older&quot; than revisions already in the repository for
        // this cluster id
        cid = clusterNodeInfo.getId();

        if (builder.getLeaseCheck()) {
            s = new LeaseCheckDocumentStoreWrapper(s, clusterNodeInfo);
            clusterNodeInfo.setLeaseFailureHandler(builder.getLeaseFailureHandler());
        } else {
            clusterNodeInfo.setLeaseCheckDisabled(true);
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So the &lt;tt&gt;DocumentStore&lt;/tt&gt; is passed into &lt;tt&gt;ClusterNodeInfo&lt;/tt&gt; &lt;b&gt;before&lt;/b&gt; it get&apos;s wrapped into a &lt;tt&gt;LeaseCheckDocumentStoreWrapper&lt;/tt&gt;, no?&lt;/p&gt;</comment>
                            <comment id="15824151" author="reschke" created="Mon, 16 Jan 2017 15:30:03 +0000"  >&lt;p&gt;But then, the lease update thread also does:&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;            // then, independently if the lease had to be updated or not, check
            // the status:
            if (nodeStore.updateClusterState()) {
                // then inform the discovery lite listener - if it is registered
                nodeStore.signalClusterStateChange();
            }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and, AFAICT, that indeed would go through the lease checking wrapper...&lt;/p&gt;

&lt;p&gt;It&apos;s not hard to fix this, but it&apos;s not entirely clear what the best way is... &lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;decouple updateClusterState from lease renew thread &amp;#8211; probably good because the latter is timing critical&lt;/li&gt;
	&lt;li&gt;make sure LeaseChecker only delays calls to a whitelisted set of collections (just NODES?)&lt;/li&gt;
	&lt;li&gt;make sure that (some?) background threads always bypass the LeaseCheckWrapper&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Also: is it really intentional that &lt;tt&gt;updateClusterState&lt;/tt&gt; reads all cluster node infos once per second??? &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://issues.apache.org/jira/secure/ViewProfile.jspa?name=egli&quot; class=&quot;user-hover&quot; rel=&quot;egli&quot;&gt;Stefan Egli&lt;/a&gt; &lt;a href=&quot;https://issues.apache.org/jira/secure/ViewProfile.jspa?name=mreutegg&quot; class=&quot;user-hover&quot; rel=&quot;mreutegg&quot;&gt;Marcel Reutegger&lt;/a&gt;  - feedback appreciated.&lt;/p&gt;</comment>
                            <comment id="15824454" author="reschke" created="Mon, 16 Jan 2017 19:14:31 +0000"  >&lt;p&gt;Proposed patch.&lt;/p&gt;</comment>
                            <comment id="15837439" author="egli" created="Wed, 25 Jan 2017 09:34:43 +0000"  >&lt;blockquote&gt;&lt;p&gt;Code analysis shows that ClusterNodeInfo is handed the LeaseCheckDocumentStoreWrapper instance to use as store. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I second &lt;a href=&quot;https://issues.apache.org/jira/secure/ViewProfile.jspa?name=reschke&quot; class=&quot;user-hover&quot; rel=&quot;reschke&quot;&gt;Julian Reschke&lt;/a&gt;&apos;s finding that ClusterNodeInfo gets the &apos;real&apos; DocumentStore, not the lease wrapper. &lt;a href=&quot;https://issues.apache.org/jira/secure/ViewProfile.jspa?name=stefan.eissing&quot; class=&quot;user-hover&quot; rel=&quot;stefan.eissing&quot;&gt;Stefan Eissing&lt;/a&gt;, do you disagree?&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;But then, the lease update thread also does [&lt;tt&gt;nodeStore.updateClusterState()&lt;/tt&gt;]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;good point, that one goes via the LeaseCheckDocumentStoreWrapper, while it probably should not, agreed.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;It&apos;s not hard to fix this, but it&apos;s not entirely clear what the best way is... &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I would try to come up with the least intrusive change. Which would mean to leave the lease wrapper as is (ie no whitelist or bypassing special cases). Ideally &lt;tt&gt;updateClusterState&lt;/tt&gt; would be aware of the lease wrapper and pass the underlying (real) documentStore instead. Perhaps the DocumentNodeStore could keep track of that real documentStore for use in &lt;tt&gt;updateClusterState&lt;/tt&gt;?&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Also: is it really intentional that updateClusterState reads all cluster node infos once per second??? &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Yes, that is intentional. It is part of discovery lite where each instance checks the state of all the cluster node infos once a second to notice a crashing instance asap. We can discuss if the 1/second resolution is too much or if it should be done in a separate thread, but the discovery lite mechanism is based on this.&lt;/p&gt;</comment>
                            <comment id="15837458" author="stefan.eissing" created="Wed, 25 Jan 2017 09:43:15 +0000"  >&lt;blockquote&gt;&lt;p&gt;I second Julian Reschke&apos;s finding that ClusterNodeInfo gets the &apos;real&apos; DocumentStore, not the lease wrapper. Stefan Eissing, do you disagree?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;No, I agree. I saw in the logs that the lease update thread used the LeaseWrapper and was blocked. But the call is in the &lt;tt&gt;updateClusterState()&lt;/tt&gt; that caused this.&lt;/p&gt;

&lt;p&gt;So, we are all in agree and that this should be changed. As to how, I have no strong opinion. Perhaps the whole &lt;tt&gt;updateClusterState&lt;/tt&gt; should go into the &lt;tt&gt;ClusterNodeInfo&lt;/tt&gt;?&lt;/p&gt;</comment>
                            <comment id="15837506" author="reschke" created="Wed, 25 Jan 2017 10:01:23 +0000"  >&lt;p&gt;Reminder: there&apos;s a patch available. The IMHO most important part is to separate the two operations into separate background threads.&lt;/p&gt;</comment>
                            <comment id="15837544" author="egli" created="Wed, 25 Jan 2017 10:31:40 +0000"  >&lt;p&gt;+1 for the patch. Separating the cluster update from the lease update - even though these two operation are about a related concern - is a good thing. (sorry, missed reviewing the patch previously)&lt;/p&gt;</comment>
                            <comment id="15837573" author="reschke" created="Wed, 25 Jan 2017 11:04:55 +0000"  >&lt;p&gt;&lt;a href=&quot;https://issues.apache.org/jira/secure/ViewProfile.jspa?name=egli&quot; class=&quot;user-hover&quot; rel=&quot;egli&quot;&gt;Stefan Egli&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://issues.apache.org/jira/secure/ViewProfile.jspa?name=mreutegg&quot; class=&quot;user-hover&quot; rel=&quot;mreutegg&quot;&gt;Marcel Reutegger&lt;/a&gt; and we are ok with this to be done before we branch 1.6, right?&lt;/p&gt;
</comment>
                            <comment id="15837629" author="egli" created="Wed, 25 Jan 2017 12:08:54 +0000"  >&lt;blockquote&gt;&lt;p&gt;we are ok with this to be done before we branch 1.6&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;it is a change in a quite central part, so the question is if this is indeed a blocker for 1.6 or if it can&apos;t wait... We&apos;d have to &lt;del&gt;thoroughly&lt;/del&gt; test the fix well.&lt;/p&gt;</comment>
                            <comment id="15837975" author="egli" created="Wed, 25 Jan 2017 16:03:44 +0000"  >&lt;p&gt;Added a simplistic unit test that covers the retry loop (&lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;https://issues.apache.org/jira/secure/attachment/12849312/12849312_OAK-5446.testcase&quot; title=&quot;OAK-5446.testcase attached to OAK-5446&quot;&gt;OAK-5446.testcase&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;https://issues.apache.org/jira/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;) - might be good enough as a start?&lt;/p&gt;</comment>
                            <comment id="15838066" author="reschke" created="Wed, 25 Jan 2017 16:35:22 +0000"  >&lt;p&gt;Verified that the test tests the right thing by setting MAX_RETRY_SLEEPS_BEFORE_LEASE_FAILURE = 0 in ClusterNodeInfo (in which case the test fails).&lt;/p&gt;

&lt;p&gt;Proposal: add the test as part of &lt;a href=&quot;https://issues.apache.org/jira/browse/OAK-3399&quot; title=&quot;5sec retry loop before declaring lease failure (was: as a last resort try to update it there)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OAK-3399&quot;&gt;&lt;del&gt;OAK-3399&lt;/del&gt;&lt;/a&gt; (after removing trailing ws &lt;img class=&quot;emoticon&quot; src=&quot;https://issues.apache.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;.&lt;/p&gt;

&lt;p&gt;We still don&apos;t have a test that simulates the issue described in &lt;b&gt;this&lt;/b&gt; ticket, though.&lt;/p&gt;</comment>
                            <comment id="15838113" author="reschke" created="Wed, 25 Jan 2017 16:55:18 +0000"  >&lt;p&gt;Modified test that delays the read from clusterNodes and indeed reproduces the issue.&lt;/p&gt;</comment>
                            <comment id="15838115" author="egli" created="Wed, 25 Jan 2017 16:55:57 +0000"  >&lt;p&gt;ack, I&apos;ll add the test case to &lt;a href=&quot;https://issues.apache.org/jira/browse/OAK-3399&quot; title=&quot;5sec retry loop before declaring lease failure (was: as a last resort try to update it there)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OAK-3399&quot;&gt;&lt;del&gt;OAK-3399&lt;/del&gt;&lt;/a&gt; (in trunk and 1.4 branch) and will look into how we can simulate a &apos;VM freeze&apos; during lease update..&lt;/p&gt;</comment>
                            <comment id="15838126" author="egli" created="Wed, 25 Jan 2017 17:01:13 +0000"  >&lt;blockquote&gt;&lt;p&gt;Modified test that delays the read from clusterNodes and indeed reproduces the issue.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;even better &lt;img class=&quot;emoticon&quot; src=&quot;https://issues.apache.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; - can I leave the patch with you, &lt;a href=&quot;https://issues.apache.org/jira/secure/ViewProfile.jspa?name=reschke&quot; class=&quot;user-hover&quot; rel=&quot;reschke&quot;&gt;Julian Reschke&lt;/a&gt;?&lt;/p&gt;</comment>
                            <comment id="15838142" author="egli" created="Wed, 25 Jan 2017 17:06:50 +0000"  >&lt;p&gt;just one comment: maybe we should have two flavours of the test: one with the delay and one without - as both cases seem useful.&lt;/p&gt;</comment>
                            <comment id="15838143" author="reschke" created="Wed, 25 Jan 2017 17:06:54 +0000"  >&lt;p&gt;While the test currently proves that there is a problem, I&apos;m not totally sure that the Thread.sleep is correct here &amp;#8211; shouldn&apos;t I use the VirtualClock?&lt;/p&gt;</comment>
                            <comment id="15838178" author="egli" created="Wed, 25 Jan 2017 17:24:09 +0000"  >&lt;p&gt;I think actually delaying is correct, as a) the background thread doesn&apos;t use the virtual clock anyway and b) you want to simulate a &apos;vm freeze&apos; for which you need to actually sleep.&lt;br/&gt;
But I think the delaying should only happen after the first successful renewal (to keep the idea of that test method) - so I&apos;ve added a variant which enables delaying after forwarding the clock (&lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;https://issues.apache.org/jira/secure/attachment/12849324/12849324_OAK-5446.testcase.v3&quot; title=&quot;OAK-5446.testcase.v3 attached to OAK-5446&quot;&gt;OAK-5446.testcase.v3&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;https://issues.apache.org/jira/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;)&lt;/p&gt;</comment>
                            <comment id="15839886" author="reschke" created="Thu, 26 Jan 2017 15:43:50 +0000"  >&lt;p&gt;...guess what: in the proposed patch I &lt;b&gt;copied&lt;/b&gt; (instead of &lt;b&gt;moved&lt;/b&gt;) the cluster update check... &lt;img class=&quot;emoticon&quot; src=&quot;https://issues.apache.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                            <comment id="15839904" author="egli" created="Thu, 26 Jan 2017 15:54:39 +0000"  >&lt;p&gt;oups, yes, that would not have helped then..&lt;/p&gt;</comment>
                            <comment id="15840006" author="reschke" created="Thu, 26 Jan 2017 16:43:16 +0000"  >&lt;p&gt;See &lt;a href=&quot;http://svn.apache.org/r1780424&quot; class=&quot;external-link&quot; rel=&quot;nofollow&quot;&gt;r1780424&lt;/a&gt; - for some I reason I currently can not resolve this ticket though.&lt;/p&gt;</comment>
                            <comment id="15840020" author="reschke" created="Thu, 26 Jan 2017 16:52:12 +0000"  >&lt;p&gt;Note I had to clone the issue to work around a JIRA problem.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10020">
                    <name>Cloners</name>
                                                                <inwardlinks description="is cloned by">
                                        <issuelink>
            <issuekey id="13038191">OAK-5528</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10030">
                    <name>Reference</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="12863840">OAK-3399</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="13038113">OAK-5523</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="12847661" name="OAK-5446.diff" size="3853" author="reschke" created="Mon, 16 Jan 2017 19:14:31 +0000"/>
                            <attachment id="12849320" name="OAK-5446-jr.diff" size="5044" author="reschke" created="Wed, 25 Jan 2017 16:55:18 +0000"/>
                            <attachment id="12849312" name="OAK-5446.testcase" size="4062" author="egli" created="Wed, 25 Jan 2017 16:03:44 +0000"/>
                            <attachment id="12849324" name="OAK-5446.testcase.v3" size="5132" author="egli" created="Wed, 25 Jan 2017 17:24:09 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_12310310" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Attachment count</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_12310220" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 12 Jan 2017 14:46:22 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_12310420" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Global Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_12312521" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            8 minutes ago
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12311820" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i38m27:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12310920" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            </customfields>
    </item>
</channel>
</rss>