diff --git a/CHANGES.md b/CHANGES.md index 2b7710fb5..2a7889aec 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,7 @@ ## Version 1.0.0 (Not yet Released) +* Generate Unique EcChronos ID #678 * Create RepairConfiguration class for repair configurations - Issue #716 * Create DistributedJmxProxy and DistributedJmxProxyFactory - Issue #715 * Create a New Maven Module "utils" for Common Code Reuse - Issue #720 diff --git a/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/config/connection/AgentConnectionConfig.java b/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/config/connection/AgentConnectionConfig.java index 681898a28..b6e9f797d 100644 --- a/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/config/connection/AgentConnectionConfig.java +++ b/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/config/connection/AgentConnectionConfig.java @@ -37,6 +37,7 @@ public final class AgentConnectionConfig private RackAware myRackAware = new RackAware(); private HostAware myHostAware = new HostAware(); private Class<? extends DefaultLoadBalancingPolicy> myDatacenterAwarePolicy = DataCenterAwarePolicy.class; + private String myInstanceName; /** * Default constructor for AgentConnectionConfig. @@ -46,6 +47,40 @@ public AgentConnectionConfig() } + /** + * Gets unique ecchronos instance name. + * + * @return the instance name. + */ + @JsonProperty("instanceName") + public String getInstanceName() + { + return myInstanceName; + } + + /** + * Sets unique instance name. + * + * @param instanceName + * the instance name as a string. + * @throws ConfigurationException + * if the provided instance name is invalid. + */ + @JsonProperty("instanceName") + public void setInstanceName(final String instanceName) throws ConfigurationException + { + if (instanceName == null || instanceName.isBlank()) + { + throw new ConfigurationException( + "Invalid instance name: " + + + instanceName + + + "\nInstance name must not be null or empty"); + } + myInstanceName = instanceName; + } + /** * Gets the connection type. * diff --git a/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/spring/BeanConfigurator.java b/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/spring/BeanConfigurator.java index a80f0b8ec..68e29dd96 100644 --- a/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/spring/BeanConfigurator.java +++ b/application/src/main/java/com/ericsson/bss/cassandra/ecchronos/application/spring/BeanConfigurator.java @@ -96,7 +96,7 @@ public BeanConfigurator() throws ConfigurationException, UnknownHostException Security security = getSecurityConfig(); cqlSecurity.set(security.getCqlSecurity()); jmxSecurity.set(security.getJmxSecurity()); - ecChronosID = ECCHORONS_ID_PRE_STRING.concat(InetAddress.getLocalHost().getHostName()); + ecChronosID = getConfiguration().getConnectionConfig().getCqlConnection().getAgentConnectionConfig().getInstanceName(); } /** diff --git a/application/src/main/resources/ecc.yml b/application/src/main/resources/ecc.yml index 212ecd529..e5dac574d 100644 --- a/application/src/main/resources/ecc.yml +++ b/application/src/main/resources/ecc.yml @@ -24,6 +24,8 @@ connection: ## to connect to. The application will use the configurations ## specified below, connecting to the listed hosts; agent: + ## Each ecchronos instance must have unique name + instanceName: unique_identifier ## Define the Agent strategy, it can be ## - datacenterAware; ## - rackAware; and diff --git a/application/src/test/java/com/ericsson/bss/cassandra/ecchronos/application/config/TestConfig.java b/application/src/test/java/com/ericsson/bss/cassandra/ecchronos/application/config/TestConfig.java index ffb246fce..18704c189 100644 --- a/application/src/test/java/com/ericsson/bss/cassandra/ecchronos/application/config/TestConfig.java +++ b/application/src/test/java/com/ericsson/bss/cassandra/ecchronos/application/config/TestConfig.java @@ -313,5 +313,11 @@ public void testRepairType() RepairType repairType = repairConfig.getRepairType(); assertThat(repairType).isEqualTo(RepairType.VNODE); } + + @Test + public void testInstanceName() + { + assertThat(nativeConnection.getAgentConnectionConfig().getInstanceName()).isEqualTo("unique_identifier"); + } } diff --git a/application/src/test/resources/all_set.yml b/application/src/test/resources/all_set.yml index 6f87ba926..d35560426 100644 --- a/application/src/test/resources/all_set.yml +++ b/application/src/test/resources/all_set.yml @@ -16,6 +16,7 @@ connection: cql: agent: + instanceName: unique_identifier type: datacenterAware localDatacenter: datacenter1 datacenterAwarePolicy: com.ericsson.bss.cassandra.ecchronos.connection.DataCenterAwarePolicy