[openstack-dev] [Trove] How users should specify a datastore type when creating an instance
Nikhil Manchanda
nikhil at manchanda.me
Fri Oct 25 19:25:32 UTC 2013
It seems strange to me to treat both the datastore_type and version as
two separate entities, when they aren't really independent of each
other. (You can't really deploy a mysql type with a cassandra version,
and vice-versa, so why have separate datastore-list and version-list
calls?)
I think it's a better idea to store in the db (and list) actual
representations of the datastore type/versions that an image we can
deploy supports. Any disambiguation could then happen based on what
entries actually exist here.
Let me illustrate what I'm trying to get at with a few examples:
Database has:
id | type | version | active
----------------------------------
a | mysql | 5.6.14 | 1
b | mysql | 5.1.0 | 0
c | postgres | 9.3.1 | 1
d | redis | 2.6.16 | 1
e | redis | 2.6.15 | 1
f | cassandra | 2.0.1 | 1
g | cassandra | 2.0.0 | 0
Config specifies:
default_datastore_id = a
1. trove-cli instance create ...
Just works - Since nothing is specified, this uses the
default_datastore_id from the config (mysql 5.6.14 <a>) . No need for
disambiguation.
2. trove-cli instance create --datastore_id e
The datastore_id specified always identifies a unique datastore type /
version so no other information is needed for disambiguation. (In this
case redis 2.6.15, identified by <e>)
3. trove-cli instance create --datastore_type postgres
The datastore_type in this case uniquely identifies postgres 9.3.1 <c>,
so no disambiguation is necessary.
4. trove-cli instance create --datastore_type cassandra
In this case, there is only one _active_ datastore with the given
datastore_type, so no further disambiguation is needed and cassandra
2.0.1 <f> is uniquely identified.
5. trove-cli instance create --datastore_type redis
In this case, there are _TWO_ active versions of the specified
datastore_type (2.6.16, and 2.6.17) so the call should return that
further disambiguation _is_ needed.
6. trove-cli instance create --datastore_type redis --datastore_version 2.6.16
We have both datastore_type and datastore_version, and that uniquely
identifies redis 2.6.16 <e>. No further disambiguation is needed.
7. trove-cli instance create --datastore_type cassandra --version 2.0.0,
or trove-cli instance create --datastore_id g
Here, we are attempting to deploy a datastore which is _NOT_ active and
this call should fail with an appropriate error message.
Cheers,
-Nikhil
Andrey Shestakov writes:
> 2. it can be confusing coz not clear to what type version belongs
> (possible add "type" field in version).
> also if you have default type, then specified version recognizes as
> version of default type (no lookup in version.datastore_type_id)
> but i think we can do lookup in version.datastore_type_id before pick
> default.
>
> 4. if default version is need, then it should be specified in db, coz
> switching via versions can be frequent and restart service to reload
> config all times is not good.
>
> On 10/21/2013 05:12 PM, Tim Simpson wrote:
>> Thanks for the feedback Andrey.
>>
>> >> 2. Got this case in irc, and decided to pass type and version
>> together to avoid confusing.
>> I don't understand how allowing the user to only pass the version
>> would confuse anyone. Could you elaborate?
>>
>> >> 3. Names of types and maybe versions can be good, but in irc conversation rejected this case, i cant
>> remember exactly reason.
>> Hmm. Does anyone remember the reason for this?
>>
>> >> 4. Actually, "active" field in version marks it as default in type.
>> >>Specify default version in config can be usefull if you have more then
>> one active versions in default type.
>> If 'active' is allowed to be set for multiple rows of the
>> 'datastore_versions' table then it isn't a good substitute for the
>> functionality I'm seeking, which is to allow operators to specify a
>> *single* default version for each datastore_type in the database. I
>> still think we should still add a 'default_version_id' field to the
>> 'datastore_types' table.
>>
>> Thanks,
>>
>> Tim
>>
>> ------------------------------------------------------------------------
>> *From:* Andrey Shestakov [ashestakov at mirantis.com]
>> *Sent:* Monday, October 21, 2013 7:15 AM
>> *To:* OpenStack Development Mailing List
>> *Subject:* Re: [openstack-dev] [Trove] How users should specify a
>> datastore type when creating an instance
>>
>> 1. Good point
>> 2. Got this case in irc, and decided to pass type and version together
>> to avoid confusing.
>> 3. Names of types and maybe versions can be good, but in irc
>> conversation rejected this case, i cant remember exactly reason.
>> 4. Actually, "active" field in version marks it as default in type.
>> Specify default version in config can be usefull if you have more then
>> one active versions in default type.
>> But how match active version in type depends on operator`s
>> configuration. And what if "default version in config" will marked as
>> inactive?
>>
>> On 10/18/2013 10:30 PM, Tim Simpson wrote:
>>> Hello fellow Trovians,
>>>
>>> There has been some good work recently to figure out a way to specify
>>> a specific datastore when using Trove. This is essential to
>>> supporting multiple datastores from the same install of Trove.
>>>
>>> I have an issue with some elements of the proposed solution though,
>>> so I decided I'd start a thread here so we could talk about it.
>>>
>>> As a quick refresher, here is the blue print for this work (there are
>>> some gists ammended to the end but I figured the mailing list would
>>> be an easier venue for discussion):
>>> https://wiki.openstack.org/wiki/Trove/trove-versions-types
>>>
>>> One issue I have is with the way the instance create call will change
>>> to support different data stores. For example, here is the post call:
>>>
>>> """
>>> {
>>> "instance" : {
>>> "flavorRef" : "2",
>>> "name" : "as",
>>> "datastore_type" : "e60153d4-8ac4-414a-ad58-fe2e0035704a",
>>> "datastore_version" : "94ed1f9f-6c1a-4d6e-87e9-04ecff37b64b",
>>> "volume" : { "size" : "1" }
>>> }
>>> }
>>> """
>>>
>>> 1. I think since we have two fields in the instance object we should
>>> make a new object for datastore and avoid the name prefixing, like this:
>>>
>>> """
>>> {
>>> "instance" : {
>>> "flavorRef" : "2",
>>> "name" : "as",
>>> "datastore": {
>>> "type" : "e60153d4-8ac4-414a-ad58-fe2e0035704a",
>>> "version" : "94ed1f9f-6c1a-4d6e-87e9-04ecff37b64b"
>>> }
>>> "volume" : { "size" : "1" }
>>> }
>>> }
>>> """
>>>
>>> 2. I also think a datastore_version alone should be sufficient since
>>> the associated datastore type will be implied:
>>>
>>> """
>>> {
>>> "instance" : {
>>> "flavorRef" : "2",
>>> "name" : "as",
>>> "datastore": {
>>> "version" : "94ed1f9f-6c1a-4d6e-87e9-04ecff37b64b"
>>> }
>>> "volume" : { "size" : "1" }
>>> }
>>> }
>>> """
>>>
>>> 3. Additionally, while a datastore_type should have an ID in the
>>> Trove infastructure database, it should also be possible to pass just
>>> the name of the datastore type to the instance call, such as "mysql"
>>> or "mongo". Maybe we could allow this in addition to the ID? I think
>>> this form should actually use the argument "type", and the id should
>>> then be passed as "type_id" instead.
>>>
>>> """
>>> {
>>> "instance" : {
>>> "flavorRef" : "2",
>>> "name" : "as",
>>> "datastore": {
>>> "type" : "mysql",
>>> "version" : "94ed1f9f-6c1a-4d6e-87e9-04ecff37b64b"
>>> }
>>> "volume" : { "size" : "1" }
>>> }
>>> }
>>>
>>> """
>>>
>>> 4. Additionally, in the current pull request to implement this it is
>>> possible to avoid passing a version, but only if no more than one
>>> version of the datastore_type exists in the database.
>>>
>>> I think instead the datastore_type row in the database should also
>>> have a "default_version_id" property, that an operator could update
>>> to the most recent version or whatever other criteria they wish to
>>> use, meaning the call could become this simple:
>>>
>>> """
>>> {
>>> "instance" : {
>>> "flavorRef" : "2",
>>> "name" : "as",
>>> "datastore": {
>>> "type" : "mysql"
>>> }
>>> "volume" : { "size" : "1" }
>>> }
>>> }
>>> """
>>>
>>> Thoughts?
>>>
>>> Thanks,
>>>
>>> Tim
>>>
>>>
>>> _______________________________________________
>>> 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
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
More information about the OpenStack-dev
mailing list