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 2177ca5cd..b8da91bb8 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 @@ -31,6 +31,7 @@ public final class AgentConnectionConfig { private ConnectionType myType = ConnectionType.datacenterAware; private String myLocalDatacenter; + private Integer myConnectionDelay; private Map myContactPoints = new HashMap<>(); private DatacenterAware myDatacenterAware = new DatacenterAware(); private RackAware myRackAware = new RackAware(); @@ -105,6 +106,28 @@ public String getLocalDatacenter() return myLocalDatacenter; } + /** + * Sets the connectionDelay used to specify the time until the next connection + * + * @param connectionDelay + * the local datacenter to set. + */ + @JsonProperty("connectionDelay") + public void setConnectionDelay(final Integer connectionDelay) + { + myConnectionDelay = connectionDelay; + } + /** + * Gets the connectionDelay used to specify the time until the next connection + * + * @return the connectionDelay. + */ + @JsonProperty("connectionDelay") + public Integer getConnectionDelay() + { + return myConnectionDelay; + } + /** * Gets the DataCenterAwarePolicy used for load-balancing policy. * 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 57e449bfb..b34791802 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 @@ -178,12 +178,13 @@ public DistributedNativeConnectionProvider distributedNativeConnectionProvider( * if the local host name cannot be determined. * @throws EcChronosException * if there is an error during node synchronization. + * @throws ConfigurationException + * if there is an error during node synchronization. */ @Bean public EccNodesSync eccNodesSync( final DistributedNativeConnectionProvider distributedNativeConnectionProvider - ) throws UnknownHostException, EcChronosException - { + ) throws UnknownHostException, EcChronosException, ConfigurationException { return getEccNodesSync(distributedNativeConnectionProvider); } @@ -264,12 +265,13 @@ private static CertificateHandler createCertificateHandler( private EccNodesSync getEccNodesSync( final DistributedNativeConnectionProvider distributedNativeConnectionProvider - ) throws UnknownHostException, EcChronosException - { + ) throws UnknownHostException, EcChronosException, ConfigurationException { + Integer connectionDelay = config().getConnectionConfig().getCqlConnection().getAgentConnectionConfig().getConnectionDelay(); EccNodesSync myEccNodesSync = EccNodesSync.newBuilder() .withInitialNodesList(distributedNativeConnectionProvider.getNodes()) .withSession(distributedNativeConnectionProvider.getCqlSession()) .withEcchronosID(ecChronosID) + .withConnectionDelayInMinutes( connectionDelay ) .build(); myEccNodesSync.acquireNodes(); LOG.info("Nodes acquired with success"); diff --git a/application/src/main/resources/ecc.yml b/application/src/main/resources/ecc.yml index 34a0f9701..67732f91b 100644 --- a/application/src/main/resources/ecc.yml +++ b/application/src/main/resources/ecc.yml @@ -24,6 +24,7 @@ connection: ## to connect to. The application will use the configurations ## specified below, connecting to the listed hosts; agent: + connectionDelay: 60 ## Define the Agent strategy, it can be ## - datacenterAware; ## - rackAware; and diff --git a/data/src/main/java/com/ericsson/bss/cassandra/ecchronos/data/sync/EccNodesSync.java b/data/src/main/java/com/ericsson/bss/cassandra/ecchronos/data/sync/EccNodesSync.java index 4b70b0878..40e098e68 100644 --- a/data/src/main/java/com/ericsson/bss/cassandra/ecchronos/data/sync/EccNodesSync.java +++ b/data/src/main/java/com/ericsson/bss/cassandra/ecchronos/data/sync/EccNodesSync.java @@ -66,6 +66,10 @@ public final class EccNodesSync private final PreparedStatement myCreateStatement; private final PreparedStatement myUpdateStatusStatement; + private final Integer connectionDelayInMinutes; + + + private EccNodesSync(final Builder builder) throws UnknownHostException { @@ -92,6 +96,8 @@ private EccNodesSync(final Builder builder) throws UnknownHostException .build() .setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM)); ecChronosID = builder.myEcchronosID; + + connectionDelayInMinutes = builder.connectionDelayInMinutes; } public void acquireNodes() throws EcChronosException @@ -126,7 +132,7 @@ private ResultSet acquireNode(final Node node) node.getEndPoint().toString(), node.getState().toString(), Instant.now(), - Instant.now().plus(DEFAULT_CONNECTION_DELAY_IN_MINUTES, ChronoUnit.MINUTES), + Instant.now().plus(connectionDelayInMinutes, ChronoUnit.MINUTES), node.getHostId()); } @@ -220,6 +226,7 @@ public static class Builder private CqlSession mySession; private List initialNodesList; private String myEcchronosID; + private Integer connectionDelayInMinutes; /** * Builds EccNodesSync with session. @@ -246,6 +253,13 @@ public Builder withInitialNodesList(final List nodes) this.initialNodesList = nodes; return this; } + public Builder withConnectionDelayInMinutes(final Integer connectionDelayInMinutes) + { + this.connectionDelayInMinutes = connectionDelayInMinutes; + return this; + + } + /** * Builds EccNodesSync with ecchronosID.