On Thu, Jul 31, 2014 at 5:47 AM,  <[email protected]> wrote:
> 1. add removed fields and mark them as transient

If you mark them transient, they will not even be deserialized. (You
might expect this to only prevent them from being *serialized* but it
actually does both.) So you have to keep those fields nontransient,
just @Deprecated.

Tip: for primitive-valued fields, this will mean they stay in the
config.xml with default values like 0/false. The workaround is to
change the type to wrappers like Boolean or Integer; when the value is
set to null during migration, the field will disappear from config.xml
like you would want.

> 2. register static method with @Initializer(after =
> InitMilestone.JOB_LOADED)

Use ItemListener.onLoaded.

> 3. for each job do check whether new job property exists if not create new
> one and move transient fields to it and then add new job property to the job

This is the only solution I have found to this kind of problem. For example:

https://github.com/jenkinsci/jenkins/commit/f6b43d08af68b051f6335ebacfb5198d7467a1a7

It is a little worrisome adding such a task to startup, but all Item’s
are loaded in memory and quickly accessible, so if you are not making
any changes there should be no disk I/O and thus the overhead is
probably small.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to