From f143c060da5d3bb0d5ae7d38b6731e51d67b2632 Mon Sep 17 00:00:00 2001 From: Alex Abashev Date: Wed, 4 Mar 2026 21:01:12 +0300 Subject: [PATCH 1/3] IGNITE-28018 Github action hook to control changes inside the messages. --- .github/protected-classes.txt | 409 ++++++++++++++++++ .github/workflows/check-protected-classes.yml | 117 +++++ .../workflows/update-protected-classes.yml | 58 +++ modules/tools/pom.xml | 6 + .../ProtectedClassesGenerator.java | 88 ++++ 5 files changed, 678 insertions(+) create mode 100644 .github/protected-classes.txt create mode 100644 .github/workflows/check-protected-classes.yml create mode 100644 .github/workflows/update-protected-classes.yml create mode 100644 modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java diff --git a/.github/protected-classes.txt b/.github/protected-classes.txt new file mode 100644 index 0000000000000..b6535e17b0c6d --- /dev/null +++ b/.github/protected-classes.txt @@ -0,0 +1,409 @@ +# Auto-generated list of protected classes (Message/IgniteDataTransferObject hierarchy). +# Changes to these classes require special review. +# Regenerated automatically after merging PRs with 'protected-classes' label. +org.apache.ignite.internal.ExchangeInfo +org.apache.ignite.internal.ExecutorAwareMessage +org.apache.ignite.internal.GridJobCancelRequest +org.apache.ignite.internal.GridJobExecuteRequest +org.apache.ignite.internal.GridJobExecuteResponse +org.apache.ignite.internal.GridJobSiblingsRequest +org.apache.ignite.internal.GridJobSiblingsResponse +org.apache.ignite.internal.GridTaskCancelRequest +org.apache.ignite.internal.GridTaskSessionRequest +org.apache.ignite.internal.IgniteDiagnosticRequest +org.apache.ignite.internal.IgniteDiagnosticRequest$DiagnosticBaseInfo +org.apache.ignite.internal.IgniteDiagnosticResponse +org.apache.ignite.internal.TxEntriesInfo +org.apache.ignite.internal.TxInfo +org.apache.ignite.internal.cache.query.index.IndexKeyTypeMessage +org.apache.ignite.internal.cache.query.index.IndexQueryResultMeta +org.apache.ignite.internal.cache.query.index.sorted.DurableBackgroundCleanupIndexTreeTaskV2 +org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition +org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings +org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesResult +org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionGroup +org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionNode +org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionPartition +org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTaskResult +org.apache.ignite.internal.commandline.cache.reset_lost_partitions.CacheResetLostPartitionsTaskResult +org.apache.ignite.internal.dto.IgniteDataTransferObject +org.apache.ignite.internal.management.ChangeTagCommandArg +org.apache.ignite.internal.management.ClusterChangeTagTaskResult +org.apache.ignite.internal.management.DeactivateCommandArg +org.apache.ignite.internal.management.SetStateCommandArg +org.apache.ignite.internal.management.ShutdownPolicyCommandArg +org.apache.ignite.internal.management.ShutdownPolicyTaskResult +org.apache.ignite.internal.management.SystemViewCommandArg +org.apache.ignite.internal.management.SystemViewTaskResult +org.apache.ignite.internal.management.api.NoArg +org.apache.ignite.internal.management.baseline.BaselineAddCommandArg +org.apache.ignite.internal.management.baseline.BaselineAutoAdjustCommandArg +org.apache.ignite.internal.management.baseline.BaselineAutoAdjustSettings +org.apache.ignite.internal.management.baseline.BaselineCommand$BaselineTaskArg +org.apache.ignite.internal.management.baseline.BaselineCommandArg +org.apache.ignite.internal.management.baseline.BaselineNode +org.apache.ignite.internal.management.baseline.BaselineNode$ResolvedAddresses +org.apache.ignite.internal.management.baseline.BaselineRemoveCommandArg +org.apache.ignite.internal.management.baseline.BaselineSetCommandArg +org.apache.ignite.internal.management.baseline.BaselineTaskResult +org.apache.ignite.internal.management.baseline.BaselineVersionCommandArg +org.apache.ignite.internal.management.cache.CacheAffinityConfiguration +org.apache.ignite.internal.management.cache.CacheClearCommandArg +org.apache.ignite.internal.management.cache.CacheConfiguration +org.apache.ignite.internal.management.cache.CacheConfigurationCollectorTaskArg +org.apache.ignite.internal.management.cache.CacheContentionCommandArg +org.apache.ignite.internal.management.cache.CacheCreateCommandArg +org.apache.ignite.internal.management.cache.CacheDestroyCommandArg +org.apache.ignite.internal.management.cache.CacheDistributionCommandArg +org.apache.ignite.internal.management.cache.CacheEvictionConfiguration +org.apache.ignite.internal.management.cache.CacheFindGarbageCommandArg +org.apache.ignite.internal.management.cache.CacheIdleVerifyCommandArg +org.apache.ignite.internal.management.cache.CacheIdleVerifyDumpCommandArg +org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommandArg +org.apache.ignite.internal.management.cache.CacheIndexesListCommandArg +org.apache.ignite.internal.management.cache.CacheIndexesRebuildStatusCommandArg +org.apache.ignite.internal.management.cache.CacheInfo +org.apache.ignite.internal.management.cache.CacheJdbcType +org.apache.ignite.internal.management.cache.CacheJdbcTypeField +org.apache.ignite.internal.management.cache.CacheListCommandArg +org.apache.ignite.internal.management.cache.CacheMetricsCommandArg +org.apache.ignite.internal.management.cache.CacheNearConfiguration +org.apache.ignite.internal.management.cache.CacheRebalanceConfiguration +org.apache.ignite.internal.management.cache.CacheResetLostPartitionsCommandArg +org.apache.ignite.internal.management.cache.CacheScheduleIndexesRebuildCommandArg +org.apache.ignite.internal.management.cache.CacheStoreConfiguration +org.apache.ignite.internal.management.cache.CacheValidateIndexesCommandArg +org.apache.ignite.internal.management.cache.ContentionJobResult +org.apache.ignite.internal.management.cache.ContentionTaskResult +org.apache.ignite.internal.management.cache.FindAndDeleteGarbageInPersistenceJobResult +org.apache.ignite.internal.management.cache.FindAndDeleteGarbageInPersistenceTaskResult +org.apache.ignite.internal.management.cache.IdleVerifyDumpResult +org.apache.ignite.internal.management.cache.IdleVerifyResult +org.apache.ignite.internal.management.cache.IndexForceRebuildTaskRes +org.apache.ignite.internal.management.cache.IndexIntegrityCheckIssue +org.apache.ignite.internal.management.cache.IndexListInfoContainer +org.apache.ignite.internal.management.cache.IndexRebuildStatusInfoContainer +org.apache.ignite.internal.management.cache.IndexValidationIssue +org.apache.ignite.internal.management.cache.QueryConfiguration +org.apache.ignite.internal.management.cache.QueryEntity +org.apache.ignite.internal.management.cache.QueryIndex +org.apache.ignite.internal.management.cache.QueryIndexField +org.apache.ignite.internal.management.cache.ScheduleIndexRebuildJobRes +org.apache.ignite.internal.management.cache.ScheduleIndexRebuildTaskRes +org.apache.ignite.internal.management.cache.ValidateIndexesCheckSizeIssue +org.apache.ignite.internal.management.cache.ValidateIndexesCheckSizeResult +org.apache.ignite.internal.management.cache.ValidateIndexesJobResult +org.apache.ignite.internal.management.cache.ValidateIndexesPartitionResult +org.apache.ignite.internal.management.cache.ValidateIndexesTaskResult +org.apache.ignite.internal.management.cache.ViewCacheTaskResult +org.apache.ignite.internal.management.cache.scan.CacheScanCommandArg +org.apache.ignite.internal.management.cache.scan.CacheScanTaskResult +org.apache.ignite.internal.management.cdc.CdcDeleteLostSegmentLinksCommandArg +org.apache.ignite.internal.management.cdc.CdcResendCommandArg +org.apache.ignite.internal.management.checkpoint.CheckpointCommandArg +org.apache.ignite.internal.management.consistency.ConsistencyRepairCommandArg +org.apache.ignite.internal.management.consistency.ConsistencyTaskResult +org.apache.ignite.internal.management.defragmentation.DefragmentationCommand$DefragmentationCancelCommandArg +org.apache.ignite.internal.management.defragmentation.DefragmentationCommand$DefragmentationStatusCommandArg +org.apache.ignite.internal.management.defragmentation.DefragmentationScheduleCommandArg +org.apache.ignite.internal.management.defragmentation.DefragmentationTaskResult +org.apache.ignite.internal.management.diagnostic.ConnectivityResult +org.apache.ignite.internal.management.diagnostic.DiagnosticConnectivityCommandArg +org.apache.ignite.internal.management.diagnostic.DiagnosticPagelocksCommandArg +org.apache.ignite.internal.management.diagnostic.PageLocksResult +org.apache.ignite.internal.management.encryption.CacheGroupEncryptionTaskResult +org.apache.ignite.internal.management.encryption.EncryptionCacheGroupArg +org.apache.ignite.internal.management.encryption.EncryptionChangeMasterKeyCommandArg +org.apache.ignite.internal.management.encryption.EncryptionKeyIdsTask$EncryptionKeyIdsResult +org.apache.ignite.internal.management.encryption.EncryptionReencryptionRateLimitCommandArg +org.apache.ignite.internal.management.encryption.ReencryptionRateTask$ReencryptionRateJobResult +org.apache.ignite.internal.management.encryption.ReencryptionStatusTask$ReencryptionStatusResult +org.apache.ignite.internal.management.encryption.ReencryptionSuspendTask$ReencryptionSuspendResumeJobResult +org.apache.ignite.internal.management.kill.KillClientCommandArg +org.apache.ignite.internal.management.kill.KillComputeCommandArg +org.apache.ignite.internal.management.kill.KillContinuousCommandArg +org.apache.ignite.internal.management.kill.KillScanCommandArg +org.apache.ignite.internal.management.kill.KillServiceCommandArg +org.apache.ignite.internal.management.kill.KillSnapshotCommandArg +org.apache.ignite.internal.management.kill.KillSqlCommandArg +org.apache.ignite.internal.management.kill.KillTransactionCommandArg +org.apache.ignite.internal.management.kill.SnapshotCancelTask$CancelSnapshotArg +org.apache.ignite.internal.management.meta.MetaDetailsCommandArg +org.apache.ignite.internal.management.meta.MetaRemoveCommandArg +org.apache.ignite.internal.management.meta.MetaUpdateCommandArg +org.apache.ignite.internal.management.meta.MetadataListResult +org.apache.ignite.internal.management.meta.MetadataMarshalled +org.apache.ignite.internal.management.metric.MetricCommandArg +org.apache.ignite.internal.management.metric.MetricConfigureHistogramCommandArg +org.apache.ignite.internal.management.metric.MetricConfigureHitrateCommandArg +org.apache.ignite.internal.management.metric.MetricConfigureMaxValueCommandArg +org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsRotateCommandArg +org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsStartCommandArg +org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsStatusCommandArg +org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsStopCommandArg +org.apache.ignite.internal.management.persistence.PersistenceBackupCachesTaskArg +org.apache.ignite.internal.management.persistence.PersistenceCleanCachesTaskArg +org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceBackupAllTaskArg +org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceBackupCorruptedTaskArg +org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceCleanAllTaskArg +org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceCleanCorruptedTaskArg +org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceInfoTaskArg +org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceTaskArg +org.apache.ignite.internal.management.persistence.PersistenceTaskResult +org.apache.ignite.internal.management.property.PropertiesListResult +org.apache.ignite.internal.management.property.PropertyGetCommandArg +org.apache.ignite.internal.management.property.PropertyListCommandArg +org.apache.ignite.internal.management.property.PropertyOperationResult +org.apache.ignite.internal.management.property.PropertySetCommandArg +org.apache.ignite.internal.management.rollingupgrade.RollingUpgradeEnableCommandArg +org.apache.ignite.internal.management.rollingupgrade.RollingUpgradeStatusNode +org.apache.ignite.internal.management.rollingupgrade.RollingUpgradeTaskResult +org.apache.ignite.internal.management.snapshot.SnapshotCancelCommandArg +org.apache.ignite.internal.management.snapshot.SnapshotCheckCommandArg +org.apache.ignite.internal.management.snapshot.SnapshotCreateCommandArg +org.apache.ignite.internal.management.snapshot.SnapshotRestoreCommandArg +org.apache.ignite.internal.management.tracing.TracingConfigurationCommand$TracingConfigurationCommandArg +org.apache.ignite.internal.management.tracing.TracingConfigurationCommand$TracingConfigurationResetAllCommandArg +org.apache.ignite.internal.management.tracing.TracingConfigurationCommand$TracingConfigurationResetCommandArg +org.apache.ignite.internal.management.tracing.TracingConfigurationGetAllCommandArg +org.apache.ignite.internal.management.tracing.TracingConfigurationGetCommandArg +org.apache.ignite.internal.management.tracing.TracingConfigurationItem +org.apache.ignite.internal.management.tracing.TracingConfigurationSetCommandArg +org.apache.ignite.internal.management.tracing.TracingConfigurationTaskResult +org.apache.ignite.internal.management.tx.TxCommand$AbstractTxCommandArg +org.apache.ignite.internal.management.tx.TxCommandArg +org.apache.ignite.internal.management.tx.TxInfo +org.apache.ignite.internal.management.tx.TxInfoCommandArg +org.apache.ignite.internal.management.tx.TxTaskResult +org.apache.ignite.internal.management.tx.TxVerboseInfo +org.apache.ignite.internal.management.tx.TxVerboseKey +org.apache.ignite.internal.management.wal.ClusterNode +org.apache.ignite.internal.management.wal.WalDeleteCommandArg +org.apache.ignite.internal.management.wal.WalDisableCommand$WalDisableCommandArg +org.apache.ignite.internal.management.wal.WalEnableCommand$WalEnableCommandArg +org.apache.ignite.internal.management.wal.WalPrintCommand$WalPrintCommandArg +org.apache.ignite.internal.management.wal.WalSetStateTaskResult +org.apache.ignite.internal.management.wal.WalStateCommandArg +org.apache.ignite.internal.management.wal.WalTaskResult +org.apache.ignite.internal.managers.checkpoint.GridCheckpointRequest +org.apache.ignite.internal.managers.communication.CompressedMessage +org.apache.ignite.internal.managers.communication.ErrorMessage +org.apache.ignite.internal.managers.communication.GridIoMessage +org.apache.ignite.internal.managers.communication.GridIoSecurityAwareMessage +org.apache.ignite.internal.managers.communication.GridIoUserMessage +org.apache.ignite.internal.managers.communication.IgniteIoTestMessage +org.apache.ignite.internal.managers.communication.SessionChannelMessage +org.apache.ignite.internal.managers.deployment.GridDeploymentInfoBean +org.apache.ignite.internal.managers.deployment.GridDeploymentRequest +org.apache.ignite.internal.managers.deployment.GridDeploymentResponse +org.apache.ignite.internal.managers.discovery.SecurityAwareCustomMessageWrapper +org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyRequest +org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyResponse +org.apache.ignite.internal.managers.eventstorage.GridEventStorageMessage +org.apache.ignite.internal.processors.affinity.GridAffinityAssignmentV2 +org.apache.ignite.internal.processors.authentication.UserAuthenticateRequestMessage +org.apache.ignite.internal.processors.authentication.UserAuthenticateResponseMessage +org.apache.ignite.internal.processors.authentication.UserManagementOperationFinishedMessage +org.apache.ignite.internal.processors.cache.CacheEntryInfoCollection +org.apache.ignite.internal.processors.cache.CacheEntryPredicate +org.apache.ignite.internal.processors.cache.CacheEntryPredicateAdapter +org.apache.ignite.internal.processors.cache.CacheEvictionEntry +org.apache.ignite.internal.processors.cache.CacheInvokeDirectResult +org.apache.ignite.internal.processors.cache.CacheMetricsSnapshot +org.apache.ignite.internal.processors.cache.CacheStatisticsModeChangeMessage +org.apache.ignite.internal.processors.cache.ClearCachesTaskResult +org.apache.ignite.internal.processors.cache.GridCacheEntryInfo +org.apache.ignite.internal.processors.cache.GridCacheGroupIdMessage +org.apache.ignite.internal.processors.cache.GridCacheIdMessage +org.apache.ignite.internal.processors.cache.GridCacheMessage +org.apache.ignite.internal.processors.cache.GridCacheReturn +org.apache.ignite.internal.processors.cache.GridChangeGlobalStateMessageResponse +org.apache.ignite.internal.processors.cache.TxTimeoutOnPartitionMapExchangeChangeMessage +org.apache.ignite.internal.processors.cache.WalStateAbstractMessage +org.apache.ignite.internal.processors.cache.WalStateAckMessage +org.apache.ignite.internal.processors.cache.WalStateFinishMessage +org.apache.ignite.internal.processors.cache.WalStateProposeMessage +org.apache.ignite.internal.processors.cache.binary.BinaryMetadataVersionInfo +org.apache.ignite.internal.processors.cache.binary.MetadataRemoveAcceptedMessage +org.apache.ignite.internal.processors.cache.binary.MetadataRemoveProposedMessage +org.apache.ignite.internal.processors.cache.binary.MetadataRequestMessage +org.apache.ignite.internal.processors.cache.binary.MetadataResponseMessage +org.apache.ignite.internal.processors.cache.binary.MetadataUpdateAcceptedMessage +org.apache.ignite.internal.processors.cache.distributed.GridCacheTtlUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryRequest +org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryResponse +org.apache.ignite.internal.processors.cache.distributed.GridDistributedBaseMessage +org.apache.ignite.internal.processors.cache.distributed.GridDistributedLockRequest +org.apache.ignite.internal.processors.cache.distributed.GridDistributedLockResponse +org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxFinishRequest +org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxFinishResponse +org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxPrepareRequest +org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxPrepareResponse +org.apache.ignite.internal.processors.cache.distributed.GridNearUnlockRequest +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAffinityAssignmentRequest +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAffinityAssignmentResponse +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLockRequest +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLockResponse +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishRequest +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishResponse +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxOnePhaseCommitAckRequest +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareRequest +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareResponse +org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtUnlockRequest +org.apache.ignite.internal.processors.cache.distributed.dht.PartitionUpdateCountersMessage +org.apache.ignite.internal.processors.cache.distributed.dht.TransactionAttributesAwareRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.AtomicApplicationAttributesAwareRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicDeferredUpdateResponse +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicNearResponse +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicSingleUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicUpdateResponse +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicCheckUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicFullUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFilterRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateInvokeRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateRequest +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateResponse +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.NearCacheUpdates +org.apache.ignite.internal.processors.cache.distributed.dht.atomic.UpdateErrors +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CacheGroupAffinityMessage +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CachePartitionFullCountersMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CachePartitionPartialCountersMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CachePartitionsToReloadMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysRequest +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysResponse +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemandMessage +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionExchangeId +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsAbstractMessage +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleMessage +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleRequest +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GroupPartitionIdPair +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtDemandedPartitionsMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtPartitionCountersMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtPartitionHistorySuppliersMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtPartitionsToReloadMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IntLongMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.PartitionReservationsMap +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.PartitionsToReload +org.apache.ignite.internal.processors.cache.distributed.dht.preloader.latch.LatchAckMessage +org.apache.ignite.internal.processors.cache.distributed.near.CacheVersionedValue +org.apache.ignite.internal.processors.cache.distributed.near.GridNearGetRequest +org.apache.ignite.internal.processors.cache.distributed.near.GridNearGetResponse +org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockRequest +org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockResponse +org.apache.ignite.internal.processors.cache.distributed.near.GridNearSingleGetRequest +org.apache.ignite.internal.processors.cache.distributed.near.GridNearSingleGetResponse +org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishRequest +org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishResponse +org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxPrepareRequest +org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxPrepareResponse +org.apache.ignite.internal.processors.cache.persistence.checkpoint.EarliestCheckpointMapSnapshot +org.apache.ignite.internal.processors.cache.persistence.checkpoint.EarliestCheckpointMapSnapshot$GroupStateSnapshot +org.apache.ignite.internal.processors.cache.persistence.snapshot.IncrementalSnapshotAwareMessage +org.apache.ignite.internal.processors.cache.persistence.snapshot.SnapshotPartitionsVerifyResult +org.apache.ignite.internal.processors.cache.query.GridCacheQueryRequest +org.apache.ignite.internal.processors.cache.query.GridCacheQueryResponse +org.apache.ignite.internal.processors.cache.query.GridCacheSqlQuery +org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryBatchAck +org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryEntry +org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry +org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey +org.apache.ignite.internal.processors.cache.transactions.TxEntryValueHolder +org.apache.ignite.internal.processors.cache.transactions.TxLock +org.apache.ignite.internal.processors.cache.transactions.TxLockList +org.apache.ignite.internal.processors.cache.transactions.TxLocksRequest +org.apache.ignite.internal.processors.cache.transactions.TxLocksResponse +org.apache.ignite.internal.processors.cache.verify.PartitionHashRecord +org.apache.ignite.internal.processors.cache.verify.TransactionsHashRecord +org.apache.ignite.internal.processors.cache.version.GridCacheRawVersionedEntry +org.apache.ignite.internal.processors.cache.version.GridCacheVersion +org.apache.ignite.internal.processors.cache.version.GridCacheVersionEx +org.apache.ignite.internal.processors.cluster.CacheMetricsMessage +org.apache.ignite.internal.processors.cluster.ClusterMetricsUpdateMessage +org.apache.ignite.internal.processors.cluster.NodeFullMetricsMessage +org.apache.ignite.internal.processors.cluster.NodeMetricsMessage +org.apache.ignite.internal.processors.continuous.ContinuousRoutineStartResultMessage +org.apache.ignite.internal.processors.continuous.GridContinuousMessage +org.apache.ignite.internal.processors.datastreamer.DataStreamerEntry +org.apache.ignite.internal.processors.datastreamer.DataStreamerRequest +org.apache.ignite.internal.processors.datastreamer.DataStreamerResponse +org.apache.ignite.internal.processors.marshaller.MappingProposedMessage +org.apache.ignite.internal.processors.marshaller.MissingMappingRequestMessage +org.apache.ignite.internal.processors.marshaller.MissingMappingResponseMessage +org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageVersion +org.apache.ignite.internal.processors.odbc.ClientMessage +org.apache.ignite.internal.processors.query.aware.IndexRebuildCacheInfo +org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryCancelRequest +org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryFailResponse +org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageRequest +org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageResponse +org.apache.ignite.internal.processors.query.messages.GridQueryKillRequest +org.apache.ignite.internal.processors.query.messages.GridQueryKillResponse +org.apache.ignite.internal.processors.query.schema.message.SchemaAbstractDiscoveryMessage +org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessage +org.apache.ignite.internal.processors.query.schema.message.SchemaOperationStatusMessage +org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessage +org.apache.ignite.internal.processors.query.stat.messages.StatisticsColumnData +org.apache.ignite.internal.processors.query.stat.messages.StatisticsDecimalMessage +org.apache.ignite.internal.processors.query.stat.messages.StatisticsKeyMessage +org.apache.ignite.internal.processors.query.stat.messages.StatisticsObjectData +org.apache.ignite.internal.processors.query.stat.messages.StatisticsRequest +org.apache.ignite.internal.processors.query.stat.messages.StatisticsResponse +org.apache.ignite.internal.processors.rest.handlers.task.GridTaskResultRequest +org.apache.ignite.internal.processors.rest.handlers.task.GridTaskResultResponse +org.apache.ignite.internal.processors.service.ServiceDeploymentProcessId +org.apache.ignite.internal.processors.service.ServiceSingleNodeDeploymentResult +org.apache.ignite.internal.processors.service.ServiceSingleNodeDeploymentResultBatch +org.apache.ignite.internal.util.GridByteArrayList +org.apache.ignite.internal.util.GridPartitionStateMap +org.apache.ignite.internal.util.UUIDCollectionMessage +org.apache.ignite.internal.util.distributed.SingleNodeMessage +org.apache.ignite.internal.visor.VisorTaskArgument +org.apache.ignite.internal.visor.VisorTaskResult +org.apache.ignite.internal.visor.compute.VisorComputeCancelSessionsTaskArg +org.apache.ignite.internal.visor.misc.VisorIdAndTagViewTaskResult +org.apache.ignite.plugin.extensions.communication.Message +org.apache.ignite.spi.collision.jobstealing.JobStealingRequest +org.apache.ignite.spi.communication.tcp.internal.TcpConnectionIndexAwareMessage +org.apache.ignite.spi.communication.tcp.internal.TcpInverseConnectionResponseMessage +org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage +org.apache.ignite.spi.communication.tcp.messages.HandshakeWaitMessage +org.apache.ignite.spi.communication.tcp.messages.NodeIdMessage +org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage +org.apache.ignite.spi.discovery.tcp.internal.DiscoveryDataPacket +org.apache.ignite.spi.discovery.tcp.messages.InetAddressMessage +org.apache.ignite.spi.discovery.tcp.messages.InetSocketAddressMessage +org.apache.ignite.spi.discovery.tcp.messages.NodeSpecificData +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryAuthFailedMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCacheMetricsMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCheckFailedMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientAckResponse +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientMetricsUpdateMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientNodesMetricsMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingRequest +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingResponse +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryConnectionCheckMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDiscardMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDuplicateIdMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryHandshakeRequest +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryHandshakeResponse +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryJoinRequestMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryLoopbackProblemMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddFinishedMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFullMetricsMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeMetricsMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingRequest +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingResponse +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryRingLatencyCheckMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryServerOnlyCustomEventMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessage diff --git a/.github/workflows/check-protected-classes.yml b/.github/workflows/check-protected-classes.yml new file mode 100644 index 0000000000000..f97a0dce99485 --- /dev/null +++ b/.github/workflows/check-protected-classes.yml @@ -0,0 +1,117 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Check Protected Classes +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + check-protected-classes: + runs-on: ubuntu-latest + name: Check protected classes + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - name: Check for protected class modifications + id: check + run: | + BASE_SHA=${{ github.event.pull_request.base.sha }} + HEAD_SHA=${{ github.event.pull_request.head.sha }} + + CHANGED=$(git diff --name-only --diff-filter=ACMR "$BASE_SHA"..."$HEAD_SHA" -- '*.java') + [ -z "$CHANGED" ] && exit 0 + + HITS="" + while IFS= read -r file; do + FQN=$(echo "$file" | sed -n 's|.*/src/main/java/||p' | sed 's|/|.|g; s|\.java$||') + [ -z "$FQN" ] && continue + if grep -q "^${FQN}$" .github/protected-classes.txt 2>/dev/null; then + HITS="${HITS}${file}\n" + elif grep -qE '@Order\(|@Argument\(' "$file" 2>/dev/null; then + HITS="${HITS}${file} (new, not in registry)\n" + fi + done <<< "$CHANGED" + + if [ -n "$HITS" ]; then + echo "affected=true" >> "$GITHUB_OUTPUT" + printf '%b' "$HITS" > /tmp/protected-hits.txt + fi + + - name: Comment on PR + if: steps.check.outputs.affected == 'true' + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const hits = fs.readFileSync('/tmp/protected-hits.txt', 'utf8').trim(); + const body = [ + '## Protected Classes Review Required', + '', + 'This PR modifies protected classes (Message/IgniteDataTransferObject hierarchy).', + 'Changes to these classes can break rolling upgrade compatibility.', + '', + '**Affected files:**', + hits.split('\n').map(f => '- `' + f.trim() + '`').join('\n'), + '', + '**Checklist:**', + '- [ ] New fields added at the end (highest `@Order`)', + '- [ ] No existing fields removed or reordered', + '- [ ] `directType()` not changed', + '- [ ] Field types not changed in binary-incompatible way', + '- [ ] Rolling upgrade test covers this change', + ].join('\n'); + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + + const existing = comments.find(c => c.body.includes('Protected Classes Review Required')); + + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body, + }); + } + + - name: Add label + if: steps.check.outputs.affected == 'true' + uses: actions/github-script@v7 + with: + script: | + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: ['protected-classes'], + }); diff --git a/.github/workflows/update-protected-classes.yml b/.github/workflows/update-protected-classes.yml new file mode 100644 index 0000000000000..db0703e179c30 --- /dev/null +++ b/.github/workflows/update-protected-classes.yml @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Update Protected Classes Registry +on: + pull_request: + types: [closed] + +jobs: + update-registry: + if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'protected-classes') + runs-on: ubuntu-latest + name: Update protected classes registry + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.base.ref }} + + - name: Setup java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '11' + + - name: Build tools and dependencies + run: | + ./mvnw install -pl modules/tools -am -DskipTests -B -q + + - name: Copy dependencies + run: | + ./mvnw dependency:copy-dependencies -pl modules/tools -B -q + + - name: Generate protected-classes.txt + run: | + java -cp "modules/tools/target/classes:modules/tools/target/dependency/classgraph-*.jar:modules/core/target/classes:modules/core/target/dependency/*" \ + org.apache.ignite.tools.protectedclasses.ProtectedClassesGenerator \ + .github/protected-classes.txt + + - name: Commit and push if changed + run: | + git diff --quiet .github/protected-classes.txt && exit 0 + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add .github/protected-classes.txt + git commit -m "Update .github/protected-classes.txt after #${{ github.event.pull_request.number }}" + git push diff --git a/modules/tools/pom.xml b/modules/tools/pom.xml index a6225e3cc3ad8..35539210a9edc 100644 --- a/modules/tools/pom.xml +++ b/modules/tools/pom.xml @@ -199,5 +199,11 @@ common-junit48 ${surefire.version} + + + io.github.classgraph + classgraph + 4.8.179 + diff --git a/modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java b/modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java new file mode 100644 index 0000000000000..2583c89f66569 --- /dev/null +++ b/modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.tools.protectedclasses; + +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Paths; +import java.util.TreeSet; +import io.github.classgraph.ClassGraph; + +/** + * Generates a sorted list of protected classes — classes from {@code Message} and {@code IgniteDataTransferObject} + * hierarchies, as well as classes containing {@code @Order}-annotated fields, that are part of the wire protocol + * and require special review when modified. + *

