<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:02:05 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[INFRAUTILS-33] Expose ready and/or diagstatus via a non-authenticated URL</title>
                <link>https://jira.opendaylight.org/browse/INFRAUTILS-33</link>
                <project id="10129" key="INFRAUTILS">infrautils</project>
                    <description>&lt;p&gt;&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=1549218&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=1549218&lt;/a&gt;&#160;and related internal discussion have revealed that it would be useful for the TripleO installation orchestrator to health check a&#160;non-authenticated URL for&#160;ready and/or diagstatus status.&lt;/p&gt;

&lt;p&gt;They cannot use that jolokia JMX HTTP bridge URL which requires authentication at the point where they need to make that check.&lt;/p&gt;

&lt;p&gt;It should not be very hard to write a Servlet which exposes similar information than the diag CLI command, with a HTTP status code (like 200&#160;vs 503) and the body containing output similar to that CLI command.&lt;/p&gt;

&lt;p&gt;This will not break the existing diagstatus JMX bean exposed via (authenticated) /jolokia, but will be in addition to that.&lt;/p&gt;</description>
                <environment></environment>
        <key id="29745">INFRAUTILS-33</key>
            <summary>Expose ready and/or diagstatus via a non-authenticated URL</summary>
                <type id="10100" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="vorburger">Michael Vorburger</assignee>
                                    <reporter username="vorburger">Michael Vorburger</reporter>
                        <labels>
                    </labels>
                <created>Wed, 11 Apr 2018 13:20:47 +0000</created>
                <updated>Wed, 22 Aug 2018 21:14:49 +0000</updated>
                            <resolved>Mon, 2 Jul 2018 10:53:03 +0000</resolved>
                                                    <fixVersion>Oxygen-SR3</fixVersion>
                    <fixVersion>Fluorine</fixVersion>
                                    <component>diagstatus</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>5</watches>
                                                                                                                <comments>
                            <comment id="62458" author="vorburger" created="Mon, 16 Apr 2018 15:56:10 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=jluhrsen&quot; class=&quot;user-hover&quot; rel=&quot;jluhrsen&quot;&gt;jluhrsen&lt;/a&gt;,&#160;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=trozet&quot; class=&quot;user-hover&quot; rel=&quot;trozet&quot;&gt;trozet&lt;/a&gt;, &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=JankiChhatbar&quot; class=&quot;user-hover&quot; rel=&quot;JankiChhatbar&quot;&gt;JankiChhatbar&lt;/a&gt;&#160;(and FYI &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=k.faseela&quot; class=&quot;user-hover&quot; rel=&quot;k.faseela&quot;&gt;k.faseela&lt;/a&gt;) I&apos;ve started looking into, and want to clarify 2 points before code:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the /diagstatus would return a JSON; not human readable text - makes sense, right? FYI the format would be as in &lt;tt&gt;org.opendaylight.infrautils.diagstatus.internal.DiagStatusServiceMBeanImpl.acquireServiceStatusAsJSON()&lt;/tt&gt;, or close to it.&#160; (There are just two minor things there to clarify which don&apos;t make sense to me, yet.)&lt;/li&gt;
	&lt;li&gt;contrary to the &lt;tt&gt;diagstatus:showSvcStatus&lt;/tt&gt; CLI command, I do not want all that JMX stuff we have in that code related to querying cluster nodes in this feature; my view is that whatever external system queries for such status has to already know about, or have an external way to find, the cluster members, and query them individually; that model seems more robust than one node (which could be down!) itself querying others. This was a personal view I&apos;ve previously held, but seeing that is how e.g. Prometheus.io goes about the same for metrics, seems to confirm this is the right approach.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Are both OK for all of you?&lt;/p&gt;</comment>
                            <comment id="62468" author="jluhrsen" created="Mon, 16 Apr 2018 17:04:44 +0000"  >&lt;blockquote&gt;&lt;p&gt;Jamo Luhrsen, Tim Rozet, Janki Chhatbar (and FYI Faseela K) I&apos;ve started looking into, and want to clarify 2 points before code:&lt;/p&gt;

&lt;p&gt;    the /diagstatus would return a JSON; not human readable text - makes sense, right? FYI the format would be as in org.opendaylight.infrautils.diagstatus.internal.DiagStatusServiceMBeanImpl.acquireServiceStatusAsJSON(), or close to it.  (There are just two minor things there to clarify which don&apos;t make sense to me, yet.)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;yeah, json response is fine. The healthcheck might/could just be as dumb as sending a curl to this endpoint and marking things&lt;br/&gt;
healthy if we get a 200 response. Maybe it wouldn&apos;t even worry about the body of the response. I mean, it could and that would&lt;br/&gt;
probably be smarter, but it doesn&apos;t have to.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;    contrary to the diagstatus:showSvcStatus CLI command, I do not want all that JMX stuff we have in that code related to querying cluster nodes in this feature; my view is that whatever external system queries for such status has to already know about, or have an external way to find, the cluster members, and query them individually; that model seems more robust than one node (which could be down!) itself querying others. This was a personal view I&apos;ve previously held, but seeing that is how e.g. Prometheus.io goes about the same for metrics, seems to confirm this is the right approach.&lt;/p&gt;

&lt;p&gt;Are both OK for all of you?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I&apos;m not totally following what you are getting at here. I &lt;b&gt;think&lt;/b&gt; this healthcheck endpoint is on a container by container basis&lt;br/&gt;
and there doesn&apos;t need to be any broader knowledge of anything other than if that specific ODL container is healthy or&lt;br/&gt;
not. But, maybe you are getting at a more intelligent healthcheck that not only tells us if that one container is healthy, but&lt;br/&gt;
also if that container is also running in a healthy cluster?&lt;/p&gt;</comment>
                            <comment id="62479" author="faseela.k@ericsson.com" created="Tue, 17 Apr 2018 02:35:04 +0000"  >&lt;p&gt;Agree to &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=vorburger&quot; class=&quot;user-hover&quot; rel=&quot;vorburger&quot;&gt;vorburger&lt;/a&gt;, the CLI is just an example implementation of a client to show how status can be retrieved from all nodes. Orchestrator will definitely know about all 3 nodes in a cluster, and hence should be easy for the orchestrator to fetch the status from all nodes by constructing the REST URLs, specific to the node IPs.&lt;/p&gt;</comment>
                            <comment id="62480" author="jankichhatbar" created="Tue, 17 Apr 2018 02:45:51 +0000"  >&lt;p&gt;Healthcheck just curls on specified URL and says container is healthy if the output of command is 0. This is run from inside the container. So each ODL container in a cluster will check for health for itself. Hence no need to worry about the cluster setup. They won&apos;t even know whether they are in cluster.&lt;/p&gt;</comment>
                            <comment id="62481" author="muthukumarank" created="Tue, 17 Apr 2018 05:13:01 +0000"  >&lt;p&gt;A minor clarification. Does orchestrator use a static address list and and curls on the URL ?&lt;/p&gt;

&lt;p&gt;When one of cluster node is down during, I assume it would be treated as a timeout on curl for the corresponding node if the list is static.&#160;&lt;/p&gt;</comment>
                            <comment id="62490" author="jluhrsen" created="Tue, 17 Apr 2018 16:00:26 +0000"  >&lt;p&gt;@everyone, I think we should ignore anything to do with clustering in this jira&lt;/p&gt;

&lt;p&gt;@janki, I don&apos;t think healthcheck has to be a simple curl, only. We can do whatever crazy bash-fu we want to do. So, in the end we could do curl to get the full response&lt;br/&gt;
body and pipe it to some script that does anything we want and that script can set the exit code to 0 if healthy, or not.&lt;/p&gt;</comment>
                            <comment id="62555" author="vorburger" created="Fri, 20 Apr 2018 14:53:19 +0000"  >&lt;p&gt;Completed implementation, see 3 linked Gerrit reviews (c/70987, c/71168 and c/71172).&lt;/p&gt;

&lt;p&gt;With this, the &lt;tt&gt;odl-infrautils-diagstatus&lt;/tt&gt; feature will expose this on &lt;tt&gt;&lt;a href=&quot;http://localhost:8181/diagstatus/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://localhost:8181/diagstatus/&lt;/a&gt;&lt;/tt&gt; :&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
  &quot;timeStamp&quot;: &quot;Fri Apr 20 16:41:26 CEST 2018&quot;,
  &quot;isOperational&quot;: true,
  &quot;systemReadyState&quot;: &quot;ACTIVE&quot;,
  &quot;statusSummary&quot;: []
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;in infrautils/common/karaf with no other features, or e.g. with  &lt;tt&gt;odl-netvirt-openstack&lt;/tt&gt; like this:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
  &quot;timeStamp&quot;: &quot;Fri Apr 20 17:09:33 CEST 2018&quot;,
  &quot;isOperational&quot;: true,
  &quot;systemReadyState&quot;: &quot;ACTIVE&quot;,
  &quot;statusSummary&quot;: [
    {
      &quot;serviceName&quot;: &quot;OPENFLOW&quot;,
      &quot;effectiveStatus&quot;: &quot;OPERATIONAL&quot;,
      &quot;reportedStatusDescription&quot;: &quot;switch connections started&quot;,
      &quot;statusTimestamp&quot;: &quot;2018-04-20T15:08:29.713Z&quot;
    },
    {
      &quot;serviceName&quot;: &quot;IFM&quot;,
      &quot;effectiveStatus&quot;: &quot;OPERATIONAL&quot;,
      &quot;reportedStatusDescription&quot;: &quot;Service started&quot;,
      &quot;statusTimestamp&quot;: &quot;2018-04-20T15:08:17.268Z&quot;
    },
    {
      &quot;serviceName&quot;: &quot;ITM&quot;,
      &quot;effectiveStatus&quot;: &quot;OPERATIONAL&quot;,
      &quot;reportedStatusDescription&quot;: &quot;Service started&quot;,
      &quot;statusTimestamp&quot;: &quot;2018-04-20T15:08:19.617Z&quot;
    },
    {
      &quot;serviceName&quot;: &quot;ELAN&quot;,
      &quot;effectiveStatus&quot;: &quot;OPERATIONAL&quot;,
      &quot;reportedStatusDescription&quot;: &quot;Service started&quot;,
      &quot;statusTimestamp&quot;: &quot;2018-04-20T15:08:20.191Z&quot;
    },
    {
      &quot;serviceName&quot;: &quot;DATASTORE&quot;,
      &quot;effectiveStatus&quot;: &quot;OPERATIONAL&quot;,
      &quot;reportedStatusDescription&quot;: &quot;OPERATIONAL&quot;,
      &quot;statusTimestamp&quot;: &quot;2018-04-20T15:09:33.509Z&quot;
    }
  ]
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;BTW &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=jluhrsen&quot; class=&quot;user-hover&quot; rel=&quot;jluhrsen&quot;&gt;jluhrsen&lt;/a&gt; idea in &lt;a href=&quot;https://jira.opendaylight.org/browse/INFRAUTILS-31&quot; title=&quot;diagstatus including cause of failures&quot; class=&quot;issue-link&quot; data-issue-key=&quot;INFRAUTILS-31&quot;&gt;&lt;del&gt;INFRAUTILS-31&lt;/del&gt;&lt;/a&gt; would be quite a nice complementary addition here. Anyone willing to wrap that up? &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.opendaylight.org/images/icons/emoticons/wink.png&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;FYI &lt;tt&gt;&lt;a href=&quot;http://localhost:8181/diagstatus/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://localhost:8181/diagstatus/&lt;/a&gt;&lt;/tt&gt; will return the following HTTP status codes: &lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;del&gt;418&lt;/del&gt; / 503 (see &lt;a href=&quot;https://jira.opendaylight.org/browse/INFRAUTILS-46&quot; title=&quot;diagstatus error code is 418 instead of 503&quot; class=&quot;issue-link&quot; data-issue-key=&quot;INFRAUTILS-46&quot;&gt;&lt;del&gt;INFRAUTILS-46&lt;/del&gt;&lt;/a&gt;) if isOperational = false, with details in the JSON; either systemReadyState not ACTIVE (=technical OSGi problem) OR systemReadyState = ACTIVE but one of the entries in statusSummary NOK (= more of a &quot;functional&quot; problem)&lt;/li&gt;
	&lt;li&gt;401 &lt;em&gt;Problem accessing /diagstatus/. Reason: Unauthorized&lt;/em&gt; indicates, confusingly, NOT that authentication is missing, but that there is nothing at that URL - i.e. infrautils has not even started (then things are REALLY screwed)&lt;/li&gt;
	&lt;li&gt;500 if infrautils is up but has hit an internal error (details should be in karaf.log)&lt;/li&gt;
	&lt;li&gt;200 OK if isOperational = true and all is well (will also have details in the JSON)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;HTH.&lt;/p&gt;</comment>
                            <comment id="62626" author="vorburger" created="Wed, 25 Apr 2018 09:12:46 +0000"  >&lt;p&gt;This is all completely finished, done and dusted now - from my side.&lt;/p&gt;</comment>
                            <comment id="63209" author="vorburger" created="Thu, 31 May 2018 12:36:17 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=jluhrsen&quot; class=&quot;user-hover&quot; rel=&quot;jluhrsen&quot;&gt;jluhrsen&lt;/a&gt; and &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=thapar&quot; class=&quot;user-hover&quot; rel=&quot;thapar&quot;&gt;thapar&lt;/a&gt; have internally suggested that this would be good to have not only on master for Fluorine but also on stable/oxygen already - I&apos;m therefore reopening this issue and look into doing the back-port, hopefully some time next week.&lt;/p&gt;</comment>
                            <comment id="63222" author="vorburger" created="Fri, 1 Jun 2018 08:55:43 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=jluhrsen&quot; class=&quot;user-hover&quot; rel=&quot;jluhrsen&quot;&gt;jluhrsen&lt;/a&gt; is now using jolokia/exec/org.opendaylight.infrautils.diagstatus/... instead of /diagstatus, so my understanding is there is no immediate need / request aanymore to back-port this to stable/oxygen amymore after all, so closing it again.&lt;/p&gt;</comment>
                            <comment id="63547" author="vorburger" created="Wed, 20 Jun 2018 11:17:43 +0000"  >&lt;p&gt;Re-opening this for backporting to Oxygen SR3, so that&#160;&lt;a href=&quot;https://jira.opendaylight.org/browse/GENIUS-138&quot; title=&quot;Improve Datastore Cluster diagstatus to indicate if node is currently an isolated leader&quot; class=&quot;issue-link&quot; data-issue-key=&quot;GENIUS-138&quot;&gt;&lt;del&gt;GENIUS-138&lt;/del&gt;&lt;/a&gt; is really useful...&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="29860">INTTEST-45</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="30406">INFRAUTILS-45</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="30601">INFRAUTILS-47</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="30600">INFRAUTILS-46</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03d73:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>