[openstack-dev] [Ceilometer] Complex resource_metadata could fail to store in MongoDB

Igor Degtiarov idegtiarov at mirantis.com
Mon Sep 8 14:02:06 UTC 2014


On Thu, Sep 4, 2014 at 1:16 PM, Nadya Privalova <nprivalova at mirantis.com>
wrote:

> IMHO it's ok and even very natural to expect "escaped" query from users.
> e.g, we store the following structure
>
> {metadata:
>                     { Zoo:
>                                {Foo.Boo: ''value"}}}
>

 Yep but such structure couldn't be stored in MongoDB without exchanging
dot in "Foo.Boo"



>
> and query should be "metadata.Zoo.Foo\.Boo" .
>

That could be a good  solution, but it is needed only if MongoDB is chosen
as a backend. So the question is
should we specify query only for MongoDB or change queries for all
backends?


> In this case it's not necessary to know deep of tree.
>
> Thanks,
> Nadya
>
>
>
Cheers,
Igor D.




>
> On Fri, Aug 29, 2014 at 3:21 PM, Igor Degtiarov <idegtiarov at mirantis.com>
> wrote:
>
>> Hi, folks.
>>
>> I was interested in the problem with storing of samples, that contain
>> complex resource_metadata, in MongoDB database [1].
>>
>> If data is a dict that has a  key(s) with dots (i.e. .), dollar signs
>> (i.e. $), or null characters,
>> it wouldn't be stored. It is happened because these characters are
>> restricted to use in fields name in MongoDB [2], but so far there is no any
>> verification of the metadata in ceilometers mongodb driver, as a result we
>> will lose data.
>>
>> Solution of this problem seemed to be rather simple, before storing data
>> we check keys in resourse_metadata, if it is a dict, and "quote" keys with
>> restricted characters in a similar way, as it was done in a change request
>> of redesign separators in columns in HBase [2]. After that store metering
>> data.
>>
>> But other unexpected difficulties appear on the step of getting data. To
>> get stored data we constructs a meta query, and structure of that query was
>> chosen identical to initial query in MongoDB. So dots is used as a
>> separator for three nods of stored data.
>>
>> Ex. If it is needed to check value in field "Foo"
>>
>> {metadata:
>>                     { Zoo:
>>                                {Foo: ''value"}}}
>>
>> query would be: "metadata.Zoo.Foo"
>>
>> We don't know how deep is dict in metadata, so it is impossible to
>> propose any correct parsing of query, to "quote" field names contain dots.
>>
>> I see two way for improvements. First is rather complex and based of
>> redesign structure of the metadata query in ceilometer. Don't know if it is
>> ever possible.
>>
>> And second is based on removing from the samples "bad" resource_metadata.
>> In this case we also lose metadata,  but save other metering data. Of
>> course queries for not saved metadata will return nothing, so it is not
>> complete solution, but some kind of the hook.
>>
>> What do you think about that?
>> Any thoughts and propositions are kindly welcome.
>>
>> [1] https://bugs.launchpad.net/mos/+bug/1360240
>> [2] http://docs.mongodb.org/manual/reference/limits/
>> [3] https://review.openstack.org/#/c/106376/
>>
>> -- Igor Degtiarov
>>
>> _______________________________________________
>> OpenStack-dev mailing list
>> OpenStack-dev at lists.openstack.org
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20140908/2d98a845/attachment.html>


More information about the OpenStack-dev mailing list