<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 5, 2017 at 7:16 AM, Dan Kenigsberg <span dir="ltr">&lt;<a href="mailto:danken@redhat.com" target="_blank">danken@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, Apr 4, 2017 at 6:33 PM, Michal Skrivanek<br>
<div><div class="gmail-h5">&lt;<a href="mailto:michal.skrivanek@redhat.com">michal.skrivanek@redhat.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; On 4 Apr 2017, at 17:26, Dan Kenigsberg &lt;<a href="mailto:danken@redhat.com">danken@redhat.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Apr 4, 2017 at 1:16 PM, Michal Skrivanek<br>
&gt;&gt; &lt;<a href="mailto:michal.skrivanek@redhat.com">michal.skrivanek@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 4 Apr 2017, at 12:10, Roy Golan &lt;<a href="mailto:rgolan@redhat.com">rgolan@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Tue, Apr 4, 2017 at 12:49 PM Yaniv Kaul &lt;<a href="mailto:ykaul@redhat.com">ykaul@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Tue, Apr 4, 2017 at 12:29 PM, Roy Golan &lt;<a href="mailto:rgolan@redhat.com">rgolan@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I&#39;m working on a POC lately on a change to stats collection and retrieval<br>
&gt;&gt;&gt;&gt;&gt; by VDSM. The moto is to cut all we can from host/vm stats (possibly caps)<br>
&gt;&gt;&gt;&gt;&gt; and report only core-business stuff to the engine. Engine will retrieve the<br>
&gt;&gt;&gt;&gt;&gt; rest through a 3rd party provider<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; (nevermind what is it atm)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I hope it’s the same one as for VM stats, collectd:)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Being backward compatible by design, I have to support 2 API versions for<br>
&gt;&gt;&gt;&gt;&gt; Host.getStats , &#39;4.1&#39; and &#39;4.2&#39;.<br>
&gt;&gt;&gt;&gt;&gt; Except from supplying less parameters, I want VDSM to do less stuff. It<br>
&gt;&gt;&gt;&gt;&gt; doesn&#39;t need to sample what it doesn&#39;t report. In other words I want<br>
&gt;&gt;&gt;&gt;&gt; &#39;4.1-sampling&#39; and &#39;4.2-sampling&#39;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; # Introducing &#39;configuration&#39; Verb:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; As engine knows always(Hosted Engine as well) what cluster version this<br>
&gt;&gt;&gt;&gt;&gt; host belongs to, it can configure VDSM to operate in cluster version mode.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; why not running it in parallel for one version?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;  Host.configure(config={<wbr>version: 4.2}<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Consider this verb, pre-activating using &#39;Host.getCaps&#39; to set the<br>
&gt;&gt;&gt;&gt;&gt; context.<br>
&gt;&gt;&gt;&gt;&gt; It will set the righjt sampling method, and other stuff if needed then<br>
&gt;&gt;&gt;&gt;&gt; API endpoints will have the right permutation of the api to answer it.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; 4.2 host can operate in 4.1 mode:<br>
&gt;&gt;&gt;&gt;&gt;  Host.configure(config={<wbr>version: 4.1}<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Issue: moving a 4.2 host from 4.2 cluster to 4.1 is a problem since<br>
&gt;&gt;&gt;&gt;&gt; engine needs to know this is a new vdsm that has the verb available. One way<br>
&gt;&gt;&gt;&gt;&gt; to overcome that is to fire the verb for every host regardless of the<br>
&gt;&gt;&gt;&gt;&gt; version and disregard an error that implies the verb doesn&#39;t exist.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Isn&#39;t it solved by host re-installation?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; We allow maintenance + change host cluster so not always. Was this changed?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; # Engine:<br>
&gt;&gt;&gt;&gt;&gt; Engine will have a handling of the verb per version.<br>
&gt;&gt;&gt;&gt;&gt; Host/Vms monitoring should be changed - I suggest to move out of the<br>
&gt;&gt;&gt;&gt;&gt; monitoring code the whole stats collection as it is a different task which<br>
&gt;&gt;&gt;&gt;&gt; is orthogonal to &#39;monitoring&#39; and in 4.2 more than before.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I know configuration for VDSM has been discussed before and there are<br>
&gt;&gt;&gt;&gt;&gt; probably tons of ways to do it. When you share your thoughts please remember<br>
&gt;&gt;&gt;&gt;&gt; that configuration is a by-product of the effort.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; How do we persist this level on VDSM? Or we don&#39;t, and if VDSM is<br>
&gt;&gt;&gt;&gt; restarted it is again back to 4.1 mode until Engine tells it otherwise?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Y.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Must persist it somehow otherwise there is a race when the engine will send<br>
&gt;&gt;&gt; send a stats request and will get the wrong answer.  I&#39;m wondering if using<br>
&gt;&gt;&gt; differnt endpoints is the right solution here to prevent that from<br>
&gt;&gt;&gt; happening.<br>
&gt;&gt;&gt;  method: Host.getStats version: 4.1<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; would it be a problem? assuming that the code is easily started/stopped<br>
&gt;&gt;&gt; within vdsm, we can just change the behavior based on receiving one or the<br>
&gt;&gt;&gt; other verb for the first time after vdsm starts<br>
&gt;&gt;<br>
&gt;&gt; It does not feel right to have a such a state in Vdsm. and making this<br>
&gt;&gt; state depend implicitly on a verb feels even worse than an explicit<br>
&gt;&gt; &quot;configure&quot; verb. We already have something like that in the<br>
&gt;&gt; debug-oriented setLogLevel verb; but that&#39;s not how client/server<br>
&gt;&gt; applications usually operate.<br>
&gt;<br>
&gt; I don’t mind either way<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; I think that the proper way to do this would be to reconfigure<br>
&gt;&gt; vdsm.conf, set there collect_statistics=false (via ovirt-host-deploy<br>
&gt;&gt; or Anible), and restart vdsmd+supervdsmd. This way we are sure that<br>
&gt;&gt; all threads and services see the new config and act accordingly. This<br>
&gt;&gt; can be done by Engine whenever a host is added to a new cluster, based<br>
&gt;&gt; on the statistic-gathering policy in that cluster.<br>
&gt;<br>
&gt; But why would you require restart for such a simple thing? We have the collection pretty well isolated already, it’s not even using periodic sampling, there are nice-to-drop things which can wait (repoStats, HE HA status?)<br>
<br>
</div></div>A specific verb for enablePeriodicStatsCollection(<wbr>False) can work like that.<br>
<br>
Roy suggested a more general configure verb, which I think can lead to<br>
all sort of unsatisfiable assumptions.<br></blockquote><div><br></div><div>I wonder when we would enable and whether we want to disable it at some point.<br></div><div>How would it fit in to the host life cycle? (maintenance, engine not connected etc) <br><br></div><div>On the other hand if we want to send stats either by events or collectd we could<br></div><div>do it always. If collectd is not configured the stats would not be  send (collectd&#39;s decision).<br>In the same way it would work for events if the engine connection is not there they would<br></div><div>not be  sent. The only drawback of this approach is cpu utilization to prepare/collect<br></div><div>the stats. As far as I remember Yaniv B. already measured the impact.<br></div></div><br></div></div>