diff --git a/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/ClusterHealthWarning.java b/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/ClusterHealthError.java similarity index 67% rename from modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/ClusterHealthWarning.java rename to modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/ClusterHealthError.java index db29b86254a..f3d8530dcf8 100644 --- a/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/ClusterHealthWarning.java +++ b/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/ClusterHealthError.java @@ -1,16 +1,16 @@ package com.enonic.xp.cluster.impl; import com.enonic.xp.cluster.ClusterId; -import com.enonic.xp.cluster.ClusterValidationWarning; +import com.enonic.xp.cluster.ClusterValidationError; -class ClusterHealthWarning - implements ClusterValidationWarning +class ClusterHealthError + implements ClusterValidationError { private final ClusterId providerId; private final String errorMessage; - ClusterHealthWarning( final ClusterId providerId, final String errorMessage ) + ClusterHealthError( final ClusterId providerId, final String errorMessage ) { this.providerId = providerId; this.errorMessage = errorMessage; diff --git a/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/HealthValidator.java b/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/HealthValidator.java index 191380ce518..ee94ff02740 100644 --- a/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/HealthValidator.java +++ b/modules/core/core-cluster/src/main/java/com/enonic/xp/cluster/impl/HealthValidator.java @@ -15,10 +15,10 @@ public ClusterValidatorResult validate( final Clusters clusters ) { if ( !provider.getHealth().isHealthy() ) { - final ClusterHealthWarning warning = new ClusterHealthWarning( provider.getId(), provider.getHealth().getErrorMessage() ); + final ClusterHealthError error = new ClusterHealthError( provider.getId(), provider.getHealth().getErrorMessage() ); return ClusterValidatorResult.create(). - warning( warning ). + error( error ). build(); } } diff --git a/modules/core/core-cluster/src/test/java/com/enonic/xp/cluster/impl/ClusterManagerImplTest.java b/modules/core/core-cluster/src/test/java/com/enonic/xp/cluster/impl/ClusterManagerImplTest.java index 1795b15ad33..90fbc6e0711 100644 --- a/modules/core/core-cluster/src/test/java/com/enonic/xp/cluster/impl/ClusterManagerImplTest.java +++ b/modules/core/core-cluster/src/test/java/com/enonic/xp/cluster/impl/ClusterManagerImplTest.java @@ -53,8 +53,8 @@ public void single_provider_life_cycle() provider.setHealth( ClusterHealth.red() ); Thread.sleep( CHECK_INTERVAL_MS ); - assertClusterOk(); - assertActive( provider ); + assertClusterError(); + assertDeactivated( provider ); provider.setHealth( ClusterHealth.green() ); Thread.sleep( CHECK_INTERVAL_MS ); @@ -91,8 +91,8 @@ public void multiple_providers_life_cycle() provider1.setHealth( ClusterHealth.red() ); Thread.sleep( CHECK_INTERVAL_MS ); - assertClusterOk(); - assertActive( provider1, provider2 ); + assertClusterError(); + assertDeactivated( provider1, provider2 ); } @Test diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java index 8b4088ec740..02da8462f44 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java @@ -5,6 +5,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; + import com.enonic.xp.index.IndexType; import com.enonic.xp.repo.impl.elasticsearch.ClusterHealthStatus; import com.enonic.xp.repo.impl.elasticsearch.ClusterStatusCode; @@ -16,6 +18,7 @@ import com.enonic.xp.repository.IndexSettings; import com.enonic.xp.repository.NodeRepositoryService; import com.enonic.xp.repository.RepositoryId; +import com.enonic.xp.security.SystemConstants; import com.enonic.xp.util.JsonHelper; @Component(immediate = true) @@ -90,15 +93,42 @@ private void doCreateIndex( final CreateRepositoryParams params, final IndexType private IndexSettings mergeWithDefaultSettings( final CreateRepositoryParams params, final IndexType indexType ) { - final IndexSettings defaultSetting = DEFAULT_INDEX_RESOURCE_PROVIDER.getSettings( params.getRepositoryId(), indexType ); + final IndexSettings defaultSettings = getDefaultSettings( params, indexType ); final IndexSettings indexSettings = params.getRepositorySettings().getIndexSettings( indexType ); if ( indexSettings != null ) { - return new IndexSettings( JsonHelper.merge( defaultSetting.getNode(), indexSettings.getNode() ) ); + return new IndexSettings( JsonHelper.merge( defaultSettings.getNode(), indexSettings.getNode() ) ); + } + + return defaultSettings; + } + + private IndexSettings getDefaultSettings( final CreateRepositoryParams params, final IndexType indexType ) + { + final IndexSettings defaultSettings = DEFAULT_INDEX_RESOURCE_PROVIDER.getSettings( params.getRepositoryId(), indexType ); + if ( SystemConstants.SYSTEM_REPO.getId().equals( params.getRepositoryId() ) ) + { + return defaultSettings; + } + + try + { + final String numberOfReplicasString = + indexServiceInternal.getIndexSettings( SystemConstants.SYSTEM_REPO.getId(), IndexType.VERSION ).getNode(). + get( "index.number_of_replicas" ). + textValue(); + final int numberOfReplicas = Integer.parseInt( numberOfReplicasString ); + final ObjectNode indexNodeObject = (ObjectNode) defaultSettings.getNode().get( "index" ); + indexNodeObject.put( "number_of_replicas", numberOfReplicas ); + } + catch ( Exception e ) + { + LOG.warn( "Failed to retrieve number of replicas from [" + + resolveIndexName( SystemConstants.SYSTEM_REPO.getId(), IndexType.VERSION ) + "]" ); } - return defaultSetting; + return defaultSettings; } private void applyMappings( final CreateRepositoryParams params )