X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDatastoreContext.java;h=43af39ff31182759f94744354cd3584ee7fbd75e;hb=576924996622ae1d4326363830001d529882a431;hp=e6d8ed84573d0094e222b38f0088a8175c953280;hpb=b65f82f3c6e6e4c53ea2efa4dba30ddf82d61616;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java index e6d8ed8457..43af39ff31 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java @@ -24,7 +24,6 @@ import org.opendaylight.controller.cluster.raft.ConfigParams; import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl; import org.opendaylight.controller.cluster.raft.PeerAddressResolver; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStoreConfigProperties; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,6 +44,7 @@ public class DatastoreContext implements ClientActorConfig { public static final int DEFAULT_SHARD_TX_COMMIT_TIMEOUT_IN_SECONDS = 30; public static final int DEFAULT_JOURNAL_RECOVERY_BATCH_SIZE = 1; public static final int DEFAULT_SNAPSHOT_BATCH_COUNT = 20000; + public static final int DEFAULT_RECOVERY_SNAPSHOT_INTERVAL_SECONDS = 0; public static final int DEFAULT_HEARTBEAT_INTERVAL_IN_MILLIS = 500; public static final int DEFAULT_ISOLATED_LEADER_CHECK_INTERVAL_IN_MILLIS = DEFAULT_HEARTBEAT_INTERVAL_IN_MILLIS * 10; @@ -53,6 +53,7 @@ public class DatastoreContext implements ClientActorConfig { public static final Timeout DEFAULT_SHARD_LEADER_ELECTION_TIMEOUT = new Timeout(30, TimeUnit.SECONDS); public static final int DEFAULT_INITIAL_SETTLE_TIMEOUT_MULTIPLIER = 3; public static final boolean DEFAULT_PERSISTENT = true; + public static final boolean DEFAULT_SNAPSHOT_ON_ROOT_OVERWRITE = false; public static final FileAkkaConfigurationReader DEFAULT_CONFIGURATION_READER = new FileAkkaConfigurationReader(); public static final int DEFAULT_SHARD_SNAPSHOT_DATA_THRESHOLD_PERCENTAGE = 12; public static final int DEFAULT_SHARD_ELECTION_TIMEOUT_FACTOR = 2; @@ -73,7 +74,6 @@ public class DatastoreContext implements ClientActorConfig { private final DefaultConfigParamsImpl raftConfig = new DefaultConfigParamsImpl(); - private InMemoryDOMDataStoreConfigProperties dataStoreProperties; private FiniteDuration shardTransactionIdleTimeout = DatastoreContext.DEFAULT_SHARD_TRANSACTION_IDLE_TIMEOUT; private long operationTimeoutInMillis = DEFAULT_OPERATION_TIMEOUT_IN_MS; private String dataStoreMXBeanType; @@ -83,6 +83,7 @@ public class DatastoreContext implements ClientActorConfig { private Timeout shardLeaderElectionTimeout = DEFAULT_SHARD_LEADER_ELECTION_TIMEOUT; private int initialSettleTimeoutMultiplier = DEFAULT_INITIAL_SETTLE_TIMEOUT_MULTIPLIER; private boolean persistent = DEFAULT_PERSISTENT; + private boolean snapshotOnRootOverwrite = DEFAULT_SNAPSHOT_ON_ROOT_OVERWRITE; private AkkaConfigurationReader configurationReader = DEFAULT_CONFIGURATION_READER; private long transactionCreationInitialRateLimit = DEFAULT_TX_CREATION_INITIAL_RATE_LIMIT; private String dataStoreName = UNKNOWN_DATA_STORE_TYPE; @@ -107,6 +108,7 @@ public class DatastoreContext implements ClientActorConfig { DatastoreContext() { setShardJournalRecoveryLogBatchSize(DEFAULT_JOURNAL_RECOVERY_BATCH_SIZE); setSnapshotBatchCount(DEFAULT_SNAPSHOT_BATCH_COUNT); + setRecoverySnapshotIntervalSeconds(DEFAULT_RECOVERY_SNAPSHOT_INTERVAL_SECONDS); setHeartbeatInterval(DEFAULT_HEARTBEAT_INTERVAL_IN_MILLIS); setIsolatedLeaderCheckInterval(DEFAULT_ISOLATED_LEADER_CHECK_INTERVAL_IN_MILLIS); setSnapshotDataThresholdPercentage(DEFAULT_SHARD_SNAPSHOT_DATA_THRESHOLD_PERCENTAGE); @@ -117,7 +119,6 @@ public class DatastoreContext implements ClientActorConfig { } private DatastoreContext(final DatastoreContext other) { - this.dataStoreProperties = other.dataStoreProperties; this.shardTransactionIdleTimeout = other.shardTransactionIdleTimeout; this.operationTimeoutInMillis = other.operationTimeoutInMillis; this.dataStoreMXBeanType = other.dataStoreMXBeanType; @@ -127,6 +128,7 @@ public class DatastoreContext implements ClientActorConfig { this.shardLeaderElectionTimeout = other.shardLeaderElectionTimeout; this.initialSettleTimeoutMultiplier = other.initialSettleTimeoutMultiplier; this.persistent = other.persistent; + this.snapshotOnRootOverwrite = other.snapshotOnRootOverwrite; this.configurationReader = other.configurationReader; this.transactionCreationInitialRateLimit = other.transactionCreationInitialRateLimit; this.dataStoreName = other.dataStoreName; @@ -145,6 +147,7 @@ public class DatastoreContext implements ClientActorConfig { setShardJournalRecoveryLogBatchSize(other.raftConfig.getJournalRecoveryLogBatchSize()); setSnapshotBatchCount(other.raftConfig.getSnapshotBatchCount()); + setRecoverySnapshotIntervalSeconds(other.raftConfig.getRecoverySnapshotIntervalSeconds()); setHeartbeatInterval(other.raftConfig.getHeartBeatInterval().toMillis()); setIsolatedLeaderCheckInterval(other.raftConfig.getIsolatedCheckIntervalInMillis()); setSnapshotDataThresholdPercentage(other.raftConfig.getSnapshotDataThresholdPercentage()); @@ -167,10 +170,6 @@ public class DatastoreContext implements ClientActorConfig { return new Builder(new DatastoreContext(context)); } - public InMemoryDOMDataStoreConfigProperties getDataStoreProperties() { - return dataStoreProperties; - } - public FiniteDuration getShardTransactionIdleTimeout() { return shardTransactionIdleTimeout; } @@ -217,6 +216,10 @@ public class DatastoreContext implements ClientActorConfig { return persistent; } + public boolean isSnapshotOnRootOverwrite() { + return this.snapshotOnRootOverwrite; + } + public AkkaConfigurationReader getConfigurationReader() { return configurationReader; } @@ -303,6 +306,14 @@ public class DatastoreContext implements ClientActorConfig { raftConfig.setSnapshotBatchCount(shardSnapshotBatchCount); } + /** + * Set the interval in seconds after which a snapshot should be taken during the recovery process. + * 0 means don't take snapshots + */ + private void setRecoverySnapshotIntervalSeconds(final int recoverySnapshotInterval) { + raftConfig.setRecoverySnapshotIntervalSeconds(recoverySnapshotInterval); + } + @Deprecated private void setShardSnapshotChunkSize(final int shardSnapshotChunkSize) { // We'll honor the shardSnapshotChunkSize setting for backwards compatibility but only if it doesn't exceed @@ -367,28 +378,9 @@ public class DatastoreContext implements ClientActorConfig { public static class Builder implements org.opendaylight.yangtools.concepts.Builder { private final DatastoreContext datastoreContext; - private int maxShardDataChangeExecutorPoolSize = - InMemoryDOMDataStoreConfigProperties.DEFAULT_MAX_DATA_CHANGE_EXECUTOR_POOL_SIZE; - private int maxShardDataChangeExecutorQueueSize = - InMemoryDOMDataStoreConfigProperties.DEFAULT_MAX_DATA_CHANGE_EXECUTOR_QUEUE_SIZE; - private int maxShardDataChangeListenerQueueSize = - InMemoryDOMDataStoreConfigProperties.DEFAULT_MAX_DATA_CHANGE_LISTENER_QUEUE_SIZE; - private int maxShardDataStoreExecutorQueueSize = - InMemoryDOMDataStoreConfigProperties.DEFAULT_MAX_DATA_STORE_EXECUTOR_QUEUE_SIZE; Builder(final DatastoreContext datastoreContext) { this.datastoreContext = datastoreContext; - - if (datastoreContext.getDataStoreProperties() != null) { - maxShardDataChangeExecutorPoolSize = - datastoreContext.getDataStoreProperties().getMaxDataChangeExecutorPoolSize(); - maxShardDataChangeExecutorQueueSize = - datastoreContext.getDataStoreProperties().getMaxDataChangeExecutorQueueSize(); - maxShardDataChangeListenerQueueSize = - datastoreContext.getDataStoreProperties().getMaxDataChangeListenerQueueSize(); - maxShardDataStoreExecutorQueueSize = - datastoreContext.getDataStoreProperties().getMaxDataStoreExecutorQueueSize(); - } } public Builder boundedMailboxCapacity(final int boundedMailboxCapacity) { @@ -441,6 +433,12 @@ public class DatastoreContext implements ClientActorConfig { return this; } + public Builder recoverySnapshotIntervalSeconds(final int recoverySnapshotIntervalSeconds) { + checkArgument(recoverySnapshotIntervalSeconds >= 0); + datastoreContext.setRecoverySnapshotIntervalSeconds(recoverySnapshotIntervalSeconds); + return this; + } + public Builder shardSnapshotDataThresholdPercentage(final int shardSnapshotDataThresholdPercentage) { datastoreContext.setSnapshotDataThresholdPercentage(shardSnapshotDataThresholdPercentage); return this; @@ -490,6 +488,11 @@ public class DatastoreContext implements ClientActorConfig { return this; } + public Builder snapshotOnRootOverwrite(final boolean snapshotOnRootOverwrite) { + datastoreContext.snapshotOnRootOverwrite = snapshotOnRootOverwrite; + return this; + } + public Builder shardIsolatedLeaderCheckIntervalInMillis(final int shardIsolatedLeaderCheckIntervalInMillis) { datastoreContext.setIsolatedLeaderCheckInterval(shardIsolatedLeaderCheckIntervalInMillis); return this; @@ -565,23 +568,23 @@ public class DatastoreContext implements ClientActorConfig { return this; } + @Deprecated(forRemoval = true) public Builder maxShardDataChangeExecutorPoolSize(final int newMaxShardDataChangeExecutorPoolSize) { - this.maxShardDataChangeExecutorPoolSize = newMaxShardDataChangeExecutorPoolSize; return this; } + @Deprecated(forRemoval = true) public Builder maxShardDataChangeExecutorQueueSize(final int newMaxShardDataChangeExecutorQueueSize) { - this.maxShardDataChangeExecutorQueueSize = newMaxShardDataChangeExecutorQueueSize; return this; } + @Deprecated(forRemoval = true) public Builder maxShardDataChangeListenerQueueSize(final int newMaxShardDataChangeListenerQueueSize) { - this.maxShardDataChangeListenerQueueSize = newMaxShardDataChangeListenerQueueSize; return this; } + @Deprecated(forRemoval = true) public Builder maxShardDataStoreExecutorQueueSize(final int newMaxShardDataStoreExecutorQueueSize) { - this.maxShardDataStoreExecutorQueueSize = newMaxShardDataStoreExecutorQueueSize; return this; } @@ -659,13 +662,6 @@ public class DatastoreContext implements ClientActorConfig { @Override public DatastoreContext build() { - datastoreContext.dataStoreProperties = InMemoryDOMDataStoreConfigProperties.builder() - .maxDataChangeExecutorPoolSize(maxShardDataChangeExecutorPoolSize) - .maxDataChangeExecutorQueueSize(maxShardDataChangeExecutorQueueSize) - .maxDataChangeListenerQueueSize(maxShardDataChangeListenerQueueSize) - .maxDataStoreExecutorQueueSize(maxShardDataStoreExecutorQueueSize) - .build(); - if (datastoreContext.dataStoreName != null) { GLOBAL_DATASTORE_NAMES.add(datastoreContext.dataStoreName); }