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;)

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
>



-- 
Daan

Reply via email to