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."); + } +} 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