It look's very nice :)

regards,

François Papon
[email protected]

Le 26/09/2018 à 19:06, Thomas Draier a écrit :
> Sorry, I forgot to mention : it's pushed in the patch branch :
> https://github.com/apache/incubator-unomi/tree/patch
>
>
> On Wed, Sep 26, 2018 at 3:14 PM Thomas Draier <[email protected]> wrote:
>
>> Hi,
>>
>> I've committed the changes for the patch. The files need to be put in the
>> same folder as the definitions ( META-INF/cxs/xxx ), and named with a
>> suffix -patch.json . They will be deployed only once, if the definitions
>> was already there. Each patch has an id, so if you need to deploy a new
>> patch, just use a new id. The list of deployed patches is stored in ES.
>> Patches can also be manually executed with the "unomi:deploy-definition"
>> karaf command, or through a rest endpoint at /cxs/patches/apply . I've
>> removed the behaviour with -SNAPSHOT - definitions are never redeployed,
>> even in snapshot versions, so you'll need to explicitely provide a patch to
>> override.
>>
>> The syntax is slightly different from what has been sent previously :
>>
>> {
>>   "itemId": "firstName-patch1",
>>   "patchedItemId": "firstName",
>>   "operation": "patch",
>>   "data": [
>>
>>
>>     {
>>       "op": "replace",
>>       "path": "/defaultValue",
>>       "value": "foo"
>>     }
>>   ]
>> }
>>
>> For an override :
>>
>> {
>>   "itemId": "gender-patch1",
>>   "patchedItemId": "gender",
>>   "operation": "override",
>>   "data": {
>>     "metadata": {
>>       "id": "gender",
>>       "name": "Gender",
>>
>>       "systemTags": [
>>         "properties",
>>         "profileProperties"
>>       ]
>>     },
>>     "type": "string",
>>     "defaultValue": "",
>>     "automaticMappingsFrom": [ ],
>>
>>     "rank": "105.0"
>>   }
>> }
>>
>> Or a remove :
>>
>> {
>>   "itemId": "firstName-patch3",
>>   "patchedItemId": "firstName",
>>   "operation": "remove"
>> }
>>
>>
>> Regards
>>
>>
>>
>>
>> On Mon, Sep 24, 2018 at 11:00 AM Thomas Draier <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> I did a quick test with json patch and actually it looks quite easy to
>>> integrate and seems to fill more use cases than just a simple "override".
>>> However I think it can still be useful to have a complete override and also
>>> the possisbility to completely remove the definition, so I was thinking of
>>> some "migration" or "update" json file wrapping the patch, within the same
>>> folder as the definitions :
>>>
>>> {
>>>   "itemId": "firstName",
>>>   "updateId": "firstName-patch1",
>>>   "operation": "patch",
>>>   "patch": [
>>>     {
>>>       "op": "replace", "path": "/defaultValue", "value": "foo"
>>>     }
>>>   ]
>>> }
>>>
>>>
>>> A removal :
>>>
>>> {
>>>   "itemId": "firstName",
>>>   "updateId": "firstName-patch1",
>>>   "operation": "remove"
>>> }
>>>
>>> Or a complete override :
>>>
>>> {
>>>   "itemId": "firstName",
>>>   "updateId": "firstName-patch1",
>>>   "operation": "override",
>>>   "definition": {
>>>     "metadata": {
>>>       "id": "firstName",
>>>       "name": "First name",
>>>       "systemTags": [
>>>         "properties",
>>>         "profileProperties",
>>>         "basicProfileProperties",
>>>         "personalIdentifierProperties"
>>>       ]
>>>     },
>>>     "type": "string",
>>>     "defaultValue": "",
>>>     "automaticMappingsFrom": [ ],
>>>     "rank": "101.0"
>>>   }
>>> }
>>>
>>>
>>> This could actually be extended with other type of operation.
>>>
>>> For now I do store "updateId" in the metadata of the item, so that it's
>>> not executed multiple times. But we have have an issue with the delete if
>>> the item is recreated after.. Maybe I should store the list of updates in a
>>> new structure ? That could also be accessible with karaf commands, to see
>>> which patch have been executed and reexecute them if needed.
>>>
>>> Thomas
>>>
>>>
>>> On Tue, Sep 18, 2018 at 11:46 AM Francois Papon <
>>> [email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> Very interesting flow :)
>>>>
>>>> What is the format to update the definitions, it's just a new JSON, is
>>>> there some directives about the changes ?
>>>>
>>>> For example, in Karaf we have something like this to override
>>>> configuration files :
>>>>
>>>>        <edits>
>>>>          <edit>
>>>>            <file>config.properties</file>
>>>>            <operation>put</operation>
>>>>            <key>karaf.framework</key>
>>>>            <value>equinox</value>
>>>>          </edit>
>>>>          <edit>
>>>>            <file>config.properties</file>
>>>>            <operation>extend</operation>
>>>>            <key>org.osgi.framework.system.capabilities</key>
>>>>            <value>my-magic-capability</value>
>>>>          </edit>
>>>>          <edit>
>>>>            <file>config.properties</file>
>>>>            <operation>remove</operation>
>>>>            <key>org.apache.karaf.security.providers</key>
>>>>          </edit>
>>>>        </edits>
>>>>
>>>> May be a solution is a file with a patch description of the changes ?
>>>>
>>>> regards,
>>>>
>>>> François Papon
>>>> [email protected]
>>>>
>>>> Le 18/09/2018 à 13:38, Serge Huber a écrit :
>>>>> Not sure if you are talking about the patching system, but if yes you
>>>>> would provide a patch file that removes all the contents of file.
>>>>>
>>>>> If we are just using versions it is indeed a bit more tricky. We would
>>>>> also need to have a way to list the definitions to remove.
>>>>>
>>>>> Regards,
>>>>>   Serge...
>>>>>
>>>>> On Tue, Sep 18, 2018 at 11:23 AM Romain Gauthier <[email protected]>
>>>> wrote:
>>>>>> Hi Serge,
>>>>>>
>>>>>> In that context, how would we manage objects deletion from a plugin?
>>>>>>
>>>>>> Thanks!
>>>>>>
>>>>>> Romain
>>>>>>
>>>>>> On Tue, Sep 18, 2018 at 10:45 AM Serge Huber <[email protected]>
>>>> wrote:
>>>>>>> Sorry, I didn't get around to this discussion but I think that
>>>>>>> versions would probably be cleaner. I was even looking at solutions
>>>>>>> such as JSON patch (https://github.com/java-json-tools/json-patch)
>>>> to
>>>>>>> be able to perform modifications on parts of definitions instead of
>>>>>>> having to deploy a whole definition again.
>>>>>>>
>>>>>>> We had discussions about adding lots of metadata, including last
>>>>>>> modification dates, maybe even hashes for the definition files, to
>>>>>>> know if a definition has been changed or not.
>>>>>>>
>>>>>>> I think that one of the advantages of the patch idea is that you
>>>> could
>>>>>>> try to patch something if it's compatible, and if it's not you would
>>>>>>> not deploy it. But this idea would mostly be for use cases where you
>>>>>>> are interested in modifying something that comes out of the box in
>>>>>>> Unomi, not for upgrading a plugin.
>>>>>>>
>>>>>>> With versions at least we could also track if a definition is on the
>>>>>>> "default" version or has been modified somehow.
>>>>>>>
>>>>>>> For the cfg idea it feels weird to use a config file that way, maybe
>>>>>>> we should put the marker file elsewhere but to be honest I don't have
>>>>>>> a better idea :)
>>>>>>>
>>>>>>> Would love some input from JB or other Karaf experts :)
>>>>>>>
>>>>>>> Regards,
>>>>>>>   Serge...
>>>>>>>
>>>>>>> On Tue, Sep 18, 2018 at 9:51 AM Thomas Draier <[email protected]>
>>>> wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I have to check, but the idea would be to be able to package this
>>>> cfg
>>>>>>> file
>>>>>>>> beside the bundle. I'm not familiar with unomi:migrate command, but
>>>> we
>>>>>>> can
>>>>>>>> imagine that this command would extract and deploy the cfg file
>>>> from the
>>>>>>>> bundle - which would make the packaging easier (cfg directly inside
>>>> the
>>>>>>>> plugin). The thing is that we need to be able to remove the file
>>>> once the
>>>>>>>> definition has been "overridden" so that it's only done once, so
>>>> the cfg
>>>>>>>> file should not be deployed automatically on each startup.
>>>>>>>>
>>>>>>>> Another idea I had was to store sort of "version" of the definition
>>>>>>> inside
>>>>>>>> the metadata, and check if the json file has a greater "version"
>>>> defined.
>>>>>>>> That makes things even more easier when developing plugin and looks
>>>> a
>>>>>>>> little more clean, but I don't know if it would cover correctly all
>>>> use
>>>>>>>> cases.
>>>>>>>>
>>>>>>>> We should also extends the DeployDefinition shell command to be
>>>> able to
>>>>>>>> redeploy all definitions of a bundle.
>>>>>>>>
>>>>>>>> Thomas
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Sep 18, 2018 at 1:33 AM Romain Gauthier <
>>>> [email protected]>
>>>>>>> wrote:
>>>>>>>>> Hello Thomas,
>>>>>>>>>
>>>>>>>>> Nice proposition.How would it work for developers that are building
>>>>>>>>> plugins? Would we have to add our own cfg file or somehow update
>>>> the
>>>>>>> cfg
>>>>>>>>> file that you want to add?
>>>>>>>>>
>>>>>>>>> Since there is already a "unomi:migrate" command would you reuse
>>>> that
>>>>>>>>> trigger to update / delete the definitions of the objects?
>>>>>>>>>
>>>>>>>>> Same question regarding the plugins, should we also implement
>>>> "migrate"
>>>>>>>>> command?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> Romain
>>>>>>>>>
>>>>>>>>> On Thu, Sep 13, 2018 at 6:22 PM Thomas Draier <[email protected]>
>>>>>>> wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I'm having some issues with the deployment and redeployment of the
>>>>>>> json
>>>>>>>>>> files containing default definitions (segments, properties,
>>>> etc..).
>>>>>>> Many
>>>>>>>>>> services have these loadPredefined* methods which load data into
>>>> ES,
>>>>>>>>> based
>>>>>>>>>> on json definition files. These methods only load the content
>>>> once,
>>>>>>> if
>>>>>>>>> the
>>>>>>>>>> object does not exist yet in ES. So if a bundle comes with an
>>>> update
>>>>>>> of
>>>>>>>>> one
>>>>>>>>>> of these file, it will just be ignored.
>>>>>>>>>>
>>>>>>>>>> Actually there was one ticket about this :
>>>>>>>>>> https://issues.apache.org/jira/browse/UNOMI-182 , where
>>>> definitions
>>>>>>> are
>>>>>>>>>> always redeployed when a bundle is in "snapshot" version - but
>>>> never
>>>>>>> for
>>>>>>>>> a
>>>>>>>>>> release version. So that's nice when you are in development, but
>>>> not
>>>>>>>>>> possible when upgrading a production environment.
>>>>>>>>>>
>>>>>>>>>> There also a console command to manually deploy a definition -
>>>> which
>>>>>>> is
>>>>>>>>>> also nice but cannot be automated in a migration.
>>>>>>>>>>
>>>>>>>>>> Of course there's a reason - these objects can be modified
>>>>>>> afterwards by
>>>>>>>>>> using the API, and so restarting should not overwrite the
>>>>>>> modifications
>>>>>>>>> by
>>>>>>>>>> reimporting the file. Even if a module is updated and object is
>>>>>>> modified,
>>>>>>>>>> the user may not want to overwrite his changes.
>>>>>>>>>>
>>>>>>>>>> However in some cases the developer may want to force the update
>>>> of
>>>>>>> some
>>>>>>>>>> specific objects ( it actually happened to us ). I'm looking for
>>>> some
>>>>>>>>>> additional solution to force redeployment of a definition.
>>>>>>>>>>
>>>>>>>>>> So far i was thinking of adding a cfg file, which would list the
>>>>>>>>> properties
>>>>>>>>>> to redeploy. This file would be removed once the properties are
>>>> <https://maps.google.com/?q=ould+be+removed+once+the+properties+are&entry=gmail&source=g>
>>>>>>> updated,
>>>>>>>>> so
>>>>>>>>>> that they are reloaded only once and not on every startup.
>>>>>>>>>>
>>>>>>>>>> As a bonus, I would also need to be able to remove definitions the
>>>>>>> same
>>>>>>>>>> way. There's no way to do that now except using the REST API , it
>>>>>>> could
>>>>>>>>> be
>>>>>>>>>> good to also have a console command and to be able to remove
>>>>>>> definitions
>>>>>>>>>> with the same cfg file.
>>>>>>>>>>
>>>>>>>>>> What do you think .. ?
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Romain Gauthier
>>>>>>>>> Product Manager at Jahia
>>>>>>>>> + 33 6 20 18 35 25 <+33%206%2020%2018%2035%2025>
>>>> <+33%206%2020%2018%2035%2025>
>>>>>>>>> 8 Rue du sentier | 75002 Paris | France
>>>>>>>>> <
>>>> https://www.jahia.com/about-us/news-events/events-webinars/jahiadays>
>>>>>> --
>>>>>> Romain Gauthier
>>>>>> Product Manager at Jahia
>>>>>> + 33 6 20 18 35 25 <+33%206%2020%2018%2035%2025>
>>>>>> 8 Rue du sentier | 75002 Paris | France
>>>>>> <https://www.jahia.com/about-us/news-events/events-webinars/jahiadays
>>>>
>>>>

Reply via email to