Skip to Content
2
Feb 20, 2020 at 05:50 AM

Blue-Green: Importing Product and WCMS content causing inconsistencies during roll over update.

199 Views

We are trying to implement BLUE-GREEN deployments for our hybris nodes. For any classic application using database, blue-green deployments poses problems with 2 aspects

1) Schema changes - SAP's rolling cluster update solution addresses this aspect by having 2 typesystems simultaneously on the DB (https://help.sap.com/viewer/d0224eca81e249cb821f2cdf45a82ace/1811/en-US/8c455268866910149b25f7b53d1af3e1.html)

2) Data changes - The data changes (impexes present as part of projectdata/essentialdata) that are imported are common to both old and new code. How are these suggested to be addressed ?

Every release, we will have overlapping data changes on content/product catalog which is heavily dependent on code. Couple of trivial examples are shared below. But we do have a lot more scenarios where business logic is driven by data.

Examples :

  • Adding a new component to existing slot of a page : I create a new component type and associate a controller to it in my new codebase. Also I am creating a new instance of it and associating it to an existing contentslot(of an existing page). With this particular change if I introduce the new node and perform a rolling update and project data import, as soon as the project data import completes, the node with old code starts failing that it cannot identify the new type.
  • Replacing an existing component with a new component : I remove an existing component and replace it with a new component. This would break my page in old node, since the code changes for the replaced component are missing

So in all such cases,

Though we can build a custom solution (#1: having catalog versions as blue and green and seggregating the release changes) addressing the above use cases I am more keen to understand,

  • Is there any OOB feature / hybris expert service solution to handle this?
  • Alternatively, does Hybris prescribes any high level solution around this, which can be inherited and extended to address this concern ?