<br><br><div class="gmail_quote">On Tue, Aug 7, 2012 at 12:59 PM, O'Driscoll, Cian <span dir="ltr"><<a href="mailto:cian.o-driscoll@hp.com" target="_blank">cian.o-driscoll@hp.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div><div class="im">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Sorry for the delay in a reply but was out of the office for the last couple of days.<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">The Goal is B, to get usage(reads, writes, read mb, write mb) of all volumes in status “attached”.<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
</div><p class="MsoNormal"><span style="color:#1f497d">>Compute keeps a record of volumes that are attached via the block_device_mapping table. The method for doing this is to get all instances belonging to the host, iterate through each instance and get a list of
 attached volues from block_device_mapping, and log usage for each one. You could do this inside the existing _instance_usage_audit task (which already grabs all active instances on the host) using self._get_instance_volume_bdms(instance_uuid).<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">We can extend
</span><span style="color:#1f497d">_instance_usage_audit to send volume usage data similar to how it currently sends bandwidth usage data.<u></u><u></u></span></p><div class="im">
<p class="MsoNormal"><span style="color:#1f497d">_instance_usage_audit reads the bandwidth data from the db which has already been populated by a separate periodic task
</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">_poll_bandwidth_usage.</span><span style="color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d">I think </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">we still need to gather that information through a peridoc task like _poll_bandwidth_usage, using
</span><span style="color:#1f497d">self._get_instance_volume_bdms(instance_uuid)  - (tested and works fine).
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d">If this was an auditor for the amount of time as volume was mounted, then we could do this all in cinder but as</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> we need to
 query in this case libvirt for the usage stats(reads, writes, read mb, write mb) then we have to do this on the compute host as we cannot query libvirt remotely(from volume manager).</span></p></div></div></div></blockquote>
<div><br></div><div>Ceilometer is already running an agent on the compute host to poll libvirt for other stats about the instance. Maybe we should add a pollster there for this new info, too?</div><div><br></div><div>Doug</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word"><div><div class="im"><p class="MsoNormal">
<span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Vishvananda Ishaya [mailto:<a href="mailto:vishvananda@gmail.com" target="_blank">vishvananda@gmail.com</a>]
<br>
<b>Sent:</b> 02 August 2012 17:03<br>
<b>To:</b> OpenStack Development Mailing List<br>
<b>Subject:</b> Re: [openstack-dev] [cinder] Volume metering in nova<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div><p class="MsoNormal">There are two possible solutions depending on what the goal of usage metering is.<u></u><u></u></p><div><div class="h5">
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Goal A: log usage of all created volumes regardless of attach status.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">This should be done in cinder (or nova-volume/manager.py) side where the list of volumes exists.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Goal B: log usage of all attached volumes.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Compute keeps a record of volumes that are attached via the block_device_mapping table. The method for doing this is to get all instances belonging to the host, iterate through each instance and get a list of attached volues from block_device_mapping,
 and log usage for each one. You could do this inside the existing _instance_usage_audit task (which already grabs all active instances on the host) using self._get_instance_volume_bdms(instance_uuid).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Vish<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">On Aug 2, 2012, at 4:43 AM, "O'Driscoll, Cian" <<a href="mailto:cian.o-driscoll@hp.com" target="_blank">cian.o-driscoll@hp.com</a>> wrote:<u></u><u></u></p>
</div>
<p class="MsoNormal"><br>
<br>
<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Just wanted to start a discussion on the issue I hit yesterday when implementing volume usage metering (<a href="https://blueprints.launchpad.net/nova/+spec/volume-usage-metering" target="_blank"><span style="color:purple">https://blueprints.launchpad.net/nova/+spec/volume-usage-metering</span></a>)</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Here is what I found:</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">I create a periodic task in nova/compute/manager.py, the function looks like this</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">    @manager.periodic_task</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">    def _poll_volume_usage(self, context, start_time=None, stop_time=None):</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">        if not start_time:</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">            start_time = utils.last_completed_audit_period()[1]</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">        curr_time = time.time()</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">        if curr_time - self._last_vol_usage_poll > FLAGS.volume_poll_interval:</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">            self._last_vol_usage_poll = curr_time</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">            LOG.info(_("Updating volume usage cache"))</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">           <span> </span><b>volumes = self.volume_api.get_all(context)</b></span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">            try:</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">                vol_usage = self.driver.get_all_volume_usage(context, volumes,</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">                        start_time, stop_time)</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">            except NotImplementedError:</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">                return</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">            for usage in vol_usage:</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">                self.db.vol_usage_update(context, usage['volume'], start_time,</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">                                         usage['rd_req'], usage['rd_bytes'],</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">                                         usage['wr_req'], usage['wr_bytes'])</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">The issue is with the call “self.volume_api.get_all(context)”, in my blueprint I was going to use self.db.volume_get_all_by_host(ctxt, self.host) but because
 nova db doesn’t contain volume info anymore, we need to talk to cinder to get the info.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">_poll_volume_usage is passed and admin context when ran. The admin context doesn’t contain a service_catalog or any authentication info from Keystone, bascically
 just a context that says is_admin=True.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">So when  “self.volume_api.get_all(context)” is called passing in the admin context, the instantiation of a python cinder client fails as the service catalog
 is empty.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Even if the service catalog was populated, I still think we’d fail as we wouldn’t have a Auth token to talk to cinder.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 ERROR nova.manager [-] Error during ComputeManager._poll_volume_usage: 'NoneType' object is not iterable</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager Traceback (most recent call last):</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager   File "/opt/stack/nova/nova/manager.py", line 173, in periodic_tasks</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager     task(self, context)</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager   File "/opt/stack/nova/nova/compute/manager.py", line 2639, in _poll_volume_usage</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager     volumes = self.volume_api.get_all(context)</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager   File "/opt/stack/nova/nova/volume/cinder.py", line 125, in get_all</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager     items = cinderclient(context).volumes.list(detailed=True)</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager   File "/opt/stack/nova/nova/volume/cinder.py", line 45, in cinderclient</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager     url = sc.url_for(service_type='volume', service_name='cinder')</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager   File "/opt/stack/python-cinderclient/cinderclient/service_catalog.py", line 53, in url_for</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager     for service in catalog:</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager TypeError: 'NoneType' object is not iterable</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">2012-08-01 14:05:01 TRACE nova.manager</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">One possible solution to this is to have a cinder admin user with read only(read all data from cinder db) access created in Keystone (Glance does something very
 similar when talking to swift)? It keeps the user data in a conf file on the glance nodes.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">So before we call “self.volume_api.get_all(context)”, we can generate a cinder admin context using the info in a conf file.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">I think this could be done in another blueprint as I feel there are other use cases where a cinder admin user is required (Any cinder auditing in nova would
 require the admin user).</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">For now I propose, to make progress in my implementation of just adding stats collection on detach and not implementing the periodic task for now.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">This would be volume usage metering part 1 say, as a proof of concept and when a general consensus/implementation is reached around the cinder admin user, I
 can implement the periodic task as part ?</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-IE" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></p>

</div>
<p class="MsoNormal"><span style="font-size:13.5pt;font-family:"Menlo","serif"">_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank"><span style="color:purple">OpenStack-dev@lists.openstack.org</span></a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><span style="color:purple">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</span></a><u></u><u></u></span></p>

</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

<br>_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br>