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 2018/04/11 05:45:01 UTC

[geode] branch feature/GEODE-4647 updated (1b15872 -> 45bc7b7)

This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a change to branch feature/GEODE-4647
in repository https://gitbox.apache.org/repos/asf/geode.git.


    omit 1b15872  GEODE-4647: add trace to print content of undrained queue
    omit 859edc1  GEODE-4647: add back test cases
    omit 23ae7d6  GEODE-4647: add a stats eventSecondaryQueueSizeId to track events in secondary             gateway sender queue
     add 9104dac  GEODE-4859: Preparing GfshCommand to be public interface (#1647)
     add 63ebca4  Fix help guide url in Pulse
     add 1cca96a  GEODE-3922: Fix additional help links
     add 3d5ad69  GEODE-3922: Removed pulse-help-custom from gemfire.properties
     add d23c6d1  GEODE-4386: Add gfsh command to describe jndi-binding (#1653)
     add 846e586  GEODE-4386: Fix compilation issue
     add 7c27d88  GEODE-4881: Support lucene reindexing (of existing data) with rebalance
     add 7c86962  GEODE-4915: Fix ClusterConfigLocatorRestartDUnitTest intermittent failures (#1664)
     add 3f2bae8  GEODE-3881: Prevent illegal region names in the unit tests. (#1668)
     add 1b66a65  GEODE-4749: Remove method bytecodes from serializable analysis. (#1660)
     add 6446d17  GEODE-4910: Modify method description to mention exception. (#1657)
     add 405559d   GEODE-4882: Prevent intermittent test failure from CacheClosedException (#1670)
     add 78dcf4b  GEODE-4859: Create a public version of GfshCommand (#1662)
     add 6367925  GEODE-4924: Fixes JAVA_ARGS environemnt parameter. (#1673)
     add da51fce  GEODE-4894: Changes are made to support case sensitivity between region, table name and pdx field, column name (#1663)
     add f3b47a5  GEODE-4928 DistributedLockService doesn't work as expected while the dlock grantor is initialized
     add d79a2b2  GEODE-4827: null check for the cache. (#1646)
     add 0ffb983  Revert "GEODE-4928 DistributedLockService doesn't work as expected while the dlock grantor is initialized"
     add 2953dc0  GEODE-1279: Rename Bug51616JUnitTest as CreateRegionFactoryNewInstanceRegressionTest
     add 0618d54  GEODE-1279: Rename Bug33726JUnitTest as AfterRegionCreateNotBeforeRegionInitRegressionTest
     add be91870  GEODE-1279: Rename Bug34179TooManyFilesOpenJUnitTest as OplogTooManyFilesOpenRegressionTest
     add cd3ff6d  GEODE-1279: Rename Bug34583JUnitTest as RegionValuesIteratorAfterLocalInvalidateRegressionTest
     add 020291f  GEODE-1279: Fix serialization of LocalVM
     add 8009a12  GEODE-1279: Rename Bug37241DUnitTest as CleanupFailedInitWithDiskFilesRegressionTest
     add 3e2619f  GEODE-1279: Rename Bug37377DUnitTest as ClearDuringGiiOplogWithMissingCreateRegressionTest
     add 10eabfb  GEODE-1279: Rename Bug37500JUnitTest as DiskAccessExceptionDisablesServerRegressionTest
     add 0e6a1b9  GEODE-1279: Rename Bug39079DUnitTest
     add e2e2b90  GEODE-1279: Rename Bug40299DUnitTest as ClearDuringNetSearchOplogRegressionTest
     add f542032  GEODE-1279: Rename Bug40632DUnitTest as CreatePRWithLocalExpirationRegressionTest
     add f53b5a6  GEODE-1279: Rename Bug41091DUnitTest as BucketCreationGIIHARegressionTest
     add d93f3d5  GEODE-1279: Rename Bug41733DUnitTest as BucketCreationRequesterCrashHARegressionTest
     add 735b855  GEODE-1279: Rename Bug41957DUnitTest as RegisterInterestWithEvictionRegressionTest
     add ca73e12  GEODE-1279: Rename Bug42055DUnitTest as BucketRegionSizeWithOverflowRegressionTest
     add 5561078  GEODE-1279: Rename Bug45164DUnitTest as PREntrySetIteratorRegressionTest
     add 3b4791c  GEODE-1279: Rename Bug45934DUnitTest as DiskRecoveryWithVersioningGiiRegressionTest
     add 5349447  GEODE-1279: Rename Bug47667DUnitTest as ClientTxCommitShouldNotHangRegressionTest
     add 3b32fd5  GEODE-1279: Rename Bug36853EventsExpiryDUnitTest as ClientSubscriptionExpiryDataLossRegressionTest
     add 16058fc  GEODE-4715 ReconnectDUnitTest calls static methods to obtain cache and distributed system
     add d8ec1ea  GEODE-4822 The second server instance startup error: Could not create an instance of PartitionRegionConfig
     add 57b9253  GEODE-4941: Increase UITests timeout to 2h (#1679)
     add 6d729d3  GEODE-4808: Add performance tests for rebalance simulation (#1667)
     add b84d1030 GEODE-4933: Include members with NORMAL and PRELOADED data policy in … (#1676)
     add 6bccecf  GEODE-4943: Move isConnectedAndReady method to public class (#1681)
     add 353eb4a  Add all jars in extensions directory to classpath
     add b1c9498  Add extensions jars to locator/server's classpath
     add 629e798  Use JUnit TemporaryFolder rule for the test
     add 828c8a0  Add some more comment
     add f79c8d9  Merge branch 'develop' into add-extensions-to-classpath-155484283
     add 679b095  Merge pull request #1669 from apache/add-extensions-to-classpath-155484283
     add 7b9ac98  GEODE-4945: InternalGfshCommand should not have to implement CommandM… (#1684)
     add dde0ae7  GEODE-4520: Remove singleton CacheFactory.getAnyInstance() from o.a.g.management.internal.configuration.callbacks.
     add 1307696  GEODE-4922: handle Date conversion (#1686)
     add a5118f6  GEODE-4822 The second server instance startup error: Could not create an instance of PartitionRegionConfig
     add f141019  Feature/geode 4782 (#1682)
     add 4cd33db  Revert "GEODE-4822 The second server instance startup error: Could not create an instance of PartitionRegionConfig"
     add 6f025bc  Revert "GEODE-4822 The second server instance startup error: Could not create an instance of PartitionRegionConfig"
     add 7468915  docs: Explicitly state that regions must be co-located if using same parallel gateway-sender-id
     add d044ce0  GEODE-4822 The second server instance startup error: Could not create an instance of PartitionRegionConfig
     add f9b16e9  GEODE-4819: Separating authorization out from protobuf handlers (#1674)
     add 8c06afb  GEODE-4963: Ignore test for now
     add 3baccb4  GEODE-4969 PDX Type registry throws CacheClosedException causing random test failures
     add b2f7743  GEODE-4928 DistributedLockService doesn't work as expected while the dlock grantor is initialized
     add a966ad0  GEODE-4876: Move VM APIs from Host to VM
     add 034a279  GEODE-4876: Remove use of Host from GetPidAndIdDistributedTest
     add ae4b068  GEODE-4876: Add version of getServerHostName without Host
     add e55082a  GEODE-4876: Update RegionClearStatsDistributedTest use of VM and NetworkUtils
     add 841dde9  GEODE-4876: Update RegionExpirationDistributedTest use of VM and NetworkUtil
     add cb6cd2d  GEODE-4876: Update PRCustomPartitioningDistributedTest use of VM and NetworkUtil
     add b069c1f  GEODE-4876: Update RegionListenerDistributedTest use of VM and NetworkUtil
     add 46e98fb  GEODE-4876: Update FunctionExecutionWithExceptionDistributedTest use of VM and NetworkUtil
     add 99bb4f0  GEODE-4876: Update AcceptorImplClientQueueDistributedTest use of VM and NetworkUtil
     add 4296f21  GEODE-4876: Update SharedErrorCollectorDistributedTest use of VM and NetworkUtil
     add 40795fe  GEODE-4876: Update SharedCountersRuleDistributedTest use of VM and NetworkUtil
     add b6b4ac2  GEODE-4876: Update DistributedTestRuleDistributedTest use of VM and NetworkUtil
     add 5271b6b  GEODE-4876: Update DistributedDisconnectRuleDistributedTest use of VM and NetworkUtil
     add da4044e  GEODE-4876: Update DistributedDisconnectRuleAsClassRuleDistributedTest use of VM
     add 7be2a7e  GEODE-4876: Cleanup CacheRule tests use of VM and javadocs
     add a2cc503  GEODE-4970: Disable PartitionedRegionQueryDUnitTest
     add 38bfac0  docs: typo repair
     add 2a6db7c  GEODE-4913: gfsh start server cmd is not recognizing local properties… (#1687)
     add 1fc7cf6  GEODE-4973: Add docker-compose to pipeline docker image
     add 6d8d212  Merge pull request #1702 from nreich/feature/GEODE-4973
     add 03f6d27  GEODE-2321: Pulse application works incorrectly in some locales (#1661)
     add 7b347af  GEODE-3720: Add additional output pattern to failure assertion for ConnectCommandWithSSLTest (#1704)
     add 020e5b5  GEODE-4928 DistributedLockService doesn't work as expected while the dlock grantor is initialized
     add 755eaaa  GEODE-4929: Add ability for tests to overide the default DiskDirs (#1701)
     add a4bae5c  GEODE-4934: Throw exception if shutdown fails in GfshRule (#1699)
     add c42905c  GEODE-4811: Add @Disabled "feature flag" annotation for gfsh commands.
     add 4bdd31c  GEODE-4928 DistributedLockService doesn't work as expected while the dlock grantor is initialized
     add b55215d  GEODE-3563: use a timeout for newly created sockets in TcpConduit.run() (#1671)
     add 956a671  GEODE-4974: Create single connection pool per cache (#1707)
     add ffc9c8b  GEODE-4976: Fix misspelling and misattribution in test logging. (#1708)
     add 1b4d95a  GEODE-4917: Remove dead and redundant code from LinkedStructSet.
     add 5fe3c76  GEODE-3820: Remove all invocations of Wait.pause(). (#1694)
     add 5809567  GEODE-4817: Add support for SSL to the experimental driver. (#1683)
     add 60614fb  GEODE-4386: Return 'not found' if the JNDI binding does not exist (#1710)
     add 0297afd  GEODE-4386: Correct check in the case where JNDI binding does not exist
     add c00512c  Revert "GEODE-4386: Correct check in the case where JNDI binding does not exist"
     add 2d8d1a6  Revert "GEODE-4386: Return 'not found' if the JNDI binding does not exist (#1710)"
     add c2a06a1  GEODE-4980 CI failure: AutoConnectionSourceImplJUnitTest. testServerLocationUsedInListenerNotification
     add df252f1  GEODE-4817: Fix SSLTest. (#1714)
     add fce124f  COMMIT THEN REVIEW: Fixed doc typos.
     add 4ba38c9  GEODE-4981 CI failure: SSLConfigurationFactoryJUnitTest.getNonSSLConfiguration
     add 8b8cef1  GEODE-4893: Improve reloading the cluster configuration on existing vanilla servers
     add 750417f  GEODE-4867: Added query time expiration checks. (#1624)
     add 00ffcf5  GEODE-4386: Return 'not found' if the JNDI binding does not exist (#1713)
     add 5b21633  GEODE-3456: Fix display of 'null' hosts in Pulse UI (#1717)
     add e5e0c62  GEODE-4979: Incorrect description in docs of ResourcePermission in OQL
     add 69a6c33  GEODE-4981 CI failure: SSLConfigurationFactoryJUnitTest.getNonSSLConfiguration
     add d773cfd  GEODE-4983 PluckStacks is no longer detecting idle executors and weeding them out
     add 7070fc9  GEODE-4872: handle Blob when reading from JDBC (#1692)
     add 132dfc8  GEODE-4867: Unused imports
     add 8894267  GEODE-4840: do not deserialize PdxInstances for remote gets (#1693)
     add caf588b  Geode-4950 + GEODE-4951: Upgrade spotless version and reduce run time.
     add 31b51bd  GEODE-4972: Move VersionManager to geode-old-versions module (#1703)
     add 912a1b2  GEODE-4902: Refactor LogMarker class and usage (#1678)
     add 6fa521e  GEODE-4911: Deprecate DataSerializer.TRACE_SERIALIZABLE. (#1722)
     add 3c263e9  GEODE-4989 CQ reply message fromData method deserializes query results
     add 111b51d  GEODE-4893: add test to make sure the callbacks will be loaded correctly (#1729)
     add 6b2d45a  GEODE-4970: Overhaul and split up PartitionedRegionQueryDUnitTest (#1718)
     add 425f371  GEODE-4983 PluckStacks is no longer detecting idle executors and weeding them out
     add 93a484d  GEODE-4984 Add new Use Cases section to docs (#1733)
     add da1ce1c  GEODE-4456: Remove singleton calls from all tests in org.apache.geode.internal.cache
     add 595da56  GEODE-4644: Move static to member of distributed system. (#1734)
     add d792821  GEODE-4960: Jar deploy fails when SSL is enabled (#1698)
     add 273994d  GEODE-4971: Add version capability to GfshRule (#1731)
     add 400c762  Revert "GEODE-4989 CQ reply message fromData method deserializes query results"
     add 3047190  Revert "GEODE-4822 The second server instance startup error: Could not create an instance of PartitionRegionConfig"
     add 2de6ee0  GEODE-4849: Add integration test for existing REST API. (#1721)
     add 049e10a  GEODE-4961: Allowing custom serialization formats with the protobuf protocol
     add d00dbd7  GEODE-4947: JdbcConnector tests run against external database as AcceptanceTest category (#1747)
     add f13f56c  GEODE-5003: Add tests for CompositeResultData (#1743)
     add ced3d00  GEODE-4830: modify the message when no jndi-binding is found. (#1732)
     add 514b1d3  GEODE-5000: do not request/apply cluster config when creating client … (#1739)
     add 85c67b2  GEODE-4819: Separating authorization out from protobuf handlers
     add 6f564c0  GEODE-5005: Add unit tests for InfoResultData (#1745)
     add c0dc8a3  GEODE-5004: Add unit tests for ErrorResultData (#1744)
     add a6a7275  GEODE-5021: Add parameters to connection in jdbc-1.0.xsd (#1748)
     add a956147  GEODE-1279: Rename FinalStaticArrayShouldNotCauseSegFaultRegressionTest
     add 76dd7e2  GEODE_1279: Rename MembershipAttributesAreSerializableRegressionTest
     add eab8252  COMMIT THEN REVIEW.  fix spelling: PARTITIION -> PARTITION
     add 947e37b  GEODE-5026: Do not run acceptanceTest in parallel under docker
     add 7b3e809  Merge pull request #1751 from jdeppe-pivotal/feature/GEODE-5026
     add 804c053  GEODE-4518: Replace DSCODE with an enumeration. (#1738)
     add 2d45dad  GEODE-4999: Added explicit tomcat 8.5 directory for tcserver support (#1737)
     add f6f58d3  Revert "GEODE-4999: Added explicit tomcat 8.5 directory for tcserver support (#1737)"
     add c0be3ec  GEODE-5006: Remove unused ObjectResultData (#1756)
     add a7701e8  GEODE-5007: Add unit tests to TabularResultData (#1757)
     add f0fe90e  GEODE-5024: Use debug version of gradle-dockerized-test-plugin (#1749)
     add 2c44745  GEODE-5029: Improve docs around query timeout and low memory (#1755)
     add ebce148  GEODE-5027 Bump version to 1.6.0 and add v1.5.0 for testing
     add e47df10  GEODE-3820 CI failure: DataSerializerPropogationDUnitTest.testDataSerializersEventIdVerification
     add 2e89e84  GEODE-4995 ClusterStartupRule is inefficient when shutting down the cluster
     add dfab3ba  GEODE-5027 Bump version to 1.6.0 and add v1.5.0 for testing
     add 65a19d0  GEODE-5008: Add unit tests for GfJsonArray (#1758)
     add 24840e2  GEODE-5009: Add unit tests for GfJsonObject (#1761)
     add 84b8239  GEODE-4915: Ignore the 'for testing' exception (#1752)
     add b34f73c  GEODE-5027 Bump version to 1.6.0 and add v1.5.0 for testing
     add 3efb4da  GEODE-4991: do no use hard coded quotes (#1728)
     add e42ebec  GEODE-4942: when sender is starting, and not running yet, put event at primary should be saved for QueueRemovalMessage (#1740)
     add 74185bf  GEODE-4999: Added tomcat 8.5 directory for tcserver support (#1762)
     add 26f976b  Revert "GEODE-4942: when sender is starting, and not running yet, put event at primary should be saved for QueueRemovalMessage (#1740)"
     add 9cddec0  fixing backward-compatibility test dependencies to allow running in IntelliJ
     add 75ae584  GEODE-3926: Lucene Query Exception is thrown if queries are executed in the middle of reindexing a region (#1742)
     add ab243c8  GEODE-4942: when sender is starting, and not running yet, put event at primary should be saved for QueueRemovalMessage (#1771)
     add 99caa30  GEODE-3926: Disabling queryOnlyWhenIndexIsAvailable
     new 45bc7b7  GEODE-4647: add a stats eventSecondaryQueueSizeId to track events in secondary             gateway sender queue

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   (1b15872)
            \
             N -- N -- N   refs/heads/feature/GEODE-4647 (45bc7b7)

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:
 .gitignore                                         |    2 +
 build.gradle                                       |    6 +-
 ci/docker/Dockerfile                               |    2 +-
 ci/pipelines/develop.yml                           |    6 +-
 extensions/geode-modules-assembly/build.gradle     |   12 +
 .../context-fragment.xml                           |    0
 .../context-fragment.xml                           |    0
 extensions/geode-modules-tomcat8/build.gradle      |    1 +
 geode-assembly/build.gradle                        |    2 +-
 geode-assembly/src/main/dist/bin/gfsh              |    2 +-
 geode-assembly/src/main/dist/bin/gfsh.bat          |   51 +-
 .../cli/commands/ImportClusterConfigTest.java      |   60 +
 .../PdxBasedCrudControllerIntegrationTest.java     |  232 +++
 .../geode/test/junit/rules/GfshRuleTest.java       |   39 +-
 .../source/subnavs/geode-subnav.erb                |   13 +-
 geode-connectors/build.gradle                      |   12 +-
 .../jdbc/internal/AbstractJdbcCallback.java        |    3 +-
 .../internal/{ColumnValue.java => ColumnData.java} |   14 +-
 .../jdbc/internal/DataSourceManager.java           |    8 +-
 .../connectors/jdbc/internal/EntryColumnData.java  |   27 +-
 .../jdbc/internal/JdbcConnectorService.java        |    1 +
 .../jdbc/internal/JdbcConnectorServiceImpl.java    |    7 +
 .../connectors/jdbc/internal/RegionMapping.java    |  194 +-
 .../geode/connectors/jdbc/internal/SqlHandler.java |  152 +-
 .../jdbc/internal/SqlStatementFactory.java         |   87 +-
 .../jdbc/internal/SqlToPdxInstanceCreator.java     |  149 +-
 .../connectors/jdbc/internal/TableMetaData.java    |   36 +-
 .../jdbc/internal/TableMetaDataManager.java        |   28 +-
 .../jdbc/internal/TableMetaDataView.java           |   12 +-
 .../jdbc/internal/cli/AlterConnectionCommand.java  |    8 +-
 .../jdbc/internal/cli/AlterMappingCommand.java     |    8 +-
 .../jdbc/internal/cli/CreateConnectionCommand.java |    8 +-
 .../jdbc/internal/cli/CreateMappingCommand.java    |    8 +-
 .../internal/cli/DescribeConnectionCommand.java    |    4 +-
 .../jdbc/internal/cli/DescribeMappingCommand.java  |    4 +-
 .../internal/cli/DestroyConnectionCommand.java     |    8 +-
 .../jdbc/internal/cli/DestroyMappingCommand.java   |    8 +-
 .../jdbc/internal/cli/ListConnectionCommand.java   |    4 +-
 .../jdbc/internal/cli/ListMappingCommand.java      |    4 +-
 .../geode.apache.org/schema/jdbc/jdbc-1.0.xsd      |    1 +
 .../sanctioned-geode-connectors-serializables.txt  |    2 +-
 .../AnalyzeConnectorsSerializablesJUnitTest.java   |    2 +-
 .../jdbc/ClassWithSupportedPdxFields.java          |   18 +-
 .../jdbc/JdbcAsyncWriterIntegrationTest.java       |   18 +-
 ...JdbcDUnitTest.java => JdbcDistributedTest.java} |  302 ++-
 .../connectors/jdbc/JdbcLoaderIntegrationTest.java |   37 +-
 .../connectors/jdbc/JdbcWriterIntegrationTest.java |   18 +-
 .../jdbc/MySqlJdbcAsyncWriterIntegrationTest.java  |   47 +
 .../connectors/jdbc/MySqlJdbcDistributedTest.java  |  101 +
 .../jdbc/MySqlJdbcLoaderIntegrationTest.java       |   58 +
 .../jdbc/MySqlJdbcWriterIntegrationTest.java       |   47 +
 .../PostgresJdbcAsyncWriterIntegrationTest.java    |   47 +
 .../jdbc/PostgresJdbcDistributedTest.java          |   89 +
 .../jdbc/PostgresJdbcLoaderIntegrationTest.java    |   57 +
 .../jdbc/PostgresJdbcWriterIntegrationTest.java    |   47 +
 .../jdbc/internal/AbstractJdbcCallbackTest.java    |    1 -
 .../{ColumnValueTest.java => ColumnDataTest.java}  |   15 +-
 .../jdbc/internal/DataSourceManagerUnitTest.java   |   14 +-
 .../jdbc/internal/JdbcConnectorServiceTest.java    |    5 +
 .../MySqlTableMetaDataManagerIntegrationTest.java  |   29 +-
 ...ostgresTableMetaDataManagerIntegrationTest.java |   38 +-
 .../jdbc/internal/RegionMappingBuilderTest.java    |   16 +-
 .../jdbc/internal/RegionMappingTest.java           |  283 ++-
 .../connectors/jdbc/internal/SqlHandlerTest.java   |  178 +-
 .../jdbc/internal/SqlStatementFactoryTest.java     |   34 +-
 .../jdbc/internal/SqlToPdxInstanceCreatorTest.java |  364 +++-
 .../TableMetaDataManagerIntegrationTest.java       |   34 +-
 .../jdbc/internal/TableMetaDataManagerTest.java    |  102 +-
 .../jdbc/internal/TestConfigService.java           |   14 +-
 .../cli/CreateConnectionCommandDUnitTest.java      |    2 +-
 .../cli/CreateMappingCommandIntegrationTest.java   |    8 +-
 .../cli/JdbcClusterConfigDistributedTest.java      |   16 +-
 .../jdbc/internal/xml/ElementTypeTest.java         |    4 +-
 .../test/junit/rules/DatabaseConnectionRule.java   |   23 +-
 .../junit/rules/InMemoryDerbyConnectionRule.java   |   27 +-
 .../test/junit/rules/MySqlConnectionRule.java      |   72 +
 .../test/junit/rules/PostgresConnectionRule.java   |   45 +
 .../junit/rules/SqlDatabaseConnectionRule.java     |  123 ++
 .../geode/connectors/jdbc/internal/mysql.yml       |   28 +
 .../geode/connectors/jdbc/internal/postgres.yml    |   27 +
 .../org/apache/geode/connectors/jdbc/mysql.yml     |   28 +
 .../org/apache/geode/connectors/jdbc/postgres.yml  |   27 +
 geode-core/build.gradle                            |    3 +-
 .../RebalanceGrowingClusterBenchmark.java          |   71 +
 .../rebalance/RebalanceModelBuilder.java           |  188 ++
 .../RebalanceOnAddingMemberBenchmark.java          |   73 +
 .../rebalance/RebalanceRegionBenchmark.java        |   73 +
 .../main/java/org/apache/geode/DataSerializer.java |  443 ++--
 .../admin/internal/AdminDistributedSystemImpl.java |    4 +-
 .../internal/DisabledManagedEntityController.java  |   26 +-
 .../internal/ManagedEntityControllerFactory.java   |    4 +-
 .../apache/geode/admin/jmx/internal/AgentImpl.java |   13 +-
 .../org/apache/geode/cache/AttributesFactory.java  |   12 +-
 .../main/java/org/apache/geode/cache/Region.java   |    4 +-
 .../asyncqueue/internal/AsyncEventQueueStats.java  |    6 +-
 .../geode/cache/client/internal/AbstractOp.java    |   11 +-
 .../client/internal/ClientSideHandshakeImpl.java   |   13 +-
 .../cache/client/internal/InternalClientCache.java |    6 +
 .../cache/client/internal/OpExecutorImpl.java      |   12 +-
 .../cache/configuration/JndiBindingsType.java      |   12 +-
 .../cache/query/internal/LinkedStructSet.java      |  171 +-
 .../internal/ClusterDistributionManager.java       |   29 +-
 .../distributed/internal/DistributionAdvisor.java  |  135 +-
 .../distributed/internal/DistributionMessage.java  |    8 +-
 .../InternalClusterConfigurationService.java       |   20 +-
 .../internal/InternalDistributedSystem.java        |   15 +
 .../internal/StartupResponseMessage.java           |    4 +-
 .../distributed/internal/direct/DirectChannel.java |    4 +-
 .../distributed/internal/locks/DLockGrantor.java   |  473 ++---
 .../locks/DLockLessorDepartureHandler.java         |    2 +
 .../internal/locks/DLockQueryProcessor.java        |   23 +-
 .../locks/DLockRecoverGrantorProcessor.java        |   42 +-
 .../internal/locks/DLockReleaseProcessor.java      |   30 +-
 .../internal/locks/DLockRequestProcessor.java      |  147 +-
 .../distributed/internal/locks/DLockService.java   |  300 ++-
 .../distributed/internal/locks/DLockToken.java     |   24 +-
 .../internal/locks/DeposeGrantorProcessor.java     |    5 +-
 .../internal/locks/ElderInitProcessor.java         |   24 +-
 .../distributed/internal/locks/ElderState.java     |   62 +-
 .../internal/locks/GrantorRequestProcessor.java    |   49 +-
 .../locks/NonGrantorDestroyedProcessor.java        |   17 +-
 .../membership/gms/mgr/GMSMembershipManager.java   |    7 +-
 .../distributed/internal/tcpserver/TcpServer.java  |    5 +-
 .../java/org/apache/geode/internal/DSCODE.java     |  160 +-
 .../org/apache/geode/internal/DeployedJar.java     |   10 +-
 .../geode/internal/InternalDataSerializer.java     |  797 ++++----
 .../java/org/apache/geode/internal/Version.java    |   72 +-
 .../geode/internal/admin/remote/AdminWaiters.java  |   25 +-
 .../admin/remote/AlertLevelChangeMessage.java      |    4 +-
 .../admin/remote/RemoteGfManagerAgent.java         |   65 +-
 .../internal/cache/AbstractBucketRegionQueue.java  |   34 +-
 .../geode/internal/cache/AbstractDiskRegion.java   |   72 +-
 .../geode/internal/cache/AbstractRegion.java       |   13 -
 .../geode/internal/cache/AbstractRegionMap.java    |   15 +-
 .../apache/geode/internal/cache/BucketAdvisor.java |   15 +-
 .../internal/cache/BucketPersistenceAdvisor.java   |   29 +-
 .../apache/geode/internal/cache/BucketRegion.java  |   49 +-
 .../internal/cache/CacheDistributionAdvisor.java   |    4 +-
 .../cache/CachedDeserializableFactory.java         |    2 +-
 .../internal/cache/ClusterConfigurationLoader.java |   19 +-
 .../cache/DestroyPartitionedRegionMessage.java     |   12 +-
 .../apache/geode/internal/cache/DiskInitFile.java  |   68 +-
 .../geode/internal/cache/DiskStoreAttributes.java  |    3 +-
 .../geode/internal/cache/DiskStoreMonitor.java     |   68 +-
 .../geode/internal/cache/DistTXCommitMessage.java  |    9 +-
 .../internal/cache/DistTXPrecommitMessage.java     |    9 +-
 .../internal/cache/DistTXRollbackMessage.java      |    8 +-
 .../internal/cache/DistributedCacheOperation.java  |   16 +-
 .../internal/cache/DistributedPutAllOperation.java |   15 +-
 .../geode/internal/cache/DistributedRegion.java    |    7 +-
 .../DistributedRegionFunctionStreamingMessage.java |    8 +-
 .../geode/internal/cache/EntryEventImpl.java       |    9 +-
 .../org/apache/geode/internal/cache/EventID.java   |    2 +-
 .../apache/geode/internal/cache/FilterProfile.java |   31 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |   73 +-
 .../org/apache/geode/internal/cache/HARegion.java  |    2 +-
 .../internal/cache/InitialImageOperation.java      |   86 +-
 .../apache/geode/internal/cache/InternalCache.java |    4 +-
 .../geode/internal/cache/InternalRegion.java       |   13 +
 .../cache/LatestLastAccessTimeOperation.java       |    2 +-
 .../cache/LatestLastAccessTimeReplyProcessor.java  |    4 +-
 .../apache/geode/internal/cache/LocalRegion.java   |   67 +-
 .../org/apache/geode/internal/cache/Oplog.java     |  269 +--
 .../apache/geode/internal/cache/OverflowOplog.java |   25 +-
 .../geode/internal/cache/PartitionedRegion.java    |    4 +-
 .../cache/PartitionedRegionQueryEvaluator.java     |   28 +-
 .../geode/internal/cache/PersistentOplogSet.java   |    3 -
 .../cache/SearchLoadAndWriteProcessor.java         |   50 +-
 .../geode/internal/cache/StateFlushOperation.java  |   59 +-
 .../geode/internal/cache/TXFarSideCMTracker.java   |   11 +-
 .../internal/cache/TXRegionLockRequestImpl.java    |    4 +-
 .../internal/cache/TXRemoteCommitMessage.java      |    8 +-
 .../org/apache/geode/internal/cache/Token.java     |    2 +-
 .../geode/internal/cache/TombstoneService.java     |   29 +-
 .../geode/internal/cache/VMLRURegionMap.java       |   88 +-
 .../cache/entries/AbstractRegionEntry.java         |   10 +-
 .../cache/event/DistributedEventTracker.java       |    8 +-
 .../cache/eviction/AbstractEvictionList.java       |   16 +-
 .../internal/cache/eviction/CountLRUEviction.java  |    3 +-
 .../cache/eviction/LRUListWithAsyncSorting.java    |    8 +-
 .../cache/eviction/LRUListWithSyncSorting.java     |   17 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |   34 +-
 .../cache/locks/TXLessorDepartureHandler.java      |   59 +-
 .../internal/cache/locks/TXLockServiceImpl.java    |    9 +-
 .../geode/internal/cache/map/RegionMapDestroy.java |    4 +-
 .../partitioned/BecomePrimaryBucketMessage.java    |   20 +-
 .../cache/partitioned/BucketBackupMessage.java     |    5 +-
 .../cache/partitioned/BucketSizeMessage.java       |   15 +-
 .../cache/partitioned/ContainsKeyValueMessage.java |   12 +-
 .../cache/partitioned/CreateBucketMessage.java     |   21 +-
 .../partitioned/DeposePrimaryBucketMessage.java    |   20 +-
 .../internal/cache/partitioned/DestroyMessage.java |   29 +-
 .../DestroyRegionOnDataStoreMessage.java           |    5 +-
 .../cache/partitioned/DumpAllPRConfigMessage.java  |   14 +-
 .../internal/cache/partitioned/DumpB2NRegion.java  |   16 +-
 .../cache/partitioned/DumpBucketsMessage.java      |   14 +-
 .../cache/partitioned/FetchBulkEntriesMessage.java |   20 +-
 .../cache/partitioned/FetchEntriesMessage.java     |   21 +-
 .../cache/partitioned/FetchEntryMessage.java       |   21 +-
 .../cache/partitioned/FetchKeysMessage.java        |   20 +-
 .../partitioned/FetchPartitionDetailsMessage.java  |   23 +-
 .../internal/cache/partitioned/GetMessage.java     |   17 +-
 .../cache/partitioned/IdentityRequestMessage.java  |   23 +-
 .../cache/partitioned/IdentityUpdateMessage.java   |    4 +-
 .../cache/partitioned/IndexCreationMsg.java        |    6 +-
 .../cache/partitioned/InterestEventMessage.java    |   17 +-
 .../cache/partitioned/InvalidateMessage.java       |   16 +-
 .../partitioned/ManageBackupBucketMessage.java     |   21 +-
 .../cache/partitioned/ManageBucketMessage.java     |   21 +-
 .../cache/partitioned/MoveBucketMessage.java       |   16 +-
 .../cache/partitioned/PRTombstoneMessage.java      |    4 +-
 .../partitioned/PRUpdateEntryVersionMessage.java   |    4 +-
 .../cache/partitioned/PartitionMessage.java        |   10 +-
 .../PartitionedRegionFunctionStreamingMessage.java |    4 +-
 .../cache/partitioned/PrimaryRequestMessage.java   |   17 +-
 .../cache/partitioned/PutAllPRMessage.java         |    8 +-
 .../internal/cache/partitioned/PutMessage.java     |   41 +-
 .../internal/cache/partitioned/QueryMessage.java   |    6 +-
 .../internal/cache/partitioned/RegionAdvisor.java  |   54 +-
 .../cache/partitioned/RemoveAllPRMessage.java      |    8 +-
 .../cache/partitioned/RemoveBucketMessage.java     |   16 +-
 .../cache/partitioned/RemoveIndexesMessage.java    |    5 +-
 .../internal/cache/partitioned/SizeMessage.java    |   15 +-
 .../cache/persistence/DefaultDiskDirs.java         |   23 +-
 .../cache/persistence/DiskInitFileParser.java      |  149 +-
 .../cache/persistence/PersistenceAdvisorImpl.java  |  123 +-
 .../cache/snapshot/RegionSnapshotServiceImpl.java  |    2 +-
 .../apache/geode/internal/cache/tier/Acceptor.java |    7 -
 .../geode/internal/cache/tier/ConnectionProxy.java |    2 +-
 .../internal/cache/tier/sockets/AcceptorImpl.java  |    3 +-
 .../cache/tier/sockets/CacheClientProxy.java       |   42 +-
 .../cache/tier/sockets/CacheClientUpdater.java     |    4 +-
 .../cache/tier/sockets/ChunkedMessage.java         |    4 +-
 .../tier/sockets/ClientDataSerializerMessage.java  |    2 +-
 .../cache/tier/sockets/ClientTombstoneMessage.java |    2 +-
 .../tier/sockets/ClientUpdateMessageImpl.java      |    4 +-
 .../cache/tier/sockets/CommandInitializer.java     |   99 +-
 .../cache/tier/sockets/HAEventWrapper.java         |    4 +-
 .../cache/tier/sockets/ObjectPartList.java         |    6 -
 .../geode/internal/cache/tier/sockets/Part.java    |    2 +-
 .../tier/sockets/ProtobufServerConnection.java     |    8 +-
 .../tier/sockets/ServerSideHandshakeFactory.java   |    2 +-
 .../cache/tier/sockets/VersionedObjectList.java    |   44 +-
 .../internal/cache/tx/RemoteClearMessage.java      |    8 +-
 .../cache/tx/RemoteContainsKeyValueMessage.java    |   19 +-
 .../internal/cache/tx/RemoteDestroyMessage.java    |   16 +-
 .../internal/cache/tx/RemoteFetchEntryMessage.java |   13 +-
 .../internal/cache/tx/RemoteFetchKeysMessage.java  |   12 +-
 .../cache/tx/RemoteFetchVersionMessage.java        |   20 +-
 .../geode/internal/cache/tx/RemoteGetMessage.java  |   16 +-
 .../internal/cache/tx/RemoteInvalidateMessage.java |   20 +-
 .../internal/cache/tx/RemoteOperationMessage.java  |    4 +-
 .../internal/cache/tx/RemotePutAllMessage.java     |   12 +-
 .../geode/internal/cache/tx/RemotePutMessage.java  |    8 +-
 .../internal/cache/tx/RemoteRemoveAllMessage.java  |   12 +-
 .../geode/internal/cache/tx/RemoteSizeMessage.java |   14 +-
 .../cache/versions/RegionVersionHolder.java        |   31 +-
 .../cache/versions/RegionVersionVector.java        |    8 +-
 .../geode/internal/cache/versions/VersionTag.java  |   10 +-
 .../internal/cache/wan/AbstractGatewaySender.java  |   10 +-
 .../wan/AbstractGatewaySenderEventProcessor.java   |   49 +-
 .../internal/cache/wan/GatewaySenderStats.java     |   16 +
 .../ConcurrentParallelGatewaySenderQueue.java      |    8 +-
 .../wan/parallel/ParallelGatewaySenderQueue.java   |   48 +-
 .../internal/cache/xmlcache/CacheCreation.java     |    7 +-
 .../internal/cache/xmlcache/CacheXmlGenerator.java |    3 +-
 .../internal/cache/xmlcache/CacheXmlParser.java    |   34 +-
 .../geode/internal/lang/SystemPropertyHelper.java  |   21 +
 .../geode/internal/logging/LogWriterFactory.java   |    6 +-
 .../geode/internal/logging/log4j/LogMarker.java    |  182 +-
 .../apache/geode/internal/net/SocketCreator.java   |    7 +-
 .../internal/offheap/AbstractStoredObject.java     |    3 +-
 .../apache/geode/internal/offheap/DataType.java    |  403 ++--
 .../internal/offheap/OffHeapRegionEntryHelper.java |    4 +-
 .../internal/offheap/OffHeapStoredObject.java      |    2 +-
 .../security/IntegratedSecurityService.java        |   18 +
 .../internal/security/LegacySecurityService.java   |   87 +
 .../geode/internal/security/SecurityService.java   |   69 +-
 .../internal/statistics/GemFireStatSampler.java    |    4 +-
 .../geode/internal/statistics/HostStatSampler.java |   18 +-
 .../statistics/LocalStatisticsFactory.java         |    6 +-
 .../geode/internal/statistics/SampleCollector.java |  122 +-
 .../internal/statistics/SimpleStatSampler.java     |    2 +-
 .../internal/statistics/StatArchiveHandler.java    |   51 +-
 .../internal/statistics/StatArchiveWriter.java     |   46 +-
 .../internal/statistics/StatMonitorHandler.java    |   14 +-
 .../geode/internal/tcp/DirectReplySender.java      |    5 +-
 .../org/apache/geode/internal/tcp/TCPConduit.java  |   49 +-
 .../org/apache/geode/internal/util/BlobHelper.java |    2 +-
 .../apache/geode/internal/util/PluckStacks.java    |    9 +-
 .../org/apache/geode/management/cli/Disabled.java  |   41 +
 .../cli/commands => cli}/GfshCommand.java          |   91 +-
 .../ContextAwareSSLRMIClientSocketFactory.java     |   59 +
 .../geode/management/internal/ManagementAgent.java |    3 +-
 .../internal/beans/MemberMBeanBridge.java          |    2 +-
 .../geode/management/internal/cli/CliUtil.java     |    4 +-
 .../management/internal/cli/CommandManager.java    |   52 +-
 .../cli/commands/AlterAsyncEventQueueCommand.java  |    5 +-
 .../cli/commands/AlterOfflineDiskStoreCommand.java |    2 +-
 .../internal/cli/commands/AlterRegionCommand.java  |   11 +-
 .../cli/commands/AlterRuntimeConfigCommand.java    |    6 +-
 .../cli/commands/BackupDiskStoreCommand.java       |    8 +-
 .../cli/commands/ChangeLogLevelCommand.java        |    6 +-
 .../cli/commands/ClearDefinedIndexesCommand.java   |    2 +-
 .../cli/commands/CloseDurableCQsCommand.java       |    2 +-
 .../cli/commands/CloseDurableClientCommand.java    |    2 +-
 .../cli/commands/CommandAvailabilityIndicator.java |    3 +-
 .../cli/commands/CompactDiskStoreCommand.java      |    7 +-
 .../commands/CompactOfflineDiskStoreCommand.java   |    2 +-
 .../internal/cli/commands/ConfigurePDXCommand.java |    6 +-
 .../internal/cli/commands/ConnectCommand.java      |    2 +-
 .../cli/commands/CountDurableCQEventsCommand.java  |    2 +-
 .../cli/commands/CreateAsyncEventQueueCommand.java |   10 +-
 .../cli/commands/CreateDefinedIndexesCommand.java  |    6 +-
 .../cli/commands/CreateDiskStoreCommand.java       |    6 +-
 .../cli/commands/CreateGatewayReceiverCommand.java |    8 +-
 .../cli/commands/CreateGatewaySenderCommand.java   |    8 +-
 .../internal/cli/commands/CreateIndexCommand.java  |    6 +-
 .../cli/commands/CreateJndiBindingCommand.java     |    5 +-
 .../internal/cli/commands/CreateRegionCommand.java |   26 +-
 .../internal/cli/commands/DebugCommand.java        |    2 +-
 .../internal/cli/commands/DefineIndexCommand.java  |    2 +-
 .../internal/cli/commands/DeployCommand.java       |    5 +-
 .../cli/commands/DescribeClientCommand.java        |    6 +-
 .../cli/commands/DescribeConfigCommand.java        |    2 +-
 .../cli/commands/DescribeConnectionCommand.java    |    2 +-
 .../cli/commands/DescribeDiskStoreCommand.java     |    2 +-
 .../cli/commands/DescribeJndiBindingCommand.java   |  112 +
 .../cli/commands/DescribeMemberCommand.java        |    2 +-
 .../commands/DescribeOfflineDiskStoreCommand.java  |    2 +-
 .../cli/commands/DescribeRegionCommand.java        |    4 +-
 .../commands/DestroyAsyncEventQueueCommand.java    |    6 +-
 .../cli/commands/DestroyDiskStoreCommand.java      |    6 +-
 .../cli/commands/DestroyFunctionCommand.java       |    9 +-
 .../cli/commands/DestroyGatewaySenderCommand.java  |    8 +-
 .../internal/cli/commands/DestroyIndexCommand.java |    6 +-
 .../cli/commands/DestroyJndiBindingCommand.java    |    5 +-
 .../cli/commands/DestroyRegionCommand.java         |    6 +-
 .../internal/cli/commands/DisconnectCommand.java   |    2 +-
 .../internal/cli/commands/EchoCommand.java         |    2 +-
 .../cli/commands/ExecuteFunctionCommand.java       |    4 +-
 .../cli/commands/ExecuteScriptCommand.java         |    2 +-
 .../internal/cli/commands/ExitCommand.java         |    2 +-
 .../internal/cli/commands/ExportConfigCommand.java |    2 +-
 .../internal/cli/commands/ExportDataCommand.java   |    4 +-
 .../ExportImportClusterConfigurationCommands.java  |   74 +-
 .../internal/cli/commands/ExportLogsCommand.java   |    4 +-
 .../commands/ExportOfflineDiskStoreCommand.java    |    2 +-
 .../cli/commands/ExportStackTraceCommand.java      |    5 +-
 .../internal/cli/commands/GCCommand.java           |    6 +-
 .../internal/cli/commands/GetCommand.java          |   12 +-
 .../internal/cli/commands/GfshHelpCommand.java     |    2 +-
 .../internal/cli/commands/GfshHintCommand.java     |    2 +-
 .../internal/cli/commands/HistoryCommand.java      |    2 +-
 .../internal/cli/commands/ImportDataCommand.java   |    4 +-
 .../internal/cli/commands/InternalGfshCommand.java |   70 +
 .../cli/commands/ListAsyncEventQueuesCommand.java  |    2 +-
 .../internal/cli/commands/ListClientCommand.java   |    6 +-
 .../internal/cli/commands/ListDeployedCommand.java |    2 +-
 .../cli/commands/ListDiskStoresCommand.java        |    6 +-
 .../cli/commands/ListDurableClientCQsCommand.java  |    2 +-
 .../internal/cli/commands/ListFunctionCommand.java |    2 +-
 .../internal/cli/commands/ListGatewayCommand.java  |    8 +-
 .../internal/cli/commands/ListIndexCommand.java    |    2 +-
 .../cli/commands/ListJndiBindingCommand.java       |   24 +-
 .../internal/cli/commands/ListMembersCommand.java  |    2 +-
 .../internal/cli/commands/ListRegionCommand.java   |    2 +-
 .../commands/LoadBalanceGatewaySenderCommand.java  |   10 +-
 .../internal/cli/commands/LocateEntryCommand.java  |    4 +-
 .../internal/cli/commands/NetstatCommand.java      |    2 +-
 .../internal/cli/commands/PDXRenameCommand.java    |    2 +-
 .../cli/commands/PauseGatewaySenderCommand.java    |   10 +-
 .../internal/cli/commands/PutCommand.java          |    9 +-
 .../internal/cli/commands/QueryCommand.java        |   11 +-
 .../internal/cli/commands/RebalanceCommand.java    |    6 +-
 .../internal/cli/commands/RemoveCommand.java       |   12 +-
 .../cli/commands/ResumeGatewaySenderCommand.java   |   10 +-
 .../commands/RevokeMissingDiskStoreCommand.java    |    2 +-
 .../internal/cli/commands/SetVariableCommand.java  |    2 +-
 .../internal/cli/commands/ShCommand.java           |    2 +-
 .../internal/cli/commands/ShowDeadlockCommand.java |    5 +-
 .../internal/cli/commands/ShowLogCommand.java      |   16 +-
 .../internal/cli/commands/ShowMetricsCommand.java  |   15 +-
 .../cli/commands/ShowMissingDiskStoreCommand.java  |    6 +-
 .../internal/cli/commands/ShutdownCommand.java     |    4 +-
 .../internal/cli/commands/SleepCommand.java        |    2 +-
 .../cli/commands/StartGatewayReceiverCommand.java  |    8 +-
 .../cli/commands/StartGatewaySenderCommand.java    |   10 +-
 .../internal/cli/commands/StartLocatorCommand.java |   29 +-
 .../internal/cli/commands/StartMemberUtils.java    |    5 +-
 .../internal/cli/commands/StartServerCommand.java  |   24 +-
 .../StatusClusterConfigServiceCommand.java         |    4 +-
 .../cli/commands/StatusGatewayReceiverCommand.java |    8 +-
 .../cli/commands/StatusGatewaySenderCommand.java   |   10 +-
 .../cli/commands/StopGatewayReceiverCommand.java   |    8 +-
 .../cli/commands/StopGatewaySenderCommand.java     |    8 +-
 .../internal/cli/commands/UndeployCommand.java     |    6 +-
 .../commands/UpgradeOfflineDiskStoreCommand.java   |    2 +-
 .../cli/commands/ValidateDiskStoreCommand.java     |    2 +-
 .../internal/cli/commands/VersionCommand.java      |    2 +-
 .../cli/commands/dto/RegionAttributesInfo.java     |  162 --
 .../internal/cli/commands/dto/RegionDetails.java   |  245 ---
 .../cli/commands/dto/RegionMemberDetails.java      |  205 --
 .../commands/lifecycle/StartJConsoleCommand.java   |    4 +-
 .../commands/lifecycle/StartJVisualVMCommand.java  |    4 +-
 .../cli/commands/lifecycle/StartPulseCommand.java  |    4 +-
 .../cli/commands/lifecycle/StartVsdCommand.java    |    4 +-
 .../commands/lifecycle/StatusLocatorCommand.java   |    4 +-
 .../commands/lifecycle/StatusServerCommand.java    |    4 +-
 .../cli/commands/lifecycle/StopLocatorCommand.java |    4 +-
 .../cli/commands/lifecycle/StopServerCommand.java  |    4 +-
 .../cli/functions/ChangeLogLevelFunction.java      |    7 +-
 .../management/internal/cli/json/GfJsonArray.java  |   23 -
 .../management/internal/cli/json/GfJsonObject.java |   15 -
 .../internal/cli/result/CliJsonSerializable.java   |   42 -
 .../cli/result/CliJsonSerializableFactory.java     |   46 -
 .../internal/cli/result/CommandResult.java         |  161 +-
 .../internal/cli/result/ObjectResultData.java      |   86 -
 .../internal/cli/result/ResultBuilder.java         |   37 -
 .../management/internal/cli/result/ResultData.java |    1 -
 .../internal/cli/util/ClasspathScanLoadHelper.java |    6 +-
 .../management/internal/cli/util/JsonUtil.java     |   48 -
 .../callbacks/ConfigurationChangeListener.java     |    7 +-
 .../configuration/domain/Configuration.java        |    8 -
 .../functions/RecreateCacheFunction.java           |   20 +-
 .../main/java/org/apache/geode/pdx/FieldType.java  |    4 +-
 .../geode/pdx/internal/ClientTypeRegistration.java |   16 +
 .../org/apache/geode/pdx/internal/EnumInfo.java    |    2 -
 .../geode/pdx/internal/LonerTypeRegistration.java  |    6 +
 .../geode/pdx/internal/NullTypeRegistration.java   |    6 +
 .../apache/geode/pdx/internal/PdxInstanceEnum.java |    2 +-
 .../apache/geode/pdx/internal/PdxInstanceImpl.java |    4 +-
 .../apache/geode/pdx/internal/PdxReaderImpl.java   |    7 +-
 .../org/apache/geode/pdx/internal/PdxString.java   |   18 +-
 .../apache/geode/pdx/internal/PdxWriterImpl.java   |    6 +-
 .../geode/pdx/internal/PeerTypeRegistration.java   |   32 +-
 .../geode/pdx/internal/TypeRegistration.java       |    9 +-
 .../apache/geode/pdx/internal/TypeRegistry.java    |    9 +
 .../org/apache/geode/redis/GeodeRedisServer.java   |    7 +-
 .../sanctioned-geode-core-serializables.txt        |    2 +
 .../java/com/examples/UserGfshCommand.java}        |   18 +-
 .../java/org/apache/geode/TestDataSerializer.java  |    4 +-
 .../cache/CacheRegionClearStatsDUnitTest.java      |  241 ---
 .../CreateAndLocalDestroyInTXRegressionTest.java   |    8 +-
 ...ArrayShouldNotCauseSegFaultRegressionTest.java} |   55 +-
 ...ipAttributesAreSerializableRegressionTest.java} |   30 +-
 .../PRCreationTotalNumBucketsDistributedTest.java  |    6 +-
 .../cache/RegionClearStatsDistributedTest.java     |  179 ++
 ...t.java => RegionExpirationDistributedTest.java} |   10 +-
 .../cache/RegionExpirationIntegrationTest.java     |    2 +-
 .../ReplicateCacheListenerDistributedTest.java     |   29 +-
 .../AutoConnectionSourceImplJUnitTest.java         |    4 +-
 .../cache/client/internal/LocatorSSLJUnitTest.java |   64 +
 .../geode/cache/query/dunit/PdxQueryDUnitTest.java |    8 +-
 .../ResourceManagerWithQueryMonitorDUnitTest.java  |  143 ++
 .../apache/geode/cache30/ReconnectDUnitTest.java   |   66 +-
 .../AnalyzeSerializablesJUnitTest.java             |    2 +
 .../geode/codeAnalysis/ClassAndMethodDetails.java  |   56 +-
 .../geode/codeAnalysis/CompiledClassUtils.java     |   33 +-
 .../DistributedLockServiceDUnitTest.java           |   31 +-
 .../internal/DlockAndTxlockRegressionTest.java     |  235 +++
 .../apache/geode/internal/Bug51616JUnitTest.java   |   58 -
 ...eateRegionFactoryNewInstanceRegressionTest.java |  100 +
 .../DSCODETest.java}                               |   30 +-
 .../internal/HeapDataOutputStreamJUnitTest.java    |    8 +
 .../internal/SSLConfigIntegrationJUnitTest.java    |    7 +
 .../apache/geode/internal/SSLConfigJUnitTest.java  |    7 +
 .../apache/geode/internal/VersionJUnitTest.java    |   22 +
 ...ionCreateNotBeforeRegionInitRegressionTest.java |   94 +
 ...okenSerializationConsistencyRegressionTest.java |    5 +-
 .../cache/BucketCreationGIIHARegressionTest.java   |  120 ++
 ...cketCreationRequesterCrashHARegressionTest.java |  261 +++
 .../geode/internal/cache/Bug33726JUnitTest.java    |  110 -
 .../cache/Bug34179TooManyFilesOpenJUnitTest.java   |   96 -
 .../geode/internal/cache/Bug34583JUnitTest.java    |   96 -
 .../geode/internal/cache/Bug37241DUnitTest.java    |  205 --
 .../geode/internal/cache/Bug37377DUnitTest.java    |  317 ---
 .../geode/internal/cache/Bug37500JUnitTest.java    |  163 --
 .../geode/internal/cache/Bug39079DUnitTest.java    |  341 ---
 .../geode/internal/cache/Bug40299DUnitTest.java    |  263 ---
 .../geode/internal/cache/Bug40632DUnitTest.java    |  109 -
 .../geode/internal/cache/Bug41091DUnitTest.java    |  169 --
 .../geode/internal/cache/Bug41733DUnitTest.java    |  211 --
 .../geode/internal/cache/Bug41957DUnitTest.java    |  165 --
 .../geode/internal/cache/Bug42055DUnitTest.java    |   95 -
 .../geode/internal/cache/Bug45164DUnitTest.java    |  113 -
 .../geode/internal/cache/Bug45934DUnitTest.java    |  138 --
 .../geode/internal/cache/Bug47667DUnitTest.java    |   96 -
 ...eanupFailedInitWithDiskFilesRegressionTest.java |  161 ++
 ...ingGiiOplogWithMissingCreateRegressionTest.java |  229 +++
 .../ClearDuringNetSearchOplogRegressionTest.java   |  205 ++
 .../cache/ClientServerGetAllDUnitTest.java         |   10 +-
 .../cache/ClientServerTransactionDUnitTest.java    |   11 +-
 .../ClientTxCommitShouldNotHangRegressionTest.java |  175 ++
 .../CreatePRWithLocalExpirationRegressionTest.java |   96 +
 ...ccessExceptionDisablesServerRegressionTest.java |  241 +++
 ...iskRecoveryWithVersioningGiiRegressionTest.java |  206 ++
 .../DistributedRegionSearchLoadJUnitTest.java      |    3 +-
 .../EntriesDoNotExpireDuringGiiRegressionTest.java |    4 +-
 .../geode/internal/cache/GemFireCacheImplTest.java |   26 +-
 .../GiiDiskAccessExceptionRegressionTest.java      |  211 ++
 .../geode/internal/cache/GridAdvisorDUnitTest.java |   86 +-
 ...zedDiskRegionWithIoExceptionRegressionTest.java |  174 ++
 .../cache/MonthBasedPartitionResolver.java         |    2 +-
 .../cache/OplogTooManyFilesOpenRegressionTest.java |  155 ++
 .../PRAccessorWithOverflowRegressionTest.java      |  132 ++
 ...va => PRCustomPartitioningDistributedTest.java} |   12 +-
 .../PREntryIdleExpirationDistributedTest.java      |   97 +-
 .../cache/PREntrySetIteratorRegressionTest.java    |   98 +
 .../internal/cache/PRQueryDistributedTest.java     |  550 +++++
 .../PRQueryWithIndexAndPdxDistributedTest.java     |  241 +++
 .../cache/PRQueryWithIndexDistributedTest.java     |  172 ++
 .../cache/PRQueryWithOrderByDistributedTest.java   |  217 ++
 ...RQueryWithPdxDuringRebalanceRegressionTest.java |  163 ++
 .../PRWithIndexAfterRebalanceRegressionTest.java   |  180 ++
 .../PartitionedRegionCloseDistributedTest.java     |   10 +-
 .../cache/PartitionedRegionQueryDUnitTest.java     | 1360 ------------
 ...est.java => RegionListenerDistributedTest.java} |   21 +-
 ...IteratorAfterLocalInvalidateRegressionTest.java |  101 +
 ...RegisterInterestWithEvictionRegressionTest.java |  144 ++
 ...eplicateEntryIdleExpirationDistributedTest.java |  111 +-
 .../cache/SearchLoadAndWriteProcessorTest.java     |    2 +-
 .../geode/internal/cache/SerializableMonth.java    |    2 +-
 .../cache/StartServerWithXmlDUnitTest.java         |   88 +
 .../internal/cache/TombstoneCreationJUnitTest.java |   45 +-
 .../ClientFunctionTimeoutRegressionTest.java       |    6 +-
 ...tionExecutionWithExceptionDistributedTest.java} |   10 +-
 .../extension/mock/MockExtensionCommands.java      |    3 +-
 .../cache/ha/Bug36853EventsExpiryDUnitTest.java    |  268 ---
 ...ntSubscriptionExpiryDataLossRegressionTest.java |  195 ++
 .../BucketRebalanceStatRegressionTest.java         |    6 +-
 .../cache/partitioned/Bug47388DUnitTest.java       |    7 +-
 .../DefaultDiskDirsIntegrationTest.java            |   47 +
 .../cache/persistence/DefaultDiskDirsTest.java     |   50 +
 .../rollingupgrade/RollingUpgrade2DUnitTest.java   |  230 +--
 .../rollingupgrade/RollingUpgradeDUnitTest.java    |  330 ++-
 ...=> AcceptorImplClientQueueDistributedTest.java} |   73 +-
 .../ClientProxyWithDeltaDistributedTest.java       |    9 +-
 .../ClientWithInterestFailoverDistributedTest.java |   12 +-
 ...ava => DataSerializerPropagationDUnitTest.java} |  337 ++-
 ...isterInterestServerMetaDataDistributedTest.java |    8 +-
 .../logging/DistributedSystemLogFileJUnitTest.java |   27 +-
 .../log4j/FastLoggerIntegrationJUnitTest.java      |    5 +-
 .../geode/internal/net/DummySocketCreator.java     |    8 +-
 .../internal/net/SSLSocketIntegrationTest.java     |    5 +-
 .../geode/internal/net/SocketCreatorJUnitTest.java |   17 +
 .../geode/internal/offheap/DataTypeJUnitTest.java  |   40 +-
 .../internal/offheap/MemoryBlockNodeJUnitTest.java |    2 +-
 .../offheap/OffHeapRegionEntryHelperJUnitTest.java |    2 +-
 .../offheap/OffHeapStoredObjectJUnitTest.java      |    8 +-
 .../offheap/TinyStoredObjectJUnitTest.java         |    3 +-
 .../QueryDataFunctionIntegrationTest.java          |    3 +-
 .../bean/stats/AsyncEventQueueStatsJUnitTest.java  |   18 +
 .../cli/ClasspathScanLoadHelperJUnitTest.java      |   15 +-
 .../internal/cli/CommandManagerJUnitTest.java      |  116 +-
 .../internal/cli/GfshParserAutoCompletionTest.java |    8 +-
 .../commands/AlterAsyncEventQueueCommandTest.java  |    4 +-
 .../cli/commands/AlterDiskStoreJUnitTest.java      |    1 +
 .../cli/commands/AlterRegionCommandDUnitTest.java  |    3 +-
 .../AlterRegionCommandIntegrationTest.java         |    3 +-
 .../commands/CommandAvailabilityIndicatorTest.java |    2 +-
 .../ConfigurePDXCommandIntegrationTest.java        |    3 +-
 .../cli/commands/ConfigurePDXCommandTest.java      |    2 +-
 .../cli/commands/ConnectCommandDUnitTest.java      |    6 +-
 .../CreateAlterDestroyRegionCommandsDUnitTest.java |    4 +-
 .../CreateAsyncEventQueueCommandDUnitTest.java     |    6 +-
 .../commands/CreateAsyncEventQueueCommandTest.java |    4 +-
 .../CreateDefinedIndexesCommandDUnitTest.java      |    8 +-
 .../commands/CreateDefinedIndexesCommandTest.java  |    6 +-
 .../commands/CreateGatewayReceiverCommandTest.java |    8 +-
 .../commands/CreateGatewaySenderCommandTest.java   |    8 +-
 .../CreateJndiBindingCommandDUnitTest.java         |    3 +-
 .../cli/commands/CreateJndiBindingCommandTest.java |   16 +-
 .../cli/commands/CreateRegionCommandDUnitTest.java |    3 +-
 .../CreateRegionCommandIntegrationTest.java        |    3 +-
 .../cli/commands/CreateRegionCommandTest.java      |    2 +-
 ...DeployCommandFunctionRegistrationDUnitTest.java |    3 +-
 .../DescribeConfigCommandIntegrationTest.java      |    3 +-
 ... DescribeConnectionCommandIntegrationTest.java} |   18 +-
 .../DescribeJndiBindingCommandDUnitTest.java       |  146 ++
 .../commands/DescribeMembersCommandDUnitTest.java  |    3 +-
 .../DestroyAsyncEventQueueCommandDUnitTest.java    |    3 +-
 .../commands/DestroyGatewaySenderCommandTest.java  |    8 +-
 .../commands/DestroyIndexCommandsDUnitTest.java    |    3 +-
 .../DestroyJndiBindingCommandDUnitTest.java        |    3 +-
 .../commands/DestroyJndiBindingCommandTest.java    |    6 +-
 .../commands/DestroyRegionCommandDUnitTest.java    |    3 +-
 .../cli/commands/DestroyRegionCommandTest.java     |    2 +-
 .../cli/commands/DiskStoreCommandsDUnitTest.java   |    3 +-
 .../cli/commands/DiskStoreCommandsJUnitTest.java   |    5 +-
 .../ExecuteFunctionCommandSecurityTest.java        |    4 +-
 .../commands/ExportStackTraceCommandDUnitTest.java |    3 +-
 .../cli/commands/FunctionCommandsDUnitTest.java    |    3 +-
 .../internal/cli/commands/GcCommandDUnitTest.java  |    3 +-
 .../cli/commands/GemfireDataCommandsDUnitTest.java |    9 +-
 .../cli/commands/GetCommandIntegrationTest.java    |    3 +-
 .../cli/commands/GfshCommandIntegrationTest.java   |    3 +-
 .../cli/commands/GfshCommandJUnitTest.java         |   22 +-
 .../commands/HTTPServiceSSLSupportJUnitTest.java   |    2 +
 .../cli/commands/IndexCommandsIntegrationTest.java |    3 +-
 .../IndexCommandsShareConfigurationDUnitTest.java  |    3 +-
 .../ListDiskStoreCommandIntegrationTest.java       |    3 +-
 .../cli/commands/ListIndexCommandDUnitTest.java    |    3 +-
 .../cli/commands/ListIndexCommandJUnitTest.java    |    3 +-
 .../commands/ListJndiBindingCommandDUnitTest.java  |    3 +-
 .../cli/commands/ListJndiBindingCommandTest.java   |   74 +
 .../ManagedConnectionFactoryForTesting.java        |   58 +
 .../cli/commands/PutCommandIntegrationTest.java    |    3 +-
 .../cli/commands/QueryCommandIntegrationTest.java  |    3 +-
 .../cli/commands/RemoveCommandDUnitTest.java       |    3 +-
 .../cli/commands/ShellCommandsDUnitTest.java       |    3 +-
 .../cli/commands/ShowLogCommandDUnitTest.java      |    8 +-
 .../ShowMetricsCommandIntegrationTest.java         |    3 +-
 .../cli/commands/StartMemberUtilsTest.java         |   17 +-
 .../cli/commands/VersionCommandJUnitTest.java      |    3 +-
 .../internal/cli/domain/MyCacheListener.java       |   21 +-
 .../internal/cli/domain/MyCacheLoader.java         |   31 +-
 .../internal/cli/domain/MyCacheWriter.java         |    3 +-
 .../functions/CreateJndiBindingFunctionTest.java   |    3 +-
 .../functions/DataCommandFunctionJUnitTest.java    |    3 +-
 .../DataCommandFunctionWithPDXJUnitTest.java       |    3 +-
 .../functions/DestroyJndiBindingFunctionTest.java  |    3 +-
 .../ExportLogsFunctionIntegrationTest.java         |    3 +-
 .../cli/functions/ListJndiBindingFunctionTest.java |    3 +-
 .../functions/SizeExportLogsFunctionFileTest.java  |    3 +-
 .../cli/functions/SizeExportLogsFunctionTest.java  |    3 +-
 .../internal/cli/json/GfJsonArrayTest.java         |  155 ++
 .../internal/cli/json/GfJsonObjectTest.java        |  148 ++
 .../cli/result/CompositeResultDataTest.java        |  132 ++
 .../internal/cli/result/ErrorResultDataTest.java   |   75 +
 .../internal/cli/result/InfoResultDataTest.java    |   63 +
 .../internal/cli/result/TabularResultDataTest.java |   47 +-
 .../cli/shell/GfshMultilineCommandTest.java        |    3 +-
 .../ClusterConfigDeployJarDUnitTest.java           |    4 +
 .../ClusterConfigImportDUnitTest.java              |   34 +-
 .../ClusterConfigLocatorRestartDUnitTest.java      |   22 +-
 .../ClusterConfigStartMemberDUnitTest.java         |    5 +
 .../configuration/ClusterConfigTestBase.java       |    4 -
 .../ClusterConfigWithCallbacksDUnitTest.java       |   97 +
 .../configuration/DeployJarWithSSLDUnitTest.java   |  143 ++
 .../internal/deployment/FunctionScannerTest.java   |    3 +-
 .../pdx/PdxInstanceLoaderIntegrationTest.java      |   13 +
 .../apache/geode/pdx/PdxSerializableJUnitTest.java |   20 +-
 .../java/org/apache/geode/redis/SetsJUnitTest.java |   14 +-
 .../SecurityManagerLifecycleDistributedTest.java   |   60 +-
 .../apache/geode/test/dunit/DUnitBlackboard.java   |    2 +-
 .../java/org/apache/geode/test/dunit/Host.java     |   74 +-
 .../java/org/apache/geode/test/dunit/LocalVM.java  |    3 +-
 .../org/apache/geode/test/dunit/NetworkUtils.java  |   51 +-
 .../test/java/org/apache/geode/test/dunit/VM.java  |   85 +-
 .../examples/AsyncInvokeCallableExampleTest.java   |   13 +-
 .../examples/AsyncInvokeRunnableExampleTest.java   |    7 +-
 .../CatchingUnexpectedExceptionExampleTest.java    |    8 +-
 .../examples/DistributedTestRuleExampleTest.java   |    4 +-
 .../dunit/examples/InvokeRunnableExampleTest.java  |   11 +-
 .../examples/LocatorPortClusterExampleTest.java    |   12 +-
 .../test/dunit/internal/InternalBlackboard.java    |    2 +-
 .../dunit/internal/JUnit4DistributedTestCase.java  |    2 +-
 .../apache/geode/test/dunit/rules/CacheRule.java   |    6 +-
 .../rules/{CacheRule.java => ClientCacheRule.java} |  141 +-
 .../geode/test/dunit/rules/ClusterStartupRule.java |    1 +
 .../test/dunit/rules/DistributedDiskDirRule.java   |  275 +++
 .../test/dunit/rules/DistributedTestRule.java      |   18 +-
 .../geode/test/dunit/rules/SharedCountersRule.java |    4 +
 ...t.java => CacheRuleBuilderDistributedTest.java} |   53 +-
 ...RuleTest.java => CacheRuleDistributedTest.java} |  171 +-
 ...dDisconnectRuleAsClassRuleDistributedTest.java} |   11 +-
 ... DistributedDisconnectRuleDistributedTest.java} |   16 +-
 ...ava => DistributedTestRuleDistributedTest.java} |    6 +-
 ...java => SharedCountersRuleDistributedTest.java} |   21 +-
 ...va => SharedErrorCollectorDistributedTest.java} |   31 +-
 .../geode/test/dunit/standalone/DUnitLauncher.java |    2 +-
 ...st.java => GetCurrentVmNumDistributedTest.java} |   26 +-
 .../GetPidAndIdAfterBounceDistributedTest.java     |   23 +-
 .../dunit/tests/GetPidAndIdDistributedTest.java    |   11 +-
 .../apache/geode/test/junit/rules/DiskDirRule.java |  188 ++
 .../apache/geode/test/junit/rules/VMProvider.java  |    9 +
 .../cache/client/internal/cacheserver.truststore   |  Bin 844 -> 1658 bytes
 .../apache/geode/codeAnalysis/excludedClasses.txt  |    3 +-
 .../codeAnalysis/sanctionedDataSerializables.txt   | 2160 ++++++++++----------
 .../internal/cache/CacheServerWithZeroPort.xml     |   24 +
 geode-cq/build.gradle                              |    2 +-
 .../geode/internal/cache/PutAllCSDUnitTest.java    |    4 +-
 .../tier/sockets/DurableClientSimpleDUnitTest.java |    2 -
 .../security/ClientAuthorizationCQDUnitTest.java   |    2 +-
 .../codeAnalysis/sanctionedDataSerializables.txt   |    4 +-
 .../continuous_querying_whats_next.html.md.erb     |    2 +-
 .../query_additional/advanced_querying.html.md.erb |   12 +-
 .../query_additional/query_timeout.html.md.erb     |   36 +
 .../monitor_queries_for_low_memory.html.md.erb     |   27 +-
 geode-docs/images/inline-cache.png                 |  Bin 0 -> 18797 bytes
 .../compacting_disk_stores.html.md.erb             |    2 +-
 .../keeping_offline_disk_store_in_sync.html.md.erb |    2 +-
 .../logging/configuring_log4j2.html.md.erb         |    6 +-
 .../implementing_authorization.html.md.erb         |    2 +-
 geode-docs/reference/topics/cache_xml.html.md.erb  |    2 +-
 .../reference/topics/client-cache.html.md.erb      |    4 +-
 .../setting_up_a_multisite_system.html.md.erb      |    5 +-
 geode-docs/use_cases/book_intro.html.md.erb        |   32 +
 geode-docs/use_cases/inline-cache.html.md.erb      |   44 +
 .../geode/experimental/driver/DriverFactory.java   |   91 +-
 ...bufFunctionService.java => NoOpSerializer.java} |   25 +-
 .../geode/experimental/driver/ProtobufChannel.java |  154 +-
 .../geode/experimental/driver/ProtobufDriver.java  |   21 +-
 .../experimental/driver/ProtobufFunction.java      |   12 +-
 .../driver/ProtobufFunctionService.java            |    6 +-
 .../experimental/driver/ProtobufQueryService.java  |   12 +-
 .../geode/experimental/driver/ProtobufRegion.java  |   35 +-
 .../geode/experimental/driver/SocketFactory.java   |  203 ++
 .../geode/experimental/driver/ValueEncoder.java    |   44 +-
 .../geode/experimental/driver/ValueSerializer.java |   57 +
 .../driver/AllTypesJavaSerializer.java}            |   24 +-
 .../experimental/driver/IntegrationTestBase.java   |    6 +-
 .../geode/experimental/driver/JavaSerializer.java  |   61 +
 .../apache/geode/experimental/driver/SSLTest.java  |  187 ++
 .../experimental/driver/ValueEncoderTest.java      |    6 +-
 .../driver/ValueSerializerIntegrationTest.java     |   91 +
 ...he.geode.protocol.serialization.ValueSerializer |    2 +
 .../geode/experimental/driver/bogusclient.keystore |  Bin
 .../geode/experimental/driver/bogusserver.keystore |  Bin 0 -> 1299 bytes
 .../experimental/driver}/cacheserver.keystore      |  Bin
 .../experimental/driver/cacheserver.truststore     |  Bin 0 -> 2519 bytes
 .../geode/experimental/driver}/client.keystore     |  Bin
 .../geode/experimental/driver}/client.truststore   |  Bin
 geode-junit/build.gradle                           |    1 +
 .../junit/rules/DescribedExternalResource.java     |   23 +-
 .../geode/test/junit/rules/gfsh/GfshRule.java      |   53 +-
 .../serializable/SerializableTemporaryFolder.java  |    8 +-
 .../rules/serializable/SerializableTestName.java   |    2 +-
 geode-lucene/build.gradle                          |    2 +-
 .../cache/lucene/internal/InternalLuceneIndex.java |    1 +
 .../LuceneIndexCreationInProgressException.java    |   22 +-
 .../internal/LuceneIndexForPartitionedRegion.java  |   12 +-
 .../cache/lucene/internal/LuceneQueryImpl.java     |    2 +
 .../cache/lucene/internal/LuceneRawIndex.java      |    9 +-
 .../lucene/internal/LuceneRegionListener.java      |    2 +
 .../cache/lucene/internal/LuceneServiceImpl.java   |   31 +-
 .../internal/PartitionedRepositoryManager.java     |   26 +-
 .../internal/RawLuceneRepositoryManager.java       |   17 +-
 .../lucene/internal/cli/LuceneIndexCommands.java   |   28 +-
 .../sanctioned-geode-lucene-serializables.txt      |    1 +
 .../lucene/LuceneQueriesReindexDUnitTest.java      |    2 +
 ...ncyWithRegionCreatedBeforeReindexDUnitTest.java |  345 ++++
 .../LuceneIndexForPartitionedRegionTest.java       |   34 +
 .../LuceneIndexRecoveryHAIntegrationTest.java      |    7 +-
 .../lucene/internal/LuceneQueryImplJUnitTest.java  |    2 +-
 .../internal/LuceneServiceImplJUnitTest.java       |    5 +
 .../PartitionedRepositoryManagerJUnitTest.java     |   77 +-
 .../RawLuceneRepositoryManagerJUnitTest.java       |    9 +-
 .../internal/cli/LuceneIndexCommandsJUnitTest.java |    9 +-
 .../codeAnalysis/sanctionedDataSerializables.txt   |   60 +-
 geode-old-client-support/build.gradle              |    1 +
 geode-old-versions/build.gradle                    |    5 +
 .../test/dunit/standalone/VersionManager.java      |    5 +-
 .../dunit/standalone/VersionManagerJUnitTest.java  |    3 +-
 .../src/main/proto/v1/basicTypes.proto             |    7 +-
 .../src/main/proto/v1/clientProtocol.proto         |    4 +-
 .../src/main/proto/v1/connection_API.proto         |   16 +-
 geode-protobuf/build.gradle                        |    1 +
 .../v1/LocatorMessageExecutionContext.java         |   57 +-
 .../protobuf/v1/MessageExecutionContext.java       |   45 +-
 .../protobuf/v1/ProtobufCachePipeline.java         |    2 +-
 .../protobuf/v1/ProtobufOperationContext.java      |   34 +-
 .../protocol/protobuf/v1/ProtobufOpsProcessor.java |   18 +-
 .../protobuf/v1/ProtobufProtocolService.java       |   11 +-
 .../protobuf/v1/ProtobufSerializationService.java  |  143 +-
 .../protobuf/v1/ProtobufStreamProcessor.java       |    7 +-
 .../protobuf/v1/ServerMessageExecutionContext.java |   55 +-
 .../protobuf/v1/authentication/Authorizer.java     |   21 +-
 .../v1/authentication/AuthorizingCache.java        |   60 +
 .../v1/authentication/AuthorizingCacheImpl.java    |  194 ++
 .../authentication/AuthorizingFunctionService.java |   21 +-
 .../AuthorizingFunctionServiceImpl.java            |  123 ++
 .../v1/authentication/AuthorizingLocator.java      |   21 +-
 .../v1/authentication/AuthorizingLocatorImpl.java  |   59 +
 .../v1/authentication/NoSecurityAuthorizer.java    |   19 +-
 .../v1/authentication/NotLoggedInAuthorizer.java   |   23 +-
 .../v1/authentication/ShiroAuthorizer.java         |   22 +-
 .../AbstractFunctionRequestOperationHandler.java   |  146 --
 .../operations/ClearRequestOperationHandler.java   |   15 +-
 .../DisconnectClientRequestOperationHandler.java   |    5 +-
 ...cuteFunctionOnGroupRequestOperationHandler.java |   82 +-
 ...uteFunctionOnMemberRequestOperationHandler.java |   92 +-
 ...uteFunctionOnRegionRequestOperationHandler.java |   86 +-
 .../operations/GetAllRequestOperationHandler.java  |  114 +-
 .../GetRegionNamesRequestOperationHandler.java     |    8 +-
 .../v1/operations/GetRequestOperationHandler.java  |   34 +-
 .../v1/operations/GetServerOperationHandler.java   |   23 +-
 .../operations/GetSizeRequestOperationHandler.java |    9 +-
 .../v1/operations/KeySetOperationHandler.java      |   19 +-
 .../OqlQueryRequestOperationHandler.java           |   41 +-
 .../operations/PutAllRequestOperationHandler.java  |  104 +-
 .../PutIfAbsentRequestOperationHandler.java        |   25 +-
 .../v1/operations/PutRequestOperationHandler.java  |   22 +-
 .../operations/RemoveRequestOperationHandler.java  |   16 +-
 .../AuthenticationRequestOperationHandler.java     |   67 -
 .../security/HandshakeRequestOperationHandler.java |   87 +
 .../registry/ProtobufOperationContextRegistry.java |  102 +-
 .../protocol/protobuf/v1/state/AcceptMessages.java |   22 +-
 ...ionStateProcessor.java => ConnectionState.java} |   19 +-
 ...ionStateProcessor.java => InvalidSecurity.java} |   16 +-
 ...cySecurityProtobufConnectionStateProcessor.java |   39 -
 ...rotobufConnectionAuthorizingStateProcessor.java |   74 -
 ...teProcessor.java => RequireAuthentication.java} |   28 +-
 ...hakeStateProcessor.java => RequireVersion.java} |   28 +-
 ...tateProcessor.java => TerminateConnection.java} |    8 +-
 .../serialization/NoOpCustomValueSerializer.java   |   42 +-
 .../protocol/serialization/ValueSerializer.java    |   98 +
 .../OutputCapturingServerConnectionTest.java       |    7 +-
 .../tier/sockets/ProtobufServerConnectionTest.java |    7 +-
 .../internal/protocol/TestExecutionContext.java    |   10 +-
 .../protobuf/ProtobufStreamProcessorTest.java      |    3 +-
 .../protobuf/v1/AuthenticationIntegrationTest.java |   28 +-
 .../protobuf/v1/AuthorizationIntegrationTest.java  |    7 +-
 .../v1/DisconnectClientIntegrationTest.java        |    4 +-
 .../v1/ExecuteFunctionOnGroupIntegrationTest.java  |    5 +-
 .../v1/ExecuteFunctionOnMemberIntegrationTest.java |    5 +-
 .../v1/ExecuteFunctionOnRegionIntegrationTest.java |    5 +-
 .../protobuf/v1/TestSerializeAllSerializer.java    |   26 +-
 .../protocol/protobuf/v1/TestValueSerializer.java  |   41 +-
 .../v1/ValueSerializerIntegrationTest.java         |  227 ++
 .../v1/acceptance/CacheOperationsJUnitTest.java    |    2 +-
 .../LocatorConnectionAuthenticationDUnitTest.java  |    4 +-
 .../authentication/AuthorizingCacheImplTest.java   |  312 +++
 .../AuthorizingFunctionServiceImplTest.java        |  106 +
 .../ClearRequestOperationHandlerJUnitTest.java     |   11 +-
 ...ionOnGroupRequestOperationHandlerJUnitTest.java |   60 +-
 ...onOnMemberRequestOperationHandlerJUnitTest.java |   49 +-
 ...onOnRegionRequestOperationHandlerJUnitTest.java |   46 +-
 .../GetAllRequestOperationHandlerJUnitTest.java    |   23 +-
 .../GetAndPutJsonDocumentsDUnitTest.java           |   52 +-
 ...egionNamesRequestOperationHandlerJUnitTest.java |    6 +-
 .../GetRequestOperationHandlerJUnitTest.java       |   11 +-
 .../GetSizeRequestOperationHandlerJUnitTest.java   |   12 +-
 ...ueryRequestOperationHandlerIntegrationTest.java |    5 +-
 .../OqlQueryRequestOperationHandlerJUnitTest.java  |    7 +-
 .../PutAllRequestOperationHandlerJUnitTest.java    |   17 +-
 ...utIfAbsentRequestOperationHandlerJUnitTest.java |   35 +-
 .../PutRequestOperationHandlerJUnitTest.java       |   14 +-
 .../RemoveRequestOperationHandlerJUnitTest.java    |   12 +-
 ...he.geode.protocol.serialization.ValueSerializer |    2 +
 .../tools/pulse/internal/data/JMXDataUpdater.java  |   65 +-
 .../tools/pulse/internal/data/PulseConstants.java  |   16 +-
 .../internal/service/ClusterDetailsService.java    |    6 +-
 .../service/ClusterMembersRGraphService.java       |   13 +-
 .../internal/service/ClusterRegionService.java     |    7 +-
 .../internal/service/ClusterRegionsService.java    |    7 +-
 .../service/ClusterSelectedRegionService.java      |   15 +-
 .../internal/service/MemberDetailsService.java     |    9 +-
 .../internal/service/MemberRegionsService.java     |    7 +-
 geode-pulse/src/main/resources/gemfire.properties  |    1 -
 geode-pulse/src/main/webapp/clusterDetail.html     |    2 +-
 geode-pulse/src/main/webapp/dataBrowser.html       |    2 +-
 geode-pulse/src/main/webapp/memberDetails.html     |    2 +-
 .../src/main/webapp/properties/gemfire.properties  |    1 -
 geode-pulse/src/main/webapp/queryStatistics.html   |    6 +-
 geode-pulse/src/main/webapp/regionDetail.html      |    2 +-
 .../src/main/webapp/scripts/pulsescript/common.js  |   20 +
 .../geode/tools/pulse/tests/ui/PulseBase.java      |    7 +-
 geode-wan/build.gradle                             |    2 +-
 .../GatewayLegacyAuthenticationRegressionTest.java |   12 +-
 .../geode/internal/cache/wan/WANTestBase.java      |  100 +-
 .../ParallelGatewaySenderOperationsDUnitTest.java  |   38 +-
 .../SerialGatewaySenderOperationsDUnitTest.java    |   49 +-
 .../codeAnalysis/sanctionedDataSerializables.txt   |   28 +-
 geode-web/build.gradle                             |    1 +
 .../cli/commands/ConnectCommandWithSSLTest.java    |    8 +-
 gradle/docker.gradle                               |    1 -
 gradle/spotless.gradle                             |   27 +-
 869 files changed, 21988 insertions(+), 15402 deletions(-)
 copy extensions/geode-modules-assembly/release/tcserver/{geode-cs-tomcat-8 => geode-cs-tomcat-85}/context-fragment.xml (100%)
 copy extensions/geode-modules-assembly/release/tcserver/{geode-p2p-tomcat-8 => geode-p2p-tomcat-85}/context-fragment.xml (100%)
 create mode 100644 geode-assembly/src/test/java/org/apache/geode/management/internal/cli/commands/ImportClusterConfigTest.java
 create mode 100644 geode-assembly/src/test/java/org/apache/geode/rest/internal/web/controllers/PdxBasedCrudControllerIntegrationTest.java
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/result/TabularResultDataTest.java => geode-assembly/src/test/java/org/apache/geode/test/junit/rules/GfshRuleTest.java (56%)
 rename geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/{ColumnValue.java => ColumnData.java} (78%)
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheWriter.java => geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/EntryColumnData.java (55%)
 rename geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/{JdbcDUnitTest.java => JdbcDistributedTest.java} (66%)
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/MySqlJdbcAsyncWriterIntegrationTest.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/MySqlJdbcDistributedTest.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/MySqlJdbcLoaderIntegrationTest.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/MySqlJdbcWriterIntegrationTest.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/PostgresJdbcAsyncWriterIntegrationTest.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/PostgresJdbcDistributedTest.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/PostgresJdbcLoaderIntegrationTest.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/PostgresJdbcWriterIntegrationTest.java
 rename geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/{ColumnValueTest.java => ColumnDataTest.java} (81%)
 copy geode-core/src/test/java/org/apache/geode/test/dunit/examples/DistributedTestRuleExampleTest.java => geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/MySqlTableMetaDataManagerIntegrationTest.java (50%)
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/GfshCommandIntegrationTest.java => geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/PostgresTableMetaDataManagerIntegrationTest.java (50%)
 copy geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java => geode-connectors/src/test/java/org/apache/geode/test/junit/rules/DatabaseConnectionRule.java (68%)
 mode change 100755 => 100644
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheWriter.java => geode-connectors/src/test/java/org/apache/geode/test/junit/rules/InMemoryDerbyConnectionRule.java (54%)
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/test/junit/rules/MySqlConnectionRule.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/test/junit/rules/PostgresConnectionRule.java
 create mode 100644 geode-connectors/src/test/java/org/apache/geode/test/junit/rules/SqlDatabaseConnectionRule.java
 create mode 100644 geode-connectors/src/test/resources/org/apache/geode/connectors/jdbc/internal/mysql.yml
 create mode 100644 geode-connectors/src/test/resources/org/apache/geode/connectors/jdbc/internal/postgres.yml
 create mode 100644 geode-connectors/src/test/resources/org/apache/geode/connectors/jdbc/mysql.yml
 create mode 100644 geode-connectors/src/test/resources/org/apache/geode/connectors/jdbc/postgres.yml
 create mode 100644 geode-core/src/jmh/java/org/apache/geode/cache/partitioned/rebalance/RebalanceGrowingClusterBenchmark.java
 create mode 100644 geode-core/src/jmh/java/org/apache/geode/cache/partitioned/rebalance/RebalanceModelBuilder.java
 create mode 100644 geode-core/src/jmh/java/org/apache/geode/cache/partitioned/rebalance/RebalanceOnAddingMemberBenchmark.java
 create mode 100644 geode-core/src/jmh/java/org/apache/geode/cache/partitioned/rebalance/RebalanceRegionBenchmark.java
 copy geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataView.java => geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DefaultDiskDirs.java (53%)
 create mode 100644 geode-core/src/main/java/org/apache/geode/management/cli/Disabled.java
 rename geode-core/src/main/java/org/apache/geode/management/{internal/cli/commands => cli}/GfshCommand.java (69%)
 create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/ContextAwareSSLRMIClientSocketFactory.java
 create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DescribeJndiBindingCommand.java
 create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/InternalGfshCommand.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/dto/RegionAttributesInfo.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/dto/RegionDetails.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/dto/RegionMemberDetails.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/result/CliJsonSerializable.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/result/CliJsonSerializableFactory.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/result/ObjectResultData.java
 rename geode-core/src/{main/java/org/apache/geode/management/internal/cli/result/CliJsonSerializableIds.java => test/java/com/examples/UserGfshCommand.java} (68%)
 delete mode 100755 geode-core/src/test/java/org/apache/geode/cache/CacheRegionClearStatsDUnitTest.java
 rename geode-core/src/test/java/org/apache/geode/cache/{FinalStaticArrayShouldNotCauseSegFaultTest.java => FinalStaticArrayShouldNotCauseSegFaultRegressionTest.java} (60%)
 rename geode-core/src/test/java/org/apache/geode/cache/{MembershipAttributesAreSerializableTest.java => MembershipAttributesAreSerializableRegressionTest.java} (75%)
 create mode 100755 geode-core/src/test/java/org/apache/geode/cache/RegionClearStatsDistributedTest.java
 rename geode-core/src/test/java/org/apache/geode/cache/{RegionExpirationDUnitTest.java => RegionExpirationDistributedTest.java} (96%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/cache/client/internal/LocatorSSLJUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/distributed/internal/DlockAndTxlockRegressionTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/Bug51616JUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/CreateRegionFactoryNewInstanceRegressionTest.java
 copy geode-core/src/test/java/org/apache/geode/{test/dunit/rules/tests/DistributedTestRuleTest.java => internal/DSCODETest.java} (58%)
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/AfterRegionCreateNotBeforeRegionInitRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/BucketCreationGIIHARegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/BucketCreationRequesterCrashHARegressionTest.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/Bug33726JUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug34179TooManyFilesOpenJUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug34583JUnitTest.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/Bug37241DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug37377DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug37500JUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug39079DUnitTest.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/Bug40299DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug40632DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug41091DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug41733DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug41957DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug42055DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug45164DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug45934DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug47667DUnitTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/CleanupFailedInitWithDiskFilesRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/ClearDuringGiiOplogWithMissingCreateRegressionTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/ClearDuringNetSearchOplogRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/ClientTxCommitShouldNotHangRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/CreatePRWithLocalExpirationRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/DiskAccessExceptionDisablesServerRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/DiskRecoveryWithVersioningGiiRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/GiiDiskAccessExceptionRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/InitializedDiskRegionWithIoExceptionRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/OplogTooManyFilesOpenRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PRAccessorWithOverflowRegressionTest.java
 rename geode-core/src/test/java/org/apache/geode/internal/cache/{PRCustomPartitioningDUnitTest.java => PRCustomPartitioningDistributedTest.java} (96%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PREntrySetIteratorRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PRQueryDistributedTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PRQueryWithIndexAndPdxDistributedTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PRQueryWithIndexDistributedTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PRQueryWithOrderByDistributedTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PRQueryWithPdxDuringRebalanceRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PRWithIndexAfterRebalanceRegressionTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionQueryDUnitTest.java
 rename geode-core/src/test/java/org/apache/geode/internal/cache/{RegionListenerDUnitTest.java => RegionListenerDistributedTest.java} (85%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/RegionValuesIteratorAfterLocalInvalidateRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/RegisterInterestWithEvictionRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/StartServerWithXmlDUnitTest.java
 rename geode-core/src/test/java/org/apache/geode/internal/cache/execute/{FunctionExecution_ExceptionDUnitTest.java => FunctionExecutionWithExceptionDistributedTest.java} (98%)
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/ha/Bug36853EventsExpiryDUnitTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/ha/ClientSubscriptionExpiryDataLossRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/persistence/DefaultDiskDirsIntegrationTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/persistence/DefaultDiskDirsTest.java
 rename geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/{AcceptorImplClientQueueDUnitTest.java => AcceptorImplClientQueueDistributedTest.java} (84%)
 rename geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/{DataSerializerPropogationDUnitTest.java => DataSerializerPropagationDUnitTest.java} (80%)
 rename geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/{DescribeConnectionCommandJUnitTest.java => DescribeConnectionCommandIntegrationTest.java} (79%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DescribeJndiBindingCommandDUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ListJndiBindingCommandTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ManagedConnectionFactoryForTesting.java
 copy geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataView.java => geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheListener.java (63%)
 copy geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataView.java => geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheLoader.java (53%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/json/GfJsonArrayTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/json/GfJsonObjectTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/result/CompositeResultDataTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/result/ErrorResultDataTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/cli/result/InfoResultDataTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/configuration/ClusterConfigWithCallbacksDUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/internal/configuration/DeployJarWithSSLDUnitTest.java
 copy geode-core/src/test/java/org/apache/geode/test/dunit/rules/{CacheRule.java => ClientCacheRule.java} (52%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/test/dunit/rules/DistributedDiskDirRule.java
 copy geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/{CacheRuleTest.java => CacheRuleBuilderDistributedTest.java} (86%)
 rename geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/{CacheRuleTest.java => CacheRuleDistributedTest.java} (58%)
 rename geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/{DistributedDisconnectRuleAsClassRuleTest.java => DistributedDisconnectRuleAsClassRuleDistributedTest.java} (95%)
 rename geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/{DistributedDisconnectRuleTest.java => DistributedDisconnectRuleDistributedTest.java} (94%)
 rename geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/{DistributedTestRuleTest.java => DistributedTestRuleDistributedTest.java} (89%)
 rename geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/{SharedCountersRuleTest.java => SharedCountersRuleDistributedTest.java} (90%)
 rename geode-core/src/test/java/org/apache/geode/test/dunit/rules/tests/{SharedErrorCollectorTest.java => SharedErrorCollectorDistributedTest.java} (92%)
 copy geode-core/src/test/java/org/apache/geode/test/dunit/tests/{GetPidAndIdDistributedTest.java => GetCurrentVmNumDistributedTest.java} (64%)
 create mode 100644 geode-core/src/test/java/org/apache/geode/test/junit/rules/DiskDirRule.java
 create mode 100755 geode-core/src/test/resources/org/apache/geode/internal/cache/CacheServerWithZeroPort.xml
 create mode 100644 geode-docs/developing/query_additional/query_timeout.html.md.erb
 create mode 100644 geode-docs/images/inline-cache.png
 create mode 100644 geode-docs/use_cases/book_intro.html.md.erb
 create mode 100644 geode-docs/use_cases/inline-cache.html.md.erb
 copy geode-experimental-driver/src/main/java/org/apache/geode/experimental/driver/{ProtobufFunctionService.java => NoOpSerializer.java} (61%)
 create mode 100644 geode-experimental-driver/src/main/java/org/apache/geode/experimental/driver/SocketFactory.java
 create mode 100644 geode-experimental-driver/src/main/java/org/apache/geode/experimental/driver/ValueSerializer.java
 copy geode-experimental-driver/src/{main/java/org/apache/geode/experimental/driver/ProtobufFunctionService.java => test/java/org/apache/geode/experimental/driver/AllTypesJavaSerializer.java} (64%)
 create mode 100644 geode-experimental-driver/src/test/java/org/apache/geode/experimental/driver/JavaSerializer.java
 create mode 100644 geode-experimental-driver/src/test/java/org/apache/geode/experimental/driver/SSLTest.java
 create mode 100644 geode-experimental-driver/src/test/java/org/apache/geode/experimental/driver/ValueSerializerIntegrationTest.java
 create mode 100644 geode-experimental-driver/src/test/resources/META-INF/services/org.apache.geode.protocol.serialization.ValueSerializer
 copy geode-protobuf/src/test/resources/org/apache/geode/internal/protocol/protobuf/v1/acceptance/default.keystore => geode-experimental-driver/src/test/resources/org/apache/geode/experimental/driver/bogusclient.keystore (100%)
 create mode 100644 geode-experimental-driver/src/test/resources/org/apache/geode/experimental/driver/bogusserver.keystore
 copy {geode-core/src/test/resources/org/apache/geode/cache/client/internal => geode-experimental-driver/src/test/resources/org/apache/geode/experimental/driver}/cacheserver.keystore (100%)
 create mode 100644 geode-experimental-driver/src/test/resources/org/apache/geode/experimental/driver/cacheserver.truststore
 copy {geode-core/src/test/resources/org/apache/geode/cache/client/internal => geode-experimental-driver/src/test/resources/org/apache/geode/experimental/driver}/client.keystore (100%)
 copy {geode-core/src/test/resources/org/apache/geode/cache/client/internal => geode-experimental-driver/src/test/resources/org/apache/geode/experimental/driver}/client.truststore (100%)
 copy geode-protobuf-messages/src/main/proto/v1/connection_API.proto => geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationInProgressException.java (69%)
 create mode 100644 geode-lucene/src/test/java/org/apache/geode/cache/lucene/RebalanceWithRedundancyWithRegionCreatedBeforeReindexDUnitTest.java
 rename {geode-core/src/test => geode-old-versions/src/main}/java/org/apache/geode/test/dunit/standalone/VersionManager.java (98%)
 rename {geode-core => geode-old-versions}/src/test/java/org/apache/geode/test/dunit/standalone/VersionManagerJUnitTest.java (94%)
 copy geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockLessorDepartureHandler.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/Authorizer.java (58%)
 mode change 100755 => 100644
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingCache.java
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingCacheImpl.java
 copy geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockLessorDepartureHandler.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingFunctionService.java (58%)
 mode change 100755 => 100644
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingFunctionServiceImpl.java
 copy geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingLocator.java (69%)
 mode change 100755 => 100644
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingLocatorImpl.java
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheWriter.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/NoSecurityAuthorizer.java (67%)
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheWriter.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/NotLoggedInAuthorizer.java (64%)
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheWriter.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/ShiroAuthorizer.java (56%)
 delete mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/AbstractFunctionRequestOperationHandler.java
 delete mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/security/AuthenticationRequestOperationHandler.java
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/security/HandshakeRequestOperationHandler.java
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheWriter.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/AcceptMessages.java (59%)
 rename geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/{ProtobufConnectionStateProcessor.java => ConnectionState.java} (73%)
 rename geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/{NoSecurityProtobufConnectionStateProcessor.java => InvalidSecurity.java} (64%)
 delete mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/LegacySecurityProtobufConnectionStateProcessor.java
 delete mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/ProtobufConnectionAuthorizingStateProcessor.java
 rename geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/{ProtobufConnectionAuthenticatingStateProcessor.java => RequireAuthentication.java} (58%)
 rename geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/{ProtobufConnectionHandshakeStateProcessor.java => RequireVersion.java} (72%)
 rename geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/state/{ProtobufConnectionTerminatingStateProcessor.java => TerminateConnection.java} (75%)
 copy geode-core/src/test/java/org/apache/geode/internal/cache/SerializableMonth.java => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/serialization/NoOpCustomValueSerializer.java (53%)
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/protocol/serialization/ValueSerializer.java
 copy geode-core/src/test/java/org/apache/geode/management/internal/cli/domain/MyCacheWriter.java => geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/TestSerializeAllSerializer.java (58%)
 copy geode-core/src/test/java/org/apache/geode/internal/cache/SerializableMonth.java => geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/TestValueSerializer.java (52%)
 create mode 100644 geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/ValueSerializerIntegrationTest.java
 create mode 100644 geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingCacheImplTest.java
 create mode 100644 geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/authentication/AuthorizingFunctionServiceImplTest.java
 create mode 100644 geode-protobuf/src/test/resources/META-INF/services/org.apache.geode.protocol.serialization.ValueSerializer

-- 
To stop receiving notification emails like this one, please contact
zhouxj@apache.org.

[geode] 01/01: GEODE-4647: add a stats eventSecondaryQueueSizeId to track events in secondary gateway sender queue

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-4647
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 45bc7b7557d8f0a76a7b903ff09e8f642dc3de26
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Wed Feb 21 21:31:07 2018 -0800

    GEODE-4647: add a stats eventSecondaryQueueSizeId to track events in secondary
                gateway sender queue
---
 .../asyncqueue/internal/AsyncEventQueueStats.java  |   3 +
 .../internal/cache/AbstractBucketRegionQueue.java  |   8 +
 .../geode/internal/cache/AbstractRegionMap.java    |  12 ++
 .../apache/geode/internal/cache/BucketAdvisor.java |   2 +
 .../geode/internal/cache/BucketRegionQueue.java    |   2 +
 .../internal/cache/wan/AbstractGatewaySender.java  |   1 +
 .../internal/cache/wan/GatewaySenderStats.java     |  61 ++++++++
 .../wan/parallel/ParallelGatewaySenderQueue.java   |  16 ++
 .../wan/parallel/ParallelQueueRemovalMessage.java  |   3 +
 .../SerialAsyncEventQueueImplJUnitTest.java        |   3 +
 .../cache/wan/AsyncEventQueueTestBase.java         |  18 ++-
 .../asyncqueue/AsyncEventListenerDUnitTest.java    |   8 +-
 .../asyncqueue/AsyncEventQueueStatsDUnitTest.java  |  45 ++++--
 .../ParallelQueueRemovalMessageJUnitTest.java      |  12 ++
 .../bean/stats/AsyncEventQueueStatsJUnitTest.java  |   2 -
 .../geode/internal/cache/wan/WANTestBase.java      |  95 +++++++++++-
 .../ParallelGatewaySenderOperationsDUnitTest.java  |  26 ++--
 .../parallel/ParallelWANConflationDUnitTest.java   |  56 +++++--
 .../wan/parallel/ParallelWANStatsDUnitTest.java    | 167 +++++++++++++++++++++
 .../serial/SerialGatewaySenderQueueDUnitTest.java  |  13 +-
 .../wan/serial/SerialWANConflationDUnitTest.java   |  73 ++++++++-
 .../wan/serial/SerialWANPropagationDUnitTest.java  |   1 +
 22 files changed, 574 insertions(+), 53 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java
index 2f3029a..8d68cee 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java
@@ -42,6 +42,8 @@ public class AsyncEventQueueStats extends GatewaySenderStats {
             f.createLongCounter(EVENT_QUEUE_TIME, "Total time spent queueing events.",
                 "nanoseconds"),
             f.createIntGauge(EVENT_QUEUE_SIZE, "Size of the event queue.", "operations", false),
+            f.createIntGauge(EVENT_SECONDARY_QUEUE_SIZE, "Size of the secondary event queue.",
+                "operations", false),
             f.createIntGauge(TMP_EVENT_QUEUE_SIZE, "Size of the temporary events queue.",
                 "operations", false),
             f.createIntCounter(EVENTS_NOT_QUEUED_CONFLATED,
@@ -108,6 +110,7 @@ public class AsyncEventQueueStats extends GatewaySenderStats {
     eventsNotQueuedConflatedId = type.nameToId(EVENTS_NOT_QUEUED_CONFLATED);
     eventQueueTimeId = type.nameToId(EVENT_QUEUE_TIME);
     eventQueueSizeId = type.nameToId(EVENT_QUEUE_SIZE);
+    eventSecondaryQueueSizeId = type.nameToId(EVENT_SECONDARY_QUEUE_SIZE);
     eventTmpQueueSizeId = type.nameToId(TMP_EVENT_QUEUE_SIZE);
     eventsDistributedId = type.nameToId(EVENTS_DISTRIBUTED);
     eventsExceedingAlertThresholdId = type.nameToId(EVENTS_EXCEEDING_ALERT_THRESHOLD);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractBucketRegionQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractBucketRegionQueue.java
index 32dfb80..3607cda 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractBucketRegionQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractBucketRegionQueue.java
@@ -220,6 +220,10 @@ public abstract class AbstractBucketRegionQueue extends BucketRegion {
     this.gatewaySenderStats.decQueueSize(size);
   }
 
+  public void decSecondaryQueueSize(int size) {
+    this.gatewaySenderStats.decSecondaryQueueSize(size);
+  }
+
   public void decQueueSize() {
     this.gatewaySenderStats.decQueueSize();
   }
@@ -228,6 +232,10 @@ public abstract class AbstractBucketRegionQueue extends BucketRegion {
     this.gatewaySenderStats.incQueueSize(size);
   }
 
+  public void incSecondaryQueueSize(int size) {
+    this.gatewaySenderStats.incSecondaryQueueSize(size);
+  }
+
   public void incQueueSize() {
     this.gatewaySenderStats.incQueueSize();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
index 493410b..71ccf51 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java
@@ -636,6 +636,10 @@ public abstract class AbstractRegionMap
             tombstones.put(tag, newRe);
           } else {
             _getOwner().updateSizeOnCreate(key, _getOwner().calculateRegionEntryValueSize(newRe));
+            if (_getOwner() instanceof BucketRegionQueue) {
+              BucketRegionQueue brq = (BucketRegionQueue) _getOwner();
+              brq.incSecondaryQueueSize(1);
+            }
           }
           incEntryCount(1);
           lruEntryUpdate(newRe);
@@ -661,6 +665,10 @@ public abstract class AbstractRegionMap
         } else {
           _getOwner().updateSizeOnCreate(re.getKey(),
               _getOwner().calculateRegionEntryValueSize(re));
+          if (_getOwner() instanceof BucketRegionQueue) {
+            BucketRegionQueue brq = (BucketRegionQueue) _getOwner();
+            brq.incSecondaryQueueSize(1);
+          }
         }
       }
       incEntryCount(size());
@@ -1044,6 +1052,10 @@ public abstract class AbstractRegionMap
           } finally {
             if (done && result) {
               initialImagePutEntry(newRe);
+              if (owner instanceof BucketRegionQueue) {
+                BucketRegionQueue brq = (BucketRegionQueue) owner;
+                brq.addToEventQueue(key, done, event);
+              }
             }
             if (!done) {
               removeEntry(key, newRe, false);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
index bfe7472..b2c952b 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
@@ -314,6 +314,7 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
           if (b instanceof BucketRegionQueue) {
             BucketRegionQueue brq = (BucketRegionQueue) b;
             brq.decQueueSize(brq.size());
+            brq.incSecondaryQueueSize(brq.size());
           }
         }
       }
@@ -1191,6 +1192,7 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
           if (br instanceof BucketRegionQueue) { // Shouldn't it be AbstractBucketRegionQueue
             BucketRegionQueue brq = (BucketRegionQueue) br;
             brq.incQueueSize(brq.size());
+            brq.decSecondaryQueueSize(brq.size());
           }
           if (br != null && br instanceof BucketRegion) {
             ((BucketRegion) br).afterAcquiringPrimaryState();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegionQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegionQueue.java
index 4e5451e..0baa204 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegionQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegionQueue.java
@@ -449,6 +449,8 @@ public class BucketRegionQueue extends AbstractBucketRegionQueue {
     }
     if (this.getBucketAdvisor().isPrimary()) {
       incQueueSize(1);
+    } else {
+      incSecondaryQueueSize(1);
     }
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySender.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySender.java
index 034d810..b50f2e6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySender.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySender.java
@@ -1101,6 +1101,7 @@ public abstract class AbstractGatewaySender implements GatewaySender, Distributi
     }
 
     statistics.setQueueSize(0);
+    statistics.setSecondaryQueueSize(0);
     statistics.setTempQueueSize(0);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderStats.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderStats.java
index 2b93082..15ff18e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderStats.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderStats.java
@@ -46,6 +46,8 @@ public class GatewaySenderStats {
   protected static final String EVENT_QUEUE_TIME = "eventQueueTime";
   /** Name of the event queue size statistic */
   protected static final String EVENT_QUEUE_SIZE = "eventQueueSize";
+  /** Name of the event secondary queue size statistic */
+  protected static final String EVENT_SECONDARY_QUEUE_SIZE = "eventSecondaryQueueSize";
   /** Name of the event temporary queue size statistic */
   protected static final String TMP_EVENT_QUEUE_SIZE = "tempQueueSize";
   /** Name of the events distributed statistic */
@@ -104,6 +106,8 @@ public class GatewaySenderStats {
   protected static int eventQueueTimeId;
   /** Id of the event queue size statistic */
   protected static int eventQueueSizeId;
+  /** Id of the event in secondary queue size statistic */
+  protected static int eventSecondaryQueueSizeId;
   /** Id of the temp event queue size statistic */
   protected static int eventTmpQueueSizeId;
   /** Id of the events distributed statistic */
@@ -168,6 +172,8 @@ public class GatewaySenderStats {
             f.createLongCounter(EVENT_QUEUE_TIME, "Total time spent queueing events.",
                 "nanoseconds"),
             f.createIntGauge(EVENT_QUEUE_SIZE, "Size of the event queue.", "operations", false),
+            f.createIntGauge(EVENT_SECONDARY_QUEUE_SIZE, "Size of secondary event queue.",
+                "operations", false),
             f.createIntGauge(TMP_EVENT_QUEUE_SIZE, "Size of the temporary events.", "operations",
                 false),
             f.createIntCounter(EVENTS_NOT_QUEUED_CONFLATED,
@@ -238,6 +244,7 @@ public class GatewaySenderStats {
     eventsNotQueuedConflatedId = type.nameToId(EVENTS_NOT_QUEUED_CONFLATED);
     eventQueueTimeId = type.nameToId(EVENT_QUEUE_TIME);
     eventQueueSizeId = type.nameToId(EVENT_QUEUE_SIZE);
+    eventSecondaryQueueSizeId = type.nameToId(EVENT_SECONDARY_QUEUE_SIZE);
     eventTmpQueueSizeId = type.nameToId(TMP_EVENT_QUEUE_SIZE);
     eventsDistributedId = type.nameToId(EVENTS_DISTRIBUTED);
     eventsExceedingAlertThresholdId = type.nameToId(EVENTS_EXCEEDING_ALERT_THRESHOLD);
@@ -358,6 +365,15 @@ public class GatewaySenderStats {
   }
 
   /**
+   * Returns the current value of the "eventSecondaryQueueSize" stat.
+   *
+   * @return the current value of the "eventSecondaryQueueSize" stat
+   */
+  public int getEventSecondaryQueueSize() {
+    return this.stats.getInt(eventSecondaryQueueSizeId);
+  }
+
+  /**
    * Returns the current value of the "tempQueueSize" stat.
    *
    * @return the current value of the "tempQueueSize" stat.
@@ -462,6 +478,15 @@ public class GatewaySenderStats {
   }
 
   /**
+   * Sets the "eventSecondaryQueueSize" stat.
+   *
+   * @param size The size of the secondary queue
+   */
+  public void setSecondaryQueueSize(int size) {
+    this.stats.setInt(eventSecondaryQueueSizeId, size);
+  }
+
+  /**
    * Sets the "tempQueueSize" stat.
    *
    * @param size The size of the temp queue
@@ -479,6 +504,14 @@ public class GatewaySenderStats {
   }
 
   /**
+   * Increments the "eventSecondaryQueueSize" stat by 1.
+   */
+  public void incSecondaryQueueSize() {
+    this.stats.incInt(eventSecondaryQueueSizeId, 1);
+    assert this.stats.getInt(eventSecondaryQueueSizeId) >= 0;
+  }
+
+  /**
    * Increments the "tempQueueSize" stat by 1.
    */
   public void incTempQueueSize() {
@@ -495,6 +528,16 @@ public class GatewaySenderStats {
   }
 
   /**
+   * Increments the "eventSecondaryQueueSize" stat by given delta.
+   *
+   * @param delta an integer by which secondary queue size to be increased
+   */
+  public void incSecondaryQueueSize(int delta) {
+    this.stats.incInt(eventSecondaryQueueSizeId, delta);
+    assert this.stats.getInt(eventSecondaryQueueSizeId) >= 0;
+  }
+
+  /**
    * Increments the "tempQueueSize" stat by given delta.
    *
    * @param delta an integer by which temp queue size to be increased
@@ -511,6 +554,14 @@ public class GatewaySenderStats {
   }
 
   /**
+   * Decrements the "eventSecondaryQueueSize" stat by 1.
+   */
+  public void decSecondaryQueueSize() {
+    this.stats.incInt(eventSecondaryQueueSizeId, -1);
+    assert this.stats.getInt(eventSecondaryQueueSizeId) >= 0;
+  }
+
+  /**
    * Decrements the "tempQueueSize" stat by 1.
    */
   public void decTempQueueSize() {
@@ -527,6 +578,16 @@ public class GatewaySenderStats {
   }
 
   /**
+   * Decrements the "eventSecondaryQueueSize" stat by given delta.
+   *
+   * @param delta an integer by which secondary queue size to be increased
+   */
+  public void decSecondaryQueueSize(int delta) {
+    this.stats.incInt(eventSecondaryQueueSizeId, -delta);
+    assert this.stats.getInt(eventSecondaryQueueSizeId) >= 0;
+  }
+
+  /**
    * Decrements the "tempQueueSize" stat by given delta.
    *
    * @param delta an integer by which temp queue size to be increased
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java
index 89880fc..fe2cf60 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java
@@ -1401,6 +1401,22 @@ public class ParallelGatewaySenderQueue implements RegionQueue {
     return (BucketRegionQueue) prQ.getDataStore().getLocalBucketById(bucketId);
   }
 
+  public String displayContent() {
+    int size = 0;
+    StringBuffer sb = new StringBuffer();
+    for (PartitionedRegion prQ : this.userRegionNameToshadowPRMap.values()) {
+      if (prQ != null && prQ.getDataStore() != null) {
+        Set<BucketRegion> allLocalBuckets = prQ.getDataStore().getAllLocalBucketRegions();
+        for (BucketRegion br : allLocalBuckets) {
+          if (br.size() > 0) {
+            sb.append("bucketId=" + br.getId() + ":" + br.keySet() + ";");
+          }
+        }
+      }
+    }
+    return sb.toString();
+  }
+
   public int localSize() {
     return localSize(false);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java
index 39fedbf..df89e36 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java
@@ -183,6 +183,9 @@ public class ParallelQueueRemovalMessage extends PooledDistributionMessage {
     final boolean isDebugEnabled = logger.isDebugEnabled();
     try {
       brq.destroyKey(key);
+      if (!brq.getBucketAdvisor().isPrimary()) {
+        prQ.getParallelGatewaySender().getStatistics().decSecondaryQueueSize();
+      }
       if (isDebugEnabled) {
         logger.debug("Destroyed the key {} for shadowPR {} for bucket {}", key, prQ.getName(),
             brq.getId());
diff --git a/geode-core/src/test/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImplJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImplJUnitTest.java
index eb8ad01..4c5caa2 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImplJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImplJUnitTest.java
@@ -50,14 +50,17 @@ public class SerialAsyncEventQueueImplJUnitTest {
     attrs.id = AsyncEventQueueImpl.ASYNC_EVENT_QUEUE_PREFIX + "id";
     SerialAsyncEventQueueImpl queue = new SerialAsyncEventQueueImpl(cache, attrs);
     queue.getStatistics().incQueueSize(5);
+    queue.getStatistics().incSecondaryQueueSize(6);
     queue.getStatistics().incTempQueueSize(10);
 
     assertEquals(5, queue.getStatistics().getEventQueueSize());
+    assertEquals(6, queue.getStatistics().getEventSecondaryQueueSize());
     assertEquals(10, queue.getStatistics().getTempEventQueueSize());
 
     queue.stop();
 
     assertEquals(0, queue.getStatistics().getEventQueueSize());
+    assertEquals(0, queue.getStatistics().getEventSecondaryQueueSize());
     assertEquals(0, queue.getStatistics().getTempEventQueueSize());
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java
index 8366ca7..2074e9e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java
@@ -718,19 +718,33 @@ public class AsyncEventQueueTestBase extends JUnit4DistributedTestCase {
   }
 
   public static void checkAsyncEventQueueStats(String queueId, final int queueSize,
-      final int eventsReceived, final int eventsQueued, final int eventsDistributed) {
+      int secondaryQueueSize, final int eventsReceived, final int eventsQueued,
+      final int eventsDistributed) {
     Set<AsyncEventQueue> asyncQueues = cache.getAsyncEventQueues();
     AsyncEventQueue queue = null;
+    boolean isParallel = false;
     for (AsyncEventQueue q : asyncQueues) {
+      isParallel = q.isParallel();
       if (q.getId().equals(queueId)) {
         queue = q;
         break;
       }
     }
     final AsyncEventQueueStats statistics = ((AsyncEventQueueImpl) queue).getStatistics();
-    Awaitility.await().atMost(60, TimeUnit.SECONDS)
+    Awaitility.await().atMost(120, TimeUnit.SECONDS)
         .until(() -> assertEquals("Expected queue entries: " + queueSize + " but actual entries: "
             + statistics.getEventQueueSize(), queueSize, statistics.getEventQueueSize()));
+    if (isParallel) {
+      Awaitility.await().atMost(60, TimeUnit.SECONDS).until(() -> {
+        assertEquals(
+            "Expected events in the secondary queue is " + secondaryQueueSize + ", but actual is "
+                + statistics.getEventSecondaryQueueSize(),
+            secondaryQueueSize, statistics.getEventSecondaryQueueSize());
+      });
+    } else {
+      // for serial queue, evenvSecondaryQueueSize is not used
+      assertEquals(0, statistics.getEventSecondaryQueueSize());
+    }
     assertEquals(queueSize, statistics.getEventQueueSize());
     assertEquals(eventsReceived, statistics.getEventsReceived());
     assertEquals(eventsQueued, statistics.getEventsQueued());
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java
index aa1db53..442ef9f 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java
@@ -1521,8 +1521,8 @@ public class AsyncEventListenerDUnitTest extends AsyncEventQueueTestBase {
     LogWriterUtils.getLogWriter().info("Primary buckets on vm2: " + primaryBucketsvm2);
 
     // before shutdown vm2, both vm1 and vm2 should have 40 events in primary queue
-    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 80, 80, 0));
-    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 80, 80, 0));
+    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 40, 80, 80, 0));
+    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 40, 80, 80, 0));
 
     // ---------------------------- Kill vm2 --------------------------
     vm2.invoke(() -> AsyncEventQueueTestBase.killSender());
@@ -1549,8 +1549,8 @@ public class AsyncEventListenerDUnitTest extends AsyncEventQueueTestBase {
         .info("After shutdown vm2, started vm3, Primary buckets on vm1: " + primaryBucketsvm1);
 
     // vm1.invoke(()->AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 80, 80, 80, 0));
-    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 80, 80, 0));
-    vm3.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 0, 0, 0));
+    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 40, 80, 80, 0));
+    vm3.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 40, 0, 0, 0));
 
     vm3.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln"));
     vm1.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln"));
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventQueueStatsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventQueueStatsDUnitTest.java
index 935a650..849b823 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventQueueStatsDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventQueueStatsDUnitTest.java
@@ -74,9 +74,10 @@ public class AsyncEventQueueStatsDUnitTest extends AsyncEventQueueTestBase {
                                                                                      // sender
     Wait.pause(2000);// give some time for system to become stable
 
-    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 1000, 1000, 1000));
+    vm1.invoke(
+        () -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 0, 1000, 1000, 1000));
     vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueBatchStats("ln", 10));
-    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 1000, 0, 0));
+    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 0, 1000, 0, 0));
     vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueBatchStats("ln", 0));
   }
 
@@ -119,19 +120,43 @@ public class AsyncEventQueueStatsDUnitTest extends AsyncEventQueueTestBase {
     vm4.invoke(() -> AsyncEventQueueTestBase.createReplicatedRegionWithAsyncEventQueue(
         getTestMethodName() + "_RR", "ln1,ln2", isOffHeap()));
 
+    vm1.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln1"));
+    vm2.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln1"));
+    vm3.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln1"));
+    vm4.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln1"));
+    vm1.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln2"));
+    vm2.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln2"));
+    vm3.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln2"));
+    vm4.invoke(() -> AsyncEventQueueTestBase.pauseAsyncEventQueue("ln2"));
+
     vm1.invoke(() -> AsyncEventQueueTestBase.doPuts(getTestMethodName() + "_RR", 1000));
 
+    vm1.invoke(
+        () -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln1", 1000, 0, 1000, 1000, 0));
+    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln2", 1000, 0, 1000, 0, 0));
+
+    vm1.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln1"));
+    vm2.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln1"));
+    vm3.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln1"));
+    vm4.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln1"));
+    vm1.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln2"));
+    vm2.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln2"));
+    vm3.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln2"));
+    vm4.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln2"));
+
     vm1.invoke(() -> AsyncEventQueueTestBase.validateAsyncEventListener("ln1", 1000));
     vm1.invoke(() -> AsyncEventQueueTestBase.validateAsyncEventListener("ln2", 1000));
     Wait.pause(2000);// give some time for system to become stable
 
-    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln1", 0, 1000, 1000, 1000));
+    vm1.invoke(
+        () -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln1", 0, 0, 1000, 1000, 1000));
     vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueBatchStats("ln1", 10));
-    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln2", 0, 1000, 1000, 1000));
+    vm1.invoke(
+        () -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln2", 0, 0, 1000, 1000, 1000));
     vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueBatchStats("ln2", 10));
-    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln1", 0, 1000, 0, 0));
+    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln1", 0, 0, 1000, 0, 0));
     vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueBatchStats("ln1", 0));
-    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln2", 0, 1000, 0, 0));
+    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln2", 0, 0, 1000, 0, 0));
     vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueBatchStats("ln2", 0));
   }
 
@@ -229,11 +254,12 @@ public class AsyncEventQueueStatsDUnitTest extends AsyncEventQueueTestBase {
     vm1.invoke(() -> AsyncEventQueueTestBase.validateAsyncEventListener("ln", 1500));
 
     Wait.pause(2000);// give some time for system to become stable
-    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 1500, 1500, 1500));
+    vm1.invoke(
+        () -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 0, 1500, 1500, 1500));
     vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueUnprocessedStats("ln", 0));
 
 
-    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 1500, 0, 0));
+    vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 0, 1500, 0, 0));
     vm2.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueUnprocessedStats("ln", 1500));
   }
 
@@ -301,7 +327,8 @@ public class AsyncEventQueueStatsDUnitTest extends AsyncEventQueueTestBase {
     vm1.invoke(() -> AsyncEventQueueTestBase.validateAsyncEventListener("ln", 1000));
 
     Wait.pause(2000);// give some time for system to become stable
-    vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 2000, 2000, 1000));
+    vm1.invoke(
+        () -> AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 0, 0, 2000, 2000, 1000));
     vm1.invoke(() -> AsyncEventQueueTestBase.checkAsyncEventQueueConflatedStats("ln", 500));
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessageJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessageJUnitTest.java
index 5e0f704..d1ea59f 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessageJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelQueueRemovalMessageJUnitTest.java
@@ -65,6 +65,8 @@ import org.apache.geode.internal.cache.eviction.EvictionController;
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.cache.wan.AbstractGatewaySender;
 import org.apache.geode.internal.cache.wan.GatewaySenderEventImpl;
+import org.apache.geode.internal.cache.wan.GatewaySenderStats;
+import org.apache.geode.internal.statistics.DummyStatisticsFactory;
 import org.apache.geode.test.fake.Fakes;
 import org.apache.geode.test.junit.categories.UnitTest;
 
@@ -81,6 +83,7 @@ public class ParallelQueueRemovalMessageJUnitTest {
   private PartitionedRegion rootRegion;
   private BucketRegionQueue bucketRegionQueue;
   private BucketRegionQueueHelper bucketRegionQueueHelper;
+  private GatewaySenderStats stats;
 
   @Before
   public void setUpGemFire() {
@@ -116,6 +119,8 @@ public class ParallelQueueRemovalMessageJUnitTest {
     when(this.queueRegion.getParallelGatewaySender()).thenReturn(this.sender);
     when(this.sender.getQueues()).thenReturn(null);
     when(this.sender.getDispatcherThreads()).thenReturn(1);
+    stats = new GatewaySenderStats(new DummyStatisticsFactory(), "ln");
+    when(this.sender.getStatistics()).thenReturn(stats);
   }
 
   private void createRootRegion() {
@@ -183,6 +188,7 @@ public class ParallelQueueRemovalMessageJUnitTest {
     // Validate initial BucketRegionQueue state
     assertFalse(this.bucketRegionQueue.isInitialized());
     assertEquals(0, this.bucketRegionQueue.getFailedBatchRemovalMessageKeys().size());
+    stats.setSecondaryQueueSize(1);
 
     // Create and process a ParallelQueueRemovalMessage (causes the failedBatchRemovalMessageKeys to
     // add a key)
@@ -190,6 +196,8 @@ public class ParallelQueueRemovalMessageJUnitTest {
 
     // Validate BucketRegionQueue after processing ParallelQueueRemovalMessage
     assertEquals(1, this.bucketRegionQueue.getFailedBatchRemovalMessageKeys().size());
+    // failed BatchRemovalMessage will not modify stats
+    assertEquals(1, stats.getEventSecondaryQueueSize());
   }
 
   @Test
@@ -201,6 +209,7 @@ public class ParallelQueueRemovalMessageJUnitTest {
     // Add an event to the BucketRegionQueue and verify BucketRegionQueue state
     this.bucketRegionQueueHelper.addEvent(KEY);
     assertEquals(1, this.bucketRegionQueue.size());
+    assertEquals(1, stats.getEventSecondaryQueueSize());
 
     // Create and process a ParallelQueueRemovalMessage (causes the value of the entry to be set to
     // DESTROYED)
@@ -210,6 +219,7 @@ public class ParallelQueueRemovalMessageJUnitTest {
     // Clean up destroyed tokens and validate BucketRegionQueue
     this.bucketRegionQueueHelper.cleanUpDestroyedTokensAndMarkGIIComplete();
     assertEquals(0, this.bucketRegionQueue.size());
+    assertEquals(0, stats.getEventSecondaryQueueSize());
   }
 
   @Test
@@ -247,6 +257,7 @@ public class ParallelQueueRemovalMessageJUnitTest {
     // Add an event to the BucketRegionQueue and verify BucketRegionQueue state
     GatewaySenderEventImpl event = this.bucketRegionQueueHelper.addEvent(KEY);
     assertEquals(1, this.bucketRegionQueue.size());
+    assertEquals(1, stats.getEventSecondaryQueueSize());
 
     // Add a mock GatewaySenderEventImpl to the temp queue
     BlockingQueue<GatewaySenderEventImpl> tempQueue = createTempQueueAndAddEvent(processor, event);
@@ -259,6 +270,7 @@ public class ParallelQueueRemovalMessageJUnitTest {
 
     // Validate temp queue is empty after processing ParallelQueueRemovalMessage
     assertEquals(0, tempQueue.size());
+    assertEquals(0, stats.getEventSecondaryQueueSize());
 
     // Clean up destroyed tokens
     this.bucketRegionQueueHelper.cleanUpDestroyedTokensAndMarkGIIComplete();
diff --git a/geode-core/src/test/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java
index c4d0b7c..bdff063 100644
--- a/geode-core/src/test/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java
@@ -53,8 +53,6 @@ public class AsyncEventQueueStatsJUnitTest extends MBeanStatsTestCase {
     sample();
 
     assertEquals(0, getEventQueueSize());
-
-
   }
 
   private int getEventQueueSize() {
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java
index 3799083..614804b 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java
@@ -124,9 +124,11 @@ import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.ServerLocation;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.AvailablePort;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
+import org.apache.geode.internal.cache.AbstractBucketRegionQueue;
 import org.apache.geode.internal.cache.BucketRegion;
 import org.apache.geode.internal.cache.CacheConfig;
 import org.apache.geode.internal.cache.CacheServerImpl;
@@ -142,6 +144,8 @@ import org.apache.geode.internal.cache.execute.data.Order;
 import org.apache.geode.internal.cache.execute.data.OrderId;
 import org.apache.geode.internal.cache.execute.data.Shipment;
 import org.apache.geode.internal.cache.execute.data.ShipmentId;
+import org.apache.geode.internal.cache.partitioned.BecomePrimaryBucketMessage;
+import org.apache.geode.internal.cache.partitioned.BecomePrimaryBucketMessage.BecomePrimaryBucketResponse;
 import org.apache.geode.internal.cache.partitioned.PRLocallyDestroyedException;
 import org.apache.geode.internal.cache.tier.sockets.CacheServerStats;
 import org.apache.geode.internal.cache.tier.sockets.CacheServerTestUtil;
@@ -932,6 +936,8 @@ public class WANTestBase extends DistributedTestCase {
       props.setProperty(JMX_MANAGER_HTTP_PORT, "0");
     }
     props.setProperty(MCAST_PORT, "0");
+    String logLevel = System.getProperty(LOG_LEVEL, "info");
+    props.setProperty(LOG_LEVEL, logLevel);
     props.setProperty(LOCATORS, "localhost[" + locPort + "]");
     String logLevel = System.getProperty(LOG_LEVEL, "info");
     props.setProperty(LOG_LEVEL, logLevel);
@@ -1132,12 +1138,57 @@ public class WANTestBase extends DistributedTestCase {
     return connectionInfo;
   }
 
+  public static void moveAllPrimaryBuckets(String senderId, final DistributedMember destination,
+      final String regionName) {
+
+    AbstractGatewaySender sender = (AbstractGatewaySender) cache.getGatewaySender(senderId);
+    final RegionQueue regionQueue;
+    regionQueue = sender.getQueues().toArray(new RegionQueue[1])[0];
+    if (sender.isParallel()) {
+      ConcurrentParallelGatewaySenderQueue parallelGatewaySenderQueue =
+          (ConcurrentParallelGatewaySenderQueue) regionQueue;
+      PartitionedRegion prQ =
+          parallelGatewaySenderQueue.getRegions().toArray(new PartitionedRegion[1])[0];
+
+      Set<Integer> primaryBucketIds = prQ.getDataStore().getAllLocalPrimaryBucketIds();
+      for (int bid : primaryBucketIds) {
+        movePrimary(destination, regionName, bid);
+      }
+
+      // double check after moved all primary buckets
+      primaryBucketIds = prQ.getDataStore().getAllLocalPrimaryBucketIds();
+      assertTrue(primaryBucketIds.isEmpty());
+    }
+  }
+
+  public static void movePrimary(final DistributedMember destination, final String regionName,
+      final int bucketId) {
+    PartitionedRegion region = (PartitionedRegion) cache.getRegion(regionName);
+
+    BecomePrimaryBucketResponse response = BecomePrimaryBucketMessage
+        .send((InternalDistributedMember) destination, region, bucketId, true);
+    assertNotNull(response);
+    assertTrue(response.waitForResponse());
+  }
+
+  public static int getSecondaryQueueSizeInStats(String senderId) {
+    AbstractGatewaySender sender = (AbstractGatewaySender) cache.getGatewaySender(senderId);
+    GatewaySenderStats statistics = sender.getStatistics();
+    return statistics.getEventSecondaryQueueSize();
+  }
+
   public static List<Integer> getSenderStats(String senderId, final int expectedQueueSize) {
     AbstractGatewaySender sender = (AbstractGatewaySender) cache.getGatewaySender(senderId);
     GatewaySenderStats statistics = sender.getStatistics();
     if (expectedQueueSize != -1) {
       final RegionQueue regionQueue;
       regionQueue = sender.getQueues().toArray(new RegionQueue[1])[0];
+      if (sender.isParallel()) {
+        ConcurrentParallelGatewaySenderQueue parallelGatewaySenderQueue =
+            (ConcurrentParallelGatewaySenderQueue) regionQueue;
+        PartitionedRegion pr =
+            parallelGatewaySenderQueue.getRegions().toArray(new PartitionedRegion[1])[0];
+      }
       Awaitility.await().atMost(120, TimeUnit.SECONDS)
           .until(() -> assertEquals("Expected queue entries: " + expectedQueueSize
               + " but actual entries: " + regionQueue.size(), expectedQueueSize,
@@ -1154,6 +1205,40 @@ public class WANTestBase extends DistributedTestCase {
     stats.add(statistics.getEventsNotQueuedConflated());
     stats.add(statistics.getEventsConflatedFromBatches());
     stats.add(statistics.getConflationIndexesMapSize());
+    stats.add(statistics.getEventSecondaryQueueSize());
+    return stats;
+  }
+
+  protected static int getTotalBucketQueueSize(PartitionedRegion prQ, boolean isPrimary) {
+    int size = 0;
+    if (prQ != null) {
+      Set<Map.Entry<Integer, BucketRegion>> allBuckets = prQ.getDataStore().getAllLocalBuckets();
+      List<Integer> thisProcessorBuckets = new ArrayList<Integer>();
+
+      for (Map.Entry<Integer, BucketRegion> bucketEntry : allBuckets) {
+        BucketRegion bucket = bucketEntry.getValue();
+        int bId = bucket.getId();
+        if ((isPrimary && bucket.getBucketAdvisor().isPrimary())
+            || (!isPrimary && !bucket.getBucketAdvisor().isPrimary())) {
+          size += bucket.size();
+        }
+      }
+    }
+    return size;
+  }
+
+  public static List<Integer> getSenderStatsForDroppedEvents(String senderId) {
+    AbstractGatewaySender sender = (AbstractGatewaySender) cache.getGatewaySender(senderId);
+    GatewaySenderStats statistics = sender.getStatistics();
+    ArrayList<Integer> stats = new ArrayList<Integer>();
+    int eventNotQueued = statistics.getEventsNotQueuedAtYetRunningPrimarySender();
+    if (eventNotQueued > 0) {
+      logger.info(
+          "Found " + eventNotQueued + " not queued events due to primary sender is yet running");
+    }
+    stats.add(eventNotQueued);
+    stats.add(statistics.getEventsNotQueued());
+    stats.add(statistics.getEventsNotQueuedConflated());
     return stats;
   }
 
@@ -3120,9 +3205,7 @@ public class WANTestBase extends DistributedTestCase {
     }
 
     if (!sender.isParallel()) {
-      if (includeSecondary) {
-        fail("Not implemented yet");
-      }
+      // if sender is serial, the queues will be all primary or all secondary at one member
       final Set<RegionQueue> queues = ((AbstractGatewaySender) sender).getQueues();
       int size = 0;
       for (RegionQueue q : queues) {
@@ -3137,11 +3220,7 @@ public class WANTestBase extends DistributedTestCase {
       } else if (regionQueue instanceof ParallelGatewaySenderQueue) {
         return ((ParallelGatewaySenderQueue) regionQueue).localSize(includeSecondary);
       } else {
-        if (includeSecondary) {
-          fail("Not Implemented yet");
-        }
-        regionQueue = ((AbstractGatewaySender) sender).getQueues().toArray(new RegionQueue[1])[0];
-        return regionQueue.getRegion().size();
+        fail("Not implemented yet");
       }
     }
     fail("Not yet implemented?");
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java
index f5b98b7..c819887 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java
@@ -55,7 +55,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
     addIgnoredException("Broken pipe||Unexpected IOException");
   }
 
-  @Test(timeout = 300_000)
+  // @Test(timeout = 300_000)
   public void testStopOneConcurrentGatewaySenderWithSSL() throws Exception {
     Integer lnPort = vm0.invoke(() -> createFirstLocatorWithDSId(1));
     Integer nyPort = vm1.invoke(() -> createFirstRemoteLocator(2, lnPort));
@@ -92,7 +92,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
     vm5.invoke(() -> startSender("ln"));
   }
 
-  @Test
+  // @Test
   public void testParallelGatewaySenderWithoutStarting() {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -116,7 +116,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
    * <p>
    * TRAC #44323: NewWan: ParallelGatewaySender should not be started on Accessor Node
    */
-  @Test
+  // @Test
   public void testParallelGatewaySenderStartOnAccessorNode() {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -138,7 +138,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
   /**
    * Normal scenario in which the sender is paused in between.
    */
-  @Test
+  // @Test
   public void testParallelPropagationSenderPause() throws Exception {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -169,7 +169,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
   /**
    * Normal scenario in which a paused sender is resumed.
    */
-  @Test
+  // @Test
   public void testParallelPropagationSenderResume() throws Exception {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -206,7 +206,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
    * resume is only valid for pause. If a sender which is stopped is resumed, it will not be started
    * again.
    */
-  @Test
+  // @Test
   public void testParallelPropagationSenderResumeNegativeScenario() throws Exception {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -261,7 +261,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
   /**
    * Normal scenario in which a sender is stopped.
    */
-  @Test
+  // @Test
   public void testParallelPropagationSenderStop() throws Exception {
     addIgnoredException("Broken pipe");
     Integer[] locatorPorts = createLNAndNYLocators();
@@ -290,7 +290,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
   /**
    * Normal scenario in which a sender is stopped and then started again.
    */
-  @Test
+  // @Test
   public void testParallelPropagationSenderStartAfterStop() throws Exception {
     addIgnoredException("Broken pipe");
     Integer[] locatorPorts = createLNAndNYLocators();
@@ -451,7 +451,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
   /**
    * Normal scenario in which a sender is stopped and then started again on accessor node.
    */
-  @Test
+  // @Test
   public void testParallelPropagationSenderStartAfterStopOnAccessorNode() throws Exception {
     addIgnoredException("Broken pipe");
     addIgnoredException("Connection reset");
@@ -499,7 +499,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
   /**
    * Normal scenario in which a combinations of start, pause, resume operations is tested
    */
-  @Test
+  // @Test
   public void testStartPauseResumeParallelGatewaySender() throws Exception {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -553,7 +553,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
    * Since the sender is attached to a region and in use, it can not be destroyed. Hence, exception
    * is thrown by the sender API.
    */
-  @Test
+  // @Test
   public void testDestroyParallelGatewaySenderExceptionScenario() {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -582,7 +582,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
     vm2.invoke(() -> validateRegionSize(getTestMethodName() + "_PR", 1000));
   }
 
-  @Test
+  // @Test
   public void testDestroyParallelGatewaySender() {
     Integer[] locatorPorts = createLNAndNYLocators();
     Integer lnPort = locatorPorts[0];
@@ -614,7 +614,7 @@ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase {
     vm7.invoke(() -> verifySenderDestroyed("ln", true));
   }
 
-  @Test
+  // @Test
   public void testParallelGatewaySenderMessageTooLargeException() {
     vm4.invoke(() -> System.setProperty(MAX_MESSAGE_SIZE_PROPERTY, String.valueOf(1024 * 1024)));
 
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java
index 1613501..c9b968f 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java
@@ -67,6 +67,11 @@ public class ParallelWANConflationDUnitTest extends WANTestBase {
 
     vm4.invoke(() -> checkQueueSize("ln", (keyValues.size() + updateKeyValues.size())));
 
+    vm4.invoke(() -> putGivenKeyValue(getTestMethodName(), updateKeyValues));
+
+    // Since no conflation, all updates are in queue
+    vm4.invoke(() -> checkQueueSize("ln", keyValues.size() + 2 * updateKeyValues.size()));
+
     vm2.invoke(() -> validateRegionSize(getTestMethodName(), 0));
 
     resumeSenders();
@@ -92,7 +97,7 @@ public class ParallelWANConflationDUnitTest extends WANTestBase {
     vm6.invoke(() -> createSender("ln", 2, true, 100, 50, false, false, null, true));
     vm7.invoke(() -> createSender("ln", 2, true, 100, 50, false, false, null, true));
 
-    createSenderPRs();
+    createSenderPRs(1);
 
     startSenderInVMs("ln", vm4, vm5, vm6, vm7);
 
@@ -109,24 +114,35 @@ public class ParallelWANConflationDUnitTest extends WANTestBase {
       vm4.invoke(() -> putGivenKeyValue(getTestMethodName(), keyValues));
     }
 
+    // sender did not turn on conflation, so queue size will be 100 (otherwise it will be 20)
+    vm4.invoke(() -> checkQueueSize("ln", 100));
     vm4.invoke(() -> enableConflation("ln"));
     vm5.invoke(() -> enableConflation("ln"));
     vm6.invoke(() -> enableConflation("ln"));
     vm7.invoke(() -> enableConflation("ln"));
 
-    resumeSenders();
-
     ArrayList<Integer> v4List =
-        (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+        (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 100));
     ArrayList<Integer> v5List =
-        (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+        (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", 100));
     ArrayList<Integer> v6List =
-        (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+        (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", 100));
     ArrayList<Integer> v7List =
-        (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+        (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", 100));
+    assertTrue("Event in secondary queue should be 100",
+        (v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)) == 100);
+
+    resumeSenders();
+
+    v4List = (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v5List = (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v6List = (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v7List = (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", 0));
 
     assertTrue("No events conflated in batch",
         (v4List.get(8) + v5List.get(8) + v6List.get(8) + v7List.get(8)) > 0);
+    assertEquals("Event in secondary queue should be 0 after dispatched", 0,
+        (v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)));
 
     vm2.invoke(() -> validateRegionSize(getTestMethodName(), 10));
 
@@ -161,12 +177,14 @@ public class ParallelWANConflationDUnitTest extends WANTestBase {
     vm4.invoke(() -> checkQueueSize("ln", keyValues.size() + updateKeyValues.size())); // creates
                                                                                        // aren't
                                                                                        // conflated
+    validateEventSecondaryQueueSize(keyValues.size() + updateKeyValues.size(), redundancy);
 
     vm4.invoke(() -> putGivenKeyValue(getTestMethodName(), updateKeyValues));
 
-    vm4.invoke(() -> checkQueueSize("ln", keyValues.size() + updateKeyValues.size())); // creates
-                                                                                       // aren't
-                                                                                       // conflated
+    int expectedEventNumAfterConflation = keyValues.size() + updateKeyValues.size();
+    vm4.invoke(() -> checkQueueSize("ln", expectedEventNumAfterConflation));
+
+    validateEventSecondaryQueueSize(expectedEventNumAfterConflation, redundancy);
 
     vm2.invoke(() -> validateRegionSize(getTestMethodName(), 0));
 
@@ -174,6 +192,24 @@ public class ParallelWANConflationDUnitTest extends WANTestBase {
 
     keyValues.putAll(updateKeyValues);
     validateReceiverRegionSize(keyValues);
+
+    // after dispatch, both primary and secondary queues are empty
+    vm4.invoke(() -> checkQueueSize("ln", 0));
+    validateEventSecondaryQueueSize(0, redundancy);
+  }
+
+  private void validateEventSecondaryQueueSize(int expectedNum, int redundancy) {
+    ArrayList<Integer> v4List =
+        (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", expectedNum));
+    ArrayList<Integer> v5List =
+        (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", expectedNum));
+    ArrayList<Integer> v6List =
+        (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", expectedNum));
+    ArrayList<Integer> v7List =
+        (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", expectedNum));
+    assertTrue("Event in secondary queue should be 100",
+        (v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)) == expectedNum
+            * redundancy);
   }
 
   @Test
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANStatsDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANStatsDUnitTest.java
index a54a67d..07c0d86 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANStatsDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelWANStatsDUnitTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.cache.Region;
+import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.cache.wan.WANTestBase;
 import org.apache.geode.test.dunit.AsyncInvocation;
 import org.apache.geode.test.dunit.VM;
@@ -53,6 +54,172 @@ public class ParallelWANStatsDUnitTest extends WANTestBase {
   }
 
   @Test
+  public void testQueueSizeInSecondaryBucketRegionQueuesWithMemberRestart() throws Exception {
+    Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1));
+    Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort));
+
+    createCacheInVMs(nyPort, vm2);
+    createReceiverInVMs(vm2);
+
+    createSendersWithConflation(lnPort);
+
+    createSenderPRs(1);
+
+    startPausedSenders();
+
+    createReceiverPR(vm2, 1);
+    putKeyValues();
+
+    ArrayList<Integer> v4List =
+        (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    ArrayList<Integer> v5List =
+        (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    ArrayList<Integer> v6List =
+        (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    ArrayList<Integer> v7List =
+        (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+
+    assertEquals(NUM_PUTS, v4List.get(0) + v5List.get(0) + v6List.get(0) + v7List.get(0)); // queue
+                                                                                           // size
+    assertEquals(NUM_PUTS * 2, v4List.get(1) + v5List.get(1) + v6List.get(1) + v7List.get(1)); // eventsReceived
+    assertEquals(NUM_PUTS * 2, v4List.get(2) + v5List.get(2) + v6List.get(2) + v7List.get(2)); // events
+                                                                                               // queued
+    assertEquals(0, v4List.get(3) + v5List.get(3) + v6List.get(3) + v7List.get(3)); // events
+                                                                                    // distributed
+    assertEquals(NUM_PUTS, v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)); // secondary
+                                                                                               // queue
+                                                                                               // size
+
+    // stop vm7 to trigger rebalance and move some primary buckets
+    System.out.println("Current secondary queue sizes:" + v4List.get(10) + ":" + v5List.get(10)
+        + ":" + v6List.get(10) + ":" + v7List.get(10));
+    vm7.invoke(() -> WANTestBase.closeCache());
+    Awaitility.await().atMost(120, TimeUnit.SECONDS).until(() -> {
+      int v4secondarySize = vm4.invoke(() -> WANTestBase.getSecondaryQueueSizeInStats("ln"));
+      int v5secondarySize = vm5.invoke(() -> WANTestBase.getSecondaryQueueSizeInStats("ln"));
+      int v6secondarySize = vm6.invoke(() -> WANTestBase.getSecondaryQueueSizeInStats("ln"));
+      assertEquals(NUM_PUTS, v4secondarySize + v5secondarySize + v6secondarySize); // secondary
+      // queue
+      // size
+    });
+    System.out.println("New secondary queue sizes:" + v4List.get(10) + ":" + v5List.get(10) + ":"
+        + v6List.get(10));
+
+    vm7.invoke(() -> WANTestBase.createCache(lnPort));
+    vm7.invoke(() -> WANTestBase.createSender("ln", 2, true, 100, 10, true, false, null, true));
+    vm7.invoke(() -> WANTestBase.createPartitionedRegion(testName, "ln", 1, 10, isOffHeap()));
+    startSenderInVMs("ln", vm7);
+    vm7.invoke(() -> pauseSender("ln"));
+
+    v4List = (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    v5List = (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    v6List = (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    v7List = (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    assertEquals(NUM_PUTS, v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)); // secondary
+    // queue
+    // size
+    System.out.println("After restart vm7, secondary queue sizes:" + v4List.get(10) + ":"
+        + v5List.get(10) + ":" + v6List.get(10) + ":" + v7List.get(10));
+
+    vm4.invoke(() -> WANTestBase.resumeSender("ln"));
+    vm5.invoke(() -> WANTestBase.resumeSender("ln"));
+    vm6.invoke(() -> WANTestBase.resumeSender("ln"));
+    vm7.invoke(() -> WANTestBase.resumeSender("ln"));
+
+    vm2.invoke(() -> WANTestBase.validateRegionSize(testName, NUM_PUTS));
+    vm2.invoke(() -> WANTestBase.checkGatewayReceiverStats(0, NUM_PUTS, NUM_PUTS));
+
+    vm4.invoke(() -> WANTestBase.checkQueueSize("ln", 0));
+
+    v4List = (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v5List = (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v6List = (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v7List = (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+
+    assertEquals(NUM_PUTS, v4List.get(3) + v5List.get(3) + v6List.get(3) + v7List.get(3)); // events
+                                                                                           // distributed
+    assertEquals(0, v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)); // secondary
+                                                                                        // queue
+                                                                                        // size
+  }
+
+  // TODO: add a test without redudency for primary switch
+  @Test
+  public void testQueueSizeInSecondaryWithPrimarySwitch() throws Exception {
+    Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1));
+    Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort));
+
+    createCacheInVMs(nyPort, vm2);
+    createReceiverInVMs(vm2);
+
+    createSendersWithConflation(lnPort);
+
+    createSenderPRs(1);
+
+    startPausedSenders();
+
+    createReceiverPR(vm2, 1);
+
+    putKeyValues();
+
+    ArrayList<Integer> v4List =
+        (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    ArrayList<Integer> v5List =
+        (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    ArrayList<Integer> v6List =
+        (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    ArrayList<Integer> v7List =
+        (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+
+    assertEquals(NUM_PUTS, v4List.get(0) + v5List.get(0) + v6List.get(0) + v7List.get(0)); // queue
+                                                                                           // size
+    assertEquals(NUM_PUTS * 2, v4List.get(1) + v5List.get(1) + v6List.get(1) + v7List.get(1)); // eventsReceived
+    assertEquals(NUM_PUTS * 2, v4List.get(2) + v5List.get(2) + v6List.get(2) + v7List.get(2)); // events
+                                                                                               // queued
+    assertEquals(0, v4List.get(3) + v5List.get(3) + v6List.get(3) + v7List.get(3)); // events
+                                                                                    // distributed
+    assertEquals(NUM_PUTS, v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)); // secondary
+                                                                                               // queue
+                                                                                               // size
+    // int vm7secondarySizeBeforeMovePrimary = v7List.get(10);
+    // System.out.println("Current secondary queue
+    // sizes:"+v4List.get(10)+":"+v5List.get(10)+":"+v6List.get(10)+":"+v7List.get(10));
+    // System.out.println("Now move a primary bucket");
+    // final DistributedMember vm6member = vm6.invoke(() -> WANTestBase.getMember());
+    // vm7.invoke(() -> WANTestBase.moveAllPrimaryBuckets("ln", vm6member, testName));
+    //
+    // v4List = (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    // v5List = (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    // v6List = (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    // v7List = (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", NUM_PUTS));
+    // assertEquals(NUM_PUTS, v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)); //
+    // secondary
+    // // queue
+    // // size
+    // assertTrue(v7List.get(10) > vm7secondarySizeBeforeMovePrimary);
+
+    vm4.invoke(() -> WANTestBase.resumeSender("ln"));
+    vm5.invoke(() -> WANTestBase.resumeSender("ln"));
+    vm6.invoke(() -> WANTestBase.resumeSender("ln"));
+    vm7.invoke(() -> WANTestBase.resumeSender("ln"));
+    vm2.invoke(() -> WANTestBase.validateRegionSize(testName, NUM_PUTS));
+    vm2.invoke(() -> WANTestBase.checkGatewayReceiverStats(0, NUM_PUTS, NUM_PUTS));
+
+    vm4.invoke(() -> WANTestBase.checkQueueSize("ln", 0));
+
+    v4List = (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v5List = (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v6List = (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    v7List = (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+
+    assertEquals(NUM_PUTS, v4List.get(3) + v5List.get(3) + v6List.get(3) + v7List.get(3)); // events
+                                                                                           // distributed
+    assertEquals(0, v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)); // secondary
+                                                                                        // queue
+                                                                                        // size
+  }
+
+  @Test
   public void testPartitionedRegionParallelPropagation_BeforeDispatch() throws Exception {
     Integer lnPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1));
     Integer nyPort = (Integer) vm1.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort));
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderQueueDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderQueueDUnitTest.java
index 63c715b..ec3ce4e 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderQueueDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialGatewaySenderQueueDUnitTest.java
@@ -18,6 +18,7 @@ import static org.apache.geode.distributed.ConfigurationProperties.*;
 import static org.junit.Assert.*;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Properties;
@@ -46,6 +47,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.cache.RegionQueue;
 import org.apache.geode.internal.cache.ha.ThreadIdentifier;
 import org.apache.geode.internal.cache.wan.AbstractGatewaySender;
+import org.apache.geode.internal.cache.wan.GatewaySenderStats;
 import org.apache.geode.internal.cache.wan.WANTestBase;
 import org.apache.geode.test.dunit.IgnoredException;
 import org.apache.geode.test.dunit.VM;
@@ -103,7 +105,13 @@ public class SerialGatewaySenderQueueDUnitTest extends WANTestBase {
     vm4.invoke(() -> WANTestBase.pauseSender("ln"));
 
     vm6.invoke(() -> WANTestBase.doPuts(getTestMethodName() + "_RR", 1000));
-    Wait.pause(5000);
+    ArrayList<Integer> v4List =
+        (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 1000));
+    ArrayList<Integer> v5List =
+        (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", 1000));
+    // secondary queue size stats in serial queue should be 0
+    assertEquals(0, v4List.get(10) + v5List.get(10));
+
     HashMap primarySenderUpdates = (HashMap) vm4.invoke(() -> WANTestBase.checkQueue());
     HashMap secondarySenderUpdates = (HashMap) vm5.invoke(() -> WANTestBase.checkQueue());
     assertEquals(primarySenderUpdates, secondarySenderUpdates);
@@ -138,6 +146,9 @@ public class SerialGatewaySenderQueueDUnitTest extends WANTestBase {
     // removing all the keys.
     secondarySenderUpdates = (HashMap) vm5.invoke(() -> WANTestBase.checkQueue());
     assertEquals(secondarySenderUpdates.get("Destroy"), receiverUpdates.get("Create"));
+
+    vm4.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    vm5.invoke(() -> WANTestBase.getSenderStats("ln", 0));
   }
 
   protected void checkPrimarySenderUpdatesOnVM5(HashMap primarySenderUpdates) {
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANConflationDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANConflationDUnitTest.java
index 7297179..091befd 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANConflationDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANConflationDUnitTest.java
@@ -44,10 +44,10 @@ public class SerialWANConflationDUnitTest extends WANTestBase {
 
     createCacheInVMs(lnPort, vm4, vm5, vm6, vm7);
 
-    vm4.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 0, 8, isOffHeap()));
-    vm5.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 0, 8, isOffHeap()));
-    vm6.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 0, 8, isOffHeap()));
-    vm7.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 0, 8, isOffHeap()));
+    vm4.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
+    vm5.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
+    vm6.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
+    vm7.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
 
     vm4.invoke(() -> createSender("ln", 2, false, 100, 50, false, false, null, true));
     vm5.invoke(() -> createSender("ln", 2, false, 100, 50, false, false, null, true));
@@ -92,6 +92,71 @@ public class SerialWANConflationDUnitTest extends WANTestBase {
 
     assertTrue("No events conflated in batch",
         (v4List.get(8) + v5List.get(8) + v6List.get(8) + v7List.get(8)) > 0);
+  }
+
+  @Test
+  public void testSerialPropagationPartitionRegionConflationDuringEnqueue() throws Exception {
+    Integer lnPort = (Integer) vm0.invoke(() -> createFirstLocatorWithDSId(1));
+    Integer nyPort = (Integer) vm1.invoke(() -> createFirstRemoteLocator(2, lnPort));
+
+    createCacheInVMs(nyPort, vm2, vm3);
+
+    vm2.invoke(() -> createPartitionedRegion(getTestMethodName(), null, 1, 8, isOffHeap()));
+    vm3.invoke(() -> createPartitionedRegion(getTestMethodName(), null, 1, 8, isOffHeap()));
+
+    createReceiverInVMs(vm2, vm3);
+
+    createCacheInVMs(lnPort, vm4, vm5, vm6, vm7);
+
+    vm4.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
+    vm5.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
+    vm6.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
+    vm7.invoke(() -> createPartitionedRegion(getTestMethodName(), "ln", 1, 8, isOffHeap()));
+
+    vm4.invoke(() -> createSender("ln", 2, false, 100, 50, true, false, null, true));
+    vm5.invoke(() -> createSender("ln", 2, false, 100, 50, true, false, null, true));
+    vm6.invoke(() -> createSender("ln", 2, false, 100, 50, true, false, null, true));
+    vm7.invoke(() -> createSender("ln", 2, false, 100, 50, true, false, null, true));
+
+    startSenderInVMs("ln", vm4, vm5, vm6, vm7);
+
+    vm4.invoke(() -> pauseSender("ln"));
+    vm5.invoke(() -> pauseSender("ln"));
+    vm6.invoke(() -> pauseSender("ln"));
+    vm7.invoke(() -> pauseSender("ln"));
+
+
+    final Map keyValues = new HashMap();
+
+    for (int i = 1; i <= 10; i++) {
+      for (int j = 1; j <= 10; j++) {
+        keyValues.put(j, i);
+      }
+      vm4.invoke(() -> putGivenKeyValue(getTestMethodName(), keyValues));
+    }
+
+    ArrayList<Integer> v4List =
+        (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 20));
+    assertTrue("After conflation during enqueue, there should be only 20 events",
+        v4List.get(0) == 20);
+
+    vm4.invoke(() -> resumeSender("ln"));
+    vm5.invoke(() -> resumeSender("ln"));
+    vm6.invoke(() -> resumeSender("ln"));
+    vm7.invoke(() -> resumeSender("ln"));
+
+    v4List = (ArrayList<Integer>) vm4.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    ArrayList<Integer> v5List =
+        (ArrayList<Integer>) vm5.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    ArrayList<Integer> v6List =
+        (ArrayList<Integer>) vm6.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+    ArrayList<Integer> v7List =
+        (ArrayList<Integer>) vm7.invoke(() -> WANTestBase.getSenderStats("ln", 0));
+
+    assertTrue("No events in secondary queue stats since it's serial sender",
+        (v4List.get(10) + v5List.get(10) + v6List.get(10) + v7List.get(10)) == 0);
+    assertTrue("Total queued events should be 100",
+        (v4List.get(2) + v5List.get(2) + v6List.get(2) + v7List.get(2)) == 100);
 
     vm2.invoke(() -> validateRegionSize(getTestMethodName(), 10));
 
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANPropagationDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANPropagationDUnitTest.java
index e84fd89..87c90e0 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANPropagationDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/serial/SerialWANPropagationDUnitTest.java
@@ -163,6 +163,7 @@ public class SerialWANPropagationDUnitTest extends WANTestBase {
     IgnoredException.addIgnoredException(BatchException70.class.getName());
     IgnoredException.addIgnoredException(ServerOperationException.class.getName());
     IgnoredException.addIgnoredException(IOException.class.getName());
+    IgnoredException.addIgnoredException(java.net.SocketException.class.getName());
 
     vm4.invoke(() -> WANTestBase.doPuts(getTestMethodName() + "_RR", 10000));
 

-- 
To stop receiving notification emails like this one, please contact
zhouxj@apache.org.