<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:38:57 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>Whamcloud Community JIRA</title>
    <link>https://jira.whamcloud.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.4.14</version>
        <build-number>940014</build-number>
        <build-date>05-12-2023</build-date>
    </build-info>


<item>
            <title>[LU-4020] HSM copytool event monitoring capabilities</title>
                <link>https://jira.whamcloud.com/browse/LU-4020</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;This ticket is to track the work being done to add copytool event monitoring capabilities to liblustreapi. The end result will be that external monitoring agents are able to read an event stream out of a FIFO.&lt;/p&gt;</description>
                <environment></environment>
        <key id="21177">LU-4020</key>
            <summary>HSM copytool event monitoring capabilities</summary>
                <type id="4" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</priority>
                        <status id="5" iconUrl="https://jira.whamcloud.com/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="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="mjmac">Michael MacDonald</assignee>
                                    <reporter username="mjmac">Michael MacDonald</reporter>
                        <labels>
                            <label>HSM</label>
                    </labels>
                <created>Fri, 27 Sep 2013 20:31:01 +0000</created>
                <updated>Fri, 20 Mar 2015 22:21:06 +0000</updated>
                            <resolved>Wed, 5 Mar 2014 21:08:45 +0000</resolved>
                                                    <fixVersion>Lustre 2.6.0</fixVersion>
                    <fixVersion>Lustre 2.5.1</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>12</watches>
                                                                            <comments>
                            <comment id="67880" author="mjmac" created="Fri, 27 Sep 2013 20:38:21 +0000"  >&lt;p&gt;Pushed a proof-of-concept for discussion: &lt;a href=&quot;http://review.whamcloud.com/7790&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/7790&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To play with it, you&apos;ll need to create a fifo and then cat it before starting the copytool in a different shell. e.g.&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;[root@europa ~]# mknod /&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;/spool/hsm_events p &amp;amp;&amp;amp; cat /&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt;/spool/hsm_events
{&lt;span class=&quot;code-quote&quot;&gt;&quot;event_time&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;2013-09-27 17:26:32 -0400&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;event_type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;REGISTER&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;archive&quot;&lt;/span&gt;: 0, &lt;span class=&quot;code-quote&quot;&gt;&quot;mount_point&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/mnt/jovian&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;uuid&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;ea370e22-b5ac-ab98-71bb-605d217071f7&quot;&lt;/span&gt;}
{&lt;span class=&quot;code-quote&quot;&gt;&quot;event_time&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;2013-09-27 17:26:39 -0400&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;event_type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;RESTORE_START&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;total_bytes&quot;&lt;/span&gt;: 0, &lt;span class=&quot;code-quote&quot;&gt;&quot;lustre_path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;CentOS-6.4-x86_64-bin-DVD2.iso&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;fid&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0x200000400:0x24:0x0&quot;&lt;/span&gt;}
{&lt;span class=&quot;code-quote&quot;&gt;&quot;event_time&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;2013-09-27 17:26:39 -0400&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;event_type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;RESTORE_RUNNING&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;current_bytes&quot;&lt;/span&gt;: 0, &lt;span class=&quot;code-quote&quot;&gt;&quot;total_bytes&quot;&lt;/span&gt;: 1452388352, &lt;span class=&quot;code-quote&quot;&gt;&quot;lustre_path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;CentOS-6.4-x86_64-bin-DVD2.iso&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;fid&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0x200000400:0x24:0x0&quot;&lt;/span&gt;}
{&lt;span class=&quot;code-quote&quot;&gt;&quot;event_time&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;2013-09-27 17:27:09 -0400&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;event_type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;RESTORE_RUNNING&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;current_bytes&quot;&lt;/span&gt;: 681574400, &lt;span class=&quot;code-quote&quot;&gt;&quot;total_bytes&quot;&lt;/span&gt;: 1452388352, &lt;span class=&quot;code-quote&quot;&gt;&quot;lustre_path&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;CentOS-6.4-x86_64-bin-DVD2.iso&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;fid&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0x200000400:0x24:0x0&quot;&lt;/span&gt;}
{&lt;span class=&quot;code-quote&quot;&gt;&quot;event_time&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;2013-09-27 17:27:09 -0400&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;event_type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;RESTORE_CANCEL&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;fid&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0x200000400:0xa3:0x0&quot;&lt;/span&gt;}
{&lt;span class=&quot;code-quote&quot;&gt;&quot;event_time&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;2013-09-27 17:27:14 -0400&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;event_type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;UNREGISTER&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;archive&quot;&lt;/span&gt;: 0, &lt;span class=&quot;code-quote&quot;&gt;&quot;mount_point&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/mnt/jovian&quot;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&quot;uuid&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;ea370e22-b5ac-ab98-71bb-605d217071f7&quot;&lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="67958" author="green" created="Mon, 30 Sep 2013 16:08:02 +0000"  >&lt;p&gt;I guess you mean liblustreapi and not liblustre in the ticket description?&lt;/p&gt;</comment>
                            <comment id="67981" author="mjmac" created="Mon, 30 Sep 2013 18:26:04 +0000"  >&lt;p&gt;Hmm, yes. Updated the description, thanks.&lt;/p&gt;</comment>
                            <comment id="68815" author="mjmac" created="Fri, 11 Oct 2013 13:48:41 +0000"  >&lt;p&gt;I thought that it might be best to move discussion about this work from gerrit to this ticket. As I indicated in the commit message for the review I pushed, my intent was to prove the concept and get some feedback on the plan, so I am happy to see this conversation happening.&lt;/p&gt;

&lt;p&gt;I&apos;ll respond to general feedback on some of the higher-level topics here so that we can keep the discussion going:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=jhammond&quot; class=&quot;user-hover&quot; rel=&quot;jhammond&quot;&gt;jhammond&lt;/a&gt;: I did consider a socket (unix, udp) based approach, but it seemed to add complexity to the implementation without really adding much benefit over the FIFO approach. My goal wasn&apos;t to make a completely reliable event stream &amp;#8211; I was thinking more of making it best effort. If there is a reader to see the events, great. If not, life goes on and there&apos;s no negative impact on the copytool instance. I was careful to handle cases where the copytool started without a reader (works OK) or where the reader disappeared at various points (OK, in my testing).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=adilger&quot; class=&quot;user-hover&quot; rel=&quot;adilger&quot;&gt;adilger&lt;/a&gt;: &lt;a href=&quot;http://www.yaml.org/spec/1.2/spec.html#id2759572&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;JSON is actually a subset of YAML&lt;/a&gt;. YAML parsers can read JSON just fine, though the reverse isn&apos;t true. I decided to use JSON because the event format doesn&apos;t need all of YAML&apos;s capabilities, and it&apos;s much easier to generate correct JSON. JSON is also easier to validate on the reader side because it&apos;s simple. It&apos;s very easy to detect partial writes of JSON-formatted events, for example.&lt;/p&gt;

&lt;p&gt;All that having been said, I&apos;m not opposed to the idea of using pure YAML, especially if someone else is writing or linking in a YAML library. In my opinion, though, JSON is probably good enough for 99% of what we need as far as structured output goes.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=jcl&quot; class=&quot;user-hover&quot; rel=&quot;jcl&quot;&gt;jcl&lt;/a&gt;: I will certainly add tests for the final implementation, but thank you for calling it out. My initial focus was to get some code working in order to test ideas and generate discussion before committing to a final design. As far as libraries go, I am not opposed to the idea of using a well-tested library to generate JSON and/or YAML &amp;#8211; I just wasn&apos;t sure what the reception would be to adding external dependencies like that. There is a MIT-licensed library called &lt;a href=&quot;http://www.digip.org/jansson/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Jansson&lt;/a&gt; that seems mature and well-maintained.&lt;/p&gt;

&lt;p&gt;I think that covers most of the high-level topics. There&apos;s been a lot of really great feedback on implementation details too, and I appreciate that. I will certainly incorporate those improvements into the code as I make progress.&lt;/p&gt;</comment>
                            <comment id="71070" author="keith" created="Fri, 8 Nov 2013 02:00:13 +0000"  >&lt;p&gt;Why not just get info from the policy agent?   It knows the state of the entire FS. &lt;/p&gt;</comment>
                            <comment id="71105" author="jcl" created="Fri, 8 Nov 2013 06:47:50 +0000"  >&lt;p&gt;What do you mean by &quot;policy agent&quot;? The &quot;coordinator&quot; or the &quot;policy engine&quot; (ie RBH)? The initial idea was to provide a STD interface for external backend tools, as CT is running on STD Lustre client, implementing it in liblustreapi for the CT is the natural way.&lt;/p&gt;</comment>
                            <comment id="71122" author="keith" created="Fri, 8 Nov 2013 14:27:28 +0000"  >&lt;p&gt;I mean Robinhood.  I believe it is away of the state of the filesystem.  It seems this plan is to capture the profile it exports in some other layer of Lustre.  Why not just use Robinhood (or some other Policy Agent) directly to resolve the state of the filesystem?  &lt;/p&gt;</comment>
                            <comment id="71224" author="jcl" created="Mon, 11 Nov 2013 11:28:47 +0000"  >&lt;p&gt;RBH runs on some client. This client may not be connected to external storage, like is the agent, so will have difficulties to communicate with it. Also there is a single instance of RBH so we may have a scalability issue. The agent count is easy to increase so even highly verbose CT will scale.&lt;/p&gt;</comment>
                            <comment id="77795" author="bfaccini" created="Tue, 25 Feb 2014 10:07:52 +0000"  >&lt;p&gt;I have pushed a new patch-set #6 for &lt;a href=&quot;http://review.whamcloud.com/7790&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/7790&lt;/a&gt;. Where after re-base, I tried to answer to the multiple comments from previous patch-sets.&lt;/p&gt;

&lt;p&gt;Andreas, is the new liblustreapi_json.c, what you wanted ? I am not really aware of this licensing protocols and thus about their packaging needs &#8230; What about the specific data-structures definitions being used, do they need to be in a separate .h file too with the appropriate header?&lt;/p&gt;

&lt;p&gt;Jinshan, I did not remove the head-list structure llapi_json_item_list, because I find code more easy to read than without.&lt;/p&gt;</comment>
                            <comment id="77971" author="mjmac" created="Wed, 26 Feb 2014 23:31:12 +0000"  >&lt;p&gt;Attached a small proof-of-concept for generating valid JSON with PyYAML. The main takeaway is that the JSON we are currently generating is indeed valid YAML. Given that the DLC patches that bring in libyaml have not yet landed on master, and won&apos;t land for 2.5.x, I propose that we move forward with the existing simple JSON generator, but plan to replace it with libyaml when that becomes available.&lt;/p&gt;</comment>
                            <comment id="78530" author="bogl" created="Wed, 5 Mar 2014 21:01:10 +0000"  >&lt;p&gt;backport to b2_5;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/9512&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/9512&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="78533" author="pjones" created="Wed, 5 Mar 2014 21:08:45 +0000"  >&lt;p&gt;Landed for 2.6&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="23595">LU-4751</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="20161">LU-3734</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="14176" name="test.py" size="2354" author="mjmac" created="Wed, 26 Feb 2014 23:31:12 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                            <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzw49z:</customfieldvalue>

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