Aled,

I've updated the transformers at 
https://github.com/apache/incubator-brooklyn/pull/528 
<https://github.com/apache/incubator-brooklyn/pull/528>. The transform to be 
used now is:

- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarder
    new_val: brooklyn.networking.common.subnet.PortForwarder
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderAsync
    new_val: brooklyn.networking.common.subnet.PortForwarderAsync
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderAsyncImpl
    new_val: brooklyn.networking.common.subnet.PortForwarderAsyncImpl
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderAsyncImpl$1
    new_val: brooklyn.networking.common.subnet.PortForwarderAsyncImpl$1
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderAsyncImpl$DeferredExecutor
    new_val: 
brooklyn.networking.common.subnet.PortForwarderAsyncImpl$DeferredExecutor
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderClient
    new_val: brooklyn.networking.common.subnet.PortForwarderClient
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderClient$1
    new_val: brooklyn.networking.common.subnet.PortForwarderClient$1
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderClient$2
    new_val: brooklyn.networking.common.subnet.PortForwarderClient$2
- renameClass:
    old_val: brooklyn.networking.subnet.PortForwarderClient$3
    new_val: brooklyn.networking.common.subnet.PortForwarderClient$3

Svet.


> On 23.02.2015 г., at 12:31, Aled Sage <[email protected]> wrote:
> 
> Svet,
> 
> I had a very quick go previously at creating the transformers. They didn't 
> behave as I expected though.
> 
> It seems that:
> 
> * only the last transform in the file was applied (is it perhaps using
>   a YAML map rather than a list?).
> * it didn't transform things like <pf
>   class="brooklyn.networking.subnet.PortForwarderClient">
>   Presumably we also need a similar "renameType: ..." in the transforms?
> 
> Over to you!
> 
> ---
> I tried the following transform:
> 
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarder
>      new_val: brooklyn.networking.common.subnet.PortForwarder
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarderAsync
>      new_val: brooklyn.networking.common.subnet.PortForwarderAsync
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarderAsyncImpl
>      new_val: brooklyn.networking.common.subnet.PortForwarderAsyncImpl
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarderAsyncImpl$1
>      new_val: brooklyn.networking.common.subnet.PortForwarderAsyncImpl$1
>   renameClass:
>      old_val:
>   brooklyn.networking.subnet.PortForwarderAsyncImpl$DeferredExecutor
>      new_val:
>   brooklyn.networking.common.subnet.PortForwarderAsyncImpl$DeferredExecutor
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarderClient
>      new_val: brooklyn.networking.common.subnet.PortForwarderClient
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarderClient$1
>      new_val: brooklyn.networking.common.subnet.PortForwarderClient$1
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarderClient$2
>      new_val: brooklyn.networking.common.subnet.PortForwarderClient$2
>   renameClass:
>      old_val: brooklyn.networking.subnet.PortForwarderClient$3
>      new_val: brooklyn.networking.common.subnet.PortForwarderClient$3
> 
> With the following command:
> 
>   copy-state --persistenceDir /path/to/old-data --destinationDir    
> /path/to/transformed-data --transformations /path/to/transforms.yaml
> 
> Aled
> 
> p.s. I'll send you the a private message with the state that I'm testing this 
> against.
> 
> 
> On 23/02/2015 10:18, Svetoslav Neykov wrote:
>> Thanks for checking this Aled, I'll create the transformers.
>> 
>> Svet.
>> 
>> 
>>> On 20.02.2015 г., at 22:55, Aled Sage <[email protected]> wrote:
>>> 
>>> Svet, Sam,
>>> 
>>> I've tested the backwards compatibility, and it works with your 
>>> sub-classing approach, along with PR#38 which has just been merged [1].
>>> 
>>> I was wrong about the errors when assigning to deserialized fields etc.
>>> The deserialized objects are instances of the old class name, which is a 
>>> sub-type of the new class. These objects are thus usable everywhere - as 
>>> return values, as parameters etc.
>>> 
>>> Longer term, we do need a transformer [2,3] so that we can delete the old 
>>> classes.
>>> 
>>> Aled
>>> 
>>> [1] https://github.com/brooklyncentral/advanced-networking/pull/38 
>>> <https://github.com/brooklyncentral/advanced-networking/pull/38> 
>>> <https://github.com/brooklyncentral/advanced-networking/pull/38 
>>> <https://github.com/brooklyncentral/advanced-networking/pull/38>>
>>> [2] 
>>> https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java
>>>  
>>> <https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java><https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java
>>>  
>>> <https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java>>
>>> [3] 
>>> https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/impl/XsltTransformerTest.java#L67-95
>>>  
>>> <https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/impl/XsltTransformerTest.java#L67-95>
>>>  
>>> <https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/impl/XsltTransformerTest.java#L67-95
>>>  
>>> <https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/impl/XsltTransformerTest.java#L67-95>>
>>> 
>>> 
>>> On 06/02/2015 22:17, Aled Sage wrote:
>>>> Hi all,
>>>> 
>>>> Svet + Sam have been doing great work on Brooklyn (including 
>>>> advanced-networking and clocker) to make it work better with OSGi [1].
>>>> 
>>>> This includes ensuring that packages have different names in different 
>>>> OSGi bundles (very important to know if you're thinking about package 
>>>> names in the future!).
>>>> 
>>>> In downstream projects that depend on advanced-networking, you may see 
>>>> compilation errors when the import is for PortForwarder in the old package 
>>>> (e.g. brooklyn.networking.subnet.PortForwarder instead of 
>>>> brooklyn.networking.common.subnet.PortForwarder).
>>>> 
>>>> ---
>>>> Svet, Sam,
>>>> 
>>>> We should discuss backwards compatibility some more.
>>>> 
>>>> You've renamed the classes, and created sub-classes with the old names - 
>>>> the aim being to support deserialization of previously persisted state.
>>>> 
>>>> However, various fields and method parameters now expect the new class. 
>>>> Therefore the deserialized old class will likely not be usable (e.g. 
>>>> errors when trying to assign the deserialized value to a field, or 
>>>> ClassCastExceptions later).
>>>> 
>>>> That's my opinion; I haven't actually tried to produce the error from 
>>>> previously-serialized state.
>>>> So first, do you agree?
>>>> 
>>>> I see three options for downstream projects (where PortForwarder instances 
>>>> are persisted):
>>>> 
>>>> 1. Write a transformer that will upgrade the persisted state, switching
>>>>   the old package for the new package.
>>>>   (That is what the transformer stuff is designed for [2,3]).
>>>> 2. Be very careful about the types of fields, parameters and return
>>>>   types so that the old class is likely to work.
>>>>   (sounds fiddly to get right; and without doing (1) we are left with
>>>>   that code until the old entities die a natural death!).
>>>> 3. Tell them it's not backwards compatible.
>>>>   (That's a last resort, and is unacceptable for anyone running in
>>>>   production.)
>>>> 
>>>> Of these, I favour (1).
>>>> 
>>>> If you agree, then we need to delete the shims (i.e. the classes with the 
>>>> old names) and write a transformer. And write better docs describing how 
>>>> to use the transformer.
>>>> 
>>>> Thoughts?
>>>> 
>>>> Aled
>>>> 
>>>> [1] https://github.com/brooklyncentral/advanced-networking/pull/21
>>>> [2] 
>>>> https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java
>>>> [3] 
>>>> https://github.com/apache/incubator-brooklyn/blob/master/core/src/test/java/brooklyn/entity/rebind/transformer/impl/XsltTransformerTest.java#L67-95

Reply via email to