+ * Usage: {@code java ProtectedClassesGenerator } + */ +public class ProtectedClassesGenerator { + /** Base interface for communication messages. */ + private static final String MESSAGE_INTERFACE = "org.apache.ignite.plugin.extensions.communication.Message"; + + /** Base class for data transfer objects. */ + private static final String IDTO_CLASS = "org.apache.ignite.internal.dto.IgniteDataTransferObject"; + + /** Annotation that marks serialized fields in Message classes. */ + private static final String ORDER_ANNOTATION = "org.apache.ignite.internal.Order"; + + /** @param args */ + public static void main(String[] args) throws IOException { + if (args.length < 1) { + System.err.println("Usage: ProtectedClassesGenerator "); + System.exit(1); + } + + var outputPath = Paths.get(args[0]); + + var protectedClasses = new TreeSet(); + + try (var scanResult = new ClassGraph() + .enableClassInfo() + .enableFieldInfo() + .enableAnnotationInfo() + .acceptPackages("org.apache.ignite") + .scan() + ) { + scanResult.getClassesImplementing(MESSAGE_INTERFACE) + .forEach(cls -> protectedClasses.add(cls.getName())); + + scanResult.getSubclasses(IDTO_CLASS) + .forEach(cls -> protectedClasses.add(cls.getName())); + + // Include classes that have fields annotated with @Order. + scanResult.getClassesWithFieldAnnotation(ORDER_ANNOTATION) + .forEach(cls -> protectedClasses.add(cls.getName())); + + // Include the base classes themselves. + protectedClasses.add(MESSAGE_INTERFACE); + protectedClasses.add(IDTO_CLASS); + } + + try (var writer = new PrintWriter(outputPath.toFile())) { + writer.println("# Auto-generated list of protected classes (Message/IgniteDataTransferObject hierarchy)."); + writer.println("# Changes to these classes require special review."); + writer.println("# Regenerated automatically after merging PRs with 'protected-classes' label."); + + for (var clazz : protectedClasses) { + writer.println(clazz); + } + } + + System.out.println("Generated " + outputPath + " with " + protectedClasses.size() + " protected classes."); + } +} From 15a66560562141ded337f5b87c8c36616d980304 Mon Sep 17 00:00:00 2001 From: Alex Abashev Date: Thu, 5 Mar 2026 15:54:16 +0300 Subject: [PATCH 2/3] Skip license check --- parent/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/parent/pom.xml b/parent/pom.xml index c348925760738..c8cef2c87b102 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -884,6 +884,7 @@ docs/_docs/images/** docs/Gemfile docs/assets/js/anchor.min.js + .github/protected-classes.txt From c91f6dfb4ef46ec8cd500d1e8a50dcf2f020e2a8 Mon Sep 17 00:00:00 2001 From: Alex Abashev Date: Tue, 10 Mar 2026 17:28:51 +0300 Subject: [PATCH 3/3] Remove a file with protected classes, just parse diff for Order annotation --- .github/protected-classes.txt | 409 ------------------ .github/workflows/check-protected-classes.yml | 36 +- .../workflows/update-protected-classes.yml | 58 --- modules/tools/pom.xml | 6 - .../ProtectedClassesGenerator.java | 88 ---- parent/pom.xml | 1 - 6 files changed, 16 insertions(+), 582 deletions(-) delete mode 100644 .github/protected-classes.txt delete mode 100644 .github/workflows/update-protected-classes.yml delete mode 100644 modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java diff --git a/.github/protected-classes.txt b/.github/protected-classes.txt deleted file mode 100644 index b6535e17b0c6d..0000000000000 --- a/.github/protected-classes.txt +++ /dev/null @@ -1,409 +0,0 @@ -# Auto-generated list of protected classes (Message/IgniteDataTransferObject hierarchy). -# Changes to these classes require special review. -# Regenerated automatically after merging PRs with 'protected-classes' label. -org.apache.ignite.internal.ExchangeInfo -org.apache.ignite.internal.ExecutorAwareMessage -org.apache.ignite.internal.GridJobCancelRequest -org.apache.ignite.internal.GridJobExecuteRequest -org.apache.ignite.internal.GridJobExecuteResponse -org.apache.ignite.internal.GridJobSiblingsRequest -org.apache.ignite.internal.GridJobSiblingsResponse -org.apache.ignite.internal.GridTaskCancelRequest -org.apache.ignite.internal.GridTaskSessionRequest -org.apache.ignite.internal.IgniteDiagnosticRequest -org.apache.ignite.internal.IgniteDiagnosticRequest$DiagnosticBaseInfo -org.apache.ignite.internal.IgniteDiagnosticResponse -org.apache.ignite.internal.TxEntriesInfo -org.apache.ignite.internal.TxInfo -org.apache.ignite.internal.cache.query.index.IndexKeyTypeMessage -org.apache.ignite.internal.cache.query.index.IndexQueryResultMeta -org.apache.ignite.internal.cache.query.index.sorted.DurableBackgroundCleanupIndexTreeTaskV2 -org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition -org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings -org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesResult -org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionGroup -org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionNode -org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionPartition -org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTaskResult -org.apache.ignite.internal.commandline.cache.reset_lost_partitions.CacheResetLostPartitionsTaskResult -org.apache.ignite.internal.dto.IgniteDataTransferObject -org.apache.ignite.internal.management.ChangeTagCommandArg -org.apache.ignite.internal.management.ClusterChangeTagTaskResult -org.apache.ignite.internal.management.DeactivateCommandArg -org.apache.ignite.internal.management.SetStateCommandArg -org.apache.ignite.internal.management.ShutdownPolicyCommandArg -org.apache.ignite.internal.management.ShutdownPolicyTaskResult -org.apache.ignite.internal.management.SystemViewCommandArg -org.apache.ignite.internal.management.SystemViewTaskResult -org.apache.ignite.internal.management.api.NoArg -org.apache.ignite.internal.management.baseline.BaselineAddCommandArg -org.apache.ignite.internal.management.baseline.BaselineAutoAdjustCommandArg -org.apache.ignite.internal.management.baseline.BaselineAutoAdjustSettings -org.apache.ignite.internal.management.baseline.BaselineCommand$BaselineTaskArg -org.apache.ignite.internal.management.baseline.BaselineCommandArg -org.apache.ignite.internal.management.baseline.BaselineNode -org.apache.ignite.internal.management.baseline.BaselineNode$ResolvedAddresses -org.apache.ignite.internal.management.baseline.BaselineRemoveCommandArg -org.apache.ignite.internal.management.baseline.BaselineSetCommandArg -org.apache.ignite.internal.management.baseline.BaselineTaskResult -org.apache.ignite.internal.management.baseline.BaselineVersionCommandArg -org.apache.ignite.internal.management.cache.CacheAffinityConfiguration -org.apache.ignite.internal.management.cache.CacheClearCommandArg -org.apache.ignite.internal.management.cache.CacheConfiguration -org.apache.ignite.internal.management.cache.CacheConfigurationCollectorTaskArg -org.apache.ignite.internal.management.cache.CacheContentionCommandArg -org.apache.ignite.internal.management.cache.CacheCreateCommandArg -org.apache.ignite.internal.management.cache.CacheDestroyCommandArg -org.apache.ignite.internal.management.cache.CacheDistributionCommandArg -org.apache.ignite.internal.management.cache.CacheEvictionConfiguration -org.apache.ignite.internal.management.cache.CacheFindGarbageCommandArg -org.apache.ignite.internal.management.cache.CacheIdleVerifyCommandArg -org.apache.ignite.internal.management.cache.CacheIdleVerifyDumpCommandArg -org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommandArg -org.apache.ignite.internal.management.cache.CacheIndexesListCommandArg -org.apache.ignite.internal.management.cache.CacheIndexesRebuildStatusCommandArg -org.apache.ignite.internal.management.cache.CacheInfo -org.apache.ignite.internal.management.cache.CacheJdbcType -org.apache.ignite.internal.management.cache.CacheJdbcTypeField -org.apache.ignite.internal.management.cache.CacheListCommandArg -org.apache.ignite.internal.management.cache.CacheMetricsCommandArg -org.apache.ignite.internal.management.cache.CacheNearConfiguration -org.apache.ignite.internal.management.cache.CacheRebalanceConfiguration -org.apache.ignite.internal.management.cache.CacheResetLostPartitionsCommandArg -org.apache.ignite.internal.management.cache.CacheScheduleIndexesRebuildCommandArg -org.apache.ignite.internal.management.cache.CacheStoreConfiguration -org.apache.ignite.internal.management.cache.CacheValidateIndexesCommandArg -org.apache.ignite.internal.management.cache.ContentionJobResult -org.apache.ignite.internal.management.cache.ContentionTaskResult -org.apache.ignite.internal.management.cache.FindAndDeleteGarbageInPersistenceJobResult -org.apache.ignite.internal.management.cache.FindAndDeleteGarbageInPersistenceTaskResult -org.apache.ignite.internal.management.cache.IdleVerifyDumpResult -org.apache.ignite.internal.management.cache.IdleVerifyResult -org.apache.ignite.internal.management.cache.IndexForceRebuildTaskRes -org.apache.ignite.internal.management.cache.IndexIntegrityCheckIssue -org.apache.ignite.internal.management.cache.IndexListInfoContainer -org.apache.ignite.internal.management.cache.IndexRebuildStatusInfoContainer -org.apache.ignite.internal.management.cache.IndexValidationIssue -org.apache.ignite.internal.management.cache.QueryConfiguration -org.apache.ignite.internal.management.cache.QueryEntity -org.apache.ignite.internal.management.cache.QueryIndex -org.apache.ignite.internal.management.cache.QueryIndexField -org.apache.ignite.internal.management.cache.ScheduleIndexRebuildJobRes -org.apache.ignite.internal.management.cache.ScheduleIndexRebuildTaskRes -org.apache.ignite.internal.management.cache.ValidateIndexesCheckSizeIssue -org.apache.ignite.internal.management.cache.ValidateIndexesCheckSizeResult -org.apache.ignite.internal.management.cache.ValidateIndexesJobResult -org.apache.ignite.internal.management.cache.ValidateIndexesPartitionResult -org.apache.ignite.internal.management.cache.ValidateIndexesTaskResult -org.apache.ignite.internal.management.cache.ViewCacheTaskResult -org.apache.ignite.internal.management.cache.scan.CacheScanCommandArg -org.apache.ignite.internal.management.cache.scan.CacheScanTaskResult -org.apache.ignite.internal.management.cdc.CdcDeleteLostSegmentLinksCommandArg -org.apache.ignite.internal.management.cdc.CdcResendCommandArg -org.apache.ignite.internal.management.checkpoint.CheckpointCommandArg -org.apache.ignite.internal.management.consistency.ConsistencyRepairCommandArg -org.apache.ignite.internal.management.consistency.ConsistencyTaskResult -org.apache.ignite.internal.management.defragmentation.DefragmentationCommand$DefragmentationCancelCommandArg -org.apache.ignite.internal.management.defragmentation.DefragmentationCommand$DefragmentationStatusCommandArg -org.apache.ignite.internal.management.defragmentation.DefragmentationScheduleCommandArg -org.apache.ignite.internal.management.defragmentation.DefragmentationTaskResult -org.apache.ignite.internal.management.diagnostic.ConnectivityResult -org.apache.ignite.internal.management.diagnostic.DiagnosticConnectivityCommandArg -org.apache.ignite.internal.management.diagnostic.DiagnosticPagelocksCommandArg -org.apache.ignite.internal.management.diagnostic.PageLocksResult -org.apache.ignite.internal.management.encryption.CacheGroupEncryptionTaskResult -org.apache.ignite.internal.management.encryption.EncryptionCacheGroupArg -org.apache.ignite.internal.management.encryption.EncryptionChangeMasterKeyCommandArg -org.apache.ignite.internal.management.encryption.EncryptionKeyIdsTask$EncryptionKeyIdsResult -org.apache.ignite.internal.management.encryption.EncryptionReencryptionRateLimitCommandArg -org.apache.ignite.internal.management.encryption.ReencryptionRateTask$ReencryptionRateJobResult -org.apache.ignite.internal.management.encryption.ReencryptionStatusTask$ReencryptionStatusResult -org.apache.ignite.internal.management.encryption.ReencryptionSuspendTask$ReencryptionSuspendResumeJobResult -org.apache.ignite.internal.management.kill.KillClientCommandArg -org.apache.ignite.internal.management.kill.KillComputeCommandArg -org.apache.ignite.internal.management.kill.KillContinuousCommandArg -org.apache.ignite.internal.management.kill.KillScanCommandArg -org.apache.ignite.internal.management.kill.KillServiceCommandArg -org.apache.ignite.internal.management.kill.KillSnapshotCommandArg -org.apache.ignite.internal.management.kill.KillSqlCommandArg -org.apache.ignite.internal.management.kill.KillTransactionCommandArg -org.apache.ignite.internal.management.kill.SnapshotCancelTask$CancelSnapshotArg -org.apache.ignite.internal.management.meta.MetaDetailsCommandArg -org.apache.ignite.internal.management.meta.MetaRemoveCommandArg -org.apache.ignite.internal.management.meta.MetaUpdateCommandArg -org.apache.ignite.internal.management.meta.MetadataListResult -org.apache.ignite.internal.management.meta.MetadataMarshalled -org.apache.ignite.internal.management.metric.MetricCommandArg -org.apache.ignite.internal.management.metric.MetricConfigureHistogramCommandArg -org.apache.ignite.internal.management.metric.MetricConfigureHitrateCommandArg -org.apache.ignite.internal.management.metric.MetricConfigureMaxValueCommandArg -org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsRotateCommandArg -org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsStartCommandArg -org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsStatusCommandArg -org.apache.ignite.internal.management.performancestatistics.PerformanceStatisticsCommand$PerformanceStatisticsStopCommandArg -org.apache.ignite.internal.management.persistence.PersistenceBackupCachesTaskArg -org.apache.ignite.internal.management.persistence.PersistenceCleanCachesTaskArg -org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceBackupAllTaskArg -org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceBackupCorruptedTaskArg -org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceCleanAllTaskArg -org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceCleanCorruptedTaskArg -org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceInfoTaskArg -org.apache.ignite.internal.management.persistence.PersistenceCommand$PersistenceTaskArg -org.apache.ignite.internal.management.persistence.PersistenceTaskResult -org.apache.ignite.internal.management.property.PropertiesListResult -org.apache.ignite.internal.management.property.PropertyGetCommandArg -org.apache.ignite.internal.management.property.PropertyListCommandArg -org.apache.ignite.internal.management.property.PropertyOperationResult -org.apache.ignite.internal.management.property.PropertySetCommandArg -org.apache.ignite.internal.management.rollingupgrade.RollingUpgradeEnableCommandArg -org.apache.ignite.internal.management.rollingupgrade.RollingUpgradeStatusNode -org.apache.ignite.internal.management.rollingupgrade.RollingUpgradeTaskResult -org.apache.ignite.internal.management.snapshot.SnapshotCancelCommandArg -org.apache.ignite.internal.management.snapshot.SnapshotCheckCommandArg -org.apache.ignite.internal.management.snapshot.SnapshotCreateCommandArg -org.apache.ignite.internal.management.snapshot.SnapshotRestoreCommandArg -org.apache.ignite.internal.management.tracing.TracingConfigurationCommand$TracingConfigurationCommandArg -org.apache.ignite.internal.management.tracing.TracingConfigurationCommand$TracingConfigurationResetAllCommandArg -org.apache.ignite.internal.management.tracing.TracingConfigurationCommand$TracingConfigurationResetCommandArg -org.apache.ignite.internal.management.tracing.TracingConfigurationGetAllCommandArg -org.apache.ignite.internal.management.tracing.TracingConfigurationGetCommandArg -org.apache.ignite.internal.management.tracing.TracingConfigurationItem -org.apache.ignite.internal.management.tracing.TracingConfigurationSetCommandArg -org.apache.ignite.internal.management.tracing.TracingConfigurationTaskResult -org.apache.ignite.internal.management.tx.TxCommand$AbstractTxCommandArg -org.apache.ignite.internal.management.tx.TxCommandArg -org.apache.ignite.internal.management.tx.TxInfo -org.apache.ignite.internal.management.tx.TxInfoCommandArg -org.apache.ignite.internal.management.tx.TxTaskResult -org.apache.ignite.internal.management.tx.TxVerboseInfo -org.apache.ignite.internal.management.tx.TxVerboseKey -org.apache.ignite.internal.management.wal.ClusterNode -org.apache.ignite.internal.management.wal.WalDeleteCommandArg -org.apache.ignite.internal.management.wal.WalDisableCommand$WalDisableCommandArg -org.apache.ignite.internal.management.wal.WalEnableCommand$WalEnableCommandArg -org.apache.ignite.internal.management.wal.WalPrintCommand$WalPrintCommandArg -org.apache.ignite.internal.management.wal.WalSetStateTaskResult -org.apache.ignite.internal.management.wal.WalStateCommandArg -org.apache.ignite.internal.management.wal.WalTaskResult -org.apache.ignite.internal.managers.checkpoint.GridCheckpointRequest -org.apache.ignite.internal.managers.communication.CompressedMessage -org.apache.ignite.internal.managers.communication.ErrorMessage -org.apache.ignite.internal.managers.communication.GridIoMessage -org.apache.ignite.internal.managers.communication.GridIoSecurityAwareMessage -org.apache.ignite.internal.managers.communication.GridIoUserMessage -org.apache.ignite.internal.managers.communication.IgniteIoTestMessage -org.apache.ignite.internal.managers.communication.SessionChannelMessage -org.apache.ignite.internal.managers.deployment.GridDeploymentInfoBean -org.apache.ignite.internal.managers.deployment.GridDeploymentRequest -org.apache.ignite.internal.managers.deployment.GridDeploymentResponse -org.apache.ignite.internal.managers.discovery.SecurityAwareCustomMessageWrapper -org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyRequest -org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyResponse -org.apache.ignite.internal.managers.eventstorage.GridEventStorageMessage -org.apache.ignite.internal.processors.affinity.GridAffinityAssignmentV2 -org.apache.ignite.internal.processors.authentication.UserAuthenticateRequestMessage -org.apache.ignite.internal.processors.authentication.UserAuthenticateResponseMessage -org.apache.ignite.internal.processors.authentication.UserManagementOperationFinishedMessage -org.apache.ignite.internal.processors.cache.CacheEntryInfoCollection -org.apache.ignite.internal.processors.cache.CacheEntryPredicate -org.apache.ignite.internal.processors.cache.CacheEntryPredicateAdapter -org.apache.ignite.internal.processors.cache.CacheEvictionEntry -org.apache.ignite.internal.processors.cache.CacheInvokeDirectResult -org.apache.ignite.internal.processors.cache.CacheMetricsSnapshot -org.apache.ignite.internal.processors.cache.CacheStatisticsModeChangeMessage -org.apache.ignite.internal.processors.cache.ClearCachesTaskResult -org.apache.ignite.internal.processors.cache.GridCacheEntryInfo -org.apache.ignite.internal.processors.cache.GridCacheGroupIdMessage -org.apache.ignite.internal.processors.cache.GridCacheIdMessage -org.apache.ignite.internal.processors.cache.GridCacheMessage -org.apache.ignite.internal.processors.cache.GridCacheReturn -org.apache.ignite.internal.processors.cache.GridChangeGlobalStateMessageResponse -org.apache.ignite.internal.processors.cache.TxTimeoutOnPartitionMapExchangeChangeMessage -org.apache.ignite.internal.processors.cache.WalStateAbstractMessage -org.apache.ignite.internal.processors.cache.WalStateAckMessage -org.apache.ignite.internal.processors.cache.WalStateFinishMessage -org.apache.ignite.internal.processors.cache.WalStateProposeMessage -org.apache.ignite.internal.processors.cache.binary.BinaryMetadataVersionInfo -org.apache.ignite.internal.processors.cache.binary.MetadataRemoveAcceptedMessage -org.apache.ignite.internal.processors.cache.binary.MetadataRemoveProposedMessage -org.apache.ignite.internal.processors.cache.binary.MetadataRequestMessage -org.apache.ignite.internal.processors.cache.binary.MetadataResponseMessage -org.apache.ignite.internal.processors.cache.binary.MetadataUpdateAcceptedMessage -org.apache.ignite.internal.processors.cache.distributed.GridCacheTtlUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryRequest -org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryResponse -org.apache.ignite.internal.processors.cache.distributed.GridDistributedBaseMessage -org.apache.ignite.internal.processors.cache.distributed.GridDistributedLockRequest -org.apache.ignite.internal.processors.cache.distributed.GridDistributedLockResponse -org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxFinishRequest -org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxFinishResponse -org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxPrepareRequest -org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxPrepareResponse -org.apache.ignite.internal.processors.cache.distributed.GridNearUnlockRequest -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAffinityAssignmentRequest -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAffinityAssignmentResponse -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLockRequest -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLockResponse -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishRequest -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishResponse -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxOnePhaseCommitAckRequest -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareRequest -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareResponse -org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtUnlockRequest -org.apache.ignite.internal.processors.cache.distributed.dht.PartitionUpdateCountersMessage -org.apache.ignite.internal.processors.cache.distributed.dht.TransactionAttributesAwareRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.AtomicApplicationAttributesAwareRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicDeferredUpdateResponse -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicNearResponse -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicSingleUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicUpdateResponse -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicCheckUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicFullUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFilterRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateInvokeRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateRequest -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateResponse -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.NearCacheUpdates -org.apache.ignite.internal.processors.cache.distributed.dht.atomic.UpdateErrors -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CacheGroupAffinityMessage -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CachePartitionFullCountersMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CachePartitionPartialCountersMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.CachePartitionsToReloadMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysRequest -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtForceKeysResponse -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemandMessage -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionExchangeId -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsAbstractMessage -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleMessage -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleRequest -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GroupPartitionIdPair -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtDemandedPartitionsMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtPartitionCountersMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtPartitionHistorySuppliersMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtPartitionsToReloadMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IntLongMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.PartitionReservationsMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.PartitionsToReload -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.latch.LatchAckMessage -org.apache.ignite.internal.processors.cache.distributed.near.CacheVersionedValue -org.apache.ignite.internal.processors.cache.distributed.near.GridNearGetRequest -org.apache.ignite.internal.processors.cache.distributed.near.GridNearGetResponse -org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockRequest -org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockResponse -org.apache.ignite.internal.processors.cache.distributed.near.GridNearSingleGetRequest -org.apache.ignite.internal.processors.cache.distributed.near.GridNearSingleGetResponse -org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishRequest -org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishResponse -org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxPrepareRequest -org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxPrepareResponse -org.apache.ignite.internal.processors.cache.persistence.checkpoint.EarliestCheckpointMapSnapshot -org.apache.ignite.internal.processors.cache.persistence.checkpoint.EarliestCheckpointMapSnapshot$GroupStateSnapshot -org.apache.ignite.internal.processors.cache.persistence.snapshot.IncrementalSnapshotAwareMessage -org.apache.ignite.internal.processors.cache.persistence.snapshot.SnapshotPartitionsVerifyResult -org.apache.ignite.internal.processors.cache.query.GridCacheQueryRequest -org.apache.ignite.internal.processors.cache.query.GridCacheQueryResponse -org.apache.ignite.internal.processors.cache.query.GridCacheSqlQuery -org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryBatchAck -org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryEntry -org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry -org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey -org.apache.ignite.internal.processors.cache.transactions.TxEntryValueHolder -org.apache.ignite.internal.processors.cache.transactions.TxLock -org.apache.ignite.internal.processors.cache.transactions.TxLockList -org.apache.ignite.internal.processors.cache.transactions.TxLocksRequest -org.apache.ignite.internal.processors.cache.transactions.TxLocksResponse -org.apache.ignite.internal.processors.cache.verify.PartitionHashRecord -org.apache.ignite.internal.processors.cache.verify.TransactionsHashRecord -org.apache.ignite.internal.processors.cache.version.GridCacheRawVersionedEntry -org.apache.ignite.internal.processors.cache.version.GridCacheVersion -org.apache.ignite.internal.processors.cache.version.GridCacheVersionEx -org.apache.ignite.internal.processors.cluster.CacheMetricsMessage -org.apache.ignite.internal.processors.cluster.ClusterMetricsUpdateMessage -org.apache.ignite.internal.processors.cluster.NodeFullMetricsMessage -org.apache.ignite.internal.processors.cluster.NodeMetricsMessage -org.apache.ignite.internal.processors.continuous.ContinuousRoutineStartResultMessage -org.apache.ignite.internal.processors.continuous.GridContinuousMessage -org.apache.ignite.internal.processors.datastreamer.DataStreamerEntry -org.apache.ignite.internal.processors.datastreamer.DataStreamerRequest -org.apache.ignite.internal.processors.datastreamer.DataStreamerResponse -org.apache.ignite.internal.processors.marshaller.MappingProposedMessage -org.apache.ignite.internal.processors.marshaller.MissingMappingRequestMessage -org.apache.ignite.internal.processors.marshaller.MissingMappingResponseMessage -org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageVersion -org.apache.ignite.internal.processors.odbc.ClientMessage -org.apache.ignite.internal.processors.query.aware.IndexRebuildCacheInfo -org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryCancelRequest -org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryFailResponse -org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageRequest -org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageResponse -org.apache.ignite.internal.processors.query.messages.GridQueryKillRequest -org.apache.ignite.internal.processors.query.messages.GridQueryKillResponse -org.apache.ignite.internal.processors.query.schema.message.SchemaAbstractDiscoveryMessage -org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessage -org.apache.ignite.internal.processors.query.schema.message.SchemaOperationStatusMessage -org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessage -org.apache.ignite.internal.processors.query.stat.messages.StatisticsColumnData -org.apache.ignite.internal.processors.query.stat.messages.StatisticsDecimalMessage -org.apache.ignite.internal.processors.query.stat.messages.StatisticsKeyMessage -org.apache.ignite.internal.processors.query.stat.messages.StatisticsObjectData -org.apache.ignite.internal.processors.query.stat.messages.StatisticsRequest -org.apache.ignite.internal.processors.query.stat.messages.StatisticsResponse -org.apache.ignite.internal.processors.rest.handlers.task.GridTaskResultRequest -org.apache.ignite.internal.processors.rest.handlers.task.GridTaskResultResponse -org.apache.ignite.internal.processors.service.ServiceDeploymentProcessId -org.apache.ignite.internal.processors.service.ServiceSingleNodeDeploymentResult -org.apache.ignite.internal.processors.service.ServiceSingleNodeDeploymentResultBatch -org.apache.ignite.internal.util.GridByteArrayList -org.apache.ignite.internal.util.GridPartitionStateMap -org.apache.ignite.internal.util.UUIDCollectionMessage -org.apache.ignite.internal.util.distributed.SingleNodeMessage -org.apache.ignite.internal.visor.VisorTaskArgument -org.apache.ignite.internal.visor.VisorTaskResult -org.apache.ignite.internal.visor.compute.VisorComputeCancelSessionsTaskArg -org.apache.ignite.internal.visor.misc.VisorIdAndTagViewTaskResult -org.apache.ignite.plugin.extensions.communication.Message -org.apache.ignite.spi.collision.jobstealing.JobStealingRequest -org.apache.ignite.spi.communication.tcp.internal.TcpConnectionIndexAwareMessage -org.apache.ignite.spi.communication.tcp.internal.TcpInverseConnectionResponseMessage -org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage -org.apache.ignite.spi.communication.tcp.messages.HandshakeWaitMessage -org.apache.ignite.spi.communication.tcp.messages.NodeIdMessage -org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage -org.apache.ignite.spi.discovery.tcp.internal.DiscoveryDataPacket -org.apache.ignite.spi.discovery.tcp.messages.InetAddressMessage -org.apache.ignite.spi.discovery.tcp.messages.InetSocketAddressMessage -org.apache.ignite.spi.discovery.tcp.messages.NodeSpecificData -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryAuthFailedMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCacheMetricsMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCheckFailedMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientAckResponse -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientMetricsUpdateMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientNodesMetricsMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingRequest -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingResponse -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryConnectionCheckMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDiscardMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDuplicateIdMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryHandshakeRequest -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryHandshakeResponse -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryJoinRequestMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryLoopbackProblemMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddFinishedMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFullMetricsMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeMetricsMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingRequest -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingResponse -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryRingLatencyCheckMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryServerOnlyCustomEventMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessage diff --git a/.github/workflows/check-protected-classes.yml b/.github/workflows/check-protected-classes.yml index f97a0dce99485..ce6538e234faa 100644 --- a/.github/workflows/check-protected-classes.yml +++ b/.github/workflows/check-protected-classes.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest name: Check protected classes steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 @@ -37,19 +37,21 @@ jobs: BASE_SHA=${{ github.event.pull_request.base.sha }} HEAD_SHA=${{ github.event.pull_request.head.sha }} - CHANGED=$(git diff --name-only --diff-filter=ACMR "$BASE_SHA"..."$HEAD_SHA" -- '*.java') - [ -z "$CHANGED" ] && exit 0 - HITS="" - while IFS= read -r file; do - FQN=$(echo "$file" | sed -n 's|.*/src/main/java/||p' | sed 's|/|.|g; s|\.java$||') - [ -z "$FQN" ] && continue - if grep -q "^${FQN}$" .github/protected-classes.txt 2>/dev/null; then + + # New and deleted files: check diff content for @Order annotation. + for file in $(git diff --name-only --no-renames --diff-filter=AD "$BASE_SHA"..."$HEAD_SHA" -- '*.java'); do + if git diff "$BASE_SHA"..."$HEAD_SHA" -- "$file" | grep -q 'org.apache.ignite.internal.Order'; then + HITS="${HITS}${file}\n" + fi + done + + # Modified files: check base version content for @Order annotation. + for file in $(git diff --name-only --no-renames --diff-filter=M "$BASE_SHA"..."$HEAD_SHA" -- '*.java'); do + if git show "${BASE_SHA}:${file}" 2>/dev/null | grep -q 'org.apache.ignite.internal.Order'; then HITS="${HITS}${file}\n" - elif grep -qE '@Order\(|@Argument\(' "$file" 2>/dev/null; then - HITS="${HITS}${file} (new, not in registry)\n" fi - done <<< "$CHANGED" + done if [ -n "$HITS" ]; then echo "affected=true" >> "$GITHUB_OUTPUT" @@ -58,7 +60,7 @@ jobs: - name: Comment on PR if: steps.check.outputs.affected == 'true' - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: script: | const fs = require('fs'); @@ -66,18 +68,12 @@ jobs: const body = [ '## Protected Classes Review Required', '', - 'This PR modifies protected classes (Message/IgniteDataTransferObject hierarchy).', + 'This PR modifies protected classes (with @Order annotation).', 'Changes to these classes can break rolling upgrade compatibility.', '', '**Affected files:**', hits.split('\n').map(f => '- `' + f.trim() + '`').join('\n'), '', - '**Checklist:**', - '- [ ] New fields added at the end (highest `@Order`)', - '- [ ] No existing fields removed or reordered', - '- [ ] `directType()` not changed', - '- [ ] Field types not changed in binary-incompatible way', - '- [ ] Rolling upgrade test covers this change', ].join('\n'); const { data: comments } = await github.rest.issues.listComments({ @@ -106,7 +102,7 @@ jobs: - name: Add label if: steps.check.outputs.affected == 'true' - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: script: | await github.rest.issues.addLabels({ diff --git a/.github/workflows/update-protected-classes.yml b/.github/workflows/update-protected-classes.yml deleted file mode 100644 index db0703e179c30..0000000000000 --- a/.github/workflows/update-protected-classes.yml +++ /dev/null @@ -1,58 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Update Protected Classes Registry -on: - pull_request: - types: [closed] - -jobs: - update-registry: - if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'protected-classes') - runs-on: ubuntu-latest - name: Update protected classes registry - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.base.ref }} - - - name: Setup java - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '11' - - - name: Build tools and dependencies - run: | - ./mvnw install -pl modules/tools -am -DskipTests -B -q - - - name: Copy dependencies - run: | - ./mvnw dependency:copy-dependencies -pl modules/tools -B -q - - - name: Generate protected-classes.txt - run: | - java -cp "modules/tools/target/classes:modules/tools/target/dependency/classgraph-*.jar:modules/core/target/classes:modules/core/target/dependency/*" \ - org.apache.ignite.tools.protectedclasses.ProtectedClassesGenerator \ - .github/protected-classes.txt - - - name: Commit and push if changed - run: | - git diff --quiet .github/protected-classes.txt && exit 0 - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git add .github/protected-classes.txt - git commit -m "Update .github/protected-classes.txt after #${{ github.event.pull_request.number }}" - git push diff --git a/modules/tools/pom.xml b/modules/tools/pom.xml index 35539210a9edc..a6225e3cc3ad8 100644 --- a/modules/tools/pom.xml +++ b/modules/tools/pom.xml @@ -199,11 +199,5 @@ common-junit48 ${surefire.version} - - - io.github.classgraph - classgraph - 4.8.179 - diff --git a/modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java b/modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java deleted file mode 100644 index 2583c89f66569..0000000000000 --- a/modules/tools/src/main/java/org/apache/ignite/tools/protectedclasses/ProtectedClassesGenerator.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.tools.protectedclasses; - -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Paths; -import java.util.TreeSet; -import io.github.classgraph.ClassGraph; - -/** - * Generates a sorted list of protected classes — classes from {@code Message} and {@code IgniteDataTransferObject} - * hierarchies, as well as classes containing {@code @Order}-annotated fields, that are part of the wire protocol - * and require special review when modified. - *

- * Usage: {@code java ProtectedClassesGenerator } - */ -public class ProtectedClassesGenerator { - /** Base interface for communication messages. */ - private static final String MESSAGE_INTERFACE = "org.apache.ignite.plugin.extensions.communication.Message"; - - /** Base class for data transfer objects. */ - private static final String IDTO_CLASS = "org.apache.ignite.internal.dto.IgniteDataTransferObject"; - - /** Annotation that marks serialized fields in Message classes. */ - private static final String ORDER_ANNOTATION = "org.apache.ignite.internal.Order"; - - /** @param args */ - public static void main(String[] args) throws IOException { - if (args.length < 1) { - System.err.println("Usage: ProtectedClassesGenerator "); - System.exit(1); - } - - var outputPath = Paths.get(args[0]); - - var protectedClasses = new TreeSet(); - - try (var scanResult = new ClassGraph() - .enableClassInfo() - .enableFieldInfo() - .enableAnnotationInfo() - .acceptPackages("org.apache.ignite") - .scan() - ) { - scanResult.getClassesImplementing(MESSAGE_INTERFACE) - .forEach(cls -> protectedClasses.add(cls.getName())); - - scanResult.getSubclasses(IDTO_CLASS) - .forEach(cls -> protectedClasses.add(cls.getName())); - - // Include classes that have fields annotated with @Order. - scanResult.getClassesWithFieldAnnotation(ORDER_ANNOTATION) - .forEach(cls -> protectedClasses.add(cls.getName())); - - // Include the base classes themselves. - protectedClasses.add(MESSAGE_INTERFACE); - protectedClasses.add(IDTO_CLASS); - } - - try (var writer = new PrintWriter(outputPath.toFile())) { - writer.println("# Auto-generated list of protected classes (Message/IgniteDataTransferObject hierarchy)."); - writer.println("# Changes to these classes require special review."); - writer.println("# Regenerated automatically after merging PRs with 'protected-classes' label."); - - for (var clazz : protectedClasses) { - writer.println(clazz); - } - } - - System.out.println("Generated " + outputPath + " with " + protectedClasses.size() + " protected classes."); - } -} diff --git a/parent/pom.xml b/parent/pom.xml index c8cef2c87b102..c348925760738 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -884,7 +884,6 @@ docs/_docs/images/** docs/Gemfile docs/assets/js/anchor.min.js - .github/protected-classes.txt