
1 Dec
2013
1 Dec
'13
9:55 a.m.
------=_Part_21090047_1204116571.1385888119663 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit ----- Original Message ----- > From: "Mike Kolesnik" <mkolesni@redhat.com> > To: "Kanagaraj" <kmayilsa@redhat.com> > Cc: "engine-devel" <engine-devel@ovirt.org> > Sent: Sunday, December 1, 2013 8:08:42 AM > Subject: Re: [Engine-devel] Using config values > ----- Original Message ----- > > Hi All, > > Hi Kanagaraj, > > The are some issues arising in configurations whenever we move up on the > > versions(3.3 => 3.4), because of the way we store and interpret them. > > > Whenever there is a new cluster level, you will need to add a new entry for > > all(most) of the configuration. Mostly a copy paste if you see from 3.2 to > > 3.3, except some CPU/PM type related configurations. > > > Better option would be to have the defaul config value in ConfigValues.java > > and the overrides will go to config.sql. In this approach you don't need a > > new entries to config.sql when there is a new cluster level. > > > Lets take an exmaple, "SupportForceCreateVG" - This is supported from 3.1 > > onwards, > > > If you look at config.sql, you will see following entries > > > select fn_db_add_config_value('SupportForceCreateVG','false','3.0'); > > > select fn_db_add_config_value('SupportForceCreateVG','true','3.1'); > > > select fn_db_add_config_value('SupportForceCreateVG','true','3.2'); > > > select fn_db_add_config_value('SupportForceCreateVG','true','3.3'); > > > And in ConfigValues.java > > > @TypeConverterAttribute(Boolean.class) > > > @DefaultValueAttribute("false") > > > SupportForceCreateVG, > > > Now if there is 3.4 and 3.5, the user needs to add 2 more entries, which i > > feel is redundant. > > > Instead we can make > > > @TypeConverterAttribute(Boolean.class) > > > @DefaultValueAttribute("true") > > > SupportForceCreateVG, > > > and have only the following in config.sql > > > select fn_db_add_config_value('SupportForceCreateVG','false','3.0'); > > > if a particular value(for a specific cluster level) is not found in > > Config.sql, the fallback is to use the value available in > > ConfigValues.java. > > This has already been implemented, there are many "feature supported" > configurations working like this (for example GlusterSupport). > I think a more interesting approach would be to move these out of the DB > since these values don't really hav e a reson to be there. > Since the entire thing is abstracted by "Gluster/FeatureSupported" classes > then we can easily change mechanism (of course whatever code is not using it > can be easily converted to use the mechanism) > For example a simple enum could do the trick: > ------------------------------------- EXAMPLE > ------------------------------------- > /** > * Convenience class to check if a gluster feature is supported or not in any > given version.<br> > * Methods should be named by feature and accept version to check against. > */ > public class GlusterFeatureSupported { > /** > * @param version > * Compatibility version to check for. > * @return <code>true</code> if gluster support is enabled, <code>false</code> > if it's not. > */ > public static boolean gluster(Version version) { > return SupportedFeatures.GLUSTER.isSupportedOn(version); > } > /** > * @param version > * Compatibility version to check for. > * @return <code>true</code> if gluster heavyweight refresh is enabled, > <code>false</code> if it's not. > */ > public static boolean refreshHeavyWeight(Version version) { > return SupportedFeatures.REFRESH_HEAVYWEIGHT.isSupportedOn(version); > } > /* More methods... */ > enum SupportedFeatures { > GLUSTER(Version.v3_0), > REFRESH_HEAVYWEIGHT(Version.v3_0, Version.v3_1), > /* More members */; > private Set<Version> unsupportedVersions = new HashSet<Version>(); > private SupportedFeatures(Version... versions) { > unsupportedVersions.addAll(Arrays.asList(versions)); > } > public boolean isSupportedOn(Version version) { > return !unsupportedVersions.contains(version); > } > } > ------------------------------------- END EXAMPLE > ------------------------------------- > Thoughts? unless i didn't understand something, this is not good, this should stay configurable by the users, for example if some user experience some issues with a feature and want to turn it off/change the values.. (not all version configuration are boolean, some are different values to different versions, like cpu-list) > Regards, > Mike > > Please share your thoughts on this. > > > Thanks, > > > Kanagaraj > > _______________________________________________ > Engine-devel mailing list > Engine-devel@ovirt.org > http://lists.ovirt.org/mailman/listinfo/engine-devel ------=_Part_21090047_1204116571.1385888119663 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable <html><body><div style=3D"font-family: times new roman, new york, times, se= rif; font-size: 12pt; color: #000000"><div><br></div><div><br></div><hr id= =3D"zwchr"><blockquote style=3D"border-left:2px solid #1010FF;margin-left:5= px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-de= coration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>Fr= om: </b>"Mike Kolesnik" <mkolesni@redhat.com><br><b>To: </b>"Kanagara= j" <kmayilsa@redhat.com><br><b>Cc: </b>"engine-devel" <engine-deve= l@ovirt.org><br><b>Sent: </b>Sunday, December 1, 2013 8:08:42 AM<br><b>S= ubject: </b>Re: [Engine-devel] Using config values<br><div><br></div><div s= tyle=3D"font-family: times new roman, new york, times, serif; font-size: 12= pt; color: #000000"><hr id=3D"zwchr"><blockquote style=3D"border-left:2px s= olid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal= ;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-se= rif;font-size:12pt;"> =20 =20 =20 =20 Hi All,</blockquote><div><br></div><div>Hi Kanagaraj,<br></div><div><br= ></div><blockquote style=3D"border-left:2px solid #1010FF;margin-left:5px;p= adding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decora= tion:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><br> The are some issues arising in configurations whenever we move up on the versions(3.3 =3D> 3.4), because of the way we store and interpret them.<br><div><br></div> Whenever there is a new cluster level, you will need to add a new entry for all(most) of the configuration. Mostly a copy paste if you see from 3.2 to 3.3, except some CPU/PM type related configurations.<br= > Better option would be to have the defaul config value in ConfigValues.java and the overrides will go to config.sql. In this approach you don't need a new entries to config.sql when there is a new cluster level.<br><div><br></div> Lets take an exmaple, "SupportForceCreateVG" - This is supported from 3.1 onwards,<br><div><br></div> If you look at config.sql, you will see following entries <br> select fn_db_add_config_value('SupportForceCreateVG','false','3.0'); <br> select fn_db_add_config_value('SupportForceCreateVG','true','3.1'); <br> select fn_db_add_config_value('SupportForceCreateVG','true','3.2'); <br> select fn_db_add_config_value('SupportForceCreateVG','true','3.3');<br>= <div><br></div> And in ConfigValues.java<br><div><br></div> @TypeConverterAttribute(Boolean.class)<br> @DefaultValueAttribute("false")<br> SupportForceCreateVG,<br><div><br></div> Now if there is 3.4 and 3.5, the user needs to add 2 more entries, which i feel is redundant.<br><div><br></div> Instead we can make <br><div><br></div> @TypeConverterAttribute(Boolean.class)<br> @DefaultValueAttribute("true")<br> SupportForceCreateVG,<br><div><br></div> and have only the following in config.sql<br> select fn_db_add_config_value('SupportForceCreateVG','false','3.0');<br= ><div><br></div> if a particular value(for a specific cluster level) is not found in Config.sql, the fallback is to use the value available in ConfigValues.java.</blockquote><div><br></div><div>This has already bee= n implemented, there are many "feature supported" configurations working li= ke this (for example GlusterSupport).<br></div><div><br></div><div>I think = a more interesting approach would be to move these out of the DB since thes= e values don't really hav e a reson to be there.<br></div><div>Since the en= tire thing is abstracted by "Gluster/FeatureSupported" classes then we can = easily change mechanism (of course whatever code is not using it can be eas= ily converted to use the mechanism)<br></div><div><br></div><div>For exampl= e a simple enum could do the trick:<br></div><div>-------------------------= ------------ EXAMPLE -------------------------------------<br></div><div>/*= *<br> * Convenience class to check if a gluster feature is supported o= r not in any given version.<br><br> * Methods should be named by= feature and accept version to check against.<br> */<br>public class G= lusterFeatureSupported {</div><div> /**<br> &n= bsp; * @param version<br> * = Compatibility version to c= heck for.<br> * @return <code>true</code&g= t; if gluster support is enabled, <code>false</code> if it's no= t.<br> */<br> public static boole= an gluster(Version version) {<br> = return SupportedFeatures.GLUSTER.isSupportedOn(version);<br> &n= bsp; }<br><div><br></div> /**<br> = * @param version<br> * &nbs= p; Compatibility version to check for.<= br> * @return <code>true</code> if glus= ter heavyweight refresh is enabled, <code>false</code> if it's = not.<br> */<br> public static boo= lean refreshHeavyWeight(Version version) {<br>  = ; return SupportedFeatures.REFRESH_HEAVYWEIGHT.isSupportedOn(ve= rsion);<br> }<br></div><div><br></div><div> &n= bsp; /* More methods... */</div><div><br> enum SupportedF= eatures {<br> GLUSTER(Version.v3_= 0),<br> REFRESH_HEAVYWEIGHT(Versi= on.v3_0, Version.v3_1),</div><div>  = ; /* More members */;<br><div><br></div>  = ; private Set<Version> unsupportedVersions =3D new HashSet<V= ersion>();<br><div><br></div> = private SupportedFeatures(Version... versions) {<br>  = ; unsupportedVersions.addAll(Arra= ys.asList(versions));<br> }<br><d= iv><br></div> public boolean isSu= pportedOn(Version version) {<br> &= nbsp; return !unsupportedVersions.contains(version);<br>&= nbsp; }<br> }</div><d= iv>------------------------------------- END EXAMPLE ----------------------= ---------------</div><div><br></div><div>Thoughts?</div></div></blockquote>= <div><br>unless i didn't understand something, this is not good,<br></div><= div>this should stay configurable by the users,<br></div><div>for example i= f some user experience some issues with a feature and want to turn it off/c= hange the values.. </div><div>(not all version configuration are boolean, s= ome are different values to different versions, like cpu-list)<br></div><bl= ockquote style=3D"border-left:2px solid #1010FF;margin-left:5px;padding-lef= t:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;= font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><div style=3D"font-= family: times new roman, new york, times, serif; font-size: 12pt; color: #0= 00000"><div><br></div><div><br></div><div>Regards,<br></div><div>Mike<br></= div><blockquote style=3D"border-left:2px solid #1010FF;margin-left:5px;padd= ing-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoratio= n:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><br> Please share your thoughts on this.<br><div><br></div> Thanks,<br> Kanagaraj<br><div><br></div></blockquote></div><br>____________________= ___________________________<br>Engine-devel mailing list<br>Engine-devel@ov= irt.org<br>http://lists.ovirt.org/mailman/listinfo/engine-devel<br></blockq= uote><div><br></div></div></body></html> ------=_Part_21090047_1204116571.1385888119663--