[ 
https://issues.apache.org/jira/browse/UNOMI-907?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jerome Blanchard updated UNOMI-907:
-----------------------------------
    Description: 
h3. Context

The goal of this improvement is to check ElasticSearch persistence consistency 
regarding the one expected by current Unomi version in order to detect any 
problem early. Inconsistencies could be a wrong collection mapping or a missed 
migration step.

Sometime we face a situation where a migration was not complete or an index 
migration or reindexation broke the collection mapping. This is more or less 
silent after startup and may lead to loss of data.
h3. Proposal

We could add those checks in the *PersistenceHealthCheckProvider* :
{code:java}
try {
    if (service != null) {
        builder.up();
        //TODO : Improve checks here
        if (!service.query("target", "profiles", null, 
PropertyType.class).isEmpty())  {
            builder.live();
        }
    }
} catch (Exception e) {
    builder.error().withData("error", e.getMessage());
    LOGGER.error("Error while checking persistence health", e);
}
{code}
Expected checks are : 
 - Check if all migrations are OK (this will imply to store an entity with 
migrations steps already executed, like in flyway or liquibase)
 - Check if collection's mapping is consistent with current Unomi's entities 
version. This can be achieve by comparing compatibility (not a equals() but if 
mandatory elements are present) between collection's mapping (GET 
/index/_mapping) with json files in the persistence module 
(/unomi/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/*.json)
 
 - Maybe also check collection's settings (max fields)

Thus if something is not compliant, the healthcheck should fail with also a 
detailed log error message.

  was:
The goal of this improvement is to check that expected Unomi's persistence is 
consistent with the expected Unomi version that is running in order to detect 
any problem early. Inconsistencies could be a wrong collection mapping or a 
miss of migration.

Sometime we face a situation where a migration was not complete or an index 
migration or reindexation broke the collection mapping. This is more or less 
silent after startup and may lead to loss of data.

We could add those checks in the PersistenceHealthCheckProvider :

```java
try {
            if (service != null) {
                builder.up();

                //TODO : Improve checks here


                if (!service.query("target", "profiles", null, 
PropertyType.class).isEmpty()) {
                    builder.live();
                }
            }
        } catch (Exception e) {
            builder.error().withData("error", e.getMessage());
            LOGGER.error("Error while checking persistence health", e);
        }

```

Expected checks are : 
- Check if all migrations are OK (this will imply to store an entity with 
migrations steps already executed, like in flyway or liquibase)
- Check if collection's mapping is consistent with current Unomi's entities 
version. This can be achieve by comparing compatibility (not a equals() but if 
mandatory elements are present) between collection's mapping (GET 
/index/_mapping) with json files in the persistence module 
(/unomi/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/*.json)
 
- Maybe also check collection's settings (max fields)

Thus if something is not compliant, the healthcheck should fail with also a 
detailed log error message.


> Add ES Persistence Consistency Check in HealthCheck
> ---------------------------------------------------
>
>                 Key: UNOMI-907
>                 URL: https://issues.apache.org/jira/browse/UNOMI-907
>             Project: Apache Unomi
>          Issue Type: Improvement
>          Components: unomi(-core)
>            Reporter: Jerome Blanchard
>            Priority: Major
>
> h3. Context
> The goal of this improvement is to check ElasticSearch persistence 
> consistency regarding the one expected by current Unomi version in order to 
> detect any problem early. Inconsistencies could be a wrong collection mapping 
> or a missed migration step.
> Sometime we face a situation where a migration was not complete or an index 
> migration or reindexation broke the collection mapping. This is more or less 
> silent after startup and may lead to loss of data.
> h3. Proposal
> We could add those checks in the *PersistenceHealthCheckProvider* :
> {code:java}
> try {
>     if (service != null) {
>         builder.up();
>         //TODO : Improve checks here
>         if (!service.query("target", "profiles", null, 
> PropertyType.class).isEmpty())  {
>             builder.live();
>         }
>     }
> } catch (Exception e) {
>     builder.error().withData("error", e.getMessage());
>     LOGGER.error("Error while checking persistence health", e);
> }
> {code}
> Expected checks are : 
>  - Check if all migrations are OK (this will imply to store an entity with 
> migrations steps already executed, like in flyway or liquibase)
>  - Check if collection's mapping is consistent with current Unomi's entities 
> version. This can be achieve by comparing compatibility (not a equals() but 
> if mandatory elements are present) between collection's mapping (GET 
> /index/_mapping) with json files in the persistence module 
> (/unomi/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/*.json)
>  
>  - Maybe also check collection's settings (max fields)
> Thus if something is not compliant, the healthcheck should fail with also a 
> detailed log error message.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to