On 29-12-15 14:46, Daan Hoogland wrote: > Wido, Rafael, > > I like the date-format but then of course CCYY-MM-DD. I can still think of > ways to screw up that (or the plain int;) >
20151229 is a valid integer which you can simply use to compare with. 100, 101, 102 or 20151229, 20160103, 20160104, I don't care that much. My point is that the database version should be separated from the code base. Wido > On Tue, Dec 29, 2015 at 1:40 PM, Rafael Weingärtner < > rafaelweingart...@gmail.com> wrote: > >> Wido, that is true, you are right; the naming on upgrade routines can use a >> numeric value independent of the number of the version. The numeric value >> can be a simple integer that is incremented each routine that is added or a >> time stamp when the routine was added. The point is that we would have to >> link a version to a number. That would enable us to use flywaydb. >> >> To use that approach I think we might need to break compatibility as you >> pointed out earlier, but I believe that the benefits of an improved way to >> manage upgrade routines will compensate by the breaking of compatibility. >> >> On Tue, Dec 29, 2015 at 10:25 AM, Wido den Hollander <w...@widodh.nl> >> wrote: >> >>> >>> >>> On 29-12-15 13:21, Rafael Weingärtner wrote: >>>> I got your point Daan. >>>> >>>> Well, and if we linked a version of ACS with a time stamp in the format >>> of >>>> DD.MM.YYYY? >>>> >>> >>> In that case you could also say. >>> >>> ACS 4.6.0 == db ver X >>> >>> You don't have to say ver >= X, you can also say ver = X. >>> >>>> We could then use the time stamp in the same format to name upgrade >>>> routines. This way the idea of running all of the routines in between >>>> version during upgrades could be applied. >>>> >>> >>> Same goes for giving all database changes a simple numeric int which >>> keeps incrementing each time a change is applied ;) >>> >>> Wido >>> >>>> On Tue, Dec 29, 2015 at 10:03 AM, Daan Hoogland < >> daan.hoogl...@gmail.com >>>> >>>> wrote: >>>> >>>>> Rafael, >>>>> >>>>> On Tue, Dec 29, 2015 at 12:22 PM, Rafael Weingärtner < >>>>> rafaelweingart...@gmail.com> wrote: >>>>> >>>>>> Thanks, Daan and Wido for your contributions, I will discuss them as >>>>>> follows. >>>>>> >>>>>> Daan, about the idea of per commit upgrades. Do you mean that we >>> separate >>>>>> each change in the database that is introduced by PRs/Commits in a >>>>>> different file (routine upgrade) per ACS version? >>>>>> So we would have, V_480_A.sql (for a PR),V_480_B.sql (for another PR) >>> and >>>>>> so forth >>>>>> >>>>>> If that is the case, we can achieve that using a simple convention >>> naming >>>>>> as I suggested. Each developer when she/he needs to change or add >>>>> something >>>>>> in the database creates an upgrade routine separately and gives it an >>>>>> execution order to be taken by Flywaydb. I think that could help RMs >> to >>>>>> track and isolate the problem, right? >>>>>> >>>>> Yes, with one little caveat. We do not know in what version a >>> feature/PR >>>>> will end up at the time of implementing, so a name containing the >>> version >>>>> would not be ideal. >>>>> >>>>> >>>>> >>>>>> >>>>>> Hi Wido, now I understand your example. >>>>>> I understand your worry about upgrade paths, and that is the point I >>> want >>>>>> to discuss and solve. In your example, if we release a 4.6.0 and >> later >>> a >>>>>> 4.5.3. You said that there would be no upgrade path from 4.5.3 to >>> 4.6.0. >>>>>> Well, today that is what happens. However, if we change the >> technology >>> we >>>>>> use to upgrade the database (using a tool such as Flywaydb) and if we >>>>>> define a standard to create upgrade routines that would not be a >>> problem. >>>>>> >>>>>> As I have written in my first email, to go from a version to another >> we >>>>>> should be able to run all of the upgrade routines in between them >>>>>> (including the upgrade routine of the goal version). Therefore, if we >>>>>> release a version 4.6.0, and then 4.5.3, if someone upgrades to 4.5.3 >>>>> from >>>>>> any other version, and then wants to upgrade to 4.6.0, that would not >>> be >>>>> a >>>>>> problem, it would be a metter of running only the routine upgrade of >>>>> 4.6.0 >>>>>> version. We do not need to explicitly create upgrade paths. They >> should >>>>> be >>>>>> implicit by our upgrade conventions. >>>>>> >>>>>> About creating versions of the code that rely on some version of the >>>>>> database. I do not like much because of compatibility issues that >> might >>>>>> arise. For instance, let’s say version X of ACS depends on version >>> =Y >>> of >>>>>> the database. If I upgrade the database to version Y + 1 or +2, the >>> same >>>>>> ACS version has to keep running nice and shiny. My worry is that may >>>>> bring >>>>>> some complications, such as to remove columns that cease to be used >> or >>>>> data >>>>>> structure that we might want to improve. >>>>>> >>>>>> I normally see that the database version and the code base are tied >> in >>> a >>>>>> mapping 1 to 1. Maybe I am having troubles identifying the benefits >> of >>>>> that >>>>>> change. >>>>>> >>>>>> Thanks for your time ;) >>>>>> >>>>>> On Tue, Dec 29, 2015 at 8:15 AM, Wido den Hollander <w...@widodh.nl> >>>>>> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> On 28-12-15 21:34, Rafael Weingärtner wrote: >>>>>>>> Hi Wido, Rohit, >>>>>>>> I have just read the feature suggestion. >>>>>>>> >>>>>>>> Wido, I am not trying to complicate things, quite the opposite, I >>>>> just >>>>>>>> illustrate a simple thing that can happen and is happening; I just >>>>>>> pointed >>>>>>>> how it can be easily solved. >>>>>>>> >>>>>>>> About the release of .Z, releases more constant and others, I do >> not >>>>>> want >>>>>>>> to mix topics. Let’s keep this thread strict to discuss database >>>>>>> upgrades. >>>>>>>> >>>>>>> >>>>>>> I do not want to start the release discussion, but what I meant is >>> that >>>>>>> we try to find a technical solution to something which might be >> solved >>>>>>> easier by just changing the way we release. >>>>>>> >>>>>>> 4.6.0 is released and afterwards 4.5.3 is released. How does >> somebody >>>>>>> upgrade from 4.5.3 to 4.6.0? He can't, since the 4.6.0 code doesn't >>>>>>> support that path. >>>>>>> >>>>>>> So my idea is to split the database version from the code version. >>>>>>> >>>>>>> The code requires database version >= X and during boot it simply >>>>> checks >>>>>>> that. >>>>>>> >>>>>>> The database migration tool can indeed do the DB migration, it >> doesn't >>>>>>> have to be the mgmt server who does the upgrade. >>>>>>> >>>>>>>> Now, about the FS. I agree with Rohit that we should have only one >>>>> way >>>>>> of >>>>>>>> managing database upgrades and creation. I just do not like the >> idea >>>>> of >>>>>>>> creating a tool that work as a wrapper on frameworks/tools such as >>>>>>>> flywaydb. I think that those frameworks already work pretty good as >>>>>> they >>>>>>>> are; and, I would rather maintain configurations than some wrapper >>>>>> code. >>>>>>>> >>>>>>>> I personally like the way ACS works during upgrades (I just do not >>>>> like >>>>>>> the >>>>>>>> code itself and how things are structured), as a system >>>>> administrator I >>>>>>>> like to change the version in the >>>>>>> “/etc/apt/sources.list.d/cloudstack.list” >>>>>>>> and use the "apt-get" "update" and "install" from the command >> line. I >>>>>> do >>>>>>>> not see the need to add another tool that is just a wrapper to the >>>>> mix. >>>>>>> If >>>>>>>> I update ACS code to 4.7.0, why would I let the database schema in >> an >>>>>>> older >>>>>>>> version? And if we want version DB schemas and application code >>>>>>> separately >>>>>>>> maintaining somehow compatibility between them, which would bring a >>>>>> whole >>>>>>>> other level of complexity to the code; I think we should avoid >> that. >>>>>>>> >>>>>>>> The flywaydb can be easily integrated with everything we have now; >> we >>>>>>> could >>>>>>>> have a maven profile for developers and integrate it in ACS >> bootstrap >>>>>>> using >>>>>>>> its API as a Spring bean. Therefore, we could remove the current >>>>>>>> “DatabaseUpgradeChecker “, “DbUpgrade” and other classes that aim >> to >>>>> do >>>>>>>> that. We could even add the creation of the schema into the first >>>>> time >>>>>> it >>>>>>>> boots using flywaydb and retire the “cloudstack-setup-database” >>>>> script, >>>>>>> or >>>>>>>> at least make it less complicated, using it just to configure the >>>>>>> database >>>>>>>> URL and users. >>>>>>>> >>>>>>>> The point is that to use Flywaydb we would have to agree upon a >>>>>>> convention >>>>>>>> on creating routines (java and SQL) to execute upgrades. Moreover, >>>>>> using >>>>>>> a >>>>>>>> tool such as Flywaydb we do not need to worry about upgrade paths. >>>>> As I >>>>>>>> wrote in the email I used to start this thread, the upgrade has to >> be >>>>>>>> straightforward, to go to a version we have to run all of the >> upgrade >>>>>>>> routines between the current version until the desired one. Our job >>>>> is >>>>>> to >>>>>>>> create upgrade routines that work and name them properly, the job >> of >>>>>> the >>>>>>>> tool is to check the current version, the desired one, the upgrades >>>>>> that >>>>>>> it >>>>>>>> needs to run and execute everything properly. >>>>>>>> >>>>>>> >>>>>>> Yes, indeed. I just wanted to start the discussion if we shouldn't >>>>>>> version the database differently from the code. >>>>>>> >>>>>>>> Additionally, I do not see the need to break compatibility as Rohit >>>>>>>> suggested in the FS; in my opinion, everything we have up today can >>>>> be >>>>>>>> migrated to the new structure I proposed. If we use a tool such as >>>>>>>> Flywaydb, I even volunteered for that. The only thing we have to >>>>>> discuss >>>>>>>> and agree upon is the naming conventions for upgrades routines, >> where >>>>>> to >>>>>>>> put them and the configurations for flywaydb. >>>>>>>> >>>>>>>> Thanks for your contribution and time. >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Dec 28, 2015 at 2:10 PM, Rohit Yadav < >>>>>> rohit.ya...@shapeblue.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi Rafael and Wido, >>>>>>>>> >>>>>>>>> Thanks for starting a conversation in this regard, I could not >>>>> pursue >>>>>>> the >>>>>>>>> Chimp tool due to other $dayjob work though it’s good to see some >>>>>>>>> discussion has started again. Hope we’ll solve this in 2016. >>>>>>>>> >>>>>>>>> In my opinion, we will need to first separate the database >>>>>>> init/migration >>>>>>>>> tooling away from mgmt server (right now the mgmt server does db >>>>>>> migrations >>>>>>>>> when it starts and there is a code/db version mismatch) and >> secondly >>>>>>> make >>>>>>>>> sure that we’re using the same code/tool to deploy database (right >>>>>> now, >>>>>>>>> users use the cloudstack-setup-database python tool while >> developer >>>>>> use >>>>>>> the >>>>>>>>> maven/java DatabaseCreator activated by the -Ddeploydb flag). >>>>>>>>> >>>>>>>>> After we’ve addressed these two issues we can look into how we can >>>>>>> support >>>>>>>>> minor releases workflow (or decide to do something else, like not >>>>>>> support >>>>>>>>> .Z releases like Wido mentioned), and see if we can or want to use >>>>> any >>>>>>>>> existing migration tool or write a wrapper tool “chimp” that uses >>>>>>> existing >>>>>>>>> tools (some of those are mentioned in the Chimp FS like flywaydb >>>>> etc). >>>>>>> For >>>>>>>>> allowing users to go back and forth from a db schema/version, >> we’ll >>>>>> also >>>>>>>>> need some new DB migration >>>>>> conventions/versioning/rules/static-checking, >>>>>>>>> and how developer need to write such paths (forward and reverse) >>>>> etc. >>>>>>>>> >>>>>>>>> The best approach I figured at the time was to decide that we’ll >> use >>>>>> the >>>>>>>>> previous db upgrade path mechanism till a certain CloudStack >> version >>>>>>> (say >>>>>>>>> 4.8.0) and after that we’ll use the new approach or tooling to >>>>>>>>> upgrade/downgrade DB schemas (thereby retiring away from the old >> DB >>>>>>> upgrade >>>>>>>>> path mess). >>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> [image: ShapeBlue] <http://www.shapeblue.com> Rohit Yadav >> Software >>>>>>>>> Architect , ShapeBlue d: * | s: +44 203 603 0540* >>>>>>>>> <%7C%20s:%20+44%20203%20603%200540> | m: *+91 8826230892* >>>>>>>>> <+91%208826230892> e: *rohit.ya...@shapeblue.com | t: * >>>>>>>>> <rohit.ya...@shapeblue.com%20%7C%20t:> | w: *www.shapeblue.com >> * >>>>>>>>> <http://www.shapeblue.com> a: >>>>>>>>> 53 Chandos Place, Covent Garden London WC2N 4HS UK Shape Blue Ltd >>>>> is a >>>>>>>>> company incorporated in England & Wales. ShapeBlue Services India >>>>> LLP >>>>>>> is a >>>>>>>>> company incorporated in India and is operated under license from >>>>> Shape >>>>>>> Blue >>>>>>>>> Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated >> in >>>>>>> Brasil >>>>>>>>> and is operated under license from Shape Blue Ltd. ShapeBlue SA >> Pty >>>>>> Ltd >>>>>>> is >>>>>>>>> a company registered by The Republic of South Africa and is traded >>>>>> under >>>>>>>>> license from Shape Blue Ltd. ShapeBlue is a registered trademark. >>>>>>>>> This email and any attachments to it may be confidential and are >>>>>>> intended >>>>>>>>> solely for the use of the individual to whom it is addressed. Any >>>>>> views >>>>>>> or >>>>>>>>> opinions expressed are solely those of the author and do not >>>>>> necessarily >>>>>>>>> represent those of Shape Blue Ltd or related companies. If you are >>>>> not >>>>>>> the >>>>>>>>> intended recipient of this email, you must neither take any action >>>>>> based >>>>>>>>> upon its contents, nor copy or show it to anyone. Please contact >> the >>>>>>> sender >>>>>>>>> if you believe you have received this email in error. >>>>>>>>> >>>>>>>>> >>>>>>>>> On 28-Dec-2015, at 9:10 PM, Wido den Hollander <w...@widodh.nl> >>>>>> wrote: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 28-12-15 16:21, Rafael Weingärtner wrote: >>>>>>>>>>> Thanks for your contribution Wido, >>>>>>>>>>> I have not seen Rohit’s email; I will take a look at it. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Ok, he has a FS here: >>>>>>>>>> >>>>>>> >>>>> >> https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+Chimp >>>>>>>>>> >>>>>>>>>>> About database schema changes happening only in X.Y, I also >> agree >>>>>> with >>>>>>>>> you >>>>>>>>>>> (that is a convention we all could agree on, and such as conding >>>>> and >>>>>>>>>>> release procedures we could have a wiki page for that). >> However, I >>>>>>>>> think we >>>>>>>>>>> still might have scripts in versions X.Y.Z to add data to a >> table >>>>>> such >>>>>>>>> as >>>>>>>>>>> “guest_os_hypervisor”. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Yes, that is true. A bugfix could be a addition into the >> database, >>>>>> but >>>>>>>>>> we have to prevent it as much as possible. >>>>>>>>>> >>>>>>>>>>> The point to manage such scripts is that, if we are in version >>>>> such >>>>>> as >>>>>>>>>>> 4.7.0 and a new script emerges in version 4.5.3, we would have >> to >>>>>>>>> decide to >>>>>>>>>>> run or not to run it. I would rather not run them, since if they >>>>> add >>>>>>>>>>> something to the code base; those changes should also be applied >>>>>> into >>>>>>>>>>> master and as a consequence it will be available in a future >>>>> update. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I understand, but this is where our release cycle becomes the >>>>>> problem. >>>>>>>>>> It is because we release a X.Y.Z release we run into these kind >> of >>>>>>>>> problems. >>>>>>>>>> >>>>>>>>>> If we as a project simple do not release the .Z releases we would >>>>> be >>>>>>>>>> fine as well ;) >>>>>>>>>> >>>>>>>>>> You can try to complicate things with technical things, or if we >>>>>>> release >>>>>>>>>> every two / three weeks we don't run into these kind of >> situations >>>>> :) >>>>>>>>>> >>>>>>>>>> We might even cut the database version loose from the code >> version. >>>>>>>>>> >>>>>>>>>> Database version is simple 100, 101, 102, 103, 104, 105. And a >> code >>>>>>>>>> version requires a certain version of the database. >>>>>>>>>> >>>>>>>>>> Wido >>>>>>>>>> >>>>>>>>>>> On Mon, Dec 28, 2015 at 12:50 PM, Wido den Hollander < >>>>>> w...@widodh.nl> >>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On 28-12-15 14:16, Rafael Weingärtner wrote: >>>>>>>>>>>>> Hi all devs, >>>>>>>>>>>>> First of all, sorry the long text, but I hope we can start a >>>>>>>>> discussion >>>>>>>>>>>>> here and improve that part of ACS. >>>>>>>>>>>>> >>>>>>>>>>>>> A while ago I have faced the code that Apache CloudStack (ACS) >>>>>> uses >>>>>>> to >>>>>>>>>>>>> upgrade from a version to newer one and that did not seem to >> be >>>>> a >>>>>>> good >>>>>>>>>>>> way >>>>>>>>>>>>> to execute our upgrades. Therefore, I decided to use some time >>>>> to >>>>>>>>> search >>>>>>>>>>>>> for alternatives. >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> I think we all saw that happen once or more :) >>>>>>>>>>>> >>>>>>>>>>>>> I have read some material about versioning of scripts used to >>>>>>> upgrade >>>>>>>>> a >>>>>>>>>>>>> database (DB) of a system and went through some frameworks >> that >>>>>>> could >>>>>>>>>>>> help >>>>>>>>>>>>> us. >>>>>>>>>>>>> >>>>>>>>>>>>> In the literature of software engineering, it is firmly stated >>>>>> that >>>>>>> we >>>>>>>>>>>> have >>>>>>>>>>>>> to version DB scripts as we do with the source code of the >>>>>>>>> application, >>>>>>>>>>>>> using the baseline approach. Gladly, we were not that bad at >>>>> this >>>>>>>>> point, >>>>>>>>>>>> we >>>>>>>>>>>>> already versioned our routines for DB upgrade (.sql and >> .java). >>>>>>>>>>>> Therefore, >>>>>>>>>>>>> it seemed that we just did not have used a practical approach >> to >>>>>>> help >>>>>>>>> us >>>>>>>>>>>>> during DB upgrades. >>>>>>>>>>>>> >>>>>>>>>>>>> From my readings and looking at the ACS source code I raised >> the >>>>>>>>>>>> following >>>>>>>>>>>>> requirement: >>>>>>>>>>>>> • We should be able to write more than one routine to upgrade >>>>> to a >>>>>>>>>>>>> version; those routines can be written in Java and SQL. We >> might >>>>>>> have >>>>>>>>>>>> more >>>>>>>>>>>>> than a routine to be executed for each version and we should >> be >>>>>> able >>>>>>>>> to >>>>>>>>>>>>> define an order of execution. Additionally, to go to an upper >>>>>>>>> version, we >>>>>>>>>>>>> have to run all of the routines from smaller versions first, >>>>> until >>>>>>> we >>>>>>>>>>>>> achieve the desired version. >>>>>>>>>>>>> >>>>>>>>>>>>> We could also add another requirement that is the downgrade >>>>> from a >>>>>>>>>>>> version, >>>>>>>>>>>>> which we currently do not support. With that comes my first >>>>>> question >>>>>>>>> for >>>>>>>>>>>>> discussion: >>>>>>>>>>>>> • Do we want/need a method to downgrade from a version to a >>>>>> previous >>>>>>>>>>>> one? >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> I personally do not care. Usually people should create a backup >>>>>> PRIOR >>>>>>>>> to >>>>>>>>>>>> a upgrade. If that fails they can restore the backup. >>>>>>>>>>>> >>>>>>>>>>>>> I found an explanation for not supporting downgrades, and I >>>>> liked >>>>>>> it: >>>>>>>>>>>>> http://flywaydb.org/documentation/faq.html#downgrade >>>>>>>>>>>>> >>>>>>>>>>>>> So, what I devised for us: >>>>>>>>>>>>> First the bureaucracy part - our migrations occur basically in >>>>>> three >>>>>>>>> (3) >>>>>>>>>>>>> steps, first we have a "prepare script", then a cleanup script >>>>> and >>>>>>>>>>>> finally >>>>>>>>>>>>> the migration per se that is written in Java, at least, that >> is >>>>>> what >>>>>>>>> we >>>>>>>>>>>> can >>>>>>>>>>>>> expect when reading the interface >>>>>> “com.cloud.upgrade.dao.DbUpgrade”. >>>>>>>>>>>>> >>>>>>>>>>>>> Additionally, our scripts have the following naming >> convention: >>>>>>>>>>>>> schema-<currentVersion>to<desiredVersion>, which in IMHO may >>>>> cause >>>>>>>>> some >>>>>>>>>>>>> confusion because at first sight we may think that from the >> same >>>>>>>>> version >>>>>>>>>>>> we >>>>>>>>>>>>> could have different paths to an upper version, which in >>>>> practice >>>>>> is >>>>>>>>> not >>>>>>>>>>>>> happening. Instead of a <currentVersion>to<version> we could >>>>>> simply >>>>>>>>> use >>>>>>>>>>>>> V_<numberOfVersion>_<sequencial>.<fileExtension>, giving that, >>>>> we >>>>>>>>> have to >>>>>>>>>>>>> execute all of the V_<version> scripts that are smaller than >> the >>>>>>>>> version >>>>>>>>>>>> we >>>>>>>>>>>>> want to upgrade. >>>>>>>>>>>>> >>>>>>>>>>>>> To clarify what I am saying, I will use an example. Let’s say >> we >>>>>>> have >>>>>>>>>>>> just >>>>>>>>>>>>> installed ACS and ran the cloudstack-setup-database. That >>>>> command >>>>>>> will >>>>>>>>>>>>> create a database schema in version 4.0.0. To upgrade that >>>>> schema >>>>>> to >>>>>>>>>>>>> version 4.3.0 (it is just an example, it could be any other >>>>>>> version), >>>>>>>>> ACS >>>>>>>>>>>>> will use the following mapping: >>>>>>>>>>>>> >>>>>>>>>>>>> _upgradeMap.put("4.0.0", new DbUpgrade[] {new Upgrade40to41(), >>>>> new >>>>>>>>>>>>> Upgrade410to420(), new Upgrade420to421(), new >> Upgrade421to430()) >>>>>>>>>>>>> >>>>>>>>>>>>> After loading the mapping, ACS will execute the scripts >> defined >>>>> in >>>>>>>>> each >>>>>>>>>>>> one >>>>>>>>>>>>> of the Upgrade path classes and the migration code per se. >>>>>>>>>>>>> >>>>>>>>>>>>> Now, let’s say we change the “.sql” scripts name to the >> pattern >>>>> I >>>>>>>>>>>>> mentioned, we would have the following scripts; those are the >>>>>>> scripts >>>>>>>>>>>> found >>>>>>>>>>>>> that aim to upgrade to versions between the interval 4.0.0 – >>>>> 4.3.0 >>>>>>>>>>>>> (considering 4.3.0, since that is the goal version): >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> - schema-40to410, can be named to: V_410_A.sql >>>>>>>>>>>>> - schema-40to410-cleanup, can be named to: V_410_B.sql >>>>>>>>>>>>> - schema-410to420, can be named to: V_420_A.sql >>>>>>>>>>>>> - schema-410to420-cleanup , can be named to: V_420_b.sql >>>>>>>>>>>>> - schema-420to421, can be named to: V_421_A.sql >>>>>>>>>>>>> - schema-421to430, can be named to: V_430_A.sql >>>>>>>>>>>>> - schema-421to430-cleanup, can be named to: V_430_B.sql >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Additionally, all of the java code would have to follow the >> same >>>>>>>>>>>>> convention. For instance, we have >>>>>>>>> “com.cloud.upgrade.dao.Upgrade40to41”, >>>>>>>>>>>>> which has some java code to migrate from 4.0.0 to 4.1.0. The >>>>> idea >>>>>> is >>>>>>>>> to >>>>>>>>>>>>> extract that migration code to a Java class named: >> V_410_C.java, >>>>>>>>> giving >>>>>>>>>>>>> that it has to execute the SQL scripts before the java code. >>>>>>>>>>>>> >>>>>>>>>>>>> In order to go from a smaller version (4.0.0) to an upper one >>>>>>>>> (4.3.0), we >>>>>>>>>>>>> have to run all of the migration routines from intermediate >>>>>>> versions. >>>>>>>>>>>> That >>>>>>>>>>>>> is what we are already doing, but we do all of that manually. >>>>>>>>>>>>> >>>>>>>>>>>>> Bottom line, I think we could simple use the convention >>>>>>>>>>>>> V_<numberOfVersion>_<sequencial>.<fileExtension> to name >> upgrade >>>>>>>>>>>> routines. >>>>>>>>>>>>> That would facilitate us to use a framework to help us with >> that >>>>>>>>> process. >>>>>>>>>>>>> Additionally, I believe that we should always assume that to >> go >>>>>>> from a >>>>>>>>>>>>> smaller version to a higher one, we should run all of the >>>>> scripts >>>>>>> that >>>>>>>>>>>>> exist between them. What do you guys think of that? >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> That seems good to me. But we still have to prevent that we >>>>> perform >>>>>>>>>>>> database changes in a X.Y.Z release since that is branched off >>>>> to a >>>>>>>>>>>> different branch. >>>>>>>>>>>> >>>>>>>>>>>> Imho database changes should only happen in X.Y releases. >>>>>>>>>>>> >>>>>>>>>>>>> After the bureaucracy, we can discuss tools. If we use that >>>>>>>>> convention to >>>>>>>>>>>>> name migration (upgrade) routines, we can start thinking on >>>>> tools >>>>>> to >>>>>>>>>>>>> support our migration process. I found two (2) promising ones: >>>>>>>>> Liquibase >>>>>>>>>>>>> and Flywaydb (both seem to be under Apache license, but the >>>>> first >>>>>>> one >>>>>>>>> has >>>>>>>>>>>>> an enterprise version?!). After reading the documentation and >>>>> some >>>>>>>>> usage >>>>>>>>>>>>> examples I found the flywaydb easier and simpler to use. >>>>>>>>>>>>> >>>>>>>>>>>>> What are the options of tools that we can use to help us >> manage >>>>>> the >>>>>>>>>>>>> database upgrade, without needing to code the upgrade path >> that >>>>>> you >>>>>>>>> know? >>>>>>>>>>>>> >>>>>>>>>>>>> After that, I think we should decide if we should create >> another >>>>>>>>>>>>> project/component to take care of migrations, or we can just >> add >>>>>> the >>>>>>>>>>>>> dependency of the tool to a project such as >> “cloud-framework-db” >>>>>> and >>>>>>>>>>>> start >>>>>>>>>>>>> using it. >>>>>>>>>>>>> >>>>>>>>>>>>> The “cloud-framework-db” project seems to have a focus on >> other >>>>>>> things >>>>>>>>>>>> such >>>>>>>>>>>>> as managing transactions and generating SQLs from annotations >>>>> (?!? >>>>>>>>> That >>>>>>>>>>>>> should be a topic for another discussion). Therefore, I would >>>>>> rather >>>>>>>>>>>> create >>>>>>>>>>>>> a new project that has the specific goal of managing ACS DB >>>>>>> upgrades. >>>>>>>>> I >>>>>>>>>>>>> would also move all of the routines (SQL and Java) to this new >>>>>>>>> project. >>>>>>>>>>>>> This project would be a module of the CloudStack project and >> it >>>>>>> would >>>>>>>>>>>>> execute the upgrade routines at the startup of ACS. >>>>>>>>>>>>> >>>>>>>>>>>>> I believe that going from a homemade solution to one that is >>>>> more >>>>>>>>>>>>> consolidated and used by other communities would be the way to >>>>> go. >>>>>>>>>>>>> >>>>>>>>>>>>> I can volunteer myself to create a PR with the aforementioned >>>>>>> changes >>>>>>>>> and >>>>>>>>>>>>> using flywaydb to manage our upgrades. However, I prefer to >>>>> have a >>>>>>>>> good >>>>>>>>>>>>> discussion with other devs first, before starting coding. >>>>>>>>>>>>> >>>>>>>>>>>>> Do you have suggestions or points that should be raised before >>>>> we >>>>>>>>> start >>>>>>>>>>>>> working on that? >>>>>>>>>>>> >>>>>>>>>>>> Rohit suggested Chimp earlier this year: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>> >>>>>>> >>>>>> >>>>> >>> >> http://mail-archives.apache.org/mod_mbox/cloudstack-dev/201508.mbox/%3c677bd09f-fc75-4888-8dc8-2b7af7439...@shapeblue.com%3E >>>>>>>>>>>> >>>>>>>>>>>> The thread is called: "[DISCUSS] Let's fix CloudStack Upgrades >>>>> and >>>>>> DB >>>>>>>>>>>> migrations with CloudStack Chimp" >>>>>>>>>>>> >>>>>>>>>>>> Maybe there is something good in there. >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> Rafael Weingärtner >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>>>> Regards. >>>>>>>>> >>>>>>>>> Find out more about ShapeBlue and our range of CloudStack related >>>>>>> services: >>>>>>>>> IaaS Cloud Design & Build >>>>>>>>> <http://shapeblue.com/iaas-cloud-design-and-build//> | CSForge – >>>>>> rapid >>>>>>>>> IaaS deployment framework <http://shapeblue.com/csforge/> >>>>>>>>> CloudStack Consulting < >> http://shapeblue.com/cloudstack-consultancy/ >>>>>> >>>>>> | >>>>>>> CloudStack >>>>>>>>> Software Engineering >>>>>>>>> <http://shapeblue.com/cloudstack-software-engineering/> >>>>>>>>> CloudStack Infrastructure Support >>>>>>>>> <http://shapeblue.com/cloudstack-infrastructure-support/> | >>>>>> CloudStack >>>>>>>>> Bootcamp Training Courses < >>>>> http://shapeblue.com/cloudstack-training/> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Rafael Weingärtner >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Daan >>>>> >>>> >>>> >>>> >>> >> >> >> >> -- >> Rafael Weingärtner >> > > >