You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2020/02/28 23:25:01 UTC
[geode] branch feature/GEODE-7665 updated (dbe59ec -> 15c8003)
This is an automated email from the ASF dual-hosted git repository.
zhouxj pushed a change to branch feature/GEODE-7665
in repository https://gitbox.apache.org/repos/asf/geode.git.
omit dbe59ec GEODE-7684: Create messaging class for PR Clear (#4689)
omit d0daa20 GEODE-7683: introduce BR.cmnClearRegion
add d3ecaaa GEODE-7778: Add PUBLISH, SUBSCRIBE and UNSUBSCRIBE Redis commands (#4682)
add 1854423 GEODE-7796: CI failure in LocatorDUnitTest (#4693)
add 71e156a GEODE-7789: Cache DurableClienAttributes (#4687)
add 5dd7a84 GEODE-7756: Do not use authorization cache for CQs (#4677)
add 5d2b1d1 GEODE-7791: fix MergeLogsDistributedTest (#4697)
add 8c40d5e GEODE-7210: Fix RedundancyLevelPart1DUnitTest
add 5c6529a Geode 4263 (#4691)
add 1a0d976 GEODE-7727: modify sender thread to detect release of connection (#4629)
add 9f8a2ff GEODE-7800: Add Redis PSUBSCRIBE and PUNSUBSCRIBE commands (#4705)
add 7bde96a Fix for failing Postgres connector acceptance test (#4712)
add 54890b3 GEODE-7746: onServers function throws a NPE if the distributed system is shutdown (#4690)
add 71fafc8 Feature/geode 7796: CI hang in LocatorDUnitTest.testCrashLocatorMultipleTimes (#4706)
add 1befce1 GEODE-7798: Fix flaky PubSub test (#4714)
add 9ad6417 GEODE-7773: remove redundant addAll command (#4703)
add e2905f4 GEODE-7770: remove unused cache reference (#4700)
add d6c1497 GEODE-7769: use parseFloat instead of valueOf (#4699)
add bf3e280 GEODE-7768: remove redundant null checks (#4701)
add 2dae396 GEODE-7798: Ignore PubSubTest until the flakiness can be removed (#4721)
add b3d4458 GEODE-7774: Remove addAll in ReflectionLuceneSerializer (#4718)
add d5d3c78 GEODE-7550: Param to only list gw receivers or senders (#4429)
add 22403e0 GEODE-7799: Distribute rebalance status to other locators (#4692)
add b430b8b GEODE-7513: Fix PersistentColocatedPartitionedRegionDistributedTest (#4715)
add aff1549 GEODE-7635: Create DestroyRegionDuringGIIDistributedTest
add b082c03 GEODE-7803: provide undeprecated internal region create (#4722)
add 56f51e8 GEODE-7813: add Build-Java-Vendor to gfsh version --full (#4729)
add 0f9bbf0 GEODE-7798: Fix flakiness in PubSubTest (#4717)
add 0eb49ab Revert "GEODE-7727: modify sender thread to detect release of connection (#4629)" (#4726)
add 387848f GEODE-7810: Change alert listener connection warning from fatal (#4728)
add 7236070 GEODE-7784: Fix the test to compare unordered list of version tags
add 5f7312a GEODE-8616: Enabling SSL for Redis-API (#4733)
add 4cffa58 GEODE-6532: Use implementation, not compile, as build configuration (#4720)
add 449b752 Pin winrm-cli to last working SHA. Modify is-windows-ready script. (#4739)
add ddfee1c GEODE-7421: deploy jar by REST API/JAVA API for Management
add 9da2cd4 GEODE-6536: Added retry in borrowConnection/single hop (#4719)
add db86fae GEODE-7814: Avoid Messaging Unnecessary Allocations (#4731)
add 8498329 GEODE-7815: Document setting a GEODE_HOME env variable (#4732)
add 088e682 GEODE-7823: eliminate org.junit unavailable compile error in IntelliJ (#4742)
add 51a0c65 GEODE-7771: change getting cache in getLuceneIndex (#4702)
add ca7ccbc GEODE-7820: Avoid Unnecessary toArray Invocations (#4741)
add dfa3326 GEODE-7829: DEFAULT_ACK_WAIT_THRESHOLD inadvertently changed from 15 to 51 (#4746)
new 15c8003 GEODE-7683: introduce BR.cmnClearRegion
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (dbe59ec)
\
N -- N -- N refs/heads/feature/GEODE-7665 (15c8003)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../src/test/resources/expected-pom.xml | 16 +-
buildSrc/build.gradle | 14 +-
.../gradle/plugins/DependencyConstraints.groovy | 6 +-
ci/images/alpine-tools/Dockerfile | 11 +-
ci/scripts/create_instance.sh | 4 +-
.../geode-modules-session-internal/build.gradle | 8 +-
extensions/geode-modules-session/build.gradle | 38 +-
extensions/geode-modules-test/build.gradle | 11 +-
extensions/geode-modules-tomcat7/build.gradle | 40 +-
extensions/geode-modules-tomcat8/build.gradle | 53 +-
extensions/geode-modules-tomcat9/build.gradle | 32 +-
extensions/geode-modules/build.gradle | 41 +-
.../util/ClientServerSessionCacheDUnitTest.java | 4 +-
.../modules/session/bootstrap/AbstractCache.java | 4 +-
.../geode/modules/util/BootstrappingFunction.java | 3 +-
.../geode/modules/util/CreateRegionFunction.java | 37 +-
extensions/session-testing-war/build.gradle | 2 +-
geode-assembly/build.gradle | 119 +-
geode-assembly/geode-assembly-test/build.gradle | 1 +
.../ClusterManagementServiceBuilderDUnitTest.java | 7 +-
.../ClientClusterManagementServiceDunitTest.java | 13 +-
.../internal/rest/DeployToMultiGroupDUnitTest.java | 26 +-
.../rest/DeploymentManagementDUnitTest.java | 33 +-
.../rest/DeploymentManagementRedployDUnitTest.java | 269 ++++
.../DeploymentSemanticVersionJarDUnitTest.java | 224 +++
.../rest/ListIndexOnPartitionRegionTest.java | 4 +-
.../rest/RebalanceManagementDunitTest.java | 119 +-
...eployCommandRedeployDUnitTest_FunctionATemplate | 0
...eployCommandRedeployDUnitTest_FunctionBTemplate | 0
.../integrationTest/resources/assembly_content.txt | 3 +-
.../resources/dependency_classpath.txt | 2 +-
geode-common/build.gradle | 8 +-
geode-common/src/test/resources/expected-pom.xml | 2 +-
geode-concurrency-test/build.gradle | 6 +-
.../src/test/resources/expected-pom.xml | 4 +-
geode-connectors/build.gradle | 79 +-
.../geode/connectors/jdbc/internal/postgres.yml | 1 +
.../org/apache/geode/connectors/jdbc/postgres.yml | 1 +
.../src/test/resources/expected-pom.xml | 46 +-
geode-core/build.gradle | 80 +-
.../ResourceManagerWithQueryMonitorDUnitTest.java | 1482 +++++++++-----------
.../geode/cache30/TXDistributedDUnitTest.java | 36 +-
.../apache/geode/distributed/LocatorDUnitTest.java | 7 +-
.../distributed/internal/ProduceDateMessages.java | 2 +-
...ingGiiOplogWithMissingCreateRegressionTest.java | 23 +-
...ntServerTransactionFailoverDistributedTest.java | 2 +-
.../DestroyRegionDuringGIIDistributedTest.java | 787 +++++++++++
.../GiiDiskAccessExceptionRegressionTest.java | 28 +-
...tColocatedPartitionedRegionDistributedTest.java | 18 +-
.../sockets/RedundancyLevelPart1DUnitTest.java | 136 +-
.../pooling/ConnectionManagerImplTest.java | 32 +-
.../pooling/ConnectionManagerJUnitTest.java | 6 +-
.../AnalyzeManagementSerializablesJUnitTest.java | 7 +-
.../org/apache/geode/internal/DeployedJarTest.java | 12 +
.../LRUClearWithDiskRegionOpRegressionTest.java | 11 +-
.../apache/geode/internal/cache/PRTXJUnitTest.java | 14 +-
.../apache/geode/codeAnalysis/excludedClasses.txt | 2 +-
.../codeAnalysis/sanctionedDataSerializables.txt | 6 +-
.../alerting/internal/ClusterAlertMessaging.java | 25 +-
.../alerting/internal/spi/AlertingIOException.java | 27 +-
.../apache/geode/cache/DynamicRegionFactory.java | 50 +-
.../java/org/apache/geode/cache/RegionFactory.java | 25 +-
.../org/apache/geode/cache/RegionShortcut.java | 21 +-
.../cache/client/internal/ExecuteFunctionOp.java | 4 +
.../cache/client/internal/OpExecutorImpl.java | 2 +-
.../geode/cache/client/internal/PoolImpl.java | 8 +-
.../geode/cache/client/internal/QueryOp.java | 116 +-
.../client/internal/pooling/ConnectionManager.java | 5 +-
.../internal/pooling/ConnectionManagerImpl.java | 48 +-
.../cache/query/internal/AttributeDescriptor.java | 40 +-
.../geode/cache/query/internal/DefaultQuery.java | 124 +-
.../cache/query/internal/ExecutionContext.java | 12 +-
.../geode/cache/query/internal/MethodDispatch.java | 40 +-
.../query/internal/QueryExecutionContext.java | 10 +-
.../geode/cache/query/internal/QueryMonitor.java | 16 +-
.../internal/ClusterDistributionManager.java | 16 +-
.../geode/distributed/internal/Distribution.java | 9 +-
.../distributed/internal/DistributionImpl.java | 24 +-
.../distributed/internal/DistributionMessage.java | 61 +-
.../InternalConfigurationPersistenceService.java | 23 +-
.../internal/InternalDistributedSystem.java | 11 +-
.../distributed/internal/InternalLocator.java | 49 +-
.../membership/InternalDistributedMember.java | 32 +-
.../org/apache/geode/internal/DeployedJar.java | 11 +-
.../admin/ClientHealthMonitoringRegion.java | 18 +-
.../geode/internal/admin/remote/AdminRequest.java | 15 +-
.../geode/internal/admin/remote/AdminResponse.java | 12 +-
.../internal/admin/remote/CompactRequest.java | 7 +-
.../internal/admin/remote/RemoteApplicationVM.java | 2 +-
.../internal/admin/remote/ShutdownAllRequest.java | 3 +-
.../admin/statalerts/DummyStatisticInfoImpl.java | 2 +-
.../admin/statalerts/StatisticInfoImpl.java | 2 +-
.../geode/internal/cache/CacheFactoryStatics.java | 2 +-
.../geode/internal/cache/CacheServerImpl.java | 33 +-
.../apache/geode/internal/cache/FilterProfile.java | 2 +-
.../geode/internal/cache/GemFireCacheImpl.java | 8 +-
.../apache/geode/internal/cache/InternalCache.java | 9 +
.../internal/cache/InternalRegionArguments.java | 3 +
.../internal/cache/InternalRegionFactory.java | 242 ++++
.../internal/cache/PartitionedRegionHelper.java | 24 +-
.../geode/internal/cache/RegionFactoryImpl.java | 46 -
.../geode/internal/cache/StateFlushOperation.java | 2 +-
.../geode/internal/cache/TXCommitMessage.java | 2 +-
.../apache/geode/internal/cache/TXEntryState.java | 2 +-
.../org/apache/geode/internal/cache/TXState.java | 2 +-
.../cache/partitioned/PartitionMessage.java | 2 +-
.../internal/cache/partitioned/PutMessage.java | 3 +-
.../cache/tier/sockets/HAEventWrapper.java | 2 +-
.../internal/cache/tx/RemoteOperationMessage.java | 13 +-
.../cache/versions/RegionVersionHolder.java | 2 +-
.../internal/cache/wan/AbstractGatewaySender.java | 24 +-
.../wan/parallel/ParallelGatewaySenderQueue.java | 115 +-
.../cache/wan/serial/SerialGatewaySenderQueue.java | 50 +-
.../internal/cache/xmlcache/CacheCreation.java | 10 +-
.../org/apache/geode/internal/tcp/TCPConduit.java | 41 +-
.../management/internal/FederatingManager.java | 61 +-
.../geode/management/internal/LocalManager.java | 57 +-
.../geode/management/internal/RestAgent.java | 34 +-
.../api/LocatorClusterManagementService.java | 266 ++--
.../configuration/domain/Configuration.java | 8 +-
.../mutators/ConfigurationManager.java | 4 +-
.../configuration/mutators/DeploymentManager.java | 12 +-
.../realizers/ConfigurationRealizer.java | 6 +-
.../realizers/DeploymentRealizer.java | 43 +-
.../validators/DeploymentValidator.java | 46 +
.../functions/CacheRealizationFunction.java | 92 +-
.../geode/management/internal/i18n/CliStrings.java | 8 +
.../internal/messages/CompactRequest.java | 5 +-
.../operation/OperationHistoryManager.java | 155 +-
.../internal/operation/OperationManager.java | 43 +-
.../internal/operation/OperationState.java | 96 ++
.../internal/operation/OperationStateStore.java | 61 +
.../operation/RegionOperationStateStore.java | 110 ++
.../org/apache/geode/pdx/internal/PdxField.java | 2 +-
.../org/apache/geode/pdx/internal/PdxType.java | 2 +-
.../geode/pdx/internal/PeerTypeRegistration.java | 25 +-
.../sanctioned-geode-core-serializables.txt | 1 +
.../sanctioned-geode-management-serializables.txt | 7 +-
.../internal/ClusterAlertMessagingTest.java | 96 +-
.../internal/SerialAsyncEventQueueImplTest.java | 6 +-
.../client/internal/OpExecutorImplJUnitTest.java | 2 +-
.../query/internal/AttributeDescriptorTest.java | 93 +-
.../cache/query/internal/MethodDispatchTest.java | 103 +-
.../distributed/internal/DistributionTest.java | 32 +-
...igurationPersistenceServiceDeployedJarTest.java | 2 +-
.../membership/InternalDistributedMemberTest.java | 109 +-
.../internal/cache/InternalRegionFactoryTest.java | 103 ++
.../ParallelGatewaySenderQueueJUnitTest.java | 5 +-
.../apache/geode/internal/tcp/TCPConduitTest.java | 219 +++
.../management/internal/FederatingManagerTest.java | 46 +-
.../management/internal/LocalManagerTest.java | 43 +-
.../api/LocatorClusterManagementServiceTest.java | 98 +-
.../configuration/domain/ConfigurationTest.java | 16 +-
.../mutators/DeploymentManagerTest.java | 6 +-
.../realizers/DeploymentRealizerTest.java | 96 +-
.../validators/DeploymentValidatorTest.java | 97 ++
.../operation/OperationHistoryManagerTest.java | 227 +--
.../internal/operation/OperationManagerTest.java | 188 ++-
.../internal/operation/OperationStateTest.java | 117 ++
.../operation/RegionOperationStateStoreTest.java | 172 +++
.../pdx/internal/PeerTypeRegistrationTest.java | 18 +-
geode-core/src/test/resources/expected-pom.xml | 5 +
geode-cq/build.gradle | 66 +-
...tyExecutionContextTamperingDistributedTest.java | 8 +-
.../cache/PutAllClientServerDistributedTest.java | 5 +-
.../geode/cache/query/cq/internal/CqQueryImpl.java | 2 +-
geode-cq/src/test/resources/expected-pom.xml | 12 +-
.../getting_started/setup_classpath.html.md.erb | 5 +-
geode-docs/rest_apps/setup_config.html.md.erb | 4 +
.../gfsh/command-pages/list.html.md.erb | 6 +-
geode-dunit/build.gradle | 33 +-
.../geode/cache30/MultiVMRegionTestCase.java | 409 ------
.../commands/ExportLogsDistributedTestBase.java | 2 +-
.../geode/test/dunit/rules/CacheXmlRule.java | 230 +++
.../geode/test/dunit/rules/ClusterStartupRule.java | 4 +-
.../geode/test/greplogs/ExpectedStrings.java | 1 -
geode-dunit/src/test/resources/expected-pom.xml | 91 +-
geode-experimental-driver/build.gradle | 28 +-
.../experimental/driver/AuthorizationTest.java | 20 +-
.../src/test/resources/expected-pom.xml | 2 +-
geode-gfsh/build.gradle | 39 +-
.../cli/util/MergeLogsDistributedTest.java | 18 +-
.../ExportLogsFunctionIntegrationTest.java | 4 +-
.../cli/commands/DescribeMemberCommand.java | 2 +-
.../internal/cli/commands/ListGatewayCommand.java | 63 +-
.../internal/cli/functions/DeployFunction.java | 45 +-
.../internal/cli/functions/ExportLogsFunction.java | 25 +-
.../internal/web/http/support/HttpRequester.java | 8 +-
.../internal/web/shell/HttpOperationInvoker.java | 7 +-
.../ExportClusterConfigurationCommandTest.java | 4 +-
.../web/http/support/HttpRequesterTest.java | 6 +-
geode-gfsh/src/test/resources/expected-pom.xml | 62 +-
geode-http-service/build.gradle | 9 +-
.../src/test/resources/expected-pom.xml | 5 +
geode-junit/build.gradle | 43 +-
.../main/java/org/apache/geode/DeltaTestImpl.java | 2 +-
.../geode/cache/query/data/PortfolioData.java | 2 +-
.../ClusterManagementListResultAssert.java | 5 +
geode-junit/src/test/resources/expected-pom.xml | 42 +-
geode-log4j/build.gradle | 1 +
geode-log4j/src/test/resources/expected-pom.xml | 5 +
geode-logging/build.gradle | 26 +-
geode-lucene/build.gradle | 87 +-
geode-lucene/geode-lucene-test/build.gradle | 8 +-
.../lucene/internal/LuceneRegionListener.java | 6 +-
.../cache/lucene/internal/LuceneServiceImpl.java | 2 +-
.../internal/cli/LuceneListIndexCommand.java | 3 +-
.../internal/distributed/LuceneQueryFunction.java | 9 +-
.../serializer/ReflectionLuceneSerializer.java | 3 +-
.../internal/LuceneRegionListenerJUnitTest.java | 2 +-
.../PartitionedRepositoryManagerJUnitTest.java | 5 +-
.../distributed/LuceneQueryFunctionJUnitTest.java | 2 +-
geode-lucene/src/test/resources/expected-pom.xml | 53 +-
geode-management/build.gradle | 16 +-
.../api/ClusterManagementListOperationsResult.java | 14 +-
.../management/api/ClusterManagementOperation.java | 7 +-
.../api/ClusterManagementOperationResult.java | 100 +-
.../management/api/ClusterManagementService.java | 30 +-
.../api/ClusterManagementServiceTransport.java | 28 +-
.../apache/geode/management/api/EntityInfo.java | 2 +-
...tTemplateClusterManagementServiceTransport.java | 142 +-
.../geode/management/configuration/Deployment.java | 42 +-
.../geode/management/configuration/HasFile.java | 16 +-
.../internal/ClientClusterManagementService.java | 71 +-
.../ClusterManagementOperationStatusResult.java | 74 -
.../internal/CompletableFutureProxy.java | 116 --
.../internal/api/BaseManagementServiceBuilder.java | 1 +
.../management/operation/RebalanceOperation.java | 11 +
.../geode/management/runtime/OperationResult.java | 4 +-
.../management/runtime/RebalanceRegionResult.java | 4 +-
.../api/ClusterManagementOperationResultTest.java | 30 +-
...plateClusterManagementServiceTransportTest.java | 129 ++
.../ClusterManagementServiceBuilderTest.java | 7 +-
.../management/configuration/DeploymentTest.java | 14 +-
.../ClientClusterManagementServiceTest.java | 227 +++
...ClusterManagementOperationStatusResultTest.java | 63 -
.../src/test/resources/expected-pom.xml | 12 +-
geode-membership/build.gradle | 26 +-
.../internal/membership/api/MembershipConfig.java | 2 +-
.../internal/membership/gms/GMSMemberData.java | 2 +-
.../internal/membership/gms/GMSMembership.java | 6 +-
.../gms/locator/MembershipLocatorImpl.java | 7 +-
geode-protobuf/build.gradle | 34 +-
geode-protobuf/geode-protobuf-test/build.gradle | 4 +-
geode-protobuf/src/test/resources/expected-pom.xml | 30 +-
geode-pulse/build.gradle | 98 +-
geode-pulse/geode-pulse-test/build.gradle | 20 +-
geode-rebalancer/build.gradle | 22 +-
.../src/test/resources/expected-pom.xml | 24 +-
geode-redis/build.gradle | 31 +-
.../org/apache/geode/redis/MockSubscriber.java | 32 +-
.../org/apache/geode/redis/PubSubDUnitTest.java | 91 ++
.../java/org/apache/geode/redis/GeoJUnitTest.java | 2 +-
.../java/org/apache/geode/redis/PubSubTest.java | 298 ++++
.../java/org/apache/geode/redis/SSLTest.java | 79 ++
.../apache/geode/redis/mocks/MockSubscriber.java | 31 +-
.../org/apache/geode/redis/GeodeRedisServer.java | 171 ++-
.../geode/redis/internal/AbstractSubscription.java | 91 ++
.../geode/redis/internal/ChannelSubscription.java | 53 +
.../org/apache/geode/redis/internal/Client.java | 33 +-
.../org/apache/geode/redis/internal/Coder.java | 53 +-
.../redis/internal/ExecutionHandlerContext.java | 60 +-
.../org/apache/geode/redis/internal/GeoCoder.java | 4 +-
.../geode/redis/internal/PatternSubscription.java | 55 +
.../org/apache/geode/redis/internal/PubSub.java | 72 +
.../apache/geode/redis/internal/PubSubImpl.java | 129 ++
.../apache/geode/redis/internal/PublishResult.java | 28 +-
.../geode/redis/internal/RedisCommandType.java | 122 ++
.../geode/redis/internal/RedisConstants.java | 2 +
.../apache/geode/redis/internal/RedisDataType.java | 14 +-
.../apache/geode/redis/internal/Subscription.java | 51 +
.../apache/geode/redis/internal/Subscriptions.java | 84 ++
.../redis/internal/executor/AbstractExecutor.java | 2 +-
.../executor/pubsub/PsubscribeExecutor.java | 70 +
.../internal/executor/pubsub/PublishExecutor.java | 51 +
.../executor/pubsub/PunsubscribeExecutor.java | 56 +
.../executor/pubsub/SubscribeExecutor.java | 67 +
.../executor/pubsub/UnsubscribeExecutor.java | 54 +
.../internal/org/apache/hadoop/fs/GlobPattern.java | 35 +-
.../sanctioned-geode-redis-serializables.txt | 7 +
.../geode/redis/internal/PubSubImplJUnitTest.java | 52 +
.../geode/redis/internal/SubscriptionsTest.java | 170 +++
geode-redis/src/test/resources/expected-pom.xml | 36 +-
geode-serialization/build.gradle | 4 +-
geode-tcp-server/build.gradle | 8 +-
.../distributed/internal/tcpserver/TcpServer.java | 4 +-
geode-wan/build.gradle | 72 +-
.../wancommand/ListGatewaysCommandDUnitTest.java | 126 ++
geode-wan/src/test/resources/expected-pom.xml | 10 +-
geode-web-api/build.gradle | 46 +-
geode-web-management/build.gradle | 78 +-
.../ClientClusterManagementServiceDUnitTest.java | 3 +-
.../rest/DeployManagementIntegrationTest.java | 108 ++
.../internal/rest/RebalanceIntegrationTest.java | 24 +-
.../RebalanceOperationControllerSpringTest.java | 13 +-
.../rest/RegionManagementIntegrationTest.java | 8 +-
.../DeploymentManagementController.java | 50 +-
.../controllers/RebalanceOperationController.java | 41 +-
.../rest/security/RestSecurityConfiguration.java | 3 +-
.../src/main/webapp/WEB-INF/management-servlet.xml | 2 +
geode-web/build.gradle | 1 +
static-analysis/pmd-rules/build.gradle | 5 +-
302 files changed, 9648 insertions(+), 4644 deletions(-)
create mode 100644 geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/DeploymentManagementRedployDUnitTest.java
create mode 100644 geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/DeploymentSemanticVersionJarDUnitTest.java
copy {geode-gfsh/src/distributedTest/resources/org/apache/geode/management/internal/cli/commands => geode-assembly/src/distributedTest/resources/org/apache/geode/management/internal/rest}/DeployCommandRedeployDUnitTest_FunctionATemplate (100%)
copy {geode-gfsh/src/distributedTest/resources/org/apache/geode/management/internal/cli/commands => geode-assembly/src/distributedTest/resources/org/apache/geode/management/internal/rest}/DeployCommandRedeployDUnitTest_FunctionBTemplate (100%)
create mode 100644 geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DestroyRegionDuringGIIDistributedTest.java
copy geode-protobuf/geode-protobuf-test/build.gradle => geode-core/src/main/java/org/apache/geode/alerting/internal/spi/AlertingIOException.java (51%)
create mode 100644 geode-core/src/main/java/org/apache/geode/internal/cache/InternalRegionFactory.java
delete mode 100644 geode-core/src/main/java/org/apache/geode/internal/cache/RegionFactoryImpl.java
create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/DeploymentValidator.java
create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/operation/OperationState.java
create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/operation/OperationStateStore.java
create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/operation/RegionOperationStateStore.java
create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/InternalRegionFactoryTest.java
create mode 100644 geode-core/src/test/java/org/apache/geode/internal/tcp/TCPConduitTest.java
create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/configuration/validators/DeploymentValidatorTest.java
create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/operation/OperationStateTest.java
create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/operation/RegionOperationStateStoreTest.java
create mode 100644 geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/CacheXmlRule.java
rename geode-core/src/main/java/org/apache/geode/management/internal/operation/TaggedWithOperator.java => geode-management/src/main/java/org/apache/geode/management/configuration/HasFile.java (74%)
delete mode 100644 geode-management/src/main/java/org/apache/geode/management/internal/ClusterManagementOperationStatusResult.java
delete mode 100644 geode-management/src/main/java/org/apache/geode/management/internal/CompletableFutureProxy.java
create mode 100644 geode-management/src/test/java/org/apache/geode/management/api/RestTemplateClusterManagementServiceTransportTest.java
create mode 100644 geode-management/src/test/java/org/apache/geode/management/internal/ClientClusterManagementServiceTest.java
delete mode 100644 geode-management/src/test/java/org/apache/geode/management/internal/ClusterManagementOperationStatusResultTest.java
copy geode-core/src/integrationTest/java/org/apache/geode/codeAnalysis/AnalyzeManagementSerializablesJUnitTest.java => geode-redis/src/distributedTest/java/org/apache/geode/redis/MockSubscriber.java (55%)
create mode 100644 geode-redis/src/distributedTest/java/org/apache/geode/redis/PubSubDUnitTest.java
create mode 100644 geode-redis/src/integrationTest/java/org/apache/geode/redis/PubSubTest.java
create mode 100644 geode-redis/src/integrationTest/java/org/apache/geode/redis/SSLTest.java
copy geode-core/src/integrationTest/java/org/apache/geode/codeAnalysis/AnalyzeManagementSerializablesJUnitTest.java => geode-redis/src/integrationTest/java/org/apache/geode/redis/mocks/MockSubscriber.java (55%)
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/AbstractSubscription.java
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/ChannelSubscription.java
copy geode-core/src/integrationTest/java/org/apache/geode/codeAnalysis/AnalyzeManagementSerializablesJUnitTest.java => geode-redis/src/main/java/org/apache/geode/redis/internal/Client.java (58%)
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/PatternSubscription.java
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/PubSub.java
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/PubSubImpl.java
copy geode-core/src/integrationTest/java/org/apache/geode/codeAnalysis/AnalyzeManagementSerializablesJUnitTest.java => geode-redis/src/main/java/org/apache/geode/redis/internal/PublishResult.java (59%)
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/Subscription.java
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/Subscriptions.java
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/executor/pubsub/PsubscribeExecutor.java
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/executor/pubsub/PublishExecutor.java
create mode 100644 geode-redis/src/main/java/org/apache/geode/redis/internal/executor/pubsub/PunsubscribeExecutor.java
create mode 100755 geode-redis/src/main/java/org/apache/geode/redis/internal/executor/pubsub/SubscribeExecutor.java
create mode 100755 geode-redis/src/main/java/org/apache/geode/redis/internal/executor/pubsub/UnsubscribeExecutor.java
create mode 100644 geode-redis/src/test/java/org/apache/geode/redis/internal/PubSubImplJUnitTest.java
create mode 100644 geode-redis/src/test/java/org/apache/geode/redis/internal/SubscriptionsTest.java
create mode 100644 geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/DeployManagementIntegrationTest.java
[geode] 01/01: GEODE-7683: introduce BR.cmnClearRegion
Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
zhouxj pushed a commit to branch feature/GEODE-7665
in repository https://gitbox.apache.org/repos/asf/geode.git
commit 15c800304a507855cd04a9948d24d61b5da54211
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Mon Jan 27 17:02:48 2020 -0800
GEODE-7683: introduce BR.cmnClearRegion
Co-authored-by: Xiaojian Zhou <gz...@pivotal.io>
GEODE-7684: Create messaging class for PR Clear (#4689)
* Added new message class and test
Co-authored-by: Benjamin Ross <br...@pivotal.io>
Co-authored-by: Donal Evans <do...@pivotal.io>
---
.../codeAnalysis/sanctionedDataSerializables.txt | 8 +
.../apache/geode/internal/cache/BucketRegion.java | 38 +-
.../geode/internal/cache/DistributedRegion.java | 23 +-
.../internal/cache/partitioned/ClearPRMessage.java | 388 +++++++++++++++++++++
.../internal/cache/BucketRegionJUnitTest.java | 77 ++++
.../internal/cache/DistributedRegionJUnitTest.java | 18 +
.../cache/partitioned/ClearPRMessageTest.java | 288 +++++++++++++++
.../serialization/DataSerializableFixedID.java | 3 +
8 files changed, 832 insertions(+), 11 deletions(-)
diff --git a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
index 3076db7..d6806f2 100644
--- a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
+++ b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
@@ -1435,6 +1435,14 @@ org/apache/geode/internal/cache/partitioned/BucketSizeMessage$BucketSizeReplyMes
fromData,27
toData,27
+org/apache/geode/internal/cache/partitioned/ClearPRMessage,2
+fromData,30
+toData,44
+
+org/apache/geode/internal/cache/partitioned/ClearPRMessage$ClearReplyMessage,2
+fromData,17
+toData,17
+
org/apache/geode/internal/cache/partitioned/ColocatedRegionDetails,2
fromData,81
toData,133
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
index ac20526..db8c057 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
@@ -557,6 +557,36 @@ public class BucketRegion extends DistributedRegion implements Bucket {
}
}
+ @Override
+ public void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) {
+ if (!getBucketAdvisor().isPrimary()) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Not primary bucket when doing clear, do nothing");
+ }
+ return;
+ }
+
+ boolean enableRVV = useRVV && getConcurrencyChecksEnabled();
+ RegionVersionVector rvv = null;
+ if (enableRVV) {
+ rvv = getVersionVector().getCloneForTransmission();
+ }
+
+ // get rvvLock
+ Set<InternalDistributedMember> participants =
+ getCacheDistributionAdvisor().adviseInvalidateRegion();
+ try {
+ obtainWriteLocksForClear(regionEvent, participants);
+ // no need to dominate my own rvv.
+ // Clear is on going here, there won't be GII for this member
+ clearRegionLocally(regionEvent, cacheWrite, null);
+ distributeClearOperation(regionEvent, rvv, participants);
+
+ // TODO: call reindexUserDataRegion if there're lucene indexes
+ } finally {
+ releaseWriteLocksForClear(regionEvent, participants);
+ }
+ }
long generateTailKey() {
long key = eventSeqNum.addAndGet(partitionedRegion.getTotalNumberOfBuckets());
@@ -2094,11 +2124,9 @@ public class BucketRegion extends DistributedRegion implements Bucket {
// if GII has failed, because there is not primary. So it's safe to set these
// counters to 0.
oldMemValue = bytesInMemory.getAndSet(0);
- }
-
- else {
- throw new InternalGemFireError(
- "Trying to clear a bucket region that was not destroyed or in initialization.");
+ } else {
+ // BucketRegion's clear is supported now
+ oldMemValue = bytesInMemory.getAndSet(0);
}
if (oldMemValue != BUCKET_DESTROYED) {
partitionedRegion.getPrStats().incDataStoreEntryCount(-sizeBeforeClear);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java
index 9964978..1a62919 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegion.java
@@ -2003,6 +2003,10 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute
super.basicClear(regionEvent, cacheWrite);
}
+ void distributeClearOperation(RegionEventImpl regionEvent, RegionVersionVector rvv,
+ Set<InternalDistributedMember> participants) {
+ DistributedClearOperation.clear(regionEvent, rvv, participants);
+ }
@Override
void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) {
@@ -2025,7 +2029,7 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute
obtainWriteLocksForClear(regionEvent, participants);
clearRegionLocally(regionEvent, cacheWrite, null);
if (!regionEvent.isOriginRemote() && regionEvent.getOperation().isDistributed()) {
- DistributedClearOperation.clear(regionEvent, null, participants);
+ distributeClearOperation(regionEvent, null, participants);
}
} finally {
releaseWriteLocksForClear(regionEvent, participants);
@@ -2081,10 +2085,12 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute
/**
* obtain locks preventing generation of new versions in other members
*/
- private void obtainWriteLocksForClear(RegionEventImpl regionEvent,
+ protected void obtainWriteLocksForClear(RegionEventImpl regionEvent,
Set<InternalDistributedMember> participants) {
lockLocallyForClear(getDistributionManager(), getMyId(), regionEvent);
- DistributedClearOperation.lockAndFlushToOthers(regionEvent, participants);
+ if (!isUsedForPartitionedRegionBucket()) {
+ DistributedClearOperation.lockAndFlushToOthers(regionEvent, participants);
+ }
}
/**
@@ -2121,7 +2127,7 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute
/**
* releases the locks obtained in obtainWriteLocksForClear
*/
- private void releaseWriteLocksForClear(RegionEventImpl regionEvent,
+ protected void releaseWriteLocksForClear(RegionEventImpl regionEvent,
Set<InternalDistributedMember> participants) {
ARMLockTestHook armLockTestHook = getRegionMap().getARMLockTestHook();
@@ -2129,8 +2135,13 @@ public class DistributedRegion extends LocalRegion implements InternalDistribute
armLockTestHook.beforeRelease(this, regionEvent);
}
- getVersionVector().unlockForClear(getMyId());
- DistributedClearOperation.releaseLocks(regionEvent, participants);
+ RegionVersionVector rvv = getVersionVector();
+ if (rvv != null) {
+ rvv.unlockForClear(getMyId());
+ }
+ if (!isUsedForPartitionedRegionBucket()) {
+ DistributedClearOperation.releaseLocks(regionEvent, participants);
+ }
if (armLockTestHook != null) {
armLockTestHook.afterRelease(this, regionEvent);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/ClearPRMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/ClearPRMessage.java
new file mode 100644
index 0000000..1a8aba1
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/ClearPRMessage.java
@@ -0,0 +1,388 @@
+/*
+ * 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.geode.internal.cache.partitioned;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Set;
+
+import org.apache.logging.log4j.Logger;
+
+import org.apache.geode.DataSerializer;
+import org.apache.geode.annotations.VisibleForTesting;
+import org.apache.geode.cache.CacheException;
+import org.apache.geode.distributed.DistributedLockService;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.distributed.internal.ClusterDistributionManager;
+import org.apache.geode.distributed.internal.DirectReplyProcessor;
+import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.ReplyMessage;
+import org.apache.geode.distributed.internal.ReplyProcessor21;
+import org.apache.geode.distributed.internal.ReplySender;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.Assert;
+import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.NanoTimer;
+import org.apache.geode.internal.cache.BucketRegion;
+import org.apache.geode.internal.cache.EventID;
+import org.apache.geode.internal.cache.ForceReattemptException;
+import org.apache.geode.internal.cache.PartitionedRegion;
+import org.apache.geode.internal.cache.PartitionedRegionHelper;
+import org.apache.geode.internal.cache.RegionEventImpl;
+import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.logging.internal.log4j.api.LogService;
+
+public class ClearPRMessage extends PartitionMessageWithDirectReply {
+ private static final Logger logger = LogService.getLogger();
+
+ private RegionEventImpl regionEvent;
+
+ private Integer bucketId;
+
+ /** The time in ms to wait for a lock to be obtained during doLocalClear() */
+ public static final int LOCK_WAIT_TIMEOUT_MS = 1000;
+ public static final String BUCKET_NON_PRIMARY_MESSAGE =
+ "The bucket region on target member is no longer primary";
+ public static final String BUCKET_REGION_LOCK_UNAVAILABLE_MESSAGE =
+ "A lock for the bucket region could not be obtained.";
+ public static final String EXCEPTION_THROWN_DURING_CLEAR_OPERATION =
+ "An exception was thrown during the local clear operation: ";
+
+ /**
+ * state from operateOnRegion that must be preserved for transmission from the waiting pool
+ */
+ transient boolean result = false;
+
+ /**
+ * Empty constructor to satisfy {@link DataSerializer}requirements
+ */
+ public ClearPRMessage() {}
+
+ public ClearPRMessage(int bucketId) {
+ this.bucketId = bucketId;
+
+ // These are both used by the parent class, but don't apply to this message type
+ this.notificationOnly = false;
+ this.posDup = false;
+ }
+
+ public void setRegionEvent(RegionEventImpl event) {
+ regionEvent = event;
+ }
+
+ public void initMessage(PartitionedRegion region, Set<InternalDistributedMember> recipients,
+ DirectReplyProcessor replyProcessor) {
+ this.resetRecipients();
+ if (recipients != null) {
+ setRecipients(recipients);
+ }
+ this.regionId = region.getPRId();
+ this.processor = replyProcessor;
+ this.processorId = replyProcessor == null ? 0 : replyProcessor.getProcessorId();
+ if (replyProcessor != null) {
+ replyProcessor.enableSevereAlertProcessing();
+ }
+ }
+
+ @Override
+ public boolean isSevereAlertCompatible() {
+ // allow forced-disconnect processing for all cache op messages
+ return true;
+ }
+
+ public RegionEventImpl getRegionEvent() {
+ return regionEvent;
+ }
+
+ public ClearResponse send(DistributedMember recipient, PartitionedRegion region)
+ throws ForceReattemptException {
+ Set<InternalDistributedMember> recipients =
+ Collections.singleton((InternalDistributedMember) recipient);
+ ClearResponse clearResponse = new ClearResponse(region.getSystem(), recipients);
+ initMessage(region, recipients, clearResponse);
+ if (logger.isDebugEnabled()) {
+ logger.debug("ClearPRMessage.send: recipient is {}, msg is {}", recipient, this);
+ }
+
+ Set<InternalDistributedMember> failures = region.getDistributionManager().putOutgoing(this);
+ if (failures != null && failures.size() > 0) {
+ throw new ForceReattemptException("Failed sending <" + this + ">");
+ }
+ return clearResponse;
+ }
+
+ @Override
+ public int getDSFID() {
+ return PR_CLEAR_MESSAGE;
+ }
+
+ @Override
+ public void toData(DataOutput out, SerializationContext context) throws IOException {
+ super.toData(out, context);
+ if (bucketId == null) {
+ InternalDataSerializer.writeSignedVL(-1, out);
+ } else {
+ InternalDataSerializer.writeSignedVL(bucketId, out);
+ }
+ DataSerializer.writeObject(regionEvent, out);
+ }
+
+ @Override
+ public void fromData(DataInput in, DeserializationContext context)
+ throws IOException, ClassNotFoundException {
+ super.fromData(in, context);
+ this.bucketId = (int) InternalDataSerializer.readSignedVL(in);
+ this.regionEvent = DataSerializer.readObject(in);
+ }
+
+ @Override
+ public EventID getEventID() {
+ return regionEvent.getEventId();
+ }
+
+ /**
+ * This method is called upon receipt and make the desired changes to the PartitionedRegion Note:
+ * It is very important that this message does NOT cause any deadlocks as the sender will wait
+ * indefinitely for the acknowledgement
+ */
+ @Override
+ @VisibleForTesting
+ protected boolean operateOnPartitionedRegion(ClusterDistributionManager distributionManager,
+ PartitionedRegion region, long startTime) {
+ try {
+ result = doLocalClear(region);
+ } catch (ForceReattemptException ex) {
+ sendReply(getSender(), getProcessorId(), distributionManager, new ReplyException(ex), region,
+ startTime);
+ return false;
+ }
+ sendReply(getSender(), getProcessorId(), distributionManager, null, region, startTime);
+ return false;
+ }
+
+ public boolean doLocalClear(PartitionedRegion region) throws ForceReattemptException {
+ // Retrieve local bucket region which matches target bucketId
+ BucketRegion bucketRegion = region.getDataStore().getInitializedBucketForId(null, bucketId);
+
+ // Check if we are primary, throw exception if not
+ if (!bucketRegion.isPrimary()) {
+ throw new ForceReattemptException(BUCKET_NON_PRIMARY_MESSAGE);
+ }
+
+ DistributedLockService lockService = getPartitionRegionLockService();
+ String lockName = bucketRegion.getFullPath();
+ try {
+ boolean locked = lockService.lock(lockName, LOCK_WAIT_TIMEOUT_MS, -1);
+
+ if (!locked) {
+ throw new ForceReattemptException(BUCKET_REGION_LOCK_UNAVAILABLE_MESSAGE);
+ }
+
+ // Double check if we are still primary, as this could have changed between our first check
+ // and obtaining the lock
+ if (!bucketRegion.isPrimary()) {
+ throw new ForceReattemptException(BUCKET_NON_PRIMARY_MESSAGE);
+ }
+
+ try {
+ bucketRegion.cmnClearRegion(regionEvent, true, true);
+ } catch (Exception ex) {
+ throw new ForceReattemptException(
+ EXCEPTION_THROWN_DURING_CLEAR_OPERATION + ex.getClass().getName(), ex);
+ }
+
+ } finally {
+ lockService.unlock(lockName);
+ }
+
+ return true;
+ }
+
+ // Extracted for testing
+ protected DistributedLockService getPartitionRegionLockService() {
+ return DistributedLockService
+ .getServiceNamed(PartitionedRegionHelper.PARTITION_LOCK_SERVICE_NAME);
+ }
+
+ @Override
+ public boolean canStartRemoteTransaction() {
+ return false;
+ }
+
+ @Override
+ protected void sendReply(InternalDistributedMember member, int processorId,
+ DistributionManager distributionManager, ReplyException ex,
+ PartitionedRegion partitionedRegion, long startTime) {
+ if (partitionedRegion != null) {
+ if (startTime > 0) {
+ partitionedRegion.getPrStats().endPartitionMessagesProcessing(startTime);
+ }
+ }
+ ClearReplyMessage.send(member, processorId, getReplySender(distributionManager), this.result,
+ ex);
+ }
+
+ @Override
+ protected void appendFields(StringBuilder buff) {
+ super.appendFields(buff);
+ buff.append("; bucketId=").append(this.bucketId);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder buff = new StringBuilder();
+ String className = getClass().getName();
+ buff.append(className.substring(className.indexOf(PN_TOKEN) + PN_TOKEN.length())); // partition.<foo>
+ buff.append("(prid="); // make sure this is the first one
+ buff.append(this.regionId);
+
+ // Append name, if we have it
+ String name = null;
+ try {
+ PartitionedRegion region = PartitionedRegion.getPRFromId(this.regionId);
+ if (region != null) {
+ name = region.getFullPath();
+ }
+ } catch (Exception ignore) {
+ /* ignored */
+ }
+ if (name != null) {
+ buff.append(" (name = \"").append(name).append("\")");
+ }
+
+ appendFields(buff);
+ buff.append(" ,distTx=");
+ buff.append(this.isTransactionDistributed);
+ buff.append(")");
+ return buff.toString();
+ }
+
+ public static class ClearReplyMessage extends ReplyMessage {
+ /** Result of the Clear operation */
+ boolean result;
+
+ @Override
+ public boolean getInlineProcess() {
+ return true;
+ }
+
+ /**
+ * Empty constructor to conform to DataSerializable interface
+ */
+ @SuppressWarnings("unused")
+ public ClearReplyMessage() {}
+
+ private ClearReplyMessage(int processorId, boolean result, ReplyException ex) {
+ super();
+ this.result = result;
+ setProcessorId(processorId);
+ setException(ex);
+ }
+
+ /** Send an ack */
+ public static void send(InternalDistributedMember recipient, int processorId,
+ ReplySender replySender,
+ boolean result, ReplyException ex) {
+ Assert.assertTrue(recipient != null, "ClearReplyMessage NULL reply message");
+ ClearReplyMessage message = new ClearReplyMessage(processorId, result, ex);
+ message.setRecipient(recipient);
+ replySender.putOutgoing(message);
+ }
+
+ /**
+ * Processes this message. This method is invoked by the receiver of the message.
+ *
+ * @param distributionManager the distribution manager that is processing the message.
+ */
+ @Override
+ public void process(final DistributionManager distributionManager,
+ final ReplyProcessor21 replyProcessor) {
+ final long startTime = getTimestamp();
+ if (replyProcessor == null) {
+ if (logger.isTraceEnabled(LogMarker.DM_VERBOSE)) {
+ logger.trace(LogMarker.DM_VERBOSE, "{}: processor not found", this);
+ }
+ return;
+ }
+ if (replyProcessor instanceof ClearResponse) {
+ ((ClearResponse) replyProcessor).setResponse(this);
+ }
+ replyProcessor.process(this);
+
+ if (logger.isTraceEnabled(LogMarker.DM_VERBOSE)) {
+ logger.trace(LogMarker.DM_VERBOSE, "{} processed {}", replyProcessor, this);
+ }
+ distributionManager.getStats().incReplyMessageTime(NanoTimer.getTime() - startTime);
+ }
+
+ @Override
+ public int getDSFID() {
+ return PR_CLEAR_REPLY_MESSAGE;
+ }
+
+ @Override
+ public void fromData(DataInput in,
+ DeserializationContext context) throws IOException, ClassNotFoundException {
+ super.fromData(in, context);
+ this.result = in.readBoolean();
+ }
+
+ @Override
+ public void toData(DataOutput out,
+ SerializationContext context) throws IOException {
+ super.toData(out, context);
+ out.writeBoolean(this.result);
+ }
+
+ @Override
+ public String toString() {
+ return "ClearReplyMessage " + "processorid=" + this.processorId + " returning " + this.result
+ + " exception=" + getException();
+ }
+ }
+
+ /**
+ * A processor to capture the value returned by {@link ClearPRMessage}
+ */
+ public static class ClearResponse extends PartitionResponse {
+ private volatile boolean returnValue;
+
+ public ClearResponse(InternalDistributedSystem distributedSystem,
+ Set<InternalDistributedMember> recipients) {
+ super(distributedSystem, recipients, false);
+ }
+
+ public void setResponse(ClearReplyMessage response) {
+ this.returnValue = response.result;
+ }
+
+ /**
+ * @return the result of the remote clear operation
+ * @throws ForceReattemptException if the peer is no longer available
+ * @throws CacheException if the peer generates an error
+ */
+ public boolean waitForResult() throws CacheException, ForceReattemptException {
+ waitForCacheException();
+ return this.returnValue;
+ }
+ }
+}
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionJUnitTest.java
index 72e6657..c7cf5a6 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionJUnitTest.java
@@ -14,7 +14,9 @@
*/
package org.apache.geode.internal.cache;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.anyLong;
@@ -31,7 +33,10 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.junit.Test;
+
import org.apache.geode.cache.RegionAttributes;
+import org.apache.geode.internal.cache.versions.RegionVersionVector;
import org.apache.geode.internal.statistics.StatisticsClock;
public class BucketRegionJUnitTest extends DistributedRegionJUnitTest {
@@ -128,4 +133,76 @@ public class BucketRegionJUnitTest extends DistributedRegionJUnitTest {
}
}
+ @Test
+ public void cmnClearRegionWillDoNothingIfNotPrimary() {
+ RegionEventImpl event = createClearRegionEvent();
+ BucketRegion region = (BucketRegion) event.getRegion();
+ BucketAdvisor ba = mock(BucketAdvisor.class);
+ RegionVersionVector rvv = mock(RegionVersionVector.class);
+ doReturn(rvv).when(region).getVersionVector();
+ doReturn(ba).when(region).getBucketAdvisor();
+ when(ba.isPrimary()).thenReturn(false);
+ region.cmnClearRegion(event, true, true);
+ verify(region, never()).clearRegionLocally(eq(event), eq(true), eq(rvv));
+ }
+
+ @Test
+ public void cmnClearRegionCalledOnPrimary() {
+ RegionEventImpl event = createClearRegionEvent();
+ BucketRegion region = (BucketRegion) event.getRegion();
+ BucketAdvisor ba = mock(BucketAdvisor.class);
+ RegionVersionVector rvv = mock(RegionVersionVector.class);
+ doReturn(rvv).when(region).getVersionVector();
+ doReturn(true).when(region).getConcurrencyChecksEnabled();
+ doReturn(ba).when(region).getBucketAdvisor();
+ doNothing().when(region).distributeClearOperation(any(), any(), any());
+ doNothing().when(region).lockLocallyForClear(any(), any(), any());
+ doNothing().when(region).clearRegionLocally(event, true, null);
+ when(ba.isPrimary()).thenReturn(true);
+ region.cmnClearRegion(event, true, true);
+ verify(region, times(1)).clearRegionLocally(eq(event), eq(true), eq(null));
+ }
+
+ @Test
+ public void clearWillUseNullAsRVVWhenConcurrencyCheckDisabled() {
+ RegionEventImpl event = createClearRegionEvent();
+ BucketRegion region = (BucketRegion) event.getRegion();
+ BucketAdvisor ba = mock(BucketAdvisor.class);
+ doReturn(false).when(region).getConcurrencyChecksEnabled();
+ doReturn(ba).when(region).getBucketAdvisor();
+ doNothing().when(region).distributeClearOperation(any(), any(), any());
+ doNothing().when(region).lockLocallyForClear(any(), any(), any());
+ doNothing().when(region).clearRegionLocally(event, true, null);
+ when(ba.isPrimary()).thenReturn(true);
+ region.cmnClearRegion(event, true, true);
+ verify(region, times(1)).clearRegionLocally(eq(event), eq(true), eq(null));
+ }
+
+ @Test
+ public void obtainWriteLocksForClearInBRShouldNotDistribute() {
+ RegionEventImpl event = createClearRegionEvent();
+ BucketRegion region = (BucketRegion) event.getRegion();
+ doNothing().when(region).lockLocallyForClear(any(), any(), any());
+ region.obtainWriteLocksForClear(event, null);
+ assertTrue(region.isUsedForPartitionedRegionBucket());
+ }
+
+ @Test
+ public void updateSizeToZeroOnClearBucketRegion() {
+ RegionEventImpl event = createClearRegionEvent();
+ BucketRegion region = (BucketRegion) event.getRegion();
+ PartitionedRegion pr = region.getPartitionedRegion();
+ PartitionedRegionDataStore prds = mock(PartitionedRegionDataStore.class);
+ PartitionedRegionStats prStats = mock(PartitionedRegionStats.class);
+ when(pr.getPrStats()).thenReturn(prStats);
+ doNothing().when(prStats).incDataStoreEntryCount(anyInt());
+ doNothing().when(prds).updateMemoryStats(anyInt());
+ when(pr.getDataStore()).thenReturn(prds);
+ region.updateSizeOnCreate("key1", 20);
+ long sizeBeforeClear = region.getTotalBytes();
+ assertEquals(20, sizeBeforeClear);
+ region.updateSizeOnClearRegion((int) sizeBeforeClear);
+ long sizeAfterClear = region.getTotalBytes();
+ assertEquals(0, sizeAfterClear);
+ }
}
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/DistributedRegionJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/DistributedRegionJUnitTest.java
index 9fbd8fc..ca53ced 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/DistributedRegionJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/DistributedRegionJUnitTest.java
@@ -14,6 +14,7 @@
*/
package org.apache.geode.internal.cache;
+import static org.apache.geode.internal.Assert.fail;
import static org.apache.geode.internal.statistics.StatisticsClockFactory.disabledClock;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertFalse;
@@ -53,6 +54,14 @@ public class DistributedRegionJUnitTest
@Override
protected void setInternalRegionArguments(InternalRegionArguments ira) {}
+ protected RegionEventImpl createClearRegionEvent() {
+ DistributedRegion region = prepare(true, true);
+ DistributedMember member = mock(DistributedMember.class);
+ RegionEventImpl regionEvent = new RegionEventImpl(region, Operation.REGION_CLEAR, null, false,
+ member, true);
+ return regionEvent;
+ }
+
@Override
protected DistributedRegion createAndDefineRegion(boolean isConcurrencyChecksEnabled,
RegionAttributes ra, InternalRegionArguments ira, GemFireCacheImpl cache,
@@ -246,4 +255,13 @@ public class DistributedRegionJUnitTest
region.basicBridgeReplace("key1", "value1", false, null, client, true, clientEvent);
assertThat(clientEvent.getVersionTag().equals(tag));
}
+
+ @Test(expected = UnsupportedOperationException.class)
+ public void localClearIsNotSupportedOnReplicatedRegion() {
+ RegionEventImpl event = createClearRegionEvent();
+ DistributedRegion region = (DistributedRegion) event.getRegion();
+ region.basicLocalClear(event);
+ fail("Expect UnsupportedOperationException");
+ }
+
}
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ClearPRMessageTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ClearPRMessageTest.java
new file mode 100644
index 0000000..2cf5231
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/ClearPRMessageTest.java
@@ -0,0 +1,288 @@
+/*
+ * 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.geode.internal.cache.partitioned;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.notNull;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.geode.distributed.DistributedLockService;
+import org.apache.geode.distributed.internal.ClusterDistributionManager;
+import org.apache.geode.distributed.internal.DMStats;
+import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.ReplySender;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.cache.BucketRegion;
+import org.apache.geode.internal.cache.ForceReattemptException;
+import org.apache.geode.internal.cache.PartitionedRegion;
+import org.apache.geode.internal.cache.PartitionedRegionDataStore;
+import org.apache.geode.internal.cache.PartitionedRegionStats;
+
+public class ClearPRMessageTest {
+
+ ClearPRMessage message;
+ PartitionedRegion region;
+ PartitionedRegionDataStore dataStore;
+ BucketRegion bucketRegion;
+
+ @Before
+ public void setup() throws ForceReattemptException {
+ message = spy(new ClearPRMessage());
+ region = mock(PartitionedRegion.class, RETURNS_DEEP_STUBS);
+ dataStore = mock(PartitionedRegionDataStore.class);
+ when(region.getDataStore()).thenReturn(dataStore);
+ bucketRegion = mock(BucketRegion.class);
+ when(dataStore.getInitializedBucketForId(any(), any())).thenReturn(bucketRegion);
+ }
+
+ @Test
+ public void doLocalClearThrowsExceptionWhenBucketIsNotPrimaryAtFirstCheck() {
+ when(bucketRegion.isPrimary()).thenReturn(false);
+
+ assertThatThrownBy(() -> message.doLocalClear(region))
+ .isInstanceOf(ForceReattemptException.class)
+ .hasMessageContaining(ClearPRMessage.BUCKET_NON_PRIMARY_MESSAGE);
+ }
+
+ @Test
+ public void doLocalClearThrowsExceptionWhenLockCannotBeObtained() {
+ DistributedLockService mockLockService = mock(DistributedLockService.class);
+ doReturn(mockLockService).when(message).getPartitionRegionLockService();
+
+ when(mockLockService.lock(anyString(), anyLong(), anyLong())).thenReturn(false);
+ when(bucketRegion.isPrimary()).thenReturn(true);
+
+ assertThatThrownBy(() -> message.doLocalClear(region))
+ .isInstanceOf(ForceReattemptException.class)
+ .hasMessageContaining(ClearPRMessage.BUCKET_REGION_LOCK_UNAVAILABLE_MESSAGE);
+ }
+
+ @Test
+ public void doLocalClearThrowsExceptionWhenBucketIsNotPrimaryAfterObtainingLock() {
+ DistributedLockService mockLockService = mock(DistributedLockService.class);
+ doReturn(mockLockService).when(message).getPartitionRegionLockService();
+
+ // Be primary on the first check, then be not primary on the second check
+ when(bucketRegion.isPrimary()).thenReturn(true).thenReturn(false);
+ when(mockLockService.lock(any(), anyLong(), anyLong())).thenReturn(true);
+
+ assertThatThrownBy(() -> message.doLocalClear(region))
+ .isInstanceOf(ForceReattemptException.class)
+ .hasMessageContaining(ClearPRMessage.BUCKET_NON_PRIMARY_MESSAGE);
+ // Confirm that we actually obtained and released the lock
+ verify(mockLockService, times(1)).lock(any(), anyLong(), anyLong());
+ verify(mockLockService, times(1)).unlock(any());
+ }
+
+ @Test
+ public void doLocalClearThrowsForceReattemptExceptionWhenAnExceptionIsThrownDuringClearOperation() {
+ DistributedLockService mockLockService = mock(DistributedLockService.class);
+ doReturn(mockLockService).when(message).getPartitionRegionLockService();
+ NullPointerException exception = new NullPointerException("Error encountered");
+ doThrow(exception).when(bucketRegion).cmnClearRegion(any(), anyBoolean(), anyBoolean());
+
+ // Be primary on the first check, then be not primary on the second check
+ when(bucketRegion.isPrimary()).thenReturn(true);
+ when(mockLockService.lock(any(), anyLong(), anyLong())).thenReturn(true);
+
+ assertThatThrownBy(() -> message.doLocalClear(region))
+ .isInstanceOf(ForceReattemptException.class)
+ .hasMessageContaining(ClearPRMessage.EXCEPTION_THROWN_DURING_CLEAR_OPERATION);
+
+ // Confirm that cmnClearRegion was called
+ verify(bucketRegion, times(1)).cmnClearRegion(any(), anyBoolean(), anyBoolean());
+ }
+
+ @Test
+ public void doLocalClearInvokesCmnClearRegionWhenBucketIsPrimaryAndLockIsObtained()
+ throws ForceReattemptException {
+ DistributedLockService mockLockService = mock(DistributedLockService.class);
+ doReturn(mockLockService).when(message).getPartitionRegionLockService();
+
+
+ // Be primary on the first check, then be not primary on the second check
+ when(bucketRegion.isPrimary()).thenReturn(true);
+ when(mockLockService.lock(any(), anyLong(), anyLong())).thenReturn(true);
+ assertThat(message.doLocalClear(region)).isTrue();
+
+ // Confirm that cmnClearRegion was called
+ verify(bucketRegion, times(1)).cmnClearRegion(any(), anyBoolean(), anyBoolean());
+
+ // Confirm that we actually obtained and released the lock
+ verify(mockLockService, times(1)).lock(any(), anyLong(), anyLong());
+ verify(mockLockService, times(1)).unlock(any());
+ }
+
+ @Test
+ public void initMessageSetsReplyProcessorCorrectlyWithDefinedReplyProcessor() {
+ InternalDistributedMember sender = mock(InternalDistributedMember.class);
+
+ Set<InternalDistributedMember> recipients = new HashSet<>();
+ recipients.add(sender);
+
+ ClearPRMessage.ClearResponse mockProcessor = mock(ClearPRMessage.ClearResponse.class);
+ int mockProcessorId = 5;
+ when(mockProcessor.getProcessorId()).thenReturn(mockProcessorId);
+
+ message.initMessage(region, recipients, mockProcessor);
+
+ verify(mockProcessor, times(1)).enableSevereAlertProcessing();
+ assertThat(message.getProcessorId()).isEqualTo(mockProcessorId);
+ }
+
+ @Test
+ public void initMessageSetsProcessorIdToZeroWithNullProcessor() {
+ message.initMessage(region, null, null);
+
+ assertThat(message.getProcessorId()).isEqualTo(0);
+ }
+
+ @Test
+ public void sendThrowsExceptionIfPutOutgoingMethodReturnsNonNullSetOfFailures() {
+ InternalDistributedMember recipient = mock(InternalDistributedMember.class);
+
+ DistributionManager distributionManager = mock(DistributionManager.class);
+ when(region.getDistributionManager()).thenReturn(distributionManager);
+
+ doNothing().when(message).initMessage(any(), any(), any());
+ Set<InternalDistributedMember> failures = new HashSet<>();
+ failures.add(recipient);
+
+ when(distributionManager.putOutgoing(message)).thenReturn(failures);
+
+ assertThatThrownBy(() -> message.send(recipient, region))
+ .isInstanceOf(ForceReattemptException.class)
+ .hasMessageContaining("Failed sending <" + message + ">");
+ }
+
+ @SuppressWarnings("ResultOfMethodCallIgnored")
+ @Test
+ public void operateOnPartitionedRegionCallsSendReplyWithNoExceptionWhenDoLocalClearSucceeds()
+ throws ForceReattemptException {
+ ClusterDistributionManager distributionManager = mock(ClusterDistributionManager.class);
+ InternalDistributedMember sender = mock(InternalDistributedMember.class);
+ int processorId = 1000;
+ int startTime = 0;
+
+ doReturn(true).when(message).doLocalClear(region);
+ doReturn(sender).when(message).getSender();
+ doReturn(processorId).when(message).getProcessorId();
+
+ // We don't want to deal with mocking the behavior of sendReply() in this test, so we mock it to
+ // do nothing and verify later that it was called with proper input
+ doNothing().when(message).sendReply(any(), anyInt(), any(), any(), any(), anyLong());
+
+ message.operateOnPartitionedRegion(distributionManager, region, startTime);
+
+ verify(message, times(1)).sendReply(sender, processorId, distributionManager, null, region,
+ startTime);
+ }
+
+ @SuppressWarnings("ResultOfMethodCallIgnored")
+ @Test
+ public void operateOnPartitionedRegionCallsSendReplyWithExceptionWhenDoLocalClearFailsWithException()
+ throws ForceReattemptException {
+ ClusterDistributionManager distributionManager = mock(ClusterDistributionManager.class);
+ InternalDistributedMember sender = mock(InternalDistributedMember.class);
+ int processorId = 1000;
+ int startTime = 0;
+ ForceReattemptException exception =
+ new ForceReattemptException(ClearPRMessage.BUCKET_NON_PRIMARY_MESSAGE);
+
+ doThrow(exception).when(message).doLocalClear(region);
+ doReturn(sender).when(message).getSender();
+ doReturn(processorId).when(message).getProcessorId();
+
+ // We don't want to deal with mocking the behavior of sendReply() in this test, so we mock it to
+ // do nothing and verify later that it was called with proper input
+ doNothing().when(message).sendReply(any(), anyInt(), any(), any(), any(), anyLong());
+
+ message.operateOnPartitionedRegion(distributionManager, region, startTime);
+
+ verify(message, times(1)).sendReply(any(), anyInt(), any(), notNull(), any(), anyLong());
+ }
+
+ @Test
+ public void sendReplyEndsMessageProcessingIfWeHaveARegionAndHaveStartedProcessing() {
+ DistributionManager distributionManager = mock(DistributionManager.class);
+ InternalDistributedMember recipient = mock(InternalDistributedMember.class);
+ PartitionedRegionStats partitionedRegionStats = mock(PartitionedRegionStats.class);
+ when(region.getPrStats()).thenReturn(partitionedRegionStats);
+
+ int processorId = 1000;
+ int startTime = 10000;
+ ReplyException exception = new ReplyException(ClearPRMessage.BUCKET_NON_PRIMARY_MESSAGE);
+
+ ReplySender replySender = mock(ReplySender.class);
+ doReturn(replySender).when(message).getReplySender(distributionManager);
+
+ message.sendReply(recipient, processorId, distributionManager, exception, region, startTime);
+
+ verify(partitionedRegionStats, times(1)).endPartitionMessagesProcessing(startTime);
+ }
+
+ @Test
+ public void sendReplyDoesNotEndMessageProcessingIfStartTimeIsZero() {
+ DistributionManager distributionManager = mock(DistributionManager.class);
+ InternalDistributedMember recipient = mock(InternalDistributedMember.class);
+ PartitionedRegionStats partitionedRegionStats = mock(PartitionedRegionStats.class);
+ when(region.getPrStats()).thenReturn(partitionedRegionStats);
+
+ int processorId = 1000;
+ int startTime = 0;
+ ReplyException exception = new ReplyException(ClearPRMessage.BUCKET_NON_PRIMARY_MESSAGE);
+
+ ReplySender replySender = mock(ReplySender.class);
+ doReturn(replySender).when(message).getReplySender(distributionManager);
+
+ message.sendReply(recipient, processorId, distributionManager, exception, region, startTime);
+
+ verify(partitionedRegionStats, times(0)).endPartitionMessagesProcessing(startTime);
+ }
+
+ @Test
+ public void clearReplyMessageProcessCallsSetResponseIfReplyProcessorIsInstanceOfClearResponse() {
+ DistributionManager distributionManager = mock(DistributionManager.class);
+ DMStats mockStats = mock(DMStats.class);
+ when(distributionManager.getStats()).thenReturn(mockStats);
+ ClearPRMessage.ClearReplyMessage clearReplyMessage = new ClearPRMessage.ClearReplyMessage();
+ ClearPRMessage.ClearResponse mockProcessor = mock(ClearPRMessage.ClearResponse.class);
+
+ clearReplyMessage.process(distributionManager, mockProcessor);
+
+ verify(mockProcessor, times(1)).setResponse(clearReplyMessage);
+ }
+}
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
index 50b52bf..17ac3fc 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
@@ -57,6 +57,9 @@ public interface DataSerializableFixedID extends SerializationVersions, BasicSer
// NOTE, codes < -65536 will take 4 bytes to serialize
// NOTE, codes < -128 will take 2 bytes to serialize
+ short PR_CLEAR_REPLY_MESSAGE = -161;
+ short PR_CLEAR_MESSAGE = -160;
+
short CREATE_REGION_MESSAGE_LUCENE = -159;
short FINAL_CHECK_PASSED_MESSAGE = -158;
short NETWORK_PARTITION_MESSAGE = -157;