diff --git a/docs/_docs/extensions-and-integrations/change-data-capture-extensions.adoc b/docs/_docs/extensions-and-integrations/change-data-capture-extensions.adoc index cea33b8ed4a2f..de30adaf9598f 100644 --- a/docs/_docs/extensions-and-integrations/change-data-capture-extensions.adoc +++ b/docs/_docs/extensions-and-integrations/change-data-capture-extensions.adoc @@ -14,8 +14,6 @@ // limitations under the License. = Cross-cluster Replication Extension -WARNING: Change Data Capture (CDC) and Cross-cluster Replication Extension are experimental features. API or design architecture might be changed. - == Overview link:https://github.com/apache/ignite-extensions/tree/master/modules/cdc-ext[Cross-cluster Replication Extension] module provides the following ways to set up cross-cluster replication based on CDC. diff --git a/docs/_docs/persistence/change-data-capture.adoc b/docs/_docs/persistence/change-data-capture.adoc index 549a2d3095ea5..2f0848591fbf6 100644 --- a/docs/_docs/persistence/change-data-capture.adoc +++ b/docs/_docs/persistence/change-data-capture.adoc @@ -18,8 +18,6 @@ == Overview Change Data Capture (link:https://en.wikipedia.org/wiki/Change_data_capture[CDC]) is a data processing pattern used to asynchronously receive entries that have been changed on the local node so that action can be taken using the changed entry. -WARNING: CDC is an experimental feature. API or design architecture might be changed. - Below are some CDC use cases: * Streaming changes in Warehouse; diff --git a/modules/core/src/main/java/org/apache/ignite/cdc/CdcCacheEvent.java b/modules/core/src/main/java/org/apache/ignite/cdc/CdcCacheEvent.java index d006c7b18ea3c..c1d06383344c2 100644 --- a/modules/core/src/main/java/org/apache/ignite/cdc/CdcCacheEvent.java +++ b/modules/core/src/main/java/org/apache/ignite/cdc/CdcCacheEvent.java @@ -22,7 +22,6 @@ import org.apache.ignite.IgniteCache; import org.apache.ignite.cache.QueryEntity; import org.apache.ignite.configuration.CacheConfiguration; -import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.spi.systemview.view.CacheView; /** @@ -34,7 +33,6 @@ * @see CacheConfiguration * @see QueryEntity */ -@IgniteExperimental public interface CdcCacheEvent { /** * @return Cache ID. diff --git a/modules/core/src/main/java/org/apache/ignite/cdc/CdcConfiguration.java b/modules/core/src/main/java/org/apache/ignite/cdc/CdcConfiguration.java index e6f676e68d822..54304d1d08ed4 100644 --- a/modules/core/src/main/java/org/apache/ignite/cdc/CdcConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/cdc/CdcConfiguration.java @@ -18,16 +18,12 @@ package org.apache.ignite.cdc; import org.apache.ignite.configuration.DataStorageConfiguration; -import org.apache.ignite.internal.cdc.CdcMain; -import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.spi.metric.MetricExporterSpi; import org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi; /** - * This class defines {@link CdcMain} runtime configuration. - * Configuration is passed to {@link CdcMain} constructor. + * This class defines ignite-cdc runtime configuration. */ -@IgniteExperimental public class CdcConfiguration { /** */ private static final int DFLT_LOCK_TIMEOUT = 1000; @@ -48,7 +44,7 @@ public class CdcConfiguration { private boolean keepBinary = DFLT_KEEP_BINARY; /** - * {@link CdcMain} acquire file lock on startup to ensure exclusive consumption. + * Ignite-cdc process acquire file lock on startup to ensure exclusive consumption. * This property specifies amount of time to wait for lock acquisition.
* Default is {@code 1000 ms}. */ diff --git a/modules/core/src/main/java/org/apache/ignite/cdc/CdcConsumer.java b/modules/core/src/main/java/org/apache/ignite/cdc/CdcConsumer.java index 6f00a9179b34a..592bc71ef545b 100644 --- a/modules/core/src/main/java/org/apache/ignite/cdc/CdcConsumer.java +++ b/modules/core/src/main/java/org/apache/ignite/cdc/CdcConsumer.java @@ -24,15 +24,13 @@ import org.apache.ignite.binary.BinaryIdMapper; import org.apache.ignite.binary.BinaryType; import org.apache.ignite.cache.CacheEntryVersion; -import org.apache.ignite.internal.cdc.CdcMain; -import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.metric.MetricRegistry; import org.apache.ignite.resources.LoggerResource; import org.apache.ignite.spi.systemview.view.CacheView; /** * Consumer of WAL data change events. - * This consumer will receive data change events during {@link CdcMain} application invocation. + * This consumer will receive data change events during ignite-cdc process invocation. * The lifecycle of the consumer is the following: * * Note, {@link CdcConsumer} receive notifications on each running CDC application(node). * - * @see CdcMain * @see CdcEvent * @see CacheEntryVersion */ -@IgniteExperimental public interface CdcConsumer { /** * Starts the consumer. diff --git a/modules/core/src/main/java/org/apache/ignite/cdc/CdcEvent.java b/modules/core/src/main/java/org/apache/ignite/cdc/CdcEvent.java index 5f1a490fa6d43..29d628c421d0f 100644 --- a/modules/core/src/main/java/org/apache/ignite/cdc/CdcEvent.java +++ b/modules/core/src/main/java/org/apache/ignite/cdc/CdcEvent.java @@ -22,8 +22,6 @@ import javax.cache.expiry.ExpiryPolicy; import org.apache.ignite.cache.CacheEntryVersion; import org.apache.ignite.cache.affinity.Affinity; -import org.apache.ignite.internal.cdc.CdcMain; -import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.spi.systemview.view.CacheView; import org.jetbrains.annotations.Nullable; @@ -31,10 +29,8 @@ * Event of single entry change. * Instance presents new value of modified entry. * - * @see CdcMain * @see CdcConsumer */ -@IgniteExperimental public interface CdcEvent extends Serializable { /** * @return Key for the changed entry. diff --git a/modules/core/src/main/java/org/apache/ignite/cdc/TypeMapping.java b/modules/core/src/main/java/org/apache/ignite/cdc/TypeMapping.java index cda4d73ac3a70..f5b427d7e9776 100644 --- a/modules/core/src/main/java/org/apache/ignite/cdc/TypeMapping.java +++ b/modules/core/src/main/java/org/apache/ignite/cdc/TypeMapping.java @@ -22,7 +22,6 @@ import org.apache.ignite.IgniteBinary; import org.apache.ignite.binary.BinaryIdMapper; import org.apache.ignite.binary.BinaryObject; -import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.marshaller.MarshallerContext; import org.apache.ignite.platform.PlatformType; @@ -38,7 +37,6 @@ * @see CdcConsumer#onMappings(Iterator) * @see MarshallerContext#registerClassName(byte, int, String, boolean) */ -@IgniteExperimental public interface TypeMapping extends Serializable { /** @return Type id. */ public int typeId(); diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java index 299cce13f4f36..1293ed7989486 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java @@ -20,7 +20,6 @@ import org.apache.ignite.DataRegionMetrics; import org.apache.ignite.internal.mem.IgniteOutOfMemoryException; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.mem.MemoryAllocator; import org.apache.ignite.mxbean.MetricsMxBean; import org.jetbrains.annotations.Nullable; @@ -157,7 +156,6 @@ public final class DataRegionConfiguration implements Serializable { @Nullable private MemoryAllocator memoryAllocator = null; /** Change Data Capture enabled flag. */ - @IgniteExperimental private boolean cdcEnabled; /** @@ -566,7 +564,6 @@ public DataRegionConfiguration setWarmUpConfiguration(@Nullable WarmUpConfigurat * @param cdcEnabled CDC enabled flag. * @return {@code this} for chaining. */ - @IgniteExperimental public DataRegionConfiguration setCdcEnabled(boolean cdcEnabled) { this.cdcEnabled = cdcEnabled; @@ -579,7 +576,6 @@ public DataRegionConfiguration setCdcEnabled(boolean cdcEnabled) { * * @return CDC enabled flag. */ - @IgniteExperimental public boolean isCdcEnabled() { return cdcEnabled; } diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java index e073be11b3d4d..ea6eb863c4ab6 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java @@ -27,7 +27,6 @@ import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteExperimental; import org.apache.ignite.mem.MemoryAllocator; import org.apache.ignite.mxbean.MetricsMxBean; import org.jetbrains.annotations.Nullable; @@ -239,11 +238,9 @@ public class DataStorageConfiguration implements Serializable { private String walArchivePath = DFLT_WAL_ARCHIVE_PATH; /** Change Data Capture path. */ - @IgniteExperimental private String cdcWalPath = DFLT_WAL_CDC_PATH; /** Change Data Capture directory size limit. */ - @IgniteExperimental private long cdcWalDirMaxSize = DFLT_CDC_WAL_DIRECTORY_MAX_SIZE; /** @@ -298,7 +295,6 @@ public class DataStorageConfiguration implements Serializable { private long walAutoArchiveAfterInactivity = -1; /** Time interval (in milliseconds) after last log of data change for force archiving of incompletely WAL segment. */ - @IgniteExperimental private long walForceArchiveTimeout = -1; /** If true, threads that generate dirty pages too fast during ongoing checkpoint will be throttled. */ @@ -787,7 +783,6 @@ public DataStorageConfiguration setWalArchivePath(String walArchivePath) { * * @return CDC directory. */ - @IgniteExperimental public String getCdcWalPath() { return cdcWalPath; } @@ -799,7 +794,6 @@ public String getCdcWalPath() { * @param cdcWalPath CDC directory. * @return {@code this} for chaining. */ - @IgniteExperimental public DataStorageConfiguration setCdcWalPath(String cdcWalPath) { A.notNull(cdcWalPath, "CDC WAL"); @@ -813,7 +807,6 @@ public DataStorageConfiguration setCdcWalPath(String cdcWalPath) { * * @return CDC directory maximum size in bytes. */ - @IgniteExperimental public long getCdcWalDirectoryMaxSize() { return cdcWalDirMaxSize; } @@ -827,7 +820,6 @@ public long getCdcWalDirectoryMaxSize() { * @param cdcWalDirMaxSize CDC directory maximum size in bytes. * @return {@code this} for chaining. */ - @IgniteExperimental public DataStorageConfiguration setCdcWalDirectoryMaxSize(long cdcWalDirMaxSize) { this.cdcWalDirMaxSize = cdcWalDirMaxSize; @@ -1149,7 +1141,6 @@ public long getWalAutoArchiveAfterInactivity() { * Zero or negative value disables forcefull auto archiving. * @return current configuration instance for chaining. */ - @IgniteExperimental public DataStorageConfiguration setWalForceArchiveTimeout(long walForceArchiveTimeout) { this.walForceArchiveTimeout = walForceArchiveTimeout; @@ -1160,7 +1151,6 @@ public DataStorageConfiguration setWalForceArchiveTimeout(long walForceArchiveTi * @return time interval (in milliseconds) after last log of data change * for force archiving of incompletely WAL segment. */ - @IgniteExperimental public long getWalForceArchiveTimeout() { return walForceArchiveTimeout; } diff --git a/modules/core/src/main/java/org/apache/ignite/cdc/CdcLoader.java b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcLoader.java similarity index 94% rename from modules/core/src/main/java/org/apache/ignite/cdc/CdcLoader.java rename to modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcLoader.java index ca7b4f6f916ae..3487db8d6821f 100644 --- a/modules/core/src/main/java/org/apache/ignite/cdc/CdcLoader.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcLoader.java @@ -15,27 +15,25 @@ * limitations under the License. */ -package org.apache.ignite.cdc; +package org.apache.ignite.internal.cdc; import java.net.URL; import java.util.Collection; import java.util.Map; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.cdc.CdcConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.internal.cdc.CdcMain; import org.apache.ignite.internal.processors.resource.GridSpringResourceContext; import org.apache.ignite.internal.util.spring.IgniteSpringHelper; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; -import org.apache.ignite.lang.IgniteExperimental; import static org.apache.ignite.internal.IgniteComponentType.SPRING; /** * Utility class to load {@link CdcMain} from Spring XML configuration. */ -@IgniteExperimental public class CdcLoader { /** * Loads {@link CdcMain} from XML configuration file. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/IgniteCommandRegistry.java b/modules/core/src/main/java/org/apache/ignite/internal/management/IgniteCommandRegistry.java index 7f4637e0843f8..48954b806d4ad 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/management/IgniteCommandRegistry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/management/IgniteCommandRegistry.java @@ -70,8 +70,8 @@ public IgniteCommandRegistry() { new PersistenceCommand(), new DefragmentationCommand(), new PerformanceStatisticsCommand(), - new ConsistencyCommand(), - new CdcCommand() + new CdcCommand(), + new ConsistencyCommand() ); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java index ac5ca91adeeef..371d6a2cf4f59 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java @@ -22,7 +22,6 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.management.api.ComputeCommand; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteExperimental; import static org.apache.ignite.internal.management.api.CommandUtils.node; import static org.apache.ignite.internal.management.api.CommandUtils.servers; @@ -30,7 +29,6 @@ /** * Command to delete lost segment links. */ -@IgniteExperimental public class CdcDeleteLostSegmentLinksCommand implements ComputeCommand { /** {@inheritDoc} */ @Override public String description() { diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcResendCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcResendCommand.java index 212e1cc3c2131..17c06a13d7d2e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcResendCommand.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcResendCommand.java @@ -19,13 +19,11 @@ import java.util.function.Consumer; import org.apache.ignite.internal.management.api.ComputeCommand; -import org.apache.ignite.lang.IgniteExperimental; /** * The command to forcefully resend all cache data to CDC. * Iterates over given caches and writes data entries to the WAL to get captured by CDC. */ -@IgniteExperimental public class CdcResendCommand implements ComputeCommand { /** {@inheritDoc} */ @Override public String description() { diff --git a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java index 5a62bf58848ac..4a69d0641c3d9 100644 --- a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java +++ b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java @@ -19,7 +19,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.apache.ignite.IgniteSystemProperties; -import org.apache.ignite.cdc.CdcLoader; +import org.apache.ignite.internal.cdc.CdcLoader; import org.apache.ignite.internal.cdc.CdcMain; import org.apache.ignite.internal.util.typedef.X; import org.jetbrains.annotations.Nullable; @@ -41,7 +41,6 @@ * this startup and you can use them as an example. *

* - * @see CdcMain */ public class CdcCommandLineStartup { /** Quite log flag. */ diff --git a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output index 7a8ca293c8c99..939c60c0609ec 100644 --- a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output +++ b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output @@ -427,6 +427,18 @@ If the file name isn't specified the output file name is: '.bin': Get status of collecting performance statistics in the cluster: control.(sh|bat) --performance-statistics status + Delete lost segment CDC links: + control.(sh|bat) --cdc delete_lost_segment_links [--node-id node_id] [--yes] + + Parameters: + --node-id node_id - ID of the node to delete lost segment links from. If not set, the command will affect all server nodes. + + Forcefully resend all cache data to CDC. Iterates over caches and writes primary copies of data entries to the WAL to get captured by CDC: + control.(sh|bat) --cdc resend --caches cache1,...,cacheN + + Parameters: + --caches cache1,...,cacheN - specifies a comma-separated list of cache names. + [EXPERIMENTAL] Check/Repair cache consistency using Read Repair approach: control.(sh|bat) --consistency repair --cache cache --partitions partition --strategy LWW|PRIMARY|RELATIVE_MAJORITY|REMOVE|CHECK_ONLY [--parallel] @@ -450,20 +462,6 @@ If the file name isn't specified the output file name is: '.bin': Finalize partitions update counters: control.(sh|bat) --consistency finalize - [EXPERIMENTAL] - Delete lost segment CDC links: - control.(sh|bat) --cdc delete_lost_segment_links [--node-id node_id] [--yes] - - Parameters: - --node-id node_id - ID of the node to delete lost segment links from. If not set, the command will affect all server nodes. - - [EXPERIMENTAL] - Forcefully resend all cache data to CDC. Iterates over caches and writes primary copies of data entries to the WAL to get captured by CDC: - control.(sh|bat) --cdc resend --caches cache1,...,cacheN - - Parameters: - --caches cache1,...,cacheN - specifies a comma-separated list of cache names. - By default commands affecting the cluster require interactive confirmation. Use --yes option to disable it. diff --git a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output index 445f8127435c9..2dd6bb7381544 100644 --- a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output +++ b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output @@ -427,6 +427,18 @@ If the file name isn't specified the output file name is: '.bin': Get status of collecting performance statistics in the cluster: control.(sh|bat) --performance-statistics status + Delete lost segment CDC links: + control.(sh|bat) --cdc delete_lost_segment_links [--node-id node_id] [--yes] + + Parameters: + --node-id node_id - ID of the node to delete lost segment links from. If not set, the command will affect all server nodes. + + Forcefully resend all cache data to CDC. Iterates over caches and writes primary copies of data entries to the WAL to get captured by CDC: + control.(sh|bat) --cdc resend --caches cache1,...,cacheN + + Parameters: + --caches cache1,...,cacheN - specifies a comma-separated list of cache names. + [EXPERIMENTAL] Check/Repair cache consistency using Read Repair approach: control.(sh|bat) --consistency repair --cache cache --partitions partition --strategy LWW|PRIMARY|RELATIVE_MAJORITY|REMOVE|CHECK_ONLY [--parallel] @@ -450,20 +462,6 @@ If the file name isn't specified the output file name is: '.bin': Finalize partitions update counters: control.(sh|bat) --consistency finalize - [EXPERIMENTAL] - Delete lost segment CDC links: - control.(sh|bat) --cdc delete_lost_segment_links [--node-id node_id] [--yes] - - Parameters: - --node-id node_id - ID of the node to delete lost segment links from. If not set, the command will affect all server nodes. - - [EXPERIMENTAL] - Forcefully resend all cache data to CDC. Iterates over caches and writes primary copies of data entries to the WAL to get captured by CDC: - control.(sh|bat) --cdc resend --caches cache1,...,cacheN - - Parameters: - --caches cache1,...,cacheN - specifies a comma-separated list of cache names. - By default commands affecting the cluster require interactive confirmation. Use --yes option to disable it. diff --git a/modules/spring/src/test/java/org/apache/ignite/cdc/CdcConfigurationTest.java b/modules/spring/src/test/java/org/apache/ignite/cdc/CdcConfigurationTest.java index 4ad7d8a1bcce4..7ace260bcfc00 100644 --- a/modules/spring/src/test/java/org/apache/ignite/cdc/CdcConfigurationTest.java +++ b/modules/spring/src/test/java/org/apache/ignite/cdc/CdcConfigurationTest.java @@ -37,7 +37,7 @@ import org.springframework.context.ApplicationContext; import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static org.apache.ignite.cdc.CdcLoader.loadCdc; +import static org.apache.ignite.internal.cdc.CdcLoader.loadCdc; import static org.apache.ignite.internal.cdc.CdcMain.ERR_MSG; import static org.apache.ignite.testframework.GridTestUtils.assertThrows; import static org.apache.ignite.testframework.GridTestUtils.getFieldValue;