You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bu...@apache.org on 2020/08/12 23:46:01 UTC

[geode] branch develop updated (cf27a6a -> 52018fc)

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

burcham pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git.


    from cf27a6a  Changes to help reduce the occurence of GEODE-8422 (#5447)
     new 068a467  GEODE-8337: git mv Version.java->KnownVersion.java
     new 415e440  GEODE-8337: git mv VersionOrdinal.java->Version.java
     new b5e2b56  GEODE-8298: Fix multicast version detection (#5370)
     new 52018fc  GEODE-8337: fix support branch creation script to mod KnownVersion.java

The 4 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:
 dev-tools/release/create_support_branches.sh       |   3 +-
 .../geode/distributed/internal/DateMessage.java    |   6 +-
 ...ackwardCompatibilitySerializationDUnitTest.java |  17 +-
 .../internal/cache/DeltaPropagationDUnitTest.java  |   6 +-
 .../geode/internal/cache/GIIDeltaDUnitTest.java    |   6 +-
 .../geode/pdx/PDXAsyncEventQueueDUnitTest.java     |   4 +-
 .../geode/pdx/PdxAttributesDistributedTest.java    |   6 +-
 .../apache/geode/pdx/PdxClientServerDUnitTest.java |   8 +-
 .../cache/client/ClientCacheFactoryJUnitTest.java  |  24 +-
 .../cache/CompactOfflineDiskStoreJUnitTest.java    |   4 +-
 .../cache/FilterProfileConcurrencyTest.java        |   4 +-
 ...FOEvictionAlgoMemoryEnabledRegionJUnitTest.java |   4 +-
 .../cache/ha/HARegionQueueIntegrationTest.java     |   4 +-
 .../cache/tier/sockets/CacheClientProxyTest.java   |   4 +-
 .../sockets/ServerConnectionIntegrationTest.java   |   6 +-
 .../offheap/OffHeapValidationJUnitTest.java        |   4 +-
 .../geode/pdx/AutoSerializableJUnitTest.java       |  52 +--
 .../org/apache/geode/pdx/ByteSourceJUnitTest.java  |   6 +-
 .../geode/pdx/PdxInstanceFactoryJUnitTest.java     |   4 +-
 .../org/apache/geode/pdx/PdxInstanceJUnitTest.java |   4 +-
 .../apache/geode/pdx/PdxSerializableJUnitTest.java |  54 +--
 .../internal/InternalDataSerializerBenchmark.java  |   6 +-
 .../src/main/java/org/apache/geode/CopyHelper.java |   4 +-
 .../main/java/org/apache/geode/DataSerializer.java |   6 +-
 .../admin/jmx/internal/StatAlertNotification.java  |   4 +-
 .../geode/cache/client/internal/AbstractOp.java    |   8 +-
 .../cache/client/internal/AuthenticateUserOp.java  |   8 +-
 .../client/internal/ClientSideHandshakeImpl.java   |  37 +-
 .../client/internal/ExecuteFunctionNoAckOp.java    |   4 +-
 .../cache/client/internal/ExecuteFunctionOp.java   |   4 +-
 .../internal/ExecuteRegionFunctionNoAckOp.java     |   4 +-
 .../client/internal/ExecuteRegionFunctionOp.java   |   4 +-
 .../internal/ExecuteRegionFunctionSingleHopOp.java |   4 +-
 .../geode/cache/client/internal/GetAllOp.java      |   4 +-
 .../geode/cache/client/internal/KeySetOp.java      |   4 +-
 .../cache/client/internal/ProxyCacheCloseOp.java   |   4 +-
 .../geode/cache/client/internal/PutAllOp.java      |   4 +-
 .../geode/cache/client/internal/QueryOp.java       |   4 +-
 .../cache/client/internal/RegisterInterestOp.java  |   4 +-
 .../geode/cache/client/internal/RemoveAllOp.java   |   4 +-
 .../internal/locator/ServerLocationRequest.java    |   4 +-
 .../internal/locator/ServerLocationResponse.java   |   4 +-
 .../apache/geode/cache/query/internal/CqEntry.java |   4 +-
 .../internal/CumulativeNonDistinctResults.java     |   4 +-
 .../cache/query/internal/LinkedResultSet.java      |   4 +-
 .../cache/query/internal/LinkedStructSet.java      |   4 +-
 .../cache/query/internal/NWayMergeResults.java     |   4 +-
 .../geode/cache/query/internal/NullToken.java      |   4 +-
 .../cache/query/internal/PRQueryTraceInfo.java     |   4 +-
 .../geode/cache/query/internal/ResultsBag.java     |   4 +-
 .../query/internal/ResultsCollectionWrapper.java   |   4 +-
 .../geode/cache/query/internal/ResultsSet.java     |   4 +-
 .../cache/query/internal/SortedResultSet.java      |   4 +-
 .../cache/query/internal/SortedStructSet.java      |   4 +-
 .../geode/cache/query/internal/StructImpl.java     |   4 +-
 .../geode/cache/query/internal/StructSet.java      |   4 +-
 .../geode/cache/query/internal/Undefined.java      |   4 +-
 .../query/internal/index/IndexCreationData.java    |   4 +-
 .../cache/query/internal/types/ObjectTypeImpl.java |   4 +-
 .../internal/ClusterDistributionManager.java       |  10 +-
 .../distributed/internal/DistributionAdvisor.java  |   4 +-
 .../distributed/internal/DistributionImpl.java     |   4 +-
 .../distributed/internal/DistributionManager.java  |   6 +-
 .../distributed/internal/DistributionMessage.java  |   4 +-
 .../internal/LonerDistributionManager.java         |  10 +-
 .../distributed/internal/ReplyProcessor21.java     |   4 +-
 .../geode/distributed/internal/StartupMessage.java |   4 +-
 .../internal/StartupResponseMessage.java           |   4 +-
 .../StartupResponseWithVersionMessage.java         |   4 +-
 .../internal/locks/DLockRemoteToken.java           |   4 +-
 .../distributed/internal/locks/DLockService.java   |   4 +-
 .../membership/InternalDistributedMember.java      |  12 +-
 .../internal/streaming/StreamingOperation.java     |   9 +-
 .../org/apache/geode/internal/DSFIDFactory.java    |   4 +-
 .../geode/internal/HeapDataOutputStream.java       |  10 +-
 .../geode/internal/InternalDataSerializer.java     |  36 +-
 .../geode/internal/VersionedObjectInput.java       |   8 +-
 .../geode/internal/VersionedObjectOutput.java      |  12 +-
 .../internal/admin/remote/ClientHealthStats.java   |   8 +-
 .../statalerts/GaugeThresholdDecoratorImpl.java    |   4 +-
 .../statalerts/NumberThresholdDecoratorImpl.java   |   4 +-
 .../internal/cache/AbstractUpdateOperation.java    |   4 +-
 .../apache/geode/internal/cache/BucketRegion.java  |   4 +-
 .../cache/DestroyPartitionedRegionMessage.java     |   6 +-
 .../apache/geode/internal/cache/DiskInitFile.java  |  37 +-
 .../apache/geode/internal/cache/DiskStoreImpl.java |  15 +-
 .../internal/cache/DistTXPrecommitMessage.java     |   4 +-
 .../internal/cache/DistributedPingMessage.java     |   4 +-
 .../internal/cache/DistributedPutAllOperation.java |   6 +-
 .../cache/DistributedTombstoneOperation.java       |   6 +-
 .../geode/internal/cache/EntryEventImpl.java       |  10 +-
 .../org/apache/geode/internal/cache/EventID.java   |  26 +-
 ...xpireDisconnectedClientTransactionsMessage.java |   6 +-
 .../apache/geode/internal/cache/FilterProfile.java |   4 +-
 .../geode/internal/cache/FilterRoutingInfo.java    |  14 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |   5 +-
 .../internal/cache/InitialImageOperation.java      |  34 +-
 .../cache/InvalidatePartitionedRegionMessage.java  |   6 +-
 .../cache/LatestLastAccessTimeOperation.java       |   4 +-
 .../apache/geode/internal/cache/LocalRegion.java   |   6 +-
 .../java/org/apache/geode/internal/cache/Node.java |   4 +-
 .../geode/internal/cache/NonLocalRegionEntry.java  |   4 +-
 .../org/apache/geode/internal/cache/Oplog.java     |  83 ++---
 .../geode/internal/cache/PRQueryProcessor.java     |   4 +-
 .../internal/cache/PartitionRegionConfig.java      |   4 +-
 .../geode/internal/cache/PartitionedRegion.java    |   8 +-
 .../cache/PartitionedRegionQueryEvaluator.java     |   4 +-
 .../cache/PreferBytesCachedDeserializable.java     |   4 +-
 .../geode/internal/cache/ProxyRegionMap.java       |   4 +-
 .../apache/geode/internal/cache/RegionEntry.java   |   4 +-
 .../geode/internal/cache/RegionEventImpl.java      |   4 +-
 .../geode/internal/cache/ServerPingMessage.java    |   4 +-
 .../cache/StoreAllCachedDeserializable.java        |   4 +-
 .../geode/internal/cache/TXCommitMessage.java      |  17 +-
 .../apache/geode/internal/cache/TXEntryState.java  |   4 +-
 .../java/org/apache/geode/internal/cache/TXId.java |   4 +-
 .../internal/cache/TXRegionLockRequestImpl.java    |   8 +-
 .../org/apache/geode/internal/cache/Token.java     |  14 +-
 .../internal/cache/VMCachedDeserializable.java     |   4 +-
 .../geode/internal/cache/ValidatingDiskRegion.java |   4 +-
 .../internal/cache/ValueComparisonHelper.java      |   4 +-
 .../SnappyCompressedCachedDeserializable.java      |   4 +-
 .../SerializableRegionRedundancyStatusImpl.java    |   4 +-
 .../SerializableRestoreRedundancyResultsImpl.java  |   4 +-
 .../entries/AbstractOplogDiskRegionEntry.java      |   4 +-
 .../cache/entries/AbstractRegionEntry.java         |   4 +-
 .../geode/internal/cache/entries/DiskEntry.java    |   9 +-
 .../cache/execute/FunctionRemoteContext.java       |   7 +-
 .../PartitionedRegionFunctionResultSender.java     |   4 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |   6 +-
 .../geode/internal/cache/locks/TXLockBatch.java    |   4 +-
 .../geode/internal/cache/locks/TXLockIdImpl.java   |   4 +-
 .../cache/partitioned/BucketCountLoadProbe.java    |   4 +-
 .../cache/partitioned/FetchBulkEntriesMessage.java |   8 +-
 .../cache/partitioned/FetchEntriesMessage.java     |   8 +-
 .../cache/partitioned/FetchKeysMessage.java        |   8 +-
 .../internal/cache/partitioned/GetMessage.java     |   4 +-
 .../cache/partitioned/IndexCreationMsg.java        |   6 +-
 .../cache/partitioned/PRTombstoneMessage.java      |   6 +-
 .../cache/partitioned/PartitionMessage.java        |   6 +-
 .../internal/cache/partitioned/QueryMessage.java   |   8 +-
 .../cache/partitioned/SizedBasedLoadProbe.java     |   4 +-
 .../partitioned/StreamingPartitionOperation.java   |   4 +-
 .../internal/cache/persistence/BytesAndBits.java   |   8 +-
 .../cache/persistence/DiskInitFileInterpreter.java |   4 +-
 .../cache/persistence/DiskInitFileParser.java      |  12 +-
 .../internal/cache/persistence/DiskStoreID.java    |   4 +-
 .../internal/cache/snapshot/SnapshotPacket.java    |   6 +-
 .../geode/internal/cache/tier/ConnectionProxy.java |   4 +-
 .../internal/cache/tier/ServerSideHandshake.java   |   4 +-
 .../internal/cache/tier/sockets/AcceptorImpl.java  |   6 +-
 .../internal/cache/tier/sockets/BaseCommand.java   |   8 +-
 .../cache/tier/sockets/BaseCommandQuery.java       |   8 +-
 .../cache/tier/sockets/CacheClientNotifier.java    |  12 +-
 .../cache/tier/sockets/CacheClientProxy.java       |  18 +-
 .../tier/sockets/CacheClientProxyFactory.java      |   6 +-
 .../cache/tier/sockets/CacheClientUpdater.java     |   4 +-
 .../cache/tier/sockets/CacheServerHelper.java      |   4 +-
 .../cache/tier/sockets/ChunkedMessage.java         |   6 +-
 .../tier/sockets/ClientDataSerializerMessage.java  |  10 +-
 .../cache/tier/sockets/ClientHealthMonitor.java    |   9 +-
 .../tier/sockets/ClientInstantiatorMessage.java    |   8 +-
 .../tier/sockets/ClientInterestMessageImpl.java    |  10 +-
 .../tier/sockets/ClientMarkerMessageImpl.java      |  10 +-
 .../cache/tier/sockets/ClientPingMessageImpl.java  |  10 +-
 .../tier/sockets/ClientProxyMembershipID.java      |  16 +-
 .../tier/sockets/ClientRegistrationMetadata.java   |  20 +-
 .../cache/tier/sockets/ClientTombstoneMessage.java |   6 +-
 .../tier/sockets/ClientUpdateMessageImpl.java      |  26 +-
 .../cache/tier/sockets/CommandInitializer.java     | 116 +++---
 .../internal/cache/tier/sockets/EncryptorImpl.java |   6 +-
 .../cache/tier/sockets/HAEventWrapper.java         |   4 +-
 .../internal/cache/tier/sockets/Handshake.java     |   6 +-
 .../tier/sockets/InterestResultPolicyImpl.java     |   4 +-
 .../geode/internal/cache/tier/sockets/Message.java |  16 +-
 .../cache/tier/sockets/MessageDispatcher.java      |   4 +-
 .../cache/tier/sockets/ObjectPartList.java         |   4 +-
 .../tier/sockets/OldClientSupportService.java      |   4 +-
 .../geode/internal/cache/tier/sockets/Part.java    |   6 +-
 .../cache/tier/sockets/ServerConnection.java       |  33 +-
 .../tier/sockets/ServerSideHandshakeFactory.java   |  16 +-
 .../tier/sockets/ServerSideHandshakeImpl.java      |  35 +-
 .../cache/tier/sockets/SocketMessageWriter.java    |  15 +-
 .../cache/tier/sockets/VersionedObjectList.java    |   9 +-
 .../tier/sockets/command/CloseConnection.java      |   5 +-
 .../tier/sockets/command/ExecuteFunction66.java    |   4 +-
 .../sockets/command/ExecuteRegionFunction66.java   |   6 +-
 .../command/ExecuteRegionFunctionSingleHop.java    |   4 +-
 .../sockets/command/GatewayReceiverCommand.java    |   4 +-
 .../cache/tier/sockets/command/GetAll70.java       |   4 +-
 .../internal/cache/tier/sockets/command/Put65.java |  16 +-
 .../cache/tier/sockets/command/PutAll70.java       |   5 +-
 .../tier/sockets/command/RegisterInterest61.java   |   4 +-
 .../sockets/command/RegisterInterestList66.java    |   4 +-
 .../geode/internal/cache/tx/DistTxEntryEvent.java  |   8 +-
 .../internal/cache/tx/RemoteFetchKeysMessage.java  |   4 +-
 .../geode/internal/cache/tx/RemoteGetMessage.java  |   4 +-
 .../internal/cache/tx/RemotePutAllMessage.java     |   4 +-
 .../internal/cache/tx/RemoteRemoveAllMessage.java  |   4 +-
 .../internal/cache/versions/DiskVersionTag.java    |   4 +-
 .../internal/cache/versions/RVVException.java      |   4 +-
 .../cache/versions/RegionVersionVector.java        |   4 +-
 .../internal/cache/versions/VMVersionTag.java      |   4 +-
 .../geode/internal/cache/versions/VersionTag.java  |   4 +-
 .../internal/cache/wan/GatewaySenderAdvisor.java   |  11 +-
 .../wan/GatewaySenderEventCallbackArgument.java    |   4 +-
 .../internal/cache/wan/GatewaySenderEventImpl.java |  16 +-
 ...aySenderQueueEntrySynchronizationOperation.java |   4 +-
 .../org/apache/geode/internal/logging/Banner.java  |   4 +-
 .../geode/internal/sequencelog/io/GraphReader.java |   4 +-
 .../org/apache/geode/internal/tcp/Connection.java  |  22 +-
 .../apache/geode/internal/tcp/MsgDestreamer.java   |   8 +-
 .../org/apache/geode/internal/tcp/MsgReader.java   |   4 +-
 .../org/apache/geode/internal/tcp/MsgStreamer.java |  14 +-
 .../tcp/VersionedByteBufferInputStream.java        |  14 +-
 .../geode/internal/tcp/VersionedMsgStreamer.java   |   8 +-
 .../org/apache/geode/internal/util/BlobHelper.java |   6 +-
 .../management/internal/FederationComponent.java   |   4 +-
 .../internal/JmxManagerLocatorRequest.java         |   4 +-
 .../internal/JmxManagerLocatorResponse.java        |   4 +-
 .../internal/beans/CacheServerBridge.java          |   6 +-
 .../internal/beans/MemberMBeanBridge.java          |   4 +-
 .../configuration/domain/Configuration.java        |   8 +-
 .../internal/configuration/domain/XmlEntity.java   |   6 +-
 .../messages/ConfigurationResponse.java            |   4 +-
 .../internal/functions/CliFunctionResult.java      |   6 +-
 .../operation/RestoreRedundancyPerformer.java      |   6 +-
 .../management/internal/util/ManagementUtils.java  |   6 +-
 .../java/org/apache/geode/pdx/internal/EnumId.java |   4 +-
 .../org/apache/geode/pdx/internal/EnumInfo.java    |   6 +-
 .../org/apache/geode/pdx/internal/PdxField.java    |   6 +-
 .../apache/geode/pdx/internal/PdxInstanceEnum.java |   4 +-
 .../apache/geode/pdx/internal/PdxOutputStream.java |   6 +-
 .../org/apache/geode/pdx/internal/PdxType.java     |   6 +-
 .../apache/geode/pdx/internal/json/PdxToJSON.java  |   6 +-
 .../cache/execute/FunctionAdapterJUnitTest.java    |   4 +-
 .../cache/query/internal/ResultsBagJUnitTest.java  |   4 +-
 .../geode/internal/DataSerializableJUnitTest.java  |  12 +-
 .../internal/HeapDataOutputStreamJUnitTest.java    |  10 +-
 ...lDataSerializerSerializationAcceptlistTest.java |   4 +-
 .../internal/cache/AbstractRegionMapTest.java      |   6 +-
 .../apache/geode/internal/cache/EventIDTest.java   |   8 +-
 ...eDisconnectedClientTransactionsMessageTest.java |  10 +-
 .../geode/internal/cache/FilterInfoTest.java       |   6 +-
 .../cache/ha/EventIdOptimizationJUnitTest.java     |  12 +-
 .../cache/ha/ThreadIdentifierJUnitTest.java        |   4 +-
 .../partitioned/FetchEntriesMessageJUnitTest.java  |   5 +-
 .../tier/sockets/CacheClientProxyFactoryTest.java  |  10 +-
 .../tier/sockets/CommandInitializerJUnitTest.java  |   4 +-
 .../cache/tier/sockets/MessageJUnitTest.java       |   4 +-
 .../cache/tier/sockets/ServerConnectionTest.java   |  10 +-
 .../tier/sockets/command/ContainsKey66Test.java    |   4 +-
 .../tier/sockets/command/CreateRegionTest.java     |   4 +-
 .../cache/tier/sockets/command/Destroy65Test.java  |   4 +-
 .../tier/sockets/command/DestroyRegionTest.java    |   4 +-
 .../cache/tier/sockets/command/DestroyTest.java    |   4 +-
 .../cache/tier/sockets/command/Get70Test.java      |   4 +-
 .../cache/tier/sockets/command/InvalidateTest.java |   4 +-
 .../cache/tier/sockets/command/Put61Test.java      |   4 +-
 .../cache/tier/sockets/command/Put65Test.java      |   4 +-
 .../cache/tier/sockets/command/PutTest.java        |   4 +-
 .../sockets/command/RegisterInterest61Test.java    |   4 +-
 .../command/RegisterInterestList61Test.java        |   4 +-
 .../command/RegisterInterestList66Test.java        |   4 +-
 .../sockets/command/RegisterInterestListTest.java  |   4 +-
 .../cache/tier/sockets/command/RequestTest.java    |   4 +-
 .../sockets/command/UnregisterInterestTest.java    |   4 +-
 .../cache/versions/AbstractVersionTagTestBase.java |   4 +-
 .../cache/versions/RegionVersionVectorTest.java    |   4 +-
 .../geode/internal/offheap/DataTypeJUnitTest.java  |   4 +-
 .../offheap/OffHeapStoredObjectJUnitTest.java      |   6 +-
 .../geode/internal/size/ObjectTraverserPerf.java   |   4 +-
 .../apache/geode/internal/tcp/MsgStreamerTest.java |   8 +-
 .../apache/geode/internal/util/BlobHelperTest.java |   6 +-
 .../operation/RestoreRedundancyPerformerTest.java  |  14 +-
 .../RollingUpgrade2DUnitTestBase.java              |   2 +-
 .../rollingupgrade/RollingUpgradeDUnitTest.java    |   6 +-
 .../geode/security/FilterPostAuthorization.java    |   4 +-
 .../geode/security/FilterPreAuthorization.java     |   4 +-
 .../query/cq/internal/CqServiceFactoryImpl.java    |  18 +-
 .../cache/query/cq/internal/ops/CreateCQOp.java    |   4 +-
 .../query/cq/internal/ops/GetDurableCQsOp.java     |   4 +-
 .../geode/cache30/MultiVMRegionTestCase.java       |   4 +-
 .../apache/geode/management/cli/GfshCommand.java   |   4 +-
 .../cli/commands/CreateGatewaySenderCommand.java   |   6 +-
 .../internal/cli/commands/RedundancyCommand.java   |   6 +-
 .../geode/management/internal/cli/shell/Gfsh.java  |   4 +-
 .../commands/CreateGatewaySenderCommandTest.java   |   6 +-
 .../AnalyzeDataSerializablesJUnitTestBase.java     |   4 +-
 .../AnalyzeSerializablesJUnitTestBase.java         |   4 +-
 .../geode/codeAnalysis/CompiledClassUtils.java     |   4 +-
 .../internal/cache/eviction/LRUTestEntry.java      |   4 +-
 .../org/apache/geode/pdx/NonDelegatingLoader.java  |   4 +-
 .../apache/geode/test/version/VersionManager.java  |  28 +-
 .../internal/LuceneIndexCreationProfile.java       |   6 +-
 .../lucene/internal/LuceneResultStructImpl.java    |   4 +-
 .../cache/lucene/internal/LuceneServiceImpl.java   |  12 +-
 .../cache/lucene/internal/StringQueryProvider.java |   4 +-
 .../internal/cli/LuceneDestroyIndexCommand.java    |   6 +-
 .../lucene/internal/distributed/EntryScore.java    |   4 +-
 .../distributed/LuceneFunctionContext.java         |   4 +-
 .../internal/distributed/LuceneQueryFunction.java  |   6 +-
 .../lucene/internal/distributed/TopEntries.java    |   4 +-
 .../internal/distributed/TopEntriesCollector.java  |   4 +-
 .../distributed/TopEntriesCollectorManager.java    |   4 +-
 .../WaitUntilFlushedFunctionContext.java           |   4 +-
 .../cache/lucene/internal/filesystem/ChunkKey.java |   4 +-
 .../cache/lucene/internal/filesystem/File.java     |   4 +-
 .../cache/lucene/internal/results/PageResults.java |   6 +-
 .../LuceneIndexCreationProfileJUnitTest.java       |   4 +-
 .../internal/cli/LuceneIndexCommandsJUnitTest.java |   6 +-
 .../internal/results/PageEntryJUnitTest.java       |   4 +-
 .../LuceneSearchWithRollingUpgradeTestBase.java    |  25 +-
 ...ccessfulWhenAllServersRollToCurrentVersion.java |   4 +-
 .../api/MemberIdentifierFactoryImplTest.java       |   6 +-
 .../membership/gms/GMSMemberDataJUnitTest.java     |   6 +-
 .../gms/GMSMemberDataVersionJUnitTest.java         |  11 +-
 .../membership/gms/GMSMembershipJUnitTest.java     | 120 ++++++-
 .../membership/gms/MemberDataBuilderImplTest.java  |   6 +-
 .../internal/membership/gms/TestMessage.java       |   4 +-
 .../gms/fd/GMSHealthMonitorJUnitTest.java          |  35 +-
 .../gms/locator/GMSLocatorIntegrationTest.java     |   4 +-
 .../locator/GMSLocatorRecoveryIntegrationTest.java |  14 +-
 .../gms/membership/GMSJoinLeaveJUnitTest.java      |  12 +-
 .../gms/messenger/JGroupsMessengerJUnitTest.java   |  38 +-
 .../membership/gms/util/MemberIdentifierUtil.java  |   6 +-
 .../internal/membership/api/MemberData.java        |   8 +-
 .../internal/membership/api/MemberIdentifier.java  |   5 +-
 .../internal/membership/gms/GMSMemberData.java     |  33 +-
 .../internal/membership/gms/GMSMembership.java     |  44 +--
 .../internal/membership/gms/GMSMembershipView.java |   8 +-
 .../membership/gms/MemberDataBuilderImpl.java      |   4 +-
 .../membership/gms/MemberIdentifierImpl.java       |  40 +--
 .../membership/gms/fd/GMSHealthMonitor.java        |   6 +-
 .../gms/locator/FindCoordinatorRequest.java        |   4 +-
 .../gms/locator/FindCoordinatorResponse.java       |   4 +-
 .../membership/gms/locator/GMSLocator.java         |  14 +-
 .../membership/gms/locator/GetViewRequest.java     |   4 +-
 .../membership/gms/locator/GetViewResponse.java    |   4 +-
 .../membership/gms/membership/GMSJoinLeave.java    |   4 +-
 .../gms/messages/FinalCheckPassedMessage.java      |   4 +-
 .../membership/gms/messages/HeartbeatMessage.java  |   4 +-
 .../gms/messages/HeartbeatRequestMessage.java      |   4 +-
 .../gms/messages/InstallViewMessage.java           |   4 +-
 .../gms/messages/JoinRequestMessage.java           |   4 +-
 .../gms/messages/JoinResponseMessage.java          |   4 +-
 .../gms/messages/LeaveRequestMessage.java          |   4 +-
 .../gms/messages/NetworkPartitionMessage.java      |   4 +-
 .../gms/messages/RemoveMemberMessage.java          |   4 +-
 .../gms/messages/SuspectMembersMessage.java        |   4 +-
 .../membership/gms/messages/ViewAckMessage.java    |   4 +-
 .../membership/gms/messenger/GMSPingPonger.java    |   6 +-
 .../membership/gms/messenger/JGroupsMessenger.java |  38 +-
 .../apache/geode/OldClientSupportDUnitTest.java    |  12 +-
 .../gemstone/gemfire/OldClientSupportProvider.java |  10 +-
 .../redis/internal/data/ByteArrayWrapper.java      |   4 +-
 .../internal/serialization/AbstractVersion.java    |  16 +-
 .../serialization/BufferDataOutputStream.java      |  12 +-
 .../internal/serialization/ByteArrayDataInput.java |   8 +-
 .../serialization/DSFIDNotFoundException.java      |   2 +-
 .../serialization/DataSerializableFixedID.java     |   4 +-
 .../serialization/DeserializationContext.java      |   2 +-
 .../{Version.java => KnownVersion.java}            | 183 +++++-----
 .../serialization/SerializationContext.java        |   2 +-
 .../serialization/SerializationVersions.java       |   2 +-
 .../serialization/StaticSerialization.java         |  28 +-
 .../internal/serialization/UnknownVersion.java     |   1 -
 .../geode/internal/serialization/Version.java      | 399 +++------------------
 .../internal/serialization/VersionOrdinal.java     |  83 -----
 .../serialization/VersionedDataInputStream.java    |   6 +-
 .../serialization/VersionedDataOutputStream.java   |   6 +-
 .../serialization/VersionedDataStream.java         |   8 +-
 .../geode/internal/serialization/Versioning.java   |  42 +--
 .../geode/internal/serialization/VersioningIO.java |  18 +-
 .../internal/AbstractSerializationContext.java     |  10 +-
 .../internal/DSFIDSerializerImpl.java              |  18 +-
 .../internal/DeserializationContextImpl.java       |   4 +-
 .../internal/SerializationContextImpl.java         |   4 +-
 .../BufferDataOutputStreamJUnitTest.java           |   6 +-
 .../serialization/ByteArrayDataInputTest.java      |   8 +-
 .../serialization/KnownVersionJUnitTest.java       | 102 ++++++
 .../serialization/UnknownVersionJUnitTest.java     |  12 +-
 .../internal/serialization/VersionJUnitTest.java   | 116 ------
 .../serialization/VersioningJUnitTest.java         |  38 +-
 .../internal/tcpserver/HostAndPort.java            |   4 +-
 .../distributed/internal/tcpserver/TcpClient.java  |  22 +-
 .../distributed/internal/tcpserver/TcpServer.java  |  22 +-
 .../internal/tcpserver/VersionRequest.java         |   4 +-
 .../internal/tcpserver/VersionResponse.java        |   4 +-
 .../internal/tcpserver/HostAndPortTest.java        |   8 +-
 .../locator/wan/RemoteLocatorJoinRequest.java      |   4 +-
 .../locator/wan/RemoteLocatorJoinResponse.java     |   4 +-
 .../locator/wan/RemoteLocatorPingRequest.java      |   4 +-
 .../locator/wan/RemoteLocatorPingResponse.java     |   4 +-
 .../internal/locator/wan/RemoteLocatorRequest.java |   4 +-
 .../locator/wan/RemoteLocatorResponse.java         |   4 +-
 .../RemoteParallelGatewaySenderEventProcessor.java |   4 +-
 ...ateGatewaySenderMixedSiteOneCurrentSiteTwo.java |   4 +-
 .../geode/rest/internal/web/util/JSONUtils.java    |  14 +-
 .../web/controllers/ShellCommandsController.java   |   4 +-
 400 files changed, 1977 insertions(+), 2244 deletions(-)
 copy geode-serialization/src/main/java/org/apache/geode/internal/serialization/{Version.java => KnownVersion.java} (54%)
 delete mode 100644 geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersionOrdinal.java
 create mode 100644 geode-serialization/src/test/java/org/apache/geode/internal/serialization/KnownVersionJUnitTest.java
 delete mode 100644 geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java


[geode] 03/04: GEODE-8298: Fix multicast version detection (#5370)

Posted by bu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

burcham pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git

commit b5e2b566c4574bb41db4ed588fd79674f084e813
Author: Kamilla Aslami <ka...@vmware.com>
AuthorDate: Mon Jul 20 08:30:37 2020 -0700

    GEODE-8298: Fix multicast version detection (#5370)
    
    Membership decides whether or not use multicast based on the versions
    of view members and surprise members. Surprise member version comparison
    was backward. Correct version comparison by unifying view and surprise
    member processing.
    
    Co-authored-by: Kamilla Aslami <ka...@gmail.com>
    Co-authored-by: Bill Burcham <bi...@gmail.com>
    (cherry picked from commit fd76cc0b7dbf97dfb84d11e67b37e33c0a9e7fb2)
---
 .../membership/InternalDistributedMember.java      |   2 +-
 .../gms/GMSMemberDataVersionJUnitTest.java         |   7 --
 .../membership/gms/GMSMembershipJUnitTest.java     | 120 ++++++++++++++++++---
 .../internal/membership/api/MemberData.java        |   5 +-
 .../internal/membership/api/MemberIdentifier.java  |   3 +-
 .../internal/membership/gms/GMSMemberData.java     |  11 +-
 .../internal/membership/gms/GMSMembership.java     |  42 ++++----
 .../membership/gms/MemberIdentifierImpl.java       |   2 +-
 8 files changed, 129 insertions(+), 63 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index 70d6979..3e7db6d 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -545,7 +545,7 @@ public class InternalDistributedMember
     return memberIdentifier.getUniqueId();
   }
 
-  public void setVersionForTest(KnownVersion v) {
+  public void setVersionForTest(Version v) {
     memberIdentifier.setVersionForTest(v);
   }
 
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataVersionJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataVersionJUnitTest.java
index 7a6895b..af27e49 100644
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataVersionJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataVersionJUnitTest.java
@@ -85,13 +85,6 @@ public class GMSMemberDataVersionJUnitTest {
     validate(newMember);
   }
 
-  @Test
-  public void testSetVersionOrdinal() {
-    final GMSMemberData memberData = new GMSMemberData();
-    memberData.setVersionOrdinal(unknownVersionOrdinal);
-    validate(memberData);
-  }
-
   private AbstractShortAssert<?> validate(final MemberData memberData) {
     return assertThat(memberData.getVersionOrdinal()).isEqualTo(unknownVersionOrdinal);
   }
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
index 49b8b3a..e7a2edd 100644
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipJUnitTest.java
@@ -59,12 +59,21 @@ import org.apache.geode.distributed.internal.membership.gms.interfaces.HealthMon
 import org.apache.geode.distributed.internal.membership.gms.interfaces.JoinLeave;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Messenger;
 import org.apache.geode.internal.serialization.DSFIDSerializer;
+import org.apache.geode.internal.serialization.KnownVersion;
+import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
 public class GMSMembershipJUnitTest {
 
+  private static final Version OLDER_THAN_CURRENT_VERSION =
+      Versioning.getVersion((short) (KnownVersion.CURRENT_ORDINAL - 1));
+  private static final Version NEWER_THAN_CURRENT_VERSION =
+      Versioning.getVersion((short) (KnownVersion.CURRENT_ORDINAL + 1));;
+  private static final int DEFAULT_PORT = 8888;
+
   private Services services;
   private MembershipConfig mockConfig;
   private Authenticator authenticator;
@@ -139,7 +148,7 @@ public class GMSMembershipJUnitTest {
     Random r = new Random();
     mockMembers = new MemberIdentifier[5];
     for (int i = 0; i < mockMembers.length; i++) {
-      mockMembers[i] = createMemberID(8888 + i);
+      mockMembers[i] = createMemberID(DEFAULT_PORT + i);
       uuid = new UUID(r.nextLong(), r.nextLong());
       mockMembers[i].setUUID(uuid);
     }
@@ -175,7 +184,7 @@ public class GMSMembershipJUnitTest {
     MemberIdentifier myGMSMemberId = myMemberId;
     List<MemberIdentifier> gmsMembers =
         members.stream().map(x -> ((MemberIdentifier) x)).collect(Collectors.toList());
-    manager.getGMSManager().installView(new GMSMembershipView(myGMSMemberId, 1, gmsMembers));
+    manager.getGMSManager().installView(new GMSMembershipView<>(myGMSMemberId, 1, gmsMembers));
     MemberIdentifier[] destinations = new MemberIdentifier[] {mockMembers[0]};
     Set<MemberIdentifier> failures =
         manager.send(destinations, m);
@@ -199,9 +208,9 @@ public class GMSMembershipJUnitTest {
     manager.getGMSManager().started();
     manager.isJoining = true;
 
-    List<MemberIdentifier> viewmembers =
+    List<MemberIdentifier> viewMembers =
         Arrays.asList(new MemberIdentifier[] {mockMembers[0], myMemberId});
-    manager.getGMSManager().installView(createView(myMemberId, 2, viewmembers));
+    manager.getGMSManager().installView(createView(myMemberId, 2, viewMembers));
 
     // add a surprise member that will be shunned due to it's having
     // an old view ID
@@ -219,7 +228,7 @@ public class GMSMembershipJUnitTest {
     // suspect a member
     MemberIdentifier suspectMember = mockMembers[1];
     manager.handleOrDeferSuspect(
-        new SuspectMember(mockMembers[0], suspectMember, "testing"));
+        new SuspectMember<>(mockMembers[0], suspectMember, "testing"));
     // suspect messages aren't queued - they're ignored before joining the system
     assertEquals(2, manager.getStartupEvents().size());
     verify(listener, never()).memberSuspect(suspectMember, mockMembers[0], "testing");
@@ -232,9 +241,9 @@ public class GMSMembershipJUnitTest {
     assertEquals(3, manager.getStartupEvents().size());
 
     // this view officially adds surpriseMember2
-    viewmembers = Arrays
+    viewMembers = Arrays
         .asList(new MemberIdentifier[] {mockMembers[0], myMemberId, surpriseMember2});
-    manager.handleOrDeferViewEvent(new MembershipView(myMemberId, 3, viewmembers));
+    manager.handleOrDeferViewEvent(new MembershipView<>(myMemberId, 3, viewMembers));
     assertEquals(4, manager.getStartupEvents().size());
 
     // add a surprise member that will be shunned due to it's having
@@ -247,13 +256,13 @@ public class GMSMembershipJUnitTest {
     // process a new view after we finish joining but before event processing has started
     manager.isJoining = false;
     mockMembers[4].setVmViewId(4);
-    viewmembers = Arrays.asList(new MemberIdentifier[] {mockMembers[0], myMemberId,
+    viewMembers = Arrays.asList(new MemberIdentifier[] {mockMembers[0], myMemberId,
         surpriseMember2, mockMembers[4]});
-    manager.handleOrDeferViewEvent(new MembershipView(myMemberId, 4, viewmembers));
+    manager.handleOrDeferViewEvent(new MembershipView<>(myMemberId, 4, viewMembers));
     assertEquals(6, manager.getStartupEvents().size());
 
     // exercise the toString methods for code coverage
-    for (StartupEvent ev : manager.getStartupEvents()) {
+    for (StartupEvent<MemberIdentifier> ev : manager.getStartupEvents()) {
       ev.toString();
     }
 
@@ -271,14 +280,14 @@ public class GMSMembershipJUnitTest {
     // for code coverage also install a view after we finish joining but before
     // event processing has started. This should notify the distribution manager
     // with a LocalViewMessage to process the view
-    manager.handleOrDeferViewEvent(new MembershipView(myMemberId, 5, viewmembers));
+    manager.handleOrDeferViewEvent(new MembershipView<>(myMemberId, 5, viewMembers));
     await().untilAsserted(() -> assertEquals(manager.getView().getViewId(), 5));
 
     // process a suspect now - it will be passed to the listener
     reset(listener);
     suspectMember = mockMembers[1];
     manager.handleOrDeferSuspect(
-        new SuspectMember(mockMembers[0], suspectMember, "testing"));
+        new SuspectMember<>(mockMembers[0], suspectMember, "testing"));
     verify(listener).memberSuspect(suspectMember, mockMembers[0], "testing");
   }
 
@@ -292,15 +301,15 @@ public class GMSMembershipJUnitTest {
     manager.getGMSManager().started();
     manager.isJoining = true;
 
-    List<MemberIdentifier> viewmembers =
+    List<MemberIdentifier> viewMembers =
         Arrays.asList(new MemberIdentifier[] {mockMembers[0], mockMembers[1], myMemberId});
-    GMSMembershipView view = createView(myMemberId, 2, viewmembers);
+    GMSMembershipView view = createView(myMemberId, 2, viewMembers);
     manager.getGMSManager().installView(view);
     when(services.getJoinLeave().getView()).thenReturn(view);
 
-    MemberIdentifier[] destinations = new MemberIdentifier[viewmembers.size()];
+    MemberIdentifier[] destinations = new MemberIdentifier[viewMembers.size()];
     for (int i = 0; i < destinations.length; i++) {
-      MemberIdentifier id = viewmembers.get(i);
+      MemberIdentifier id = viewMembers.get(i);
       destinations[i] = createMemberID(id.getMembershipPort());
     }
     manager.checkAddressesForUUIDs(destinations);
@@ -328,4 +337,83 @@ public class GMSMembershipJUnitTest {
     assertThat(spy.getStartupEvents()).isEmpty();
   }
 
+  @Test
+  public void testIsMulticastAllowedWithOldVersionSurpriseMember() {
+    MembershipView<MemberIdentifier> view = createMembershipView();
+    manager.addSurpriseMember(createSurpriseMember(OLDER_THAN_CURRENT_VERSION));
+
+    manager.processView(view);
+
+    assertThat(manager.getGMSManager().isMulticastAllowed()).isFalse();
+  }
+
+  @Test
+  public void testIsMulticastAllowedWithCurrentVersionSurpriseMember() {
+    MembershipView<MemberIdentifier> view = createMembershipView();
+    manager.addSurpriseMember(createSurpriseMember(KnownVersion.CURRENT));
+
+    manager.processView(view);
+
+    assertThat(manager.getGMSManager().isMulticastAllowed()).isTrue();
+  }
+
+  @Test
+  public void testIsMulticastAllowedWithNewVersionSurpriseMember() {
+    MembershipView<MemberIdentifier> view = createMembershipView();
+    manager.addSurpriseMember(createSurpriseMember(NEWER_THAN_CURRENT_VERSION));
+
+    manager.processView(view);
+
+    assertThat(manager.getGMSManager().isMulticastAllowed()).isTrue();
+  }
+
+  @Test
+  public void testIsMulticastAllowedWithOldVersionViewMember() {
+    MembershipView<MemberIdentifier> view = createMembershipView();
+    view.getMembers().get(0).setVersionForTest(OLDER_THAN_CURRENT_VERSION);
+
+    manager.processView(view);
+
+    assertThat(manager.getGMSManager().isMulticastAllowed()).isFalse();
+  }
+
+  @Test
+  public void testMulticastAllowedWithCurrentVersionViewMember() {
+    MembershipView<MemberIdentifier> view = createMembershipView();
+
+    manager.processView(view);
+
+    assertThat(manager.getGMSManager().isMulticastAllowed()).isTrue();
+  }
+
+  @Test
+  public void testMulticastAllowedWithNewVersionViewMember() {
+    MembershipView<MemberIdentifier> view = createMembershipView();
+    view.getMembers().get(0).setVersionForTest(NEWER_THAN_CURRENT_VERSION);
+
+    manager.processView(view);
+
+    assertThat(manager.getGMSManager().isMulticastAllowed()).isTrue();
+  }
+
+  private MemberIdentifier createSurpriseMember(Version version) {
+    MemberIdentifier surpriseMember = createMemberID(DEFAULT_PORT + 5);
+    surpriseMember.setVmViewId(3);
+    surpriseMember.setVersionForTest(version);
+    return surpriseMember;
+  }
+
+  private MembershipView<MemberIdentifier> createMembershipView() {
+    List<MemberIdentifier> viewMembers = createMemberIdentifiers();
+    return new MembershipView<>(myMemberId, 2, viewMembers);
+  }
+
+  private List<MemberIdentifier> createMemberIdentifiers() {
+    List<MemberIdentifier> viewMembers = new ArrayList<>();
+    for (int i = 0; i < 2; ++i) {
+      MemberIdentifier memberIdentifier = createMemberID(DEFAULT_PORT + 6 + i);
+      viewMembers.add(memberIdentifier);
+    }
+    return viewMembers;
+  }
 }
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java
index 3c44b39..a8d038e 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java
@@ -21,7 +21,6 @@ import java.net.InetAddress;
 import org.jgroups.util.UUID;
 
 import org.apache.geode.internal.serialization.DeserializationContext;
-import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.Version;
 
@@ -50,8 +49,6 @@ public interface MemberData {
 
   String getUniqueTag();
 
-  void setVersionOrdinal(short versionOrdinal);
-
   void setUUID(UUID u);
 
   UUID getUUID();
@@ -92,7 +89,7 @@ public interface MemberData {
 
   void setVmKind(int vmKind);
 
-  void setVersion(KnownVersion v);
+  void setVersion(Version v);
 
   void setDirectChannelPort(int directPort);
 
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java
index 30cc8dd..6b4546c 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java
@@ -27,7 +27,6 @@ import org.jgroups.util.UUID;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
-import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.Version;
 
@@ -191,7 +190,7 @@ public interface MemberIdentifier extends DataSerializableFixedID {
 
   String getUniqueId();
 
-  void setVersionForTest(KnownVersion v);
+  void setVersionForTest(Version v);
 
   void setUniqueTag(String tag);
 
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
index 76195d4..9f0ba77 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
@@ -236,11 +236,6 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
   }
 
   @Override
-  public void setVersionOrdinal(short versionOrdinal) {
-    this.version = Versioning.getVersion(versionOrdinal);
-  }
-
-  @Override
   public void setUUID(UUID u) {
     if (u == null) {
       this.uuidLSBs = 0;
@@ -507,8 +502,8 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
 
 
   @Override
-  public void setVersion(KnownVersion v) {
-    setVersionOrdinal(v.ordinal());
+  public void setVersion(Version version) {
+    this.version = version;
   }
 
   @Override
@@ -583,7 +578,7 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
   @Override
   public void readEssentialData(DataInput in,
       DeserializationContext context) throws IOException, ClassNotFoundException {
-    setVersionOrdinal(VersioningIO.readOrdinal(in));
+    setVersion(Versioning.getVersion(VersioningIO.readOrdinal(in)));
 
     int flags = in.readShort();
     this.networkPartitionDetectionEnabled = (flags & NPD_ENABLED_BIT) != 0;
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
index 33c3104..b4c77c2 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
@@ -39,6 +39,7 @@ import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.logging.log4j.Logger;
 
@@ -61,7 +62,6 @@ import org.apache.geode.distributed.internal.membership.api.QuorumChecker;
 import org.apache.geode.distributed.internal.membership.api.StopShunningMarker;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Manager;
 import org.apache.geode.internal.serialization.KnownVersion;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -359,7 +359,7 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
   /**
    * Analyze a given view object, generate events as appropriate
    */
-  public void processView(long newViewId, MembershipView<ID> newView) {
+  public void processView(MembershipView<ID> newView) {
     // Sanity check...
     if (logger.isDebugEnabled()) {
       StringBuilder msg = new StringBuilder(200);
@@ -377,35 +377,17 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
     // incoming events will not be lost in terms of our global view.
     latestViewWriteLock.lock();
     try {
-      // first determine the version for multicast message serialization
-      Version version = KnownVersion.CURRENT;
-      for (final Entry<ID, Long> internalIDLongEntry : surpriseMembers
-          .entrySet()) {
-        ID mbr = internalIDLongEntry.getKey();
-        final Version itsVersion = mbr.getVersion();
-        if (itsVersion != null && version.compareTo(itsVersion) < 0) {
-          version = itsVersion;
-        }
-      }
-      for (ID mbr : newView.getMembers()) {
-        final Version itsVersion = mbr.getVersion();
-        if (itsVersion != null && itsVersion.compareTo(version) < 0) {
-          version = mbr.getVersion();
-        }
-      }
-      disableMulticastForRollingUpgrade = !version.equals(KnownVersion.CURRENT);
-
+      setIsMulticastAllowedFrom(newView, surpriseMembers);
       // Save previous view, for delta analysis
       MembershipView<ID> priorView = latestView;
 
-      if (newViewId < priorView.getViewId()) {
+      if (newView.getViewId() < priorView.getViewId()) {
         // ignore this view since it is old news
         return;
       }
 
       // update the view to reflect our changes, so that
       // callbacks will see the new (updated) view.
-      long newlatestViewId = newViewId;
       MembershipView<ID> newlatestView = new MembershipView<>(newView, newView.getViewId());
 
       // look for additions
@@ -531,6 +513,18 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
     }
   }
 
+  private void setIsMulticastAllowedFrom(final MembershipView<ID> newView,
+      final Map<ID, Long> surpriseMembers) {
+    disableMulticastForRollingUpgrade =
+        anyMemberHasOlderVersion(
+            Stream.concat(surpriseMembers.keySet().stream(), newView.getMembers().stream()));
+  }
+
+  private boolean anyMemberHasOlderVersion(final Stream<ID> members) {
+    return members
+        .anyMatch(member -> KnownVersion.CURRENT.isNewerThan(member.getVersion()));
+  }
+
   @Override
   public <V> V doWithViewLocked(Supplier<V> function) {
     latestViewReadLock.lock();
@@ -987,7 +981,7 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
         }
       }
 
-      viewExecutor.submit(() -> processView(viewArg.getViewId(), viewArg));
+      viewExecutor.submit(() -> processView(viewArg));
 
     } finally {
       latestViewWriteLock.unlock();
@@ -1046,7 +1040,7 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
         // message from non-member - ignore
       }
     } else if (o.isGmsView()) { // view event
-      processView(o.gmsView.getViewId(), o.gmsView);
+      processView(o.gmsView);
     } else if (o.isSurpriseConnect()) { // connect
       processSurpriseConnect(o.member);
     } else {
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
index daa1a20..f227a97 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
@@ -982,7 +982,7 @@ public class MemberIdentifierImpl implements MemberIdentifier, DataSerializableF
     return sb.toString();
   }
 
-  public void setVersionForTest(KnownVersion v) {
+  public void setVersionForTest(Version v) {
     memberData.setVersion(v);
     cachedToString = null;
   }


[geode] 02/04: GEODE-8337: git mv VersionOrdinal.java->Version.java

Posted by bu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

burcham pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 415e4402c01ff08df129d55ccc9d42d5000b320e
Author: Bill Burcham <bi...@gmail.com>
AuthorDate: Fri Jul 17 12:45:17 2020 -0700

    GEODE-8337: git mv VersionOrdinal.java->Version.java
    
    (cherry picked from commit 2a3b609ceb2f9374cc847d0f367ab2d53f5392a0)
---
 .../cache/client/ClientCacheFactoryJUnitTest.java  | 10 +++---
 .../cache/ha/HARegionQueueIntegrationTest.java     |  2 +-
 .../client/internal/ClientSideHandshakeImpl.java   |  8 ++---
 .../internal/ClusterDistributionManager.java       |  4 +--
 .../internal/LonerDistributionManager.java         |  4 +--
 .../distributed/internal/ReplyProcessor21.java     |  4 +--
 .../membership/InternalDistributedMember.java      | 10 +++---
 .../internal/streaming/StreamingOperation.java     |  2 +-
 .../internal/cache/AbstractUpdateOperation.java    |  2 +-
 ...xpireDisconnectedClientTransactionsMessage.java |  4 +--
 .../geode/internal/cache/GemFireCacheImpl.java     |  2 +-
 .../internal/cache/InitialImageOperation.java      | 14 ++++-----
 .../org/apache/geode/internal/cache/Oplog.java     |  2 +-
 .../geode/internal/cache/PartitionedRegion.java    |  4 +--
 .../cache/PartitionedRegionQueryEvaluator.java     |  2 +-
 .../geode/internal/cache/ServerPingMessage.java    |  2 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |  2 +-
 .../cache/partitioned/FetchBulkEntriesMessage.java |  2 +-
 .../cache/partitioned/FetchEntriesMessage.java     |  2 +-
 .../cache/partitioned/FetchKeysMessage.java        |  2 +-
 .../cache/partitioned/IndexCreationMsg.java        |  2 +-
 .../internal/cache/partitioned/QueryMessage.java   |  4 +--
 .../partitioned/StreamingPartitionOperation.java   |  2 +-
 .../cache/persistence/DiskInitFileParser.java      |  2 +-
 .../tier/sockets/ClientProxyMembershipID.java      |  2 +-
 .../tier/sockets/ClientRegistrationMetadata.java   |  2 +-
 .../tier/sockets/ServerSideHandshakeFactory.java   |  2 +-
 .../internal/cache/tx/RemoteFetchKeysMessage.java  |  2 +-
 .../org/apache/geode/internal/tcp/Connection.java  |  4 +--
 .../configuration/domain/Configuration.java        |  4 +--
 .../operation/RestoreRedundancyPerformer.java      |  2 +-
 .../management/internal/util/ManagementUtils.java  |  2 +-
 ...eDisconnectedClientTransactionsMessageTest.java |  2 +-
 .../cache/ha/ThreadIdentifierJUnitTest.java        |  2 +-
 .../operation/RestoreRedundancyPerformerTest.java  |  8 ++---
 .../RollingUpgrade2DUnitTestBase.java              |  2 +-
 .../rollingupgrade/RollingUpgradeDUnitTest.java    |  4 +--
 .../cli/commands/CreateGatewaySenderCommand.java   |  2 +-
 .../internal/cli/commands/RedundancyCommand.java   |  2 +-
 .../commands/CreateGatewaySenderCommandTest.java   |  4 +--
 .../apache/geode/test/version/VersionManager.java  | 28 ++++++++++++-----
 .../cache/lucene/internal/LuceneServiceImpl.java   | 10 +++---
 .../internal/distributed/LuceneQueryFunction.java  |  2 +-
 .../LuceneSearchWithRollingUpgradeTestBase.java    | 19 +++++++++---
 .../gms/fd/GMSHealthMonitorJUnitTest.java          |  2 +-
 .../gms/membership/GMSJoinLeaveJUnitTest.java      |  6 ++--
 .../gms/messenger/JGroupsMessengerJUnitTest.java   |  2 +-
 .../internal/membership/api/MemberData.java        |  4 +--
 .../internal/membership/api/MemberIdentifier.java  |  6 ++--
 .../internal/membership/gms/GMSMemberData.java     | 18 +++++------
 .../internal/membership/gms/GMSMembership.java     | 10 +++---
 .../internal/membership/gms/GMSMembershipView.java |  4 +--
 .../membership/gms/MemberIdentifierImpl.java       | 12 ++++----
 .../membership/gms/locator/GMSLocator.java         |  2 +-
 .../membership/gms/messenger/JGroupsMessenger.java |  8 ++---
 .../internal/serialization/AbstractVersion.java    | 16 +++++-----
 .../geode/internal/serialization/KnownVersion.java |  6 ++--
 .../internal/serialization/UnknownVersion.java     |  1 -
 .../{VersionOrdinal.java => Version.java}          | 20 ++++++------
 .../geode/internal/serialization/Versioning.java   | 36 +++++++++++-----------
 .../geode/internal/serialization/VersioningIO.java |  4 +--
 ...onJUnitTest.java => KnownVersionJUnitTest.java} | 26 ++++------------
 .../serialization/UnknownVersionJUnitTest.java     | 12 ++++----
 .../serialization/VersioningJUnitTest.java         | 22 ++++++-------
 .../distributed/internal/tcpserver/TcpClient.java  |  2 +-
 .../distributed/internal/tcpserver/TcpServer.java  |  6 ++--
 .../RemoteParallelGatewaySenderEventProcessor.java |  2 +-
 67 files changed, 218 insertions(+), 208 deletions(-)

diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
index d102474..aae71c2 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
@@ -354,8 +354,8 @@ public class ClientCacheFactoryJUnitTest {
     InternalDistributedMember memberID =
         (InternalDistributedMember) clientCache.getDistributedSystem().getDistributedMember();
     MemberIdentifier gmsID = memberID;
-    memberID.setVersionObjectForTest(KnownVersion.GFE_82);
-    assertThat(memberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.GFE_82);
+    memberID.setVersionForTest(KnownVersion.GFE_82);
+    assertThat(memberID.getVersion()).isEqualTo(KnownVersion.GFE_82);
 
     ClientProxyMembershipID clientID = ClientProxyMembershipID.getClientId(memberID);
     HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.GFE_82);
@@ -367,14 +367,14 @@ public class ClientCacheFactoryJUnitTest {
     ClientProxyMembershipID newID = DataSerializer.readObject(in);
     InternalDistributedMember newMemberID =
         (InternalDistributedMember) newID.getDistributedMember();
-    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.GFE_82);
+    assertThat(newMemberID.getVersion()).isEqualTo(KnownVersion.GFE_82);
     assertThat(newID.getClientVersion()).isEqualTo(KnownVersion.GFE_82);
 
     assertThat(newMemberID.getUuidLeastSignificantBits()).isEqualTo(0);
     assertThat(newMemberID.getUuidMostSignificantBits()).isEqualTo(0);
 
     gmsID.setUUID(new UUID(1234L, 5678L));
-    memberID.setVersionObjectForTest(KnownVersion.CURRENT);
+    memberID.setVersionForTest(KnownVersion.CURRENT);
     clientID = ClientProxyMembershipID.getClientId(memberID);
     out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(clientID, out);
@@ -383,7 +383,7 @@ public class ClientCacheFactoryJUnitTest {
         KnownVersion.CURRENT);
     newID = DataSerializer.readObject(in);
     newMemberID = (InternalDistributedMember) newID.getDistributedMember();
-    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.CURRENT);
+    assertThat(newMemberID.getVersion()).isEqualTo(KnownVersion.CURRENT);
     assertThat(newID.getClientVersion()).isEqualTo(KnownVersion.CURRENT);
 
     assertThat(newMemberID.getUuidLeastSignificantBits())
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
index 14fc72b..207fe96 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
@@ -509,7 +509,7 @@ public class HARegionQueueIntegrationTest {
   private InternalDistributedMember createMember() {
     // Create an InternalDistributedMember
     InternalDistributedMember member = mock(InternalDistributedMember.class);
-    when(member.getVersionOrdinalObject()).thenReturn(KnownVersion.CURRENT);
+    when(member.getVersion()).thenReturn(KnownVersion.CURRENT);
     return member;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
index 2380db7..708d4b2 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
@@ -118,7 +118,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       overrideClientVersion = ver;
     } else {
       currentClientVersion =
-          Versioning.getKnownVersionOrDefault(Versioning.getVersionOrdinal(ver),
+          Versioning.getKnownVersionOrDefault(Versioning.getVersion(ver),
               KnownVersion.CURRENT);
       overrideClientVersion = -1;
     }
@@ -221,7 +221,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
         // establish a versioned stream for the other site, if necessary
         if (wanSiteVersion < KnownVersion.CURRENT_ORDINAL) {
           dis = new VersionedDataInputStream(dis, Versioning
-              .getKnownVersionOrDefault(Versioning.getVersionOrdinal(wanSiteVersion),
+              .getKnownVersionOrDefault(Versioning.getVersion(wanSiteVersion),
                   KnownVersion.CURRENT));
         }
       }
@@ -248,7 +248,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // validate that the remote side has a different distributed system id.
       if (communicationMode.isWAN()
           && KnownVersion.GFE_66
-              .compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
+              .compareTo(Versioning.getVersion(conn.getWanSiteVersion())) <= 0
           && currentClientVersion.isNotOlderThan(KnownVersion.GFE_66)) {
         int remoteDistributedSystemId = in.read();
         int localDistributedSystemId =
@@ -263,7 +263,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // Read the PDX registry size from the remote size
       if (communicationMode.isWAN()
           && KnownVersion.GFE_80
-              .compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
+              .compareTo(Versioning.getVersion(conn.getWanSiteVersion())) <= 0
           && currentClientVersion.isNotOlderThan(KnownVersion.GFE_80)) {
         int remotePdxSize = dis.readInt();
         serverQStatus.setPdxSize(remotePdxSize);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
index 1cf97ca..1219420 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
@@ -1543,13 +1543,13 @@ public class ClusterDistributionManager implements DistributionManager {
   @Override
   public void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
       KnownVersion version) {
-    members.removeIf(id -> id.getVersionOrdinalObject().compareTo(version) < 0);
+    members.removeIf(id -> id.getVersion().compareTo(version) < 0);
   }
 
   @Override
   public void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
       KnownVersion version) {
-    members.removeIf(id -> id.getVersionOrdinalObject().compareTo(version) >= 0);
+    members.removeIf(id -> id.getVersion().compareTo(version) >= 0);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
index 5e8e3ed..ffbf2c8 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
@@ -189,7 +189,7 @@ public class LonerDistributionManager implements DistributionManager {
       KnownVersion version) {
     for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext();) {
       InternalDistributedMember id = it.next();
-      if (id.getVersionOrdinalObject().compareTo(version) < 0) {
+      if (id.getVersion().compareTo(version) < 0) {
         it.remove();
       }
     }
@@ -200,7 +200,7 @@ public class LonerDistributionManager implements DistributionManager {
       KnownVersion version) {
     for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext();) {
       InternalDistributedMember id = it.next();
-      if (id.getVersionOrdinalObject().compareTo(version) >= 0) {
+      if (id.getVersion().compareTo(version) >= 0) {
         it.remove();
       }
     }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java
index 3194003..83d7884 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java
@@ -34,7 +34,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.serialization.DSFIDNotFoundException;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.internal.util.concurrent.StoppableCountDownLatch;
@@ -472,7 +472,7 @@ public class ReplyProcessor21 implements MembershipListener {
    */
   protected synchronized void processException(DistributionMessage msg, DSFIDNotFoundException ex) {
     final short versionOrdinal = ex.getProductVersionOrdinal();
-    final VersionOrdinal anyVersion = Versioning.getVersionOrdinal(versionOrdinal);
+    final Version anyVersion = Versioning.getVersion(versionOrdinal);
     logger.fatal(String.format(
         "Exception received due to missing DSFID %s on remote node %s running version %s.",
         new Object[] {ex.getUnknownDSFID(), msg.getSender(), anyVersion}), ex);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index 30fb45e..70d6979 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -49,7 +49,7 @@ import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.OSProcess;
 
 /**
@@ -545,13 +545,13 @@ public class InternalDistributedMember
     return memberIdentifier.getUniqueId();
   }
 
-  public void setVersionObjectForTest(KnownVersion v) {
-    memberIdentifier.setVersionObjectForTest(v);
+  public void setVersionForTest(KnownVersion v) {
+    memberIdentifier.setVersionForTest(v);
   }
 
   @Override
-  public VersionOrdinal getVersionOrdinalObject() {
-    return memberIdentifier.getVersionOrdinalObject();
+  public Version getVersion() {
+    return memberIdentifier.getVersion();
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
index 0ee9323..64c2a38 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
@@ -297,7 +297,7 @@ public abstract class StreamingOperation {
       int chunkSize = socketBufferSize - MSG_OVERHEAD;
       HeapDataOutputStream outStream =
           new HeapDataOutputStream(chunkSize, Versioning
-              .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(),
+              .getKnownVersionOrDefault(getSender().getVersion(),
                   KnownVersion.CURRENT));
       boolean sentFinalMessage = false;
       boolean receiverCacheClosed = false;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
index 03a0856..66eb2a2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
@@ -344,7 +344,7 @@ public abstract class AbstractUpdateOperation extends DistributedCacheOperation
 
         String msg =
             String.format("memberID cannot be null for persistent regions: %s", tag);
-        RuntimeException ex = (sender.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80))
+        RuntimeException ex = (sender.getVersion().isOlderThan(KnownVersion.GFE_80))
             ? new InternalGemFireException(msg) : new InvalidVersionException(msg);
         throw ex;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
index 955a4b2..1876217 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
@@ -47,7 +47,7 @@ public class ExpireDisconnectedClientTransactionsMessage
     Set newVersionRecipients = new HashSet();
     for (InternalDistributedMember recipient : recipients) {
       // to geode 1.7.0 and later version servers
-      if (recipient.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
+      if (recipient.getVersion().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
         newVersionRecipients.add(recipient);
       }
     }
@@ -78,7 +78,7 @@ public class ExpireDisconnectedClientTransactionsMessage
     InternalDistributedMember sender = getSender();
     if (cache != null) {
       TXManagerImpl mgr = cache.getTXMgr();
-      if (sender.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
+      if (sender.getVersion().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
         // schedule to expire disconnected client transaction.
         mgr.expireDisconnectedClientTransactions(this.txIds, false);
       } else {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index 3db5973..c5b87bb 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -4400,7 +4400,7 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
     // the RemoveCacheServerProfileMessage
     otherMembers
         .removeIf(
-            member -> KnownVersion.GEODE_1_5_0.compareTo(member.getVersionOrdinalObject()) > 0);
+            member -> KnownVersion.GEODE_1_5_0.compareTo(member.getVersion()) > 0);
 
     if (!otherMembers.isEmpty()) {
       if (logger.isDebugEnabled()) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
index 9eca817..3698dbb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
@@ -339,14 +339,14 @@ public class InitialImageOperation {
       final ClusterDistributionManager dm =
           (ClusterDistributionManager) this.region.getDistributionManager();
       boolean allowDeltaGII = true;
-      if (FORCE_FULL_GII || recipient.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
+      if (FORCE_FULL_GII || recipient.getVersion().isOlderThan(KnownVersion.GFE_80)) {
         allowDeltaGII = false;
       }
       Set keysOfUnfinishedOps = null;
       RegionVersionVector received_rvv = null;
       RegionVersionVector remote_rvv = null;
       if (this.region.getConcurrencyChecksEnabled()
-          && recipient.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GFE_80)) {
+          && recipient.getVersion().isNotOlderThan(KnownVersion.GFE_80)) {
         if (internalBeforeRequestRVV != null
             && internalBeforeRequestRVV.getRegionName().equals(this.region.getName())) {
           internalBeforeRequestRVV.run();
@@ -747,7 +747,7 @@ public class InitialImageOperation {
           Set recipients = this.region.getCacheDistributionAdvisor().adviseReplicates();
           for (Iterator it = recipients.iterator(); it.hasNext();) {
             InternalDistributedMember mbr = (InternalDistributedMember) it.next();
-            if (mbr.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
+            if (mbr.getVersion().isOlderThan(KnownVersion.GFE_80)) {
               it.remove();
             }
           }
@@ -1191,7 +1191,7 @@ public class InitialImageOperation {
         region.recordEventState(msg.getSender(), msg.eventState);
       }
       if (msg.versionVector != null
-          && msg.getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)
+          && msg.getSender().getVersion().isOlderThan(KnownVersion.GFE_80)
           && region.getConcurrencyChecksEnabled()) {
         // for older version, save received rvv from RegionStateMessage
         logger.debug("Applying version vector to {}: {}", region.getName(), msg.versionVector);
@@ -1600,7 +1600,7 @@ public class InitialImageOperation {
     }
 
     public boolean goWithFullGII(DistributedRegion rgn, RegionVersionVector requesterRVV) {
-      if (getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
+      if (getSender().getVersion().isOlderThan(KnownVersion.GFE_80)) {
         // pre-8.0 could not handle a delta-GII
         return true;
       }
@@ -1745,7 +1745,7 @@ public class InitialImageOperation {
             if (eventState != null && eventState.size() > 0) {
               RegionStateMessage.send(dm, getSender(), this.processorId, eventState, true);
             }
-          } else if (getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
+          } else if (getSender().getVersion().isOlderThan(KnownVersion.GFE_80)) {
             // older versions of the product expect a RegionStateMessage at this point
             if (rgn.getConcurrencyChecksEnabled() && this.versionVector == null
                 && !recoveringForLostMember) {
@@ -1995,7 +1995,7 @@ public class InitialImageOperation {
         }
 
         final KnownVersion knownVersion = Versioning
-            .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), KnownVersion.CURRENT);
+            .getKnownVersionOrDefault(sender.getVersion(), KnownVersion.CURRENT);
 
         do {
           flowControl.acquirePermit();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
index 559f965..216644f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
@@ -2074,7 +2074,7 @@ public class Oplog implements CompactableOplog, Flushable {
     short ver = VersioningIO.readOrdinal(dis);
     final KnownVersion recoveredGFVersion =
         Versioning.getKnownVersionOrDefault(
-            Versioning.getVersionOrdinal(ver), null);
+            Versioning.getVersion(ver), null);
     if (recoveredGFVersion == null) {
       throw new DiskAccessException(
           String.format("Unknown version ordinal %s found when recovering Oplogs", ver),
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
index ad6d22b..0767ced 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
@@ -4830,7 +4830,7 @@ public class PartitionedRegion extends LocalRegion
         oneBucketKeys.clear();
         oneBucketKeys.put(e.getKey(), e.getValue());
         try {
-          if (entry.getKey().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
+          if (entry.getKey().getVersion().isOlderThan(KnownVersion.GFE_80)) {
             failures.putAll(nodeToBuckets.get(entry.getKey()));
             continue;
           }
@@ -4882,7 +4882,7 @@ public class PartitionedRegion extends LocalRegion
         bucketId.clear();
         bucketId.add(bucket);
         try {
-          if (entry.getKey().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
+          if (entry.getKey().getVersion().isOlderThan(KnownVersion.GFE_80)) {
             failures.addAll(nodeToBuckets.get(entry.getKey()));
             continue;
           }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
index 4ced34c..c0df11d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
@@ -186,7 +186,7 @@ public class PartitionedRegionQueryEvaluator extends StreamingPartitionOperation
     // we will have to sort it
     boolean sortNeeded = false;
     List<CompiledSortCriterion> orderByAttribs = null;
-    if (sender.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_90)) {
+    if (sender.getVersion().isOlderThan(KnownVersion.GFE_90)) {
       CompiledSelect cs = this.query.getSimpleSelect();
       if (cs != null && cs.isOrderBy()) {
         sortNeeded = true;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
index 5882fdd..d0cf677 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
@@ -65,7 +65,7 @@ public class ServerPingMessage extends PooledDistributionMessage {
 
     // filtered recipients
     for (InternalDistributedMember recipient : recipients) {
-      if (KnownVersion.GFE_81.compareTo(recipient.getVersionOrdinalObject()) <= 0) {
+      if (KnownVersion.GFE_81.compareTo(recipient.getVersion()) <= 0) {
         filteredRecipients.add(recipient);
       }
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
index 21558b8..eeb2b4a 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
@@ -2118,7 +2118,7 @@ public class HARegionQueue implements RegionQueue {
     try {
       inputValue = BlobHelper.deserializeBlob(newValueCd.getSerializedValue(),
           Versioning
-              .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), KnownVersion.CURRENT),
+              .getKnownVersionOrDefault(sender.getVersion(), KnownVersion.CURRENT),
           null);
       newValueCd = new VMCachedDeserializable(inputValue, newValueCd.getSizeInBytes());
     } catch (IOException | ClassNotFoundException e) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
index 9fc2756..766733e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
@@ -240,7 +240,7 @@ public class FetchBulkEntriesMessage extends PartitionMessage {
 
       HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersion(), KnownVersion.CURRENT));
       Iterator<BucketRegion> mapsIterator = maps.iterator();
       BucketRegion map = null;
       Iterator it = null;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
index 69f1bea..119885f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
@@ -293,7 +293,7 @@ public class FetchEntriesMessage extends PartitionMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(receiver.getVersionOrdinalObject(), KnownVersion.CURRENT));
+              .getKnownVersionOrDefault(receiver.getVersion(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
index 9655c44..aa1b829 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
@@ -372,7 +372,7 @@ public class FetchKeysMessage extends PartitionMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersion(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
index 826ff43..a383aac 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
@@ -357,7 +357,7 @@ public class IndexCreationMsg extends PartitionMessage {
     }
 
     for (InternalDistributedMember rec : recipients) {
-      if (rec.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_81)) {
+      if (rec.getVersion().isOlderThan(KnownVersion.GFE_81)) {
         throw new UnsupportedOperationException(
             "Indexes should not be created during rolling upgrade");
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
index ffdd027..108a65d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
@@ -124,7 +124,7 @@ public class QueryMessage extends StreamingPartitionOperation.StreamingPartition
     }
     Object data = this.currentResultIterator.next();
     boolean isPostGFE_8_1 =
-        this.getSender().getVersionOrdinalObject().isNewerThan(KnownVersion.GFE_81);
+        this.getSender().getVersion().isNewerThan(KnownVersion.GFE_81);
 
     // There is a bug in older versions of GFE such that the query node expects the structs to have
     // type as ObjectTypes only & not specific types. So the new version needs to send the
@@ -192,7 +192,7 @@ public class QueryMessage extends StreamingPartitionOperation.StreamingPartition
       }
       isQueryTraced =
           query.isTraced()
-              && this.sender.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GFE_81);
+              && this.sender.getVersion().isNotOlderThan(KnownVersion.GFE_81);
 
       // Adds a query trace info object to the results list for remote queries
       PRQueryTraceInfo queryTraceInfo = null;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
index 16dd1e1..55af36f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
@@ -385,7 +385,7 @@ public abstract class StreamingPartitionOperation extends StreamingOperation {
       boolean receiverCacheClosed = false;
 
       this.outStream = new HeapDataOutputStream(chunkSize, Versioning
-          .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(), KnownVersion.CURRENT));
+          .getKnownVersionOrDefault(getSender().getVersion(), KnownVersion.CURRENT));
 
       try {
         do {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
index 9bf801e..a5744ff 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
@@ -434,7 +434,7 @@ public class DiskInitFileParser {
                 ver);
           }
           gfversion = Versioning.getKnownVersionOrDefault(
-              Versioning.getVersionOrdinal(ver), null);
+              Versioning.getVersion(ver), null);
           if (gfversion == null) {
             throw new DiskAccessException(
                 String.format("Unknown version ordinal %s found when recovering Oplogs", ver),
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
index 0fa67e4..404f778 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
@@ -352,7 +352,7 @@ public class ClientProxyMembershipID
   public KnownVersion getClientVersion() {
     return Versioning
         .getKnownVersionOrDefault(
-            ((InternalDistributedMember) getDistributedMember()).getVersionOrdinalObject(),
+            ((InternalDistributedMember) getDistributedMember()).getVersion(),
             KnownVersion.CURRENT);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
index b50be26..2790f6f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
@@ -120,7 +120,7 @@ class ClientRegistrationMetadata {
     short clientVersionOrdinal = VersioningIO.readOrdinal(dataInputStream);
 
     clientVersion = Versioning.getKnownVersionOrDefault(
-        Versioning.getVersionOrdinal(clientVersionOrdinal), null);
+        Versioning.getVersion(clientVersionOrdinal), null);
 
     final String message;
     if (clientVersion == null) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
index c2ff9b3..e86b1de 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
@@ -73,7 +73,7 @@ class ServerSideHandshakeFactory {
             "HandShakeReader: EOF reached before client version could be read");
       }
       final KnownVersion clientVersion = Versioning.getKnownVersionOrDefault(
-          Versioning.getVersionOrdinal(clientVersionOrdinal), null);
+          Versioning.getVersion(clientVersionOrdinal), null);
       final String message;
       if (clientVersion == null) {
         message = KnownVersion.unsupportedVersionMessage(clientVersionOrdinal);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
index 3466119..7653d3d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
@@ -224,7 +224,7 @@ public class RemoteFetchKeysMessage extends RemoteOperationMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersion(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
index fb4b331..af63f69 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
@@ -2813,7 +2813,7 @@ public class Connection implements Runnable {
       // read the product version ordinal for on-the-fly serialization
       // transformations (for rolling upgrades)
       remoteVersion = Versioning.getKnownVersionOrDefault(
-          Versioning.getVersionOrdinal(VersioningIO.readOrdinal(dis)),
+          Versioning.getVersion(VersioningIO.readOrdinal(dis)),
           null);
       int dominoNumber = 0;
       if (remoteVersion == null
@@ -3131,7 +3131,7 @@ public class Connection implements Runnable {
           // read the product version ordinal for on-the-fly serialization
           // transformations (for rolling upgrades)
           remoteVersion = Versioning.getKnownVersionOrDefault(
-              Versioning.getVersionOrdinal(VersioningIO.readOrdinal(dis)),
+              Versioning.getVersion(VersioningIO.readOrdinal(dis)),
               null);
           ioFilter.doneReading(peerDataBuffer);
           notifyHandshakeWaiter(true);
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
index b3ade4e..44c6460 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
@@ -39,7 +39,7 @@ import org.xml.sax.SAXException;
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.KnownVersion;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.management.configuration.Deployment;
@@ -188,7 +188,7 @@ public class Configuration implements DataSerializable {
           .forEach(deployment -> deployments.put(deployment.getFileName(), deployment));
     } else {
       // version of the data we are reading (1.12 or later)
-      final VersionOrdinal version = Versioning.getVersionOrdinal(VersioningIO.readOrdinal(in));
+      final Version version = Versioning.getVersion(VersioningIO.readOrdinal(in));
       if (version.isNotOlderThan(KnownVersion.GEODE_1_12_0)) {
         deployments.putAll(DataSerializer.readHashMap(in));
       }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
index 14e9e08..d65bc58 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
@@ -129,7 +129,7 @@ public class RestoreRedundancyPerformer
       RebalanceOperationPerformer.MemberPRInfo prInfo) {
     return prInfo.dsMemberList.stream()
         .map(InternalDistributedMember.class::cast)
-        .filter(member -> member.getVersionOrdinalObject().compareTo(ADDED_VERSION) >= 0)
+        .filter(member -> member.getVersion().compareTo(ADDED_VERSION) >= 0)
         .collect(Collectors.toList());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java b/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
index 823b7a0..fa406ba 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
@@ -77,7 +77,7 @@ public class ManagementUtils {
   public static Set<DistributedMember> getNormalMembersWithSameOrNewerVersion(InternalCache cache,
       KnownVersion version) {
     return getAllNormalMembers(cache).stream().filter(
-        member -> ((InternalDistributedMember) member).getVersionOrdinalObject()
+        member -> ((InternalDistributedMember) member).getVersion()
             .compareTo(version) >= 0)
         .collect(Collectors.toSet());
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
index a4257d3..a96a8f5 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
@@ -44,7 +44,7 @@ public class ExpireDisconnectedClientTransactionsMessageTest {
     when(dm.getCache()).thenReturn(cache);
     when(cache.getTXMgr()).thenReturn(txManager);
     doReturn(sender).when(message).getSender();
-    when(sender.getVersionOrdinalObject()).thenReturn(version);
+    when(sender.getVersion()).thenReturn(version);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
index 38a9b49..c072fc7 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
@@ -36,7 +36,7 @@ public class ThreadIdentifierJUnitTest {
   @Test
   public void testEqualsIgnoresUUIDBytes() throws Exception {
     InternalDistributedMember id = new InternalDistributedMember(InetAddress.getLocalHost(), 1234);
-    id.setVersionObjectForTest(KnownVersion.GFE_90);
+    id.setVersionForTest(KnownVersion.GFE_90);
     byte[] memberIdBytes = EventID.getMembershipId(new ClientProxyMembershipID(id));
     byte[] memberIdBytesWithoutUUID = new byte[memberIdBytes.length - (2 * 8 + 1)];// UUID bytes +
                                                                                    // weight byte
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
index e02a453..e8ca7b9 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
@@ -93,9 +93,9 @@ public class RestoreRedundancyPerformerTest {
     when(internalCacheForClientAccess.getInternalDistributedSystem())
         .thenReturn(internalDistributedSystem);
 
-    when(server1.getVersionOrdinalObject())
+    when(server1.getVersion())
         .thenReturn(RestoreRedundancyPerformer.ADDED_VERSION);
-    when(server2.getVersionOrdinalObject())
+    when(server2.getVersion())
         .thenReturn(RestoreRedundancyPerformer.ADDED_VERSION);
 
     restoreRedundancyPerformer = new RestoreRedundancyPerformer();
@@ -239,9 +239,9 @@ public class RestoreRedundancyPerformerTest {
     underRedundancyRegionResults.put(REGION_1, regionRedundancyStatusImpl);
 
 
-    when(server1.getVersionOrdinalObject())
+    when(server1.getVersion())
         .thenReturn(KnownVersion.GEODE_1_2_0);
-    when(server2.getVersionOrdinalObject())
+    when(server2.getVersion())
         .thenReturn(KnownVersion.GEODE_1_9_0);
 
 
diff --git a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgrade2DUnitTestBase.java b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgrade2DUnitTestBase.java
index 3bc25b2..293bc69 100755
--- a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgrade2DUnitTestBase.java
+++ b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgrade2DUnitTestBase.java
@@ -1073,7 +1073,7 @@ public abstract class RollingUpgrade2DUnitTestBase extends JUnit4DistributedTest
   private static void assertVersion(GemFireCache cache, short ordinal) {
     DistributedSystem system = cache.getDistributedSystem();
     int thisOrdinal =
-        ((InternalDistributedMember) system.getDistributedMember()).getVersionOrdinalObject()
+        ((InternalDistributedMember) system.getDistributedMember()).getVersion()
             .ordinal();
     if (ordinal != thisOrdinal) {
       throw new Error(
diff --git a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
index 7f8f3a7..8b7c2be 100644
--- a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
+++ b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
@@ -56,7 +56,7 @@ import org.apache.geode.distributed.internal.membership.api.MembershipView;
 import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.serialization.KnownVersion;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.test.dunit.DistributedTestUtils;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.IgnoredException;
@@ -680,7 +680,7 @@ public abstract class RollingUpgradeDUnitTest extends JUnit4DistributedTestCase
   private static void assertVersion(Cache cache, short ordinal) {
     DistributedSystem ds = cache.getDistributedSystem();
     InternalDistributedMember member = (InternalDistributedMember) ds.getDistributedMember();
-    final VersionOrdinal thisVersion = member.getVersionOrdinalObject();
+    final Version thisVersion = member.getVersion();
     short thisOrdinal = thisVersion.ordinal();
     if (ordinal != thisOrdinal) {
       throw new Error(
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java
index 6e8cace..a6b40b9 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java
@@ -207,7 +207,7 @@ public class CreateGatewaySenderCommand extends SingleGfshCommand {
 
   private boolean verifyAllCurrentVersion(Set<DistributedMember> members) {
     return members.stream().allMatch(
-        member -> ((InternalDistributedMember) member).getVersionOrdinalObject()
+        member -> ((InternalDistributedMember) member).getVersion()
             .equals(KnownVersion.CURRENT));
   }
 
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RedundancyCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RedundancyCommand.java
index 652a9d4..f90c27c 100644
--- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RedundancyCommand.java
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RedundancyCommand.java
@@ -91,7 +91,7 @@ public class RedundancyCommand extends GfshCommand {
       RebalanceOperationPerformer.MemberPRInfo prInfo) {
     return prInfo.dsMemberList.stream()
         .map(InternalDistributedMember.class::cast)
-        .filter(member -> member.getVersionOrdinalObject().compareTo(ADDED_VERSION) >= 0)
+        .filter(member -> member.getVersion().compareTo(ADDED_VERSION) >= 0)
         .collect(Collectors.toList());
   }
 
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java
index 7c8ef21..2784ba5 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java
@@ -230,9 +230,9 @@ public class CreateGatewaySenderCommandTest {
     // Create a set of mixed version members
     Set<DistributedMember> members = new HashSet<>();
     InternalDistributedMember currentVersionMember = mock(InternalDistributedMember.class);
-    when(currentVersionMember.getVersionOrdinalObject()).thenReturn(KnownVersion.CURRENT);
+    when(currentVersionMember.getVersion()).thenReturn(KnownVersion.CURRENT);
     InternalDistributedMember oldVersionMember = mock(InternalDistributedMember.class);
-    when(oldVersionMember.getVersionOrdinalObject()).thenReturn(KnownVersion.GEODE_1_4_0);
+    when(oldVersionMember.getVersion()).thenReturn(KnownVersion.GEODE_1_4_0);
     members.add(currentVersionMember);
     members.add(oldVersionMember);
     doReturn(members).when(command).getMembers(any(), any());
diff --git a/geode-junit/src/main/java/org/apache/geode/test/version/VersionManager.java b/geode-junit/src/main/java/org/apache/geode/test/version/VersionManager.java
index ecb7f50..da0e6d7 100755
--- a/geode-junit/src/main/java/org/apache/geode/test/version/VersionManager.java
+++ b/geode-junit/src/main/java/org/apache/geode/test/version/VersionManager.java
@@ -235,17 +235,31 @@ public class VersionManager {
   }
 
   private Class<?> findVersionClass() {
-    // GEODE's Version class was repackaged when serialization was modularized
+    /*
+     * The known versions "enum" class has moved packages and been renamed over time:
+     *
+     * 1. org.apache.geode.internal.Version
+     * 2. org.apache.geode.internal.serialization.Version
+     * 3. org.apache.geode.internal.serialization.KnownVersion
+     *
+     * We search in order 3,1,2 because when we renamed the class "KnownVersion"
+     * we also had an interface in the same package, called "Version" so we want to
+     * avoid finding that interface when we really want the "enum" class.
+     */
     try {
-      return Class.forName("org.apache.geode.internal.Version");
+      return Class.forName("org.apache.geode.internal.serialization.KnownVersion");
     } catch (ClassNotFoundException e) {
       try {
-        return Class.forName("org.apache.geode.internal.serialization.KnownVersion");
+        return Class.forName("org.apache.geode.internal.Version");
       } catch (ClassNotFoundException e2) {
-        System.out.println("classpath is " + System.getProperty("java.class.path"));
-        throw new IllegalStateException(
-            "Unable to locate Version.java in order to establish the product's serialization version",
-            e2);
+        try {
+          return Class.forName("org.apache.geode.internal.serialization.Version");
+        } catch (ClassNotFoundException e3) {
+          System.out.println("classpath is " + System.getProperty("java.class.path"));
+          throw new IllegalStateException(
+              "Unable to locate Version or KnownVersion in order to establish the product's serialization version",
+              e3);
+        }
       }
     }
   }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
index 1ec6343..53abf88 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
@@ -82,7 +82,7 @@ import org.apache.geode.internal.cache.extension.Extensible;
 import org.apache.geode.internal.cache.xmlcache.XmlGenerator;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.KnownVersion;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -240,11 +240,11 @@ public class LuceneServiceImpl implements InternalLuceneService {
 
   protected void validateAllMembersAreTheSameVersion(PartitionedRegion region) {
     Set<InternalDistributedMember> remoteMembers = region.getRegionAdvisor().adviseAllPRNodes();
-    final VersionOrdinal localVersion =
-        cache.getDistributionManager().getDistributionManagerId().getVersionOrdinalObject();
+    final Version localVersion =
+        cache.getDistributionManager().getDistributionManagerId().getVersion();
     if (!remoteMembers.isEmpty()) {
       for (InternalDistributedMember remoteMember : remoteMembers) {
-        if (!remoteMember.getVersionOrdinalObject().equals(localVersion)) {
+        if (!remoteMember.getVersion().equals(localVersion)) {
           throw new IllegalStateException(
               "The lucene index cannot be created on a existing region if all members hosting the region : "
                   + region.getFullPath() + ", are not the same Apache Geode version ");
@@ -726,7 +726,7 @@ public class LuceneServiceImpl implements InternalLuceneService {
   private boolean isAnyRemoteMemberVersionLessThanGeode1_7_0(
       Set<InternalDistributedMember> remoteMembers) {
     for (InternalDistributedMember remoteMember : remoteMembers) {
-      if (remoteMember.getVersionOrdinalObject().ordinal() < KnownVersion.GEODE_1_7_0.ordinal()) {
+      if (remoteMember.getVersion().ordinal() < KnownVersion.GEODE_1_7_0.ordinal()) {
         return true;
       }
     }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
index 262bfee..590034b 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
@@ -96,7 +96,7 @@ public class LuceneQueryFunction implements InternalFunction<LuceneFunctionConte
     // Hence the query waits for the repositories to be ready instead of throwing the exception
     if (!remoteMembers.isEmpty()) {
       for (InternalDistributedMember remoteMember : remoteMembers) {
-        if (remoteMember.getVersionOrdinalObject().ordinal() < KnownVersion.GEODE_1_6_0.ordinal()) {
+        if (remoteMember.getVersion().ordinal() < KnownVersion.GEODE_1_6_0.ordinal()) {
           // re-execute but wait till indexing is complete
           execute(ctx, true);
           return;
diff --git a/geode-lucene/src/upgradeTest/java/org/apache/geode/cache/lucene/LuceneSearchWithRollingUpgradeTestBase.java b/geode-lucene/src/upgradeTest/java/org/apache/geode/cache/lucene/LuceneSearchWithRollingUpgradeTestBase.java
index 533144c..d5e7b09 100644
--- a/geode-lucene/src/upgradeTest/java/org/apache/geode/cache/lucene/LuceneSearchWithRollingUpgradeTestBase.java
+++ b/geode-lucene/src/upgradeTest/java/org/apache/geode/cache/lucene/LuceneSearchWithRollingUpgradeTestBase.java
@@ -715,14 +715,25 @@ public abstract class LuceneSearchWithRollingUpgradeTestBase extends JUnit4Distr
     Method getDistributedMemberMethod = ds.getClass().getMethod("getDistributedMember");
     getDistributedMemberMethod.setAccessible(true);
     Object member = getDistributedMemberMethod.invoke(ds);
+
     Method getVersionMethod;
+    /*
+     * The method to get the version from an InternalDistributedMember has changed over time:
+     *
+     * 1. getVersionObject()
+     * 2. getVersionOrdinalObject()
+     * 3. getVersion()
+     */
     try {
-      // newer versions have this method
-      getVersionMethod = member.getClass().getMethod("getVersionOrdinalObject");
+      getVersionMethod = member.getClass().getMethod("getVersion");
     } catch (final NoSuchMethodException e) {
-      // older versions have this other method
-      getVersionMethod = member.getClass().getMethod("getVersionObject");
+      try {
+        getVersionMethod = member.getClass().getMethod("getVersionOrdinalObject");
+      } catch (final NoSuchMethodException e2) {
+        getVersionMethod = member.getClass().getMethod("getVersionObject");
+      }
     }
+
     getVersionMethod.setAccessible(true);
     Object thisVersion = getVersionMethod.invoke(member);
     Method getOrdinalMethod = thisVersion.getClass().getMethod("ordinal");
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
index 8f901f1..b77eb39 100644
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
@@ -574,7 +574,7 @@ public class GMSHealthMonitorJUnitTest {
       gmsHealthMonitor.setNextNeighbor(v, memberToCheck);
       assertNotEquals(memberToCheck, gmsHealthMonitor.getNextNeighbor());
 
-      ((MemberIdentifierImpl) mockMembers.get(0)).setVersionObjectForTest(KnownVersion.GEODE_1_3_0);
+      ((MemberIdentifierImpl) mockMembers.get(0)).setVersionForTest(KnownVersion.GEODE_1_3_0);
       boolean retVal = gmsHealthMonitor.inlineCheckIfAvailable(mockMembers.get(0), v, true,
           memberToCheck, "Not responding");
 
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
index 0c0bebd..aa53bdf 100644
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
@@ -166,7 +166,7 @@ public class GMSJoinLeaveJUnitTest {
     mockOldMember = services.getMemberFactory().create(
         MemberDataBuilder.newBuilderForLocalHost("localhost")
             .setMembershipPort(8700).build());
-    ((MemberIdentifierImpl) mockOldMember).setVersionObjectForTest(KnownVersion.GFE_56);
+    ((MemberIdentifierImpl) mockOldMember).setVersionForTest(KnownVersion.GFE_56);
     locatorClient = mock(TcpClient.class);
 
     if (useTestGMSJoinLeave) {
@@ -1588,7 +1588,7 @@ public class GMSJoinLeaveJUnitTest {
 
     // this test must live in the 1.12 and later lines so pick a pre-1.12 version
     final KnownVersion oldVersion = KnownVersion.GEODE_1_11_0;
-    myMemberIDWithWrongVersion.setVersionObjectForTest(oldVersion);
+    myMemberIDWithWrongVersion.setVersionForTest(oldVersion);
 
     viewWithWrongVersion.remove(gmsJoinLeaveMemberId);
     viewWithWrongVersion.add(myMemberIDWithWrongVersion);
@@ -1596,7 +1596,7 @@ public class GMSJoinLeaveJUnitTest {
     gmsJoinLeave.installView(viewWithWrongVersion);
 
     assertThat(
-        gmsJoinLeave.getView().getCanonicalID(gmsJoinLeaveMemberId).getVersionOrdinalObject())
+        gmsJoinLeave.getView().getCanonicalID(gmsJoinLeaveMemberId).getVersion())
             .isEqualTo(KnownVersion.getCurrentVersion());
   }
 
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
index 65142fe..ff7895d 100755
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
@@ -1159,7 +1159,7 @@ public class JGroupsMessengerJUnitTest {
     MemberIdentifier gms = MemberIdentifierUtil.createMemberID(port);
     gms.getMemberData().setUUID(UUID.randomUUID());
     gms.setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
-    gms.setVersionObjectForTest(KnownVersion.getCurrentVersion());
+    gms.setVersionForTest(KnownVersion.getCurrentVersion());
     return gms;
   }
 
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java
index c5f09fb..3c44b39 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberData.java
@@ -23,7 +23,7 @@ import org.jgroups.util.UUID;
 import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 
 /**
  * MemberIdentifiers are created with a MemberData component. Use MemberDataBuilder to create
@@ -46,7 +46,7 @@ public interface MemberData {
 
   short getVersionOrdinal();
 
-  VersionOrdinal getVersionOrdinalObject();
+  Version getVersion();
 
   String getUniqueTag();
 
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java
index 3084cb7..30cc8dd 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MemberIdentifier.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 
 /**
  * MemberIdentifier should be implemented by a user of GMS if the default member identifier
@@ -132,7 +132,7 @@ public interface MemberIdentifier extends DataSerializableFixedID {
   /**
    * Get the Geode version of this member
    */
-  VersionOrdinal getVersionOrdinalObject();
+  Version getVersion();
 
   /**
    * Replace the current member data with the given member data. This can be used to fill out a
@@ -191,7 +191,7 @@ public interface MemberIdentifier extends DataSerializableFixedID {
 
   String getUniqueId();
 
-  void setVersionObjectForTest(KnownVersion v);
+  void setVersionForTest(KnownVersion v);
 
   void setUniqueTag(String tag);
 
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
index ebba2e5..76195d4 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
@@ -28,7 +28,7 @@ import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 
@@ -88,7 +88,7 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
    * e.g. during rolling upgrade members with old versions receive member identifiers
    * from members with new (unknown) versions.
    */
-  private transient VersionOrdinal versionOrdinal = KnownVersion.CURRENT;
+  private transient Version version = KnownVersion.CURRENT;
 
   /**
    * whether this is a partial member ID (without roles, durable attributes). We use partial IDs in
@@ -136,7 +136,7 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
     this.durableTimeout = durableTimeout;
     this.networkPartitionDetectionEnabled = networkPartitionDetectionEnabled;
     this.preferredForCoordinator = preferredForCoordinator;
-    this.versionOrdinal = Versioning.getVersionOrdinal(versionOrdinal);
+    this.version = Versioning.getVersion(versionOrdinal);
     this.uuidMSBs = msbs;
     this.uuidLSBs = lsbs;
     this.memberWeight = memberWeight;
@@ -149,7 +149,7 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
     this.inetAddr = i;
     this.hostName = i.getHostName();
     this.udpPort = p;
-    this.versionOrdinal = Versioning.getVersionOrdinal(versionOrdinal);
+    this.version = Versioning.getVersion(versionOrdinal);
     this.uuidMSBs = msbs;
     this.uuidLSBs = lsbs;
     this.vmViewId = viewId;
@@ -178,7 +178,7 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
     this.durableId = other.durableId;
     this.durableTimeout = other.durableTimeout;
     this.groups = other.groups;
-    this.versionOrdinal = other.versionOrdinal;
+    this.version = other.version;
     this.uuidLSBs = other.uuidLSBs;
     this.uuidMSBs = other.uuidMSBs;
     this.isPartial = other.isPartial;
@@ -222,12 +222,12 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
   @Override
 
   public short getVersionOrdinal() {
-    return versionOrdinal.ordinal();
+    return version.ordinal();
   }
 
   @Override
-  public VersionOrdinal getVersionOrdinalObject() {
-    return versionOrdinal;
+  public Version getVersion() {
+    return version;
   }
 
   @Override
@@ -237,7 +237,7 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
 
   @Override
   public void setVersionOrdinal(short versionOrdinal) {
-    this.versionOrdinal = Versioning.getVersionOrdinal(versionOrdinal);
+    this.version = Versioning.getVersion(versionOrdinal);
   }
 
   @Override
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
index cb90f09..33c3104 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
@@ -61,7 +61,7 @@ import org.apache.geode.distributed.internal.membership.api.QuorumChecker;
 import org.apache.geode.distributed.internal.membership.api.StopShunningMarker;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Manager;
 import org.apache.geode.internal.serialization.KnownVersion;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -378,19 +378,19 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
     latestViewWriteLock.lock();
     try {
       // first determine the version for multicast message serialization
-      VersionOrdinal version = KnownVersion.CURRENT;
+      Version version = KnownVersion.CURRENT;
       for (final Entry<ID, Long> internalIDLongEntry : surpriseMembers
           .entrySet()) {
         ID mbr = internalIDLongEntry.getKey();
-        final VersionOrdinal itsVersion = mbr.getVersionOrdinalObject();
+        final Version itsVersion = mbr.getVersion();
         if (itsVersion != null && version.compareTo(itsVersion) < 0) {
           version = itsVersion;
         }
       }
       for (ID mbr : newView.getMembers()) {
-        final VersionOrdinal itsVersion = mbr.getVersionOrdinalObject();
+        final Version itsVersion = mbr.getVersion();
         if (itsVersion != null && itsVersion.compareTo(version) < 0) {
-          version = mbr.getVersionOrdinalObject();
+          version = mbr.getVersion();
         }
       }
       disableMulticastForRollingUpgrade = !version.equals(KnownVersion.CURRENT);
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java
index fe27875..d4016ff 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java
@@ -667,9 +667,9 @@ public class GMSMembershipView<ID extends MemberIdentifier> implements DataSeria
    */
   public void correctWrongVersionIn(final ID memberID) {
     final ID oldID = getCanonicalID(memberID);
-    if (!oldID.getVersionOrdinalObject().equals(KnownVersion.getCurrentVersion())) {
+    if (!oldID.getVersion().equals(KnownVersion.getCurrentVersion())) {
       // don't remove/add the ID lest we change it's relative position in the list
-      oldID.setVersionObjectForTest(KnownVersion.getCurrentVersion());
+      oldID.setVersionForTest(KnownVersion.getCurrentVersion());
     }
   }
 
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
index e91ad09..daa1a20 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.VersionOrdinal;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 
@@ -422,7 +422,7 @@ public class MemberIdentifierImpl implements MemberIdentifier, DataSerializableF
       // add version if not current
       short version = memberData.getVersionOrdinal();
       if (version != KnownVersion.CURRENT.ordinal()) {
-        sb.append("(version:").append(Versioning.getVersionOrdinal(version)).append(')');
+        sb.append("(version:").append(Versioning.getVersion(version)).append(')');
       }
 
       // leave out Roles on purpose
@@ -976,20 +976,20 @@ public class MemberIdentifierImpl implements MemberIdentifier, DataSerializableF
     // add version if not current
     short version = memberData.getVersionOrdinal();
     if (version != KnownVersion.CURRENT.ordinal()) {
-      sb.append("(version:").append(Versioning.getVersionOrdinal(version)).append(')');
+      sb.append("(version:").append(Versioning.getVersion(version)).append(')');
     }
 
     return sb.toString();
   }
 
-  public void setVersionObjectForTest(KnownVersion v) {
+  public void setVersionForTest(KnownVersion v) {
     memberData.setVersion(v);
     cachedToString = null;
   }
 
   @Override
-  public VersionOrdinal getVersionOrdinalObject() {
-    return memberData.getVersionOrdinalObject();
+  public Version getVersion() {
+    return memberData.getVersion();
   }
 
   @Override
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
index 1475837..c7c38b0 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
@@ -455,7 +455,7 @@ public class GMSLocator<ID extends MemberIdentifier> implements Locator<ID>, Tcp
       } else {
         KnownVersion geodeVersion =
             Versioning.getKnownVersionOrDefault(
-                Versioning.getVersionOrdinal((short) version),
+                Versioning.getVersion((short) version),
                 KnownVersion.CURRENT);
         logger.info("Peer locator found that persistent view was written with version {}",
             geodeVersion);
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
index fabe5b6..ae20b1a 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
@@ -881,7 +881,7 @@ public class JGroupsMessenger<ID extends MemberIdentifier> implements Messenger<
       long start = services.getStatistics().startMsgSerialization();
       final KnownVersion version =
           Versioning.getKnownVersionOrDefault(
-              Versioning.getVersionOrdinal(versionOrdinal),
+              Versioning.getVersion(versionOrdinal),
               KnownVersion.CURRENT);
       BufferDataOutputStream out_stream =
           new BufferDataOutputStream(version);
@@ -944,7 +944,7 @@ public class JGroupsMessenger<ID extends MemberIdentifier> implements Messenger<
 
       final KnownVersion version =
           Versioning.getKnownVersionOrDefault(
-              Versioning.getVersionOrdinal(versionOrdinal),
+              Versioning.getVersion(versionOrdinal),
               KnownVersion.CURRENT);
       BufferDataOutputStream out_stream =
           new BufferDataOutputStream(version);
@@ -1040,7 +1040,7 @@ public class JGroupsMessenger<ID extends MemberIdentifier> implements Messenger<
 
       if (ordinal < KnownVersion.getCurrentVersion().ordinal()) {
         final KnownVersion version = Versioning.getKnownVersionOrDefault(
-            Versioning.getVersionOrdinal(ordinal),
+            Versioning.getVersion(ordinal),
             KnownVersion.CURRENT);
         dis = new VersionedDataInputStream(dis,
             version);
@@ -1140,7 +1140,7 @@ public class JGroupsMessenger<ID extends MemberIdentifier> implements Messenger<
 
         if (ordinal < KnownVersion.getCurrentVersion().ordinal()) {
           final KnownVersion version = Versioning.getKnownVersionOrDefault(
-              Versioning.getVersionOrdinal(ordinal),
+              Versioning.getVersion(ordinal),
               KnownVersion.CURRENT);
           in = new VersionedDataInputStream(in,
               version);
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/AbstractVersion.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/AbstractVersion.java
index dc6c1d4..a85745f 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/AbstractVersion.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/AbstractVersion.java
@@ -21,7 +21,7 @@ package org.apache.geode.internal.serialization;
  *
  * Package private since this class is an implementation detail.
  */
-abstract class AbstractVersion implements VersionOrdinal {
+abstract class AbstractVersion implements Version {
 
   private final short ordinal;
 
@@ -38,7 +38,7 @@ abstract class AbstractVersion implements VersionOrdinal {
   }
 
   @Override
-  public int compareTo(final VersionOrdinal other) {
+  public int compareTo(final Version other) {
     if (other == null) {
       return 1;
     } else {
@@ -50,8 +50,8 @@ abstract class AbstractVersion implements VersionOrdinal {
   public boolean equals(final Object other) {
     if (other == this)
       return true;
-    if (other instanceof VersionOrdinal) {
-      return ordinal() == ((VersionOrdinal) other).ordinal();
+    if (other instanceof Version) {
+      return ordinal() == ((Version) other).ordinal();
     } else {
       return false;
     }
@@ -77,7 +77,7 @@ abstract class AbstractVersion implements VersionOrdinal {
    * @return true if this is older than version, otherwise false.
    */
   @Override
-  public final boolean isOlderThan(final VersionOrdinal version) {
+  public final boolean isOlderThan(final Version version) {
     return compareTo(version) < 0;
   }
 
@@ -88,7 +88,7 @@ abstract class AbstractVersion implements VersionOrdinal {
    * @return true if this is the same version or newer, otherwise false.
    */
   @Override
-  public final boolean isNotOlderThan(final VersionOrdinal version) {
+  public final boolean isNotOlderThan(final Version version) {
     return compareTo(version) >= 0;
   }
 
@@ -99,7 +99,7 @@ abstract class AbstractVersion implements VersionOrdinal {
    * @return true if this is newer than version, otherwise false.
    */
   @Override
-  public final boolean isNewerThan(final VersionOrdinal version) {
+  public final boolean isNewerThan(final Version version) {
     return compareTo(version) > 0;
   }
 
@@ -110,7 +110,7 @@ abstract class AbstractVersion implements VersionOrdinal {
    * @return true if this is the same version or older, otherwise false.
    */
   @Override
-  public final boolean isNotNewerThan(final VersionOrdinal version) {
+  public final boolean isNotNewerThan(final Version version) {
     return compareTo(version) <= 0;
   }
 
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/KnownVersion.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/KnownVersion.java
index 52828fc..b4675b7 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/KnownVersion.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/KnownVersion.java
@@ -401,13 +401,13 @@ public class KnownVersion extends AbstractVersion {
   /**
    * package-protected for use by Versioning factory
    */
-  static KnownVersion getKnownVersion(final short ordinal,
-      final KnownVersion returnWhenUnknown) {
+  static KnownVersion getKnownVersionOrDefault(final short ordinal,
+      final KnownVersion defaultKnownVersion) {
     if (ordinal == TOKEN_ORDINAL) {
       return TOKEN;
     }
     if (ordinal < TOKEN_ORDINAL || ordinal >= VALUES.length || VALUES[ordinal] == null) {
-      return returnWhenUnknown;
+      return defaultKnownVersion;
     }
     return VALUES[ordinal];
   }
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/UnknownVersion.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/UnknownVersion.java
index 81f7551..f8a651f 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/UnknownVersion.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/UnknownVersion.java
@@ -19,7 +19,6 @@ public class UnknownVersion extends AbstractVersion {
 
   /**
    * Package-private so only the Versioning factory can access this constructor.
-   *
    */
   UnknownVersion(final short ordinal) {
     super(ordinal);
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersionOrdinal.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/Version.java
similarity index 80%
rename from geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersionOrdinal.java
rename to geode-serialization/src/main/java/org/apache/geode/internal/serialization/Version.java
index 9a65974..cb7d8d1 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersionOrdinal.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/Version.java
@@ -16,7 +16,7 @@
 package org.apache.geode.internal.serialization;
 
 /**
- * VersionOrdinal is able to represent not only currently-known
+ * {@link Version} is able to represent not only currently-known
  * Geode versions but future versions as well. This is necessary
  * because during rolling upgrades Geode manipulates member
  * identifiers for members running newer versions of the software.
@@ -28,15 +28,15 @@ package org.apache.geode.internal.serialization;
  * ordinal() result. And since this interface extends Comparable,
  * implementations must define compareTo() as well.
  *
- * Unlike Version (a subtype of VersionOrdinal which acts like an
- * enumerated type), VersionOrdinal does not, in general, guarantee
+ * Unlike {@link KnownVersion} (a subtype of which acts like an
+ * enumerated type), {@link Version} does not, in general, guarantee
  * that if vo1.equals(vo2) then vo1 == vo2.
  *
- * Use the Versioning factory class to construct objects implementing
+ * Use the {@link Versioning} factory class to construct objects implementing
  * this interface. All instances of known versions are defined as
- * constants in the Version class, e.g. Version.GEODE_1_11_0
+ * constants in the {@link KnownVersion} class, e.g. Version.GEODE_1_11_0
  */
-public interface VersionOrdinal extends Comparable<VersionOrdinal> {
+public interface Version extends Comparable<Version> {
 
   /**
    * @return the short ordinal value for comparison implementations
@@ -54,7 +54,7 @@ public interface VersionOrdinal extends Comparable<VersionOrdinal> {
    * @param version to compare to this version
    * @return true if this is older than version, otherwise false.
    */
-  boolean isOlderThan(VersionOrdinal version);
+  boolean isOlderThan(Version version);
 
   /**
    * Test if this version is not older than given version.
@@ -62,7 +62,7 @@ public interface VersionOrdinal extends Comparable<VersionOrdinal> {
    * @param version to compare to this version
    * @return true if this is the same version or newer, otherwise false.
    */
-  boolean isNotOlderThan(VersionOrdinal version);
+  boolean isNotOlderThan(Version version);
 
   /**
    * Test if this version is newer than given version.
@@ -70,7 +70,7 @@ public interface VersionOrdinal extends Comparable<VersionOrdinal> {
    * @param version to compare to this version
    * @return true if this is newer than version, otherwise false.
    */
-  boolean isNewerThan(VersionOrdinal version);
+  boolean isNewerThan(Version version);
 
   /**
    * Test if this version is not newer than given version.
@@ -78,6 +78,6 @@ public interface VersionOrdinal extends Comparable<VersionOrdinal> {
    * @param version to compare to this version
    * @return true if this is the same version or older, otherwise false.
    */
-  boolean isNotNewerThan(VersionOrdinal version);
+  boolean isNotNewerThan(Version version);
 
 }
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/Versioning.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/Versioning.java
index ace80a7..985b272 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/Versioning.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/Versioning.java
@@ -16,26 +16,27 @@
 package org.apache.geode.internal.serialization;
 
 /**
- * This is a factory for getting VersionOrdinal instances. It's aware of the whole
- * VersionOrdinal/Version hierarchy, so when asked for a VersionOrdinal that represents
- * a known version (a Version) it returns a reference to one of those.
+ * This is a factory for getting {@link Version} instances. It's aware of the whole
+ * {link @Version} hierarchy, so when asked for a {@link Version} that represents
+ * a known version ({@link KnownVersion}) it returns a reference to one of those.
  *
- * This ensures that toString() on any VersionOrdinal, if that object represents a
- * known version, will render itself as a Version.
+ * This ensures that {@link #toString()} on any {@Version}, if that object represents a
+ * known version, will render itself as a such.
  */
 public class Versioning {
   private Versioning() {}
 
   /**
-   * Make a VersionOrdinal for the short ordinal value.
+   * Find the {@link Version} for the short ordinal value.
    *
-   * If the short ordinal represents a known version (Version) then return
-   * that instead of constructing a new VersionOrdinal.
+   * If the short ordinal represents a known version ({@link KnownVersion}) then return
+   * that instead of constructing a new {@link UnknownVersion}.
    *
-   * @return a known version (Version) if possible, otherwise a VersionOrdinal.
+   * @return a known version ({@link KnownVersion}) if possible, otherwise an
+   *         {@link UnknownVersion}.
    */
-  public static VersionOrdinal getVersionOrdinal(final short ordinal) {
-    final KnownVersion knownVersion = KnownVersion.getKnownVersion(ordinal, null);
+  public static Version getVersion(final short ordinal) {
+    final KnownVersion knownVersion = KnownVersion.getKnownVersionOrDefault(ordinal, null);
     if (knownVersion == null) {
       return new UnknownVersion(ordinal);
     } else {
@@ -44,17 +45,16 @@ public class Versioning {
   }
 
   /**
-   * Return the known version (Version) for the VersionOrdinal, if possible.
-   * Otherwise return the defaultKnownVersion Version. This method essentially
-   * downcasts a {@link VersionOrdinal} to a known version {@link KnownVersion}
+   * Return the known version ({@link KnownVersion}) for {@code anyVersion}, if possible.
+   * Otherwise return {@code defaultKnownVersion}. This method essentially
+   * downcasts a {@link Version} to a known version {@link KnownVersion}.
    *
-   * @param anyVersion came from a call to {@link #getVersionOrdinal(short)} or this
-   *        method
-   * @param defaultKnownVersion will be returned if anyVersion does not represent
+   * @param anyVersion came from a call to {@link #getVersion(short)}
+   * @param defaultKnownVersion will be returned if {@code anyVersion} does not represent
    *        a known version
    * @return a known version
    */
-  public static KnownVersion getKnownVersionOrDefault(final VersionOrdinal anyVersion,
+  public static KnownVersion getKnownVersionOrDefault(final Version anyVersion,
       KnownVersion defaultKnownVersion) {
     if (anyVersion instanceof KnownVersion) {
       return (KnownVersion) anyVersion;
diff --git a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersioningIO.java b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersioningIO.java
index 9a2d8b7..db5b5c6 100644
--- a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersioningIO.java
+++ b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/VersioningIO.java
@@ -39,7 +39,7 @@ public class VersioningIO {
   }
 
   /**
-   * Write the given ordinal (result of {@link VersionOrdinal#ordinal()}) to given
+   * Write the given ordinal (result of {@link Version#ordinal()}) to given
    * {@link DataOutput}. This keeps
    * the serialization of ordinal compatible with previous versions writing a single byte to
    * DataOutput when possible, and a token with 2 bytes if it is large.
@@ -92,7 +92,7 @@ public class VersioningIO {
   }
 
   /**
-   * Write the given ordinal (result of {@link VersionOrdinal#ordinal()}) to given
+   * Write the given ordinal (result of {@link Version#ordinal()}) to given
    * {@link ByteBuffer}. This keeps
    * the serialization of ordinal compatible with previous versions writing a single byte to
    * DataOutput when possible, and a token with 2 bytes if it is large.
diff --git a/geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java b/geode-serialization/src/test/java/org/apache/geode/internal/serialization/KnownVersionJUnitTest.java
similarity index 79%
rename from geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
rename to geode-serialization/src/test/java/org/apache/geode/internal/serialization/KnownVersionJUnitTest.java
index 5b206f7..178ec28 100644
--- a/geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
+++ b/geode-serialization/src/test/java/org/apache/geode/internal/serialization/KnownVersionJUnitTest.java
@@ -20,9 +20,9 @@ import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 
-public class VersionJUnitTest {
+public class KnownVersionJUnitTest {
   @Test
-  public void testVersionClass() throws Exception {
+  public void testKnownVersionClass() throws Exception {
     compare(KnownVersion.GFE_662, KnownVersion.GFE_66);
     compare(KnownVersion.GFE_6622, KnownVersion.GFE_662);
     compare(KnownVersion.GFE_71, KnownVersion.GFE_70);
@@ -54,9 +54,9 @@ public class VersionJUnitTest {
     assertTrue(later.compareTo(later) == 0);
     assertTrue(earlier.compareTo(later) < 0);
 
-    assertTrue(later.compareTo(Versioning.getVersionOrdinal(earlier.ordinal())) > 0);
-    assertTrue(later.compareTo(Versioning.getVersionOrdinal(later.ordinal())) == 0);
-    assertTrue(earlier.compareTo(Versioning.getVersionOrdinal(later.ordinal())) < 0);
+    assertTrue(later.compareTo(Versioning.getVersion(earlier.ordinal())) > 0);
+    assertTrue(later.compareTo(Versioning.getVersion(later.ordinal())) == 0);
+    assertTrue(earlier.compareTo(Versioning.getVersion(later.ordinal())) < 0);
 
     compareNewerVsOlder(later, earlier);
   }
@@ -94,23 +94,9 @@ public class VersionJUnitTest {
   @Test
   public void testFromOrdinalForCurrentVersionSucceeds() {
     final KnownVersion version = Versioning.getKnownVersionOrDefault(
-        Versioning.getVersionOrdinal(KnownVersion.CURRENT_ORDINAL), null);
+        Versioning.getVersion(KnownVersion.CURRENT_ORDINAL), null);
     assertThat(version).isNotNull();
     assertThat(version).isEqualTo(KnownVersion.CURRENT);
   }
 
-  @Test
-  public void ordinalImplMatchesVersion() {
-    /*
-     * We are not using the Version.getVersionOrdinal(short) factory method here
-     * because we intend to test that Version and VersionOrdinal are cross-comparable.
-     * The factory would return Version.GFE_82 which would foil our testing.
-     */
-    final UnknownVersion versionOrdinal = new UnknownVersion(KnownVersion.GFE_82.ordinal());
-    assertThat(KnownVersion.GFE_82.equals(versionOrdinal))
-        .as("GFE_82 Version equals VersionOrdinal").isTrue();
-    assertThat(versionOrdinal.equals(KnownVersion.GFE_82))
-        .as("GFE_82 VersionOrdinal equals Version").isTrue();
-  }
-
 }
diff --git a/geode-serialization/src/test/java/org/apache/geode/internal/serialization/UnknownVersionJUnitTest.java b/geode-serialization/src/test/java/org/apache/geode/internal/serialization/UnknownVersionJUnitTest.java
index 36ef8a2..27bef49 100644
--- a/geode-serialization/src/test/java/org/apache/geode/internal/serialization/UnknownVersionJUnitTest.java
+++ b/geode-serialization/src/test/java/org/apache/geode/internal/serialization/UnknownVersionJUnitTest.java
@@ -24,7 +24,7 @@ public class UnknownVersionJUnitTest extends TestCase {
 
   @Test
   public void testEqualMinSameIdentity() {
-    final VersionOrdinal versionOrdinal = construct(Short.MIN_VALUE);
+    final Version versionOrdinal = construct(Short.MIN_VALUE);
     validateEqual(versionOrdinal, versionOrdinal);
   }
 
@@ -86,7 +86,7 @@ public class UnknownVersionJUnitTest extends TestCase {
     assertThat(construct((short) 6).equals("howdy!")).isFalse();
   }
 
-  private void validateEqual(final VersionOrdinal a, final VersionOrdinal b) {
+  private void validateEqual(final Version a, final Version b) {
     assertThat(a.compareTo(b)).isEqualTo(0);
     assertThat(a.equals(b)).isTrue();
     assertThat(a.isNewerThan(b)).isFalse();
@@ -96,8 +96,8 @@ public class UnknownVersionJUnitTest extends TestCase {
   }
 
   private void validateUnequal(final short smallerShort, final short largerShort) {
-    final VersionOrdinal smaller = construct(smallerShort);
-    final VersionOrdinal larger = construct(largerShort);
+    final Version smaller = construct(smallerShort);
+    final Version larger = construct(largerShort);
 
     assertThat(smaller.compareTo(larger)).isLessThan(0);
     assertThat(smaller.equals(larger)).isFalse();
@@ -118,8 +118,8 @@ public class UnknownVersionJUnitTest extends TestCase {
   }
 
   private void validateHash(final short ordinal) {
-    final VersionOrdinal a = construct(ordinal);
-    final VersionOrdinal b = construct(ordinal);
+    final Version a = construct(ordinal);
+    final Version b = construct(ordinal);
     assertThat(a.equals(b)).isTrue();
     assertThat(a.hashCode()).isEqualTo(b.hashCode());
   }
diff --git a/geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersioningJUnitTest.java b/geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersioningJUnitTest.java
index 7e5d202..0b483f6 100644
--- a/geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersioningJUnitTest.java
+++ b/geode-serialization/src/test/java/org/apache/geode/internal/serialization/VersioningJUnitTest.java
@@ -22,46 +22,46 @@ import org.junit.Test;
 public class VersioningJUnitTest {
 
   @Test
-  public void getVersionOrdinalForKnownVersion() {
+  public void getVersionForKnownVersion() {
     final KnownVersion current = KnownVersion.getCurrentVersion();
-    final VersionOrdinal knownVersion = Versioning.getVersionOrdinal(current.ordinal());
+    final Version knownVersion = Versioning.getVersion(current.ordinal());
     assertThat(knownVersion).isInstanceOf(KnownVersion.class);
     assertThat(knownVersion).isEqualTo(current);
   }
 
   @Test
-  public void getVersionOrdinalForUnknownVersion() {
+  public void getVersionForUnknownVersion() {
     // Version.getCurrentVersion() returns the newest/latest version
     final short unknownOrdinal = (short) (KnownVersion.getCurrentVersion().ordinal() + 1);
-    final VersionOrdinal unknownVersion = Versioning.getVersionOrdinal(unknownOrdinal);
+    final Version unknownVersion = Versioning.getVersion(unknownOrdinal);
     assertThat(unknownVersion).isInstanceOf(UnknownVersion.class);
   }
 
   @Test
-  public void getVersionOrdinalForToken() {
-    final VersionOrdinal versionOrdinal = Versioning.getVersionOrdinal(KnownVersion.TOKEN_ORDINAL);
+  public void getVersionForToken() {
+    final Version versionOrdinal = Versioning.getVersion(KnownVersion.TOKEN_ORDINAL);
     assertThat(versionOrdinal).isEqualTo(KnownVersion.TOKEN);
     assertThat(versionOrdinal).isInstanceOf(KnownVersion.class);
   }
 
   @Test
-  public void getVersionOrdinalForUnknownNegativeShort() {
+  public void getVersionForUnknownNegativeShort() {
     // a little coziness with TOKEN_ORDINAL: we happen to know ordinals lower than that are not
     // known versions
-    final VersionOrdinal versionOrdinal =
-        Versioning.getVersionOrdinal((short) (KnownVersion.TOKEN_ORDINAL - 1));
+    final Version versionOrdinal =
+        Versioning.getVersion((short) (KnownVersion.TOKEN_ORDINAL - 1));
     assertThat(versionOrdinal).isInstanceOf(UnknownVersion.class);
   }
 
   @Test
-  public void getKnownVersionForKnownVersionOrdinal() {
+  public void getKnownVersionForKnownVersion() {
     final KnownVersion current = KnownVersion.getCurrentVersion();
     final KnownVersion knownVersion = Versioning.getKnownVersionOrDefault(current, null);
     assertThat(knownVersion).isEqualTo(current);
   }
 
   @Test
-  public void getKnownVersionForUnknownVersionOrdinal() {
+  public void getKnownVersionForUnknownVersion() {
     // Version.getCurrentVersion() returns the newest/latest version
     final KnownVersion current = KnownVersion.getCurrentVersion();
     final short unknownOrdinal = (short) (current.ordinal() + 1);
diff --git a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
index 2369886..930481a 100644
--- a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
+++ b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
@@ -153,7 +153,7 @@ public class TcpClient {
     final short serverVersionShort = getServerVersion(addr, timeout);
     KnownVersion serverVersion =
         Versioning.getKnownVersionOrDefault(
-            Versioning.getVersionOrdinal(serverVersionShort),
+            Versioning.getVersion(serverVersionShort),
             null);
     final String debugVersionMessage;
     if (serverVersion == null) {
diff --git a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
index c133c39..ea84ca9 100755
--- a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
+++ b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
@@ -426,17 +426,17 @@ public class TcpServer {
       // Create a versioned stream to remember sender's GemFire version
       versionOrdinal = (short) GOSSIP_TO_GEMFIRE_VERSION_MAP.get(gossipVersion);
 
-      if (KnownVersion.GFE_71.compareTo(Versioning.getVersionOrdinal(versionOrdinal)) <= 0) {
+      if (KnownVersion.GFE_71.compareTo(Versioning.getVersion(versionOrdinal)) <= 0) {
         // Recent versions of TcpClient will send the version ordinal
         versionOrdinal = input.readShort();
       }
 
       if (logger.isDebugEnabled() && versionOrdinal != KnownVersion.CURRENT_ORDINAL) {
         logger.debug("Locator reading request from " + socket.getInetAddress() + " with version "
-            + Versioning.getVersionOrdinal(versionOrdinal));
+            + Versioning.getVersion(versionOrdinal));
       }
       final KnownVersion version = Versioning.getKnownVersionOrDefault(
-          Versioning.getVersionOrdinal(versionOrdinal), null);
+          Versioning.getVersion(versionOrdinal), null);
       if (version == null) {
         throw new UnsupportedSerializationVersionException(
             KnownVersion.unsupportedVersionMessage(versionOrdinal));
diff --git a/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/parallel/RemoteParallelGatewaySenderEventProcessor.java b/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/parallel/RemoteParallelGatewaySenderEventProcessor.java
index ff80b70..9f8c99b 100644
--- a/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/parallel/RemoteParallelGatewaySenderEventProcessor.java
+++ b/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/parallel/RemoteParallelGatewaySenderEventProcessor.java
@@ -94,7 +94,7 @@ public class RemoteParallelGatewaySenderEventProcessor extends ParallelGatewaySe
       Connection conn = remoteDispatcher.getConnection(false);
       if (conn != null) {
         short remoteSiteVersion = conn.getWanSiteVersion();
-        if (KnownVersion.GFE_701.compareTo(Versioning.getVersionOrdinal(remoteSiteVersion)) <= 0) {
+        if (KnownVersion.GFE_701.compareTo(Versioning.getVersion(remoteSiteVersion)) <= 0) {
           return true;
         }
       }


[geode] 01/04: GEODE-8337: git mv Version.java->KnownVersion.java

Posted by bu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

burcham pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 068a467dee63db91cb8869fe70ea435c95a6526c
Author: Bill Burcham <bi...@gmail.com>
AuthorDate: Wed Jul 8 13:07:43 2020 -0700

    GEODE-8337: git mv Version.java->KnownVersion.java
    
    (cherry picked from commit 17d6679125942f5f33ded4670dc9e0ca643e03da)
---
 .../geode/distributed/internal/DateMessage.java    |   6 +-
 ...ackwardCompatibilitySerializationDUnitTest.java |  17 +-
 .../internal/cache/DeltaPropagationDUnitTest.java  |   6 +-
 .../geode/internal/cache/GIIDeltaDUnitTest.java    |   6 +-
 .../geode/pdx/PDXAsyncEventQueueDUnitTest.java     |   4 +-
 .../geode/pdx/PdxAttributesDistributedTest.java    |   6 +-
 .../apache/geode/pdx/PdxClientServerDUnitTest.java |   8 +-
 .../cache/client/ClientCacheFactoryJUnitTest.java  |  24 +--
 .../cache/CompactOfflineDiskStoreJUnitTest.java    |   4 +-
 .../cache/FilterProfileConcurrencyTest.java        |   4 +-
 ...FOEvictionAlgoMemoryEnabledRegionJUnitTest.java |   4 +-
 .../cache/ha/HARegionQueueIntegrationTest.java     |   4 +-
 .../cache/tier/sockets/CacheClientProxyTest.java   |   4 +-
 .../sockets/ServerConnectionIntegrationTest.java   |   6 +-
 .../offheap/OffHeapValidationJUnitTest.java        |   4 +-
 .../geode/pdx/AutoSerializableJUnitTest.java       |  52 +++---
 .../org/apache/geode/pdx/ByteSourceJUnitTest.java  |   6 +-
 .../geode/pdx/PdxInstanceFactoryJUnitTest.java     |   4 +-
 .../org/apache/geode/pdx/PdxInstanceJUnitTest.java |   4 +-
 .../apache/geode/pdx/PdxSerializableJUnitTest.java |  54 +++---
 .../internal/InternalDataSerializerBenchmark.java  |   6 +-
 .../src/main/java/org/apache/geode/CopyHelper.java |   4 +-
 .../main/java/org/apache/geode/DataSerializer.java |   6 +-
 .../admin/jmx/internal/StatAlertNotification.java  |   4 +-
 .../geode/cache/client/internal/AbstractOp.java    |   8 +-
 .../cache/client/internal/AuthenticateUserOp.java  |   8 +-
 .../client/internal/ClientSideHandshakeImpl.java   |  35 ++--
 .../client/internal/ExecuteFunctionNoAckOp.java    |   4 +-
 .../cache/client/internal/ExecuteFunctionOp.java   |   4 +-
 .../internal/ExecuteRegionFunctionNoAckOp.java     |   4 +-
 .../client/internal/ExecuteRegionFunctionOp.java   |   4 +-
 .../internal/ExecuteRegionFunctionSingleHopOp.java |   4 +-
 .../geode/cache/client/internal/GetAllOp.java      |   4 +-
 .../geode/cache/client/internal/KeySetOp.java      |   4 +-
 .../cache/client/internal/ProxyCacheCloseOp.java   |   4 +-
 .../geode/cache/client/internal/PutAllOp.java      |   4 +-
 .../geode/cache/client/internal/QueryOp.java       |   4 +-
 .../cache/client/internal/RegisterInterestOp.java  |   4 +-
 .../geode/cache/client/internal/RemoveAllOp.java   |   4 +-
 .../internal/locator/ServerLocationRequest.java    |   4 +-
 .../internal/locator/ServerLocationResponse.java   |   4 +-
 .../apache/geode/cache/query/internal/CqEntry.java |   4 +-
 .../internal/CumulativeNonDistinctResults.java     |   4 +-
 .../cache/query/internal/LinkedResultSet.java      |   4 +-
 .../cache/query/internal/LinkedStructSet.java      |   4 +-
 .../cache/query/internal/NWayMergeResults.java     |   4 +-
 .../geode/cache/query/internal/NullToken.java      |   4 +-
 .../cache/query/internal/PRQueryTraceInfo.java     |   4 +-
 .../geode/cache/query/internal/ResultsBag.java     |   4 +-
 .../query/internal/ResultsCollectionWrapper.java   |   4 +-
 .../geode/cache/query/internal/ResultsSet.java     |   4 +-
 .../cache/query/internal/SortedResultSet.java      |   4 +-
 .../cache/query/internal/SortedStructSet.java      |   4 +-
 .../geode/cache/query/internal/StructImpl.java     |   4 +-
 .../geode/cache/query/internal/StructSet.java      |   4 +-
 .../geode/cache/query/internal/Undefined.java      |   4 +-
 .../query/internal/index/IndexCreationData.java    |   4 +-
 .../cache/query/internal/types/ObjectTypeImpl.java |   4 +-
 .../internal/ClusterDistributionManager.java       |   6 +-
 .../distributed/internal/DistributionAdvisor.java  |   4 +-
 .../distributed/internal/DistributionImpl.java     |   4 +-
 .../distributed/internal/DistributionManager.java  |   6 +-
 .../distributed/internal/DistributionMessage.java  |   4 +-
 .../internal/LonerDistributionManager.java         |   6 +-
 .../geode/distributed/internal/StartupMessage.java |   4 +-
 .../internal/StartupResponseMessage.java           |   4 +-
 .../StartupResponseWithVersionMessage.java         |   4 +-
 .../internal/locks/DLockRemoteToken.java           |   4 +-
 .../distributed/internal/locks/DLockService.java   |   4 +-
 .../membership/InternalDistributedMember.java      |   6 +-
 .../internal/streaming/StreamingOperation.java     |   9 +-
 .../org/apache/geode/internal/DSFIDFactory.java    |   4 +-
 .../geode/internal/HeapDataOutputStream.java       |  10 +-
 .../geode/internal/InternalDataSerializer.java     |  36 ++--
 .../geode/internal/VersionedObjectInput.java       |   8 +-
 .../geode/internal/VersionedObjectOutput.java      |  12 +-
 .../internal/admin/remote/ClientHealthStats.java   |   8 +-
 .../statalerts/GaugeThresholdDecoratorImpl.java    |   4 +-
 .../statalerts/NumberThresholdDecoratorImpl.java   |   4 +-
 .../internal/cache/AbstractUpdateOperation.java    |   4 +-
 .../apache/geode/internal/cache/BucketRegion.java  |   4 +-
 .../cache/DestroyPartitionedRegionMessage.java     |   6 +-
 .../apache/geode/internal/cache/DiskInitFile.java  |  37 +++--
 .../apache/geode/internal/cache/DiskStoreImpl.java |  15 +-
 .../internal/cache/DistTXPrecommitMessage.java     |   4 +-
 .../internal/cache/DistributedPingMessage.java     |   4 +-
 .../internal/cache/DistributedPutAllOperation.java |   6 +-
 .../cache/DistributedTombstoneOperation.java       |   6 +-
 .../geode/internal/cache/EntryEventImpl.java       |  10 +-
 .../org/apache/geode/internal/cache/EventID.java   |  26 +--
 ...xpireDisconnectedClientTransactionsMessage.java |   6 +-
 .../apache/geode/internal/cache/FilterProfile.java |   4 +-
 .../geode/internal/cache/FilterRoutingInfo.java    |  14 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |   5 +-
 .../internal/cache/InitialImageOperation.java      |  34 ++--
 .../cache/InvalidatePartitionedRegionMessage.java  |   6 +-
 .../cache/LatestLastAccessTimeOperation.java       |   4 +-
 .../apache/geode/internal/cache/LocalRegion.java   |   6 +-
 .../java/org/apache/geode/internal/cache/Node.java |   4 +-
 .../geode/internal/cache/NonLocalRegionEntry.java  |   4 +-
 .../org/apache/geode/internal/cache/Oplog.java     |  81 ++++-----
 .../geode/internal/cache/PRQueryProcessor.java     |   4 +-
 .../internal/cache/PartitionRegionConfig.java      |   4 +-
 .../geode/internal/cache/PartitionedRegion.java    |   8 +-
 .../cache/PartitionedRegionQueryEvaluator.java     |   4 +-
 .../cache/PreferBytesCachedDeserializable.java     |   4 +-
 .../geode/internal/cache/ProxyRegionMap.java       |   4 +-
 .../apache/geode/internal/cache/RegionEntry.java   |   4 +-
 .../geode/internal/cache/RegionEventImpl.java      |   4 +-
 .../geode/internal/cache/ServerPingMessage.java    |   4 +-
 .../cache/StoreAllCachedDeserializable.java        |   4 +-
 .../geode/internal/cache/TXCommitMessage.java      |  17 +-
 .../apache/geode/internal/cache/TXEntryState.java  |   4 +-
 .../java/org/apache/geode/internal/cache/TXId.java |   4 +-
 .../internal/cache/TXRegionLockRequestImpl.java    |   8 +-
 .../org/apache/geode/internal/cache/Token.java     |  14 +-
 .../internal/cache/VMCachedDeserializable.java     |   4 +-
 .../geode/internal/cache/ValidatingDiskRegion.java |   4 +-
 .../internal/cache/ValueComparisonHelper.java      |   4 +-
 .../SnappyCompressedCachedDeserializable.java      |   4 +-
 .../SerializableRegionRedundancyStatusImpl.java    |   4 +-
 .../SerializableRestoreRedundancyResultsImpl.java  |   4 +-
 .../entries/AbstractOplogDiskRegionEntry.java      |   4 +-
 .../cache/entries/AbstractRegionEntry.java         |   4 +-
 .../geode/internal/cache/entries/DiskEntry.java    |   9 +-
 .../cache/execute/FunctionRemoteContext.java       |   7 +-
 .../PartitionedRegionFunctionResultSender.java     |   4 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |   6 +-
 .../geode/internal/cache/locks/TXLockBatch.java    |   4 +-
 .../geode/internal/cache/locks/TXLockIdImpl.java   |   4 +-
 .../cache/partitioned/BucketCountLoadProbe.java    |   4 +-
 .../cache/partitioned/FetchBulkEntriesMessage.java |   8 +-
 .../cache/partitioned/FetchEntriesMessage.java     |   8 +-
 .../cache/partitioned/FetchKeysMessage.java        |   8 +-
 .../internal/cache/partitioned/GetMessage.java     |   4 +-
 .../cache/partitioned/IndexCreationMsg.java        |   6 +-
 .../cache/partitioned/PRTombstoneMessage.java      |   6 +-
 .../cache/partitioned/PartitionMessage.java        |   6 +-
 .../internal/cache/partitioned/QueryMessage.java   |   8 +-
 .../cache/partitioned/SizedBasedLoadProbe.java     |   4 +-
 .../partitioned/StreamingPartitionOperation.java   |   4 +-
 .../internal/cache/persistence/BytesAndBits.java   |   8 +-
 .../cache/persistence/DiskInitFileInterpreter.java |   4 +-
 .../cache/persistence/DiskInitFileParser.java      |  10 +-
 .../internal/cache/persistence/DiskStoreID.java    |   4 +-
 .../internal/cache/snapshot/SnapshotPacket.java    |   6 +-
 .../geode/internal/cache/tier/ConnectionProxy.java |   4 +-
 .../internal/cache/tier/ServerSideHandshake.java   |   4 +-
 .../internal/cache/tier/sockets/AcceptorImpl.java  |   6 +-
 .../internal/cache/tier/sockets/BaseCommand.java   |   8 +-
 .../cache/tier/sockets/BaseCommandQuery.java       |   8 +-
 .../cache/tier/sockets/CacheClientNotifier.java    |  12 +-
 .../cache/tier/sockets/CacheClientProxy.java       |  18 +-
 .../tier/sockets/CacheClientProxyFactory.java      |   6 +-
 .../cache/tier/sockets/CacheClientUpdater.java     |   4 +-
 .../cache/tier/sockets/CacheServerHelper.java      |   4 +-
 .../cache/tier/sockets/ChunkedMessage.java         |   6 +-
 .../tier/sockets/ClientDataSerializerMessage.java  |  10 +-
 .../cache/tier/sockets/ClientHealthMonitor.java    |   9 +-
 .../tier/sockets/ClientInstantiatorMessage.java    |   8 +-
 .../tier/sockets/ClientInterestMessageImpl.java    |  10 +-
 .../tier/sockets/ClientMarkerMessageImpl.java      |  10 +-
 .../cache/tier/sockets/ClientPingMessageImpl.java  |  10 +-
 .../tier/sockets/ClientProxyMembershipID.java      |  14 +-
 .../tier/sockets/ClientRegistrationMetadata.java   |  18 +-
 .../cache/tier/sockets/ClientTombstoneMessage.java |   6 +-
 .../tier/sockets/ClientUpdateMessageImpl.java      |  26 +--
 .../cache/tier/sockets/CommandInitializer.java     | 116 ++++++-------
 .../internal/cache/tier/sockets/EncryptorImpl.java |   6 +-
 .../cache/tier/sockets/HAEventWrapper.java         |   4 +-
 .../internal/cache/tier/sockets/Handshake.java     |   6 +-
 .../tier/sockets/InterestResultPolicyImpl.java     |   4 +-
 .../geode/internal/cache/tier/sockets/Message.java |  16 +-
 .../cache/tier/sockets/MessageDispatcher.java      |   4 +-
 .../cache/tier/sockets/ObjectPartList.java         |   4 +-
 .../tier/sockets/OldClientSupportService.java      |   4 +-
 .../geode/internal/cache/tier/sockets/Part.java    |   6 +-
 .../cache/tier/sockets/ServerConnection.java       |  33 ++--
 .../tier/sockets/ServerSideHandshakeFactory.java   |  14 +-
 .../tier/sockets/ServerSideHandshakeImpl.java      |  35 ++--
 .../cache/tier/sockets/SocketMessageWriter.java    |  15 +-
 .../cache/tier/sockets/VersionedObjectList.java    |   9 +-
 .../tier/sockets/command/CloseConnection.java      |   5 +-
 .../tier/sockets/command/ExecuteFunction66.java    |   4 +-
 .../sockets/command/ExecuteRegionFunction66.java   |   6 +-
 .../command/ExecuteRegionFunctionSingleHop.java    |   4 +-
 .../sockets/command/GatewayReceiverCommand.java    |   4 +-
 .../cache/tier/sockets/command/GetAll70.java       |   4 +-
 .../internal/cache/tier/sockets/command/Put65.java |  16 +-
 .../cache/tier/sockets/command/PutAll70.java       |   5 +-
 .../tier/sockets/command/RegisterInterest61.java   |   4 +-
 .../sockets/command/RegisterInterestList66.java    |   4 +-
 .../geode/internal/cache/tx/DistTxEntryEvent.java  |   8 +-
 .../internal/cache/tx/RemoteFetchKeysMessage.java  |   4 +-
 .../geode/internal/cache/tx/RemoteGetMessage.java  |   4 +-
 .../internal/cache/tx/RemotePutAllMessage.java     |   4 +-
 .../internal/cache/tx/RemoteRemoveAllMessage.java  |   4 +-
 .../internal/cache/versions/DiskVersionTag.java    |   4 +-
 .../internal/cache/versions/RVVException.java      |   4 +-
 .../cache/versions/RegionVersionVector.java        |   4 +-
 .../internal/cache/versions/VMVersionTag.java      |   4 +-
 .../geode/internal/cache/versions/VersionTag.java  |   4 +-
 .../internal/cache/wan/GatewaySenderAdvisor.java   |  11 +-
 .../wan/GatewaySenderEventCallbackArgument.java    |   4 +-
 .../internal/cache/wan/GatewaySenderEventImpl.java |  16 +-
 ...aySenderQueueEntrySynchronizationOperation.java |   4 +-
 .../org/apache/geode/internal/logging/Banner.java  |   4 +-
 .../geode/internal/sequencelog/io/GraphReader.java |   4 +-
 .../org/apache/geode/internal/tcp/Connection.java  |  18 +-
 .../apache/geode/internal/tcp/MsgDestreamer.java   |   8 +-
 .../org/apache/geode/internal/tcp/MsgReader.java   |   4 +-
 .../org/apache/geode/internal/tcp/MsgStreamer.java |  14 +-
 .../tcp/VersionedByteBufferInputStream.java        |  14 +-
 .../geode/internal/tcp/VersionedMsgStreamer.java   |   8 +-
 .../org/apache/geode/internal/util/BlobHelper.java |   6 +-
 .../management/internal/FederationComponent.java   |   4 +-
 .../internal/JmxManagerLocatorRequest.java         |   4 +-
 .../internal/JmxManagerLocatorResponse.java        |   4 +-
 .../internal/beans/CacheServerBridge.java          |   6 +-
 .../internal/beans/MemberMBeanBridge.java          |   4 +-
 .../configuration/domain/Configuration.java        |   6 +-
 .../internal/configuration/domain/XmlEntity.java   |   6 +-
 .../messages/ConfigurationResponse.java            |   4 +-
 .../internal/functions/CliFunctionResult.java      |   6 +-
 .../operation/RestoreRedundancyPerformer.java      |   4 +-
 .../management/internal/util/ManagementUtils.java  |   4 +-
 .../java/org/apache/geode/pdx/internal/EnumId.java |   4 +-
 .../org/apache/geode/pdx/internal/EnumInfo.java    |   6 +-
 .../org/apache/geode/pdx/internal/PdxField.java    |   6 +-
 .../apache/geode/pdx/internal/PdxInstanceEnum.java |   4 +-
 .../apache/geode/pdx/internal/PdxOutputStream.java |   6 +-
 .../org/apache/geode/pdx/internal/PdxType.java     |   6 +-
 .../apache/geode/pdx/internal/json/PdxToJSON.java  |   6 +-
 .../cache/execute/FunctionAdapterJUnitTest.java    |   4 +-
 .../cache/query/internal/ResultsBagJUnitTest.java  |   4 +-
 .../geode/internal/DataSerializableJUnitTest.java  |  12 +-
 .../internal/HeapDataOutputStreamJUnitTest.java    |  10 +-
 ...lDataSerializerSerializationAcceptlistTest.java |   4 +-
 .../internal/cache/AbstractRegionMapTest.java      |   6 +-
 .../apache/geode/internal/cache/EventIDTest.java   |   8 +-
 ...eDisconnectedClientTransactionsMessageTest.java |   8 +-
 .../geode/internal/cache/FilterInfoTest.java       |   6 +-
 .../cache/ha/EventIdOptimizationJUnitTest.java     |  12 +-
 .../cache/ha/ThreadIdentifierJUnitTest.java        |   4 +-
 .../partitioned/FetchEntriesMessageJUnitTest.java  |   5 +-
 .../tier/sockets/CacheClientProxyFactoryTest.java  |  10 +-
 .../tier/sockets/CommandInitializerJUnitTest.java  |   4 +-
 .../cache/tier/sockets/MessageJUnitTest.java       |   4 +-
 .../cache/tier/sockets/ServerConnectionTest.java   |  10 +-
 .../tier/sockets/command/ContainsKey66Test.java    |   4 +-
 .../tier/sockets/command/CreateRegionTest.java     |   4 +-
 .../cache/tier/sockets/command/Destroy65Test.java  |   4 +-
 .../tier/sockets/command/DestroyRegionTest.java    |   4 +-
 .../cache/tier/sockets/command/DestroyTest.java    |   4 +-
 .../cache/tier/sockets/command/Get70Test.java      |   4 +-
 .../cache/tier/sockets/command/InvalidateTest.java |   4 +-
 .../cache/tier/sockets/command/Put61Test.java      |   4 +-
 .../cache/tier/sockets/command/Put65Test.java      |   4 +-
 .../cache/tier/sockets/command/PutTest.java        |   4 +-
 .../sockets/command/RegisterInterest61Test.java    |   4 +-
 .../command/RegisterInterestList61Test.java        |   4 +-
 .../command/RegisterInterestList66Test.java        |   4 +-
 .../sockets/command/RegisterInterestListTest.java  |   4 +-
 .../cache/tier/sockets/command/RequestTest.java    |   4 +-
 .../sockets/command/UnregisterInterestTest.java    |   4 +-
 .../cache/versions/AbstractVersionTagTestBase.java |   4 +-
 .../cache/versions/RegionVersionVectorTest.java    |   4 +-
 .../geode/internal/offheap/DataTypeJUnitTest.java  |   4 +-
 .../offheap/OffHeapStoredObjectJUnitTest.java      |   6 +-
 .../geode/internal/size/ObjectTraverserPerf.java   |   4 +-
 .../apache/geode/internal/tcp/MsgStreamerTest.java |   8 +-
 .../apache/geode/internal/util/BlobHelperTest.java |   6 +-
 .../operation/RestoreRedundancyPerformerTest.java  |   6 +-
 .../rollingupgrade/RollingUpgradeDUnitTest.java    |   4 +-
 .../geode/security/FilterPostAuthorization.java    |   4 +-
 .../geode/security/FilterPreAuthorization.java     |   4 +-
 .../query/cq/internal/CqServiceFactoryImpl.java    |  18 +-
 .../cache/query/cq/internal/ops/CreateCQOp.java    |   4 +-
 .../query/cq/internal/ops/GetDurableCQsOp.java     |   4 +-
 .../geode/cache30/MultiVMRegionTestCase.java       |   4 +-
 .../apache/geode/management/cli/GfshCommand.java   |   4 +-
 .../cli/commands/CreateGatewaySenderCommand.java   |   4 +-
 .../internal/cli/commands/RedundancyCommand.java   |   4 +-
 .../geode/management/internal/cli/shell/Gfsh.java  |   4 +-
 .../commands/CreateGatewaySenderCommandTest.java   |   6 +-
 .../AnalyzeDataSerializablesJUnitTestBase.java     |   4 +-
 .../AnalyzeSerializablesJUnitTestBase.java         |   4 +-
 .../geode/codeAnalysis/CompiledClassUtils.java     |   4 +-
 .../internal/cache/eviction/LRUTestEntry.java      |   4 +-
 .../org/apache/geode/pdx/NonDelegatingLoader.java  |   4 +-
 .../apache/geode/test/version/VersionManager.java  |   2 +-
 .../internal/LuceneIndexCreationProfile.java       |   6 +-
 .../lucene/internal/LuceneResultStructImpl.java    |   4 +-
 .../cache/lucene/internal/LuceneServiceImpl.java   |   6 +-
 .../cache/lucene/internal/StringQueryProvider.java |   4 +-
 .../internal/cli/LuceneDestroyIndexCommand.java    |   6 +-
 .../lucene/internal/distributed/EntryScore.java    |   4 +-
 .../distributed/LuceneFunctionContext.java         |   4 +-
 .../internal/distributed/LuceneQueryFunction.java  |   6 +-
 .../lucene/internal/distributed/TopEntries.java    |   4 +-
 .../internal/distributed/TopEntriesCollector.java  |   4 +-
 .../distributed/TopEntriesCollectorManager.java    |   4 +-
 .../WaitUntilFlushedFunctionContext.java           |   4 +-
 .../cache/lucene/internal/filesystem/ChunkKey.java |   4 +-
 .../cache/lucene/internal/filesystem/File.java     |   4 +-
 .../cache/lucene/internal/results/PageResults.java |   6 +-
 .../LuceneIndexCreationProfileJUnitTest.java       |   4 +-
 .../internal/cli/LuceneIndexCommandsJUnitTest.java |   6 +-
 .../internal/results/PageEntryJUnitTest.java       |   4 +-
 .../LuceneSearchWithRollingUpgradeTestBase.java    |   6 +-
 ...ccessfulWhenAllServersRollToCurrentVersion.java |   4 +-
 .../api/MemberIdentifierFactoryImplTest.java       |   6 +-
 .../membership/gms/GMSMemberDataJUnitTest.java     |   6 +-
 .../gms/GMSMemberDataVersionJUnitTest.java         |   4 +-
 .../membership/gms/MemberDataBuilderImplTest.java  |   6 +-
 .../internal/membership/gms/TestMessage.java       |   4 +-
 .../gms/fd/GMSHealthMonitorJUnitTest.java          |  35 ++--
 .../gms/locator/GMSLocatorIntegrationTest.java     |   4 +-
 .../locator/GMSLocatorRecoveryIntegrationTest.java |  14 +-
 .../gms/membership/GMSJoinLeaveJUnitTest.java      |   8 +-
 .../gms/messenger/JGroupsMessengerJUnitTest.java   |  38 ++---
 .../membership/gms/util/MemberIdentifierUtil.java  |   6 +-
 .../internal/membership/api/MemberData.java        |   3 +-
 .../internal/membership/api/MemberIdentifier.java  |   4 +-
 .../internal/membership/gms/GMSMemberData.java     |  12 +-
 .../internal/membership/gms/GMSMembership.java     |   6 +-
 .../internal/membership/gms/GMSMembershipView.java |   8 +-
 .../membership/gms/MemberDataBuilderImpl.java      |   4 +-
 .../membership/gms/MemberIdentifierImpl.java       |  32 ++--
 .../membership/gms/fd/GMSHealthMonitor.java        |   6 +-
 .../gms/locator/FindCoordinatorRequest.java        |   4 +-
 .../gms/locator/FindCoordinatorResponse.java       |   4 +-
 .../membership/gms/locator/GMSLocator.java         |  12 +-
 .../membership/gms/locator/GetViewRequest.java     |   4 +-
 .../membership/gms/locator/GetViewResponse.java    |   4 +-
 .../membership/gms/membership/GMSJoinLeave.java    |   4 +-
 .../gms/messages/FinalCheckPassedMessage.java      |   4 +-
 .../membership/gms/messages/HeartbeatMessage.java  |   4 +-
 .../gms/messages/HeartbeatRequestMessage.java      |   4 +-
 .../gms/messages/InstallViewMessage.java           |   4 +-
 .../gms/messages/JoinRequestMessage.java           |   4 +-
 .../gms/messages/JoinResponseMessage.java          |   4 +-
 .../gms/messages/LeaveRequestMessage.java          |   4 +-
 .../gms/messages/NetworkPartitionMessage.java      |   4 +-
 .../gms/messages/RemoveMemberMessage.java          |   4 +-
 .../gms/messages/SuspectMembersMessage.java        |   4 +-
 .../membership/gms/messages/ViewAckMessage.java    |   4 +-
 .../membership/gms/messenger/GMSPingPonger.java    |   6 +-
 .../membership/gms/messenger/JGroupsMessenger.java |  30 ++--
 .../apache/geode/OldClientSupportDUnitTest.java    |  12 +-
 .../gemstone/gemfire/OldClientSupportProvider.java |  10 +-
 .../redis/internal/data/ByteArrayWrapper.java      |   4 +-
 .../serialization/BufferDataOutputStream.java      |  12 +-
 .../internal/serialization/ByteArrayDataInput.java |   8 +-
 .../serialization/DSFIDNotFoundException.java      |   2 +-
 .../serialization/DataSerializableFixedID.java     |   4 +-
 .../serialization/DeserializationContext.java      |   2 +-
 .../{Version.java => KnownVersion.java}            | 181 +++++++++++----------
 .../serialization/SerializationContext.java        |   2 +-
 .../serialization/SerializationVersions.java       |   2 +-
 .../serialization/StaticSerialization.java         |  28 ++--
 .../serialization/VersionedDataInputStream.java    |   6 +-
 .../serialization/VersionedDataOutputStream.java   |   6 +-
 .../serialization/VersionedDataStream.java         |   8 +-
 .../geode/internal/serialization/Versioning.java   |  12 +-
 .../geode/internal/serialization/VersioningIO.java |  14 +-
 .../internal/AbstractSerializationContext.java     |  10 +-
 .../internal/DSFIDSerializerImpl.java              |  18 +-
 .../internal/DeserializationContextImpl.java       |   4 +-
 .../internal/SerializationContextImpl.java         |   4 +-
 .../BufferDataOutputStreamJUnitTest.java           |   6 +-
 .../serialization/ByteArrayDataInputTest.java      |   8 +-
 .../internal/serialization/VersionJUnitTest.java   |  70 ++++----
 .../serialization/VersioningJUnitTest.java         |  20 +--
 .../internal/tcpserver/HostAndPort.java            |   4 +-
 .../distributed/internal/tcpserver/TcpClient.java  |  20 +--
 .../distributed/internal/tcpserver/TcpServer.java  |  18 +-
 .../internal/tcpserver/VersionRequest.java         |   4 +-
 .../internal/tcpserver/VersionResponse.java        |   4 +-
 .../internal/tcpserver/HostAndPortTest.java        |   8 +-
 .../locator/wan/RemoteLocatorJoinRequest.java      |   4 +-
 .../locator/wan/RemoteLocatorJoinResponse.java     |   4 +-
 .../locator/wan/RemoteLocatorPingRequest.java      |   4 +-
 .../locator/wan/RemoteLocatorPingResponse.java     |   4 +-
 .../internal/locator/wan/RemoteLocatorRequest.java |   4 +-
 .../locator/wan/RemoteLocatorResponse.java         |   4 +-
 .../RemoteParallelGatewaySenderEventProcessor.java |   4 +-
 ...ateGatewaySenderMixedSiteOneCurrentSiteTwo.java |   4 +-
 .../geode/rest/internal/web/util/JSONUtils.java    |  14 +-
 .../web/controllers/ShellCommandsController.java   |   4 +-
 390 files changed, 1615 insertions(+), 1561 deletions(-)

diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java
index 3f4cb5e..be23543 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java
@@ -24,8 +24,8 @@ import java.util.Date;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This message simply contains a date
@@ -38,7 +38,7 @@ public class DateMessage extends SerialDistributionMessage {
   /** The date being distributed */
   private Date date;
   /** The versions in which this message was modified */
-  private static final Version[] dsfidVersions = new Version[] {};
+  private static final KnownVersion[] dsfidVersions = new KnownVersion[] {};
 
   ///////////////////// Instance Methods /////////////////////
 
@@ -99,7 +99,7 @@ public class DateMessage extends SerialDistributionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return dsfidVersions;
   }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java
index 012d976..05f4e4f 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java
@@ -37,9 +37,9 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.internal.cache.DistributedPutAllOperation.EntryVersionsList;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl;
@@ -98,7 +98,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   @Test
   public void testToDataFromHigherVersionToLower() throws Exception {
     DataOutputStream dos =
-        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_56);
+        new VersionedDataOutputStream(new DataOutputStream(baos), KnownVersion.GFE_56);
     InternalDataSerializer.writeDSFID(msg, dos);
     assertTrue(toDataPre66Called);
     assertFalse(toDataCalled);
@@ -112,7 +112,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   @Test
   public void testToDataFromLowerVersionToHigher() throws Exception {
     DataOutputStream dos =
-        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_701);
+        new VersionedDataOutputStream(new DataOutputStream(baos), KnownVersion.GFE_701);
     InternalDataSerializer.writeDSFID(msg, dos);
     assertTrue(toDataCalled);
   }
@@ -128,7 +128,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     this.bais = new ByteArrayInputStream(baos.toByteArray());
 
     DataInputStream dis =
-        new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_701);
+        new VersionedDataInputStream(new DataInputStream(bais), KnownVersion.GFE_701);
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof TestMessage);
     assertTrue(fromDataCalled);
@@ -145,7 +145,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     this.bais = new ByteArrayInputStream(baos.toByteArray());
 
     DataInputStream dis =
-        new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_56);
+        new VersionedDataInputStream(new DataInputStream(bais), KnownVersion.GFE_56);
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof TestMessage);
     assertTrue(fromDataPre66Called);
@@ -199,7 +199,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   }
 
   private void checkSupportForRollingUpgrade(Object ds) {
-    Version[] versions = null;
+    KnownVersion[] versions = null;
     if (ds instanceof SerializationVersions) {
       versions = ((SerializationVersions) ds).getSerializationVersions();
     }
@@ -257,12 +257,13 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
 
   public static class TestMessage implements DataSerializableFixedID {
     /** The versions in which this message was modified */
-    private static final Version[] dsfidVersions = new Version[] {Version.GFE_66, Version.GFE_70};
+    private static final KnownVersion[] dsfidVersions =
+        new KnownVersion[] {KnownVersion.GFE_66, KnownVersion.GFE_70};
 
     public TestMessage() {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java
index 1b0efdb..5d5a44d 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java
@@ -97,7 +97,7 @@ import org.apache.geode.internal.cache.tier.sockets.CacheClientProxyFactory.Inte
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.MessageDispatcher;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.tcp.ConnectionTable;
 import org.apache.geode.test.dunit.VM;
@@ -1593,7 +1593,7 @@ public class DeltaPropagationDUnitTest implements Serializable {
     @Override
     public CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       return new CustomCacheClientProxy(notifier, socket, proxyId, isPrimary, clientConflation,
@@ -1606,7 +1606,7 @@ public class DeltaPropagationDUnitTest implements Serializable {
 
     private CustomCacheClientProxy(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       super(notifier.getCache(), notifier, socket, proxyId, isPrimary, clientConflation,
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java
index 0ec9ceb..23b98fc 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java
@@ -60,7 +60,7 @@ import org.apache.geode.internal.cache.entries.DiskEntry;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.cache.versions.RegionVersionVector;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.awaitility.GeodeAwaitility;
 import org.apache.geode.test.dunit.Assert;
 import org.apache.geode.test.dunit.AsyncInvocation;
@@ -2527,7 +2527,7 @@ public class GIIDeltaDUnitTest extends JUnit4CacheTestCase {
         LocalRegion region = (LocalRegion) cache.getRegion(regionName);
         RegionVersionVector rvv = region.getVersionVector();
         rvv = rvv.getCloneForTransmission();
-        HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
 
         // Using gemfire serialization because
         // RegionVersionVector is not java serializable
@@ -2554,7 +2554,7 @@ public class GIIDeltaDUnitTest extends JUnit4CacheTestCase {
         LocalRegion region = (LocalRegion) cache.getRegion(REGION_NAME);
         RegionVersionVector rvv = region.getDiskRegion().getRegionVersionVector();
         rvv = rvv.getCloneForTransmission();
-        HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
 
         // Using gemfire serialization because
         // RegionVersionVector is not java serializable
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java
index 1809cbf..8bc2db9 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java
@@ -30,7 +30,7 @@ import org.apache.geode.cache.asyncqueue.AsyncEvent;
 import org.apache.geode.cache.asyncqueue.AsyncEventListener;
 import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.SerializableCallable;
 import org.apache.geode.test.dunit.VM;
@@ -150,7 +150,7 @@ public class PDXAsyncEventQueueDUnitTest extends JUnit4CacheTestCase {
         // Make sure the cache exists
         getCache();
         DataSerializer.writeObject(new SimpleClass(value, (byte) value),
-            new HeapDataOutputStream(Version.CURRENT));
+            new HeapDataOutputStream(KnownVersion.CURRENT));
         return null;
       }
     };
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java
index bd0ab5c..0828285 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java
@@ -46,7 +46,7 @@ import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.SimpleClass.SimpleEnum;
 import org.apache.geode.pdx.internal.EnumId;
 import org.apache.geode.pdx.internal.EnumInfo;
@@ -396,13 +396,13 @@ public class PdxAttributesDistributedTest extends JUnit4CacheTestCase {
 
   private void defineAType() throws IOException {
     SimpleClass sc = new SimpleClass(1, (byte) 2);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(sc, out);
   }
 
   private void defineATypeNoEnum() throws /* IO */ Exception {
     SimpleClass sc = new SimpleClass(1, (byte) 2, null);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(sc, out);
   }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java
index 78ad24c..e8c4615 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java
@@ -48,7 +48,7 @@ import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.PdxSerializerObject;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.AutoSerializableManager;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.Invoke;
@@ -390,7 +390,7 @@ public class PdxClientServerDUnitTest extends JUnit4CacheTestCase {
     // Serialize an object and put it in both regions, sending
     // the event to each pool
     vm2.invoke(() -> {
-      HeapDataOutputStream bytes = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream bytes = new HeapDataOutputStream(KnownVersion.CURRENT);
       Region r1 = getRootRegion("region1");
       r1.put(1, new SimpleClass(57, (byte) 3));
       Region r2 = getRootRegion("region2");
@@ -422,7 +422,7 @@ public class PdxClientServerDUnitTest extends JUnit4CacheTestCase {
     createClientRegion(vm2, port);
 
     vm1.invoke(() -> {
-      HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
       DataSerializer.writeObject(new SimpleClass(57, (byte) 3), out);
       byte[] bytes = out.toByteArray();
       Region r = getRootRegion("testSimplePdx");
@@ -515,7 +515,7 @@ public class PdxClientServerDUnitTest extends JUnit4CacheTestCase {
         props.setProperty(LOCATORS, "");
         getSystem(props);
         Cache cache = getCache();
-        HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
         DataSerializer.writeObject(new SimpleClass(57, (byte) 3), out);
 
         PoolFactory pf = PoolManager.createFactory();
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
index 77ccabb..d102474 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
@@ -63,7 +63,7 @@ import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
 import org.apache.geode.internal.cache.xmlcache.ClientCacheCreation;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.pdx.ReflectionBasedAutoSerializer;
 import org.apache.geode.test.junit.categories.ClientServerTest;
@@ -354,37 +354,37 @@ public class ClientCacheFactoryJUnitTest {
     InternalDistributedMember memberID =
         (InternalDistributedMember) clientCache.getDistributedSystem().getDistributedMember();
     MemberIdentifier gmsID = memberID;
-    memberID.setVersionObjectForTest(Version.GFE_82);
-    assertThat(memberID.getVersionOrdinalObject()).isEqualTo(Version.GFE_82);
+    memberID.setVersionObjectForTest(KnownVersion.GFE_82);
+    assertThat(memberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.GFE_82);
 
     ClientProxyMembershipID clientID = ClientProxyMembershipID.getClientId(memberID);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.GFE_82);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.GFE_82);
     DataSerializer.writeObject(clientID, out);
 
     DataInputStream in =
         new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()),
-            Version.CURRENT);
+            KnownVersion.CURRENT);
     ClientProxyMembershipID newID = DataSerializer.readObject(in);
     InternalDistributedMember newMemberID =
         (InternalDistributedMember) newID.getDistributedMember();
-    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(Version.GFE_82);
-    assertThat(newID.getClientVersion()).isEqualTo(Version.GFE_82);
+    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.GFE_82);
+    assertThat(newID.getClientVersion()).isEqualTo(KnownVersion.GFE_82);
 
     assertThat(newMemberID.getUuidLeastSignificantBits()).isEqualTo(0);
     assertThat(newMemberID.getUuidMostSignificantBits()).isEqualTo(0);
 
     gmsID.setUUID(new UUID(1234L, 5678L));
-    memberID.setVersionObjectForTest(Version.CURRENT);
+    memberID.setVersionObjectForTest(KnownVersion.CURRENT);
     clientID = ClientProxyMembershipID.getClientId(memberID);
-    out = new HeapDataOutputStream(Version.CURRENT);
+    out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(clientID, out);
 
     in = new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()),
-        Version.CURRENT);
+        KnownVersion.CURRENT);
     newID = DataSerializer.readObject(in);
     newMemberID = (InternalDistributedMember) newID.getDistributedMember();
-    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(Version.CURRENT);
-    assertThat(newID.getClientVersion()).isEqualTo(Version.CURRENT);
+    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.CURRENT);
+    assertThat(newID.getClientVersion()).isEqualTo(KnownVersion.CURRENT);
 
     assertThat(newMemberID.getUuidLeastSignificantBits())
         .isEqualTo(gmsID.getUuidLeastSignificantBits());
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java
index 35574ad..a9a7826 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java
@@ -41,7 +41,7 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Tests offline compaction
@@ -831,7 +831,7 @@ public class CompactOfflineDiskStoreJUnitTest {
     // 0: OPLOG_RVV. 1: drMap.size()==1, 2: disRegionId, 3: getRVVTrusted
     // 4: memberToVersion.size()==1, 5: memberid, 6-7: versionHolder 8: END_OF_RECORD_ID
     // but not every diskRegion has a member in RVV
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     RegionVersionHolder dummyHolder = new RegionVersionHolder(1);
     try {
       dummyHolder.toData(out);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java
index cdd5f48..17ddfed 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java
@@ -28,7 +28,7 @@ import org.junit.runner.RunWith;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.tier.InterestType;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.test.concurrency.ConcurrentTestRunner;
 import org.apache.geode.test.concurrency.ParallelExecutor;
@@ -57,7 +57,7 @@ public class FilterProfileConcurrencyTest {
   }
 
   private Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
-    return BlobHelper.deserializeBlob(bytes, Version.CURRENT, null);
+    return BlobHelper.deserializeBlob(bytes, KnownVersion.CURRENT, null);
   }
 
   private FilterProfile createFilterProfile() throws UnknownHostException {
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
index 6dead05..bfbce0f 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
@@ -63,7 +63,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * This is a test verifies region is LIFO enabled by MEMORY verifies correct stats updating and
@@ -649,7 +649,7 @@ public class LIFOEvictionAlgoMemoryEnabledRegionJUnitTest {
     @Override
     public boolean fillInValue(final InternalRegion region, final Entry entry,
         final ByteArrayDataInput in, final DistributionManager distributionManager,
-        final Version version) {
+        final KnownVersion version) {
       return false;
     }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
index 293bfd9..14fc72b 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
@@ -74,7 +74,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessage;
 import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl;
 import org.apache.geode.internal.cache.tier.sockets.ConnectionListener;
 import org.apache.geode.internal.cache.tier.sockets.HAEventWrapper;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.internal.util.concurrent.StoppableReentrantReadWriteLock;
@@ -509,7 +509,7 @@ public class HARegionQueueIntegrationTest {
   private InternalDistributedMember createMember() {
     // Create an InternalDistributedMember
     InternalDistributedMember member = mock(InternalDistributedMember.class);
-    when(member.getVersionOrdinalObject()).thenReturn(Version.CURRENT);
+    when(member.getVersionOrdinalObject()).thenReturn(KnownVersion.CURRENT);
     return member;
   }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java
index 4f65e38..0158946 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.net.SocketCloser;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.test.junit.rules.ExecutorServiceRule;
 import org.apache.geode.test.junit.rules.ServerStarterRule;
@@ -72,7 +72,7 @@ public class CacheClientProxyTest {
     when(proxyID.getDistributedMember()).thenReturn(member);
 
     CacheClientProxy proxy = new CacheClientProxy(ccn, socket, proxyID, true,
-        Handshake.CONFLATION_DEFAULT, Version.CURRENT, 1L, true,
+        Handshake.CONFLATION_DEFAULT, KnownVersion.CURRENT, 1L, true,
         null, null, mock(StatisticsClock.class));
 
     CompletableFuture<Void> result1 = executorServiceRule.runAsync(() -> proxy.close());
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
index 94e4de4..48ea5e7 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @Category(ClientServerTest.class)
@@ -102,7 +102,7 @@ public class ServerConnectionIntegrationTest {
     private volatile boolean signalled;
 
     TestMessage() {
-      super(3, Version.CURRENT);
+      super(3, KnownVersion.CURRENT);
       messageType = MessageType.REQUEST;
       securePart = new Part();
     }
@@ -155,7 +155,7 @@ public class ServerConnectionIntegrationTest {
       ServerSideHandshake handshake = mock(ServerSideHandshake.class);
       MessageIdExtractor extractor = mock(MessageIdExtractor.class);
 
-      when(handshake.getVersion()).thenReturn(Version.CURRENT);
+      when(handshake.getVersion()).thenReturn(KnownVersion.CURRENT);
       when(proxyID.getDistributedMember()).thenReturn(mock(InternalDistributedMember.class));
 
       setHandshake(handshake);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java
index dba0ab1..ea6a9f4 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java
@@ -60,7 +60,7 @@ import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.LocalRegion;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.OffHeapTest;
 
 /**
@@ -323,7 +323,7 @@ public class OffHeapValidationJUnitTest {
     String key = "keyString";
     String value = "this is a string";
     region.put(key, value);
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(value, hdos);
     byte[] uncompressedBytes = hdos.toByteArray();
     byte[] expectedValue = SnappyCompressor.getDefaultInstance().compress(uncompressedBytes);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java
index cb8bfc2..7bde479 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java
@@ -55,7 +55,7 @@ import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.PdxSerializerObject;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.AutoSerializableManager;
 import org.apache.geode.pdx.internal.PdxField;
 import org.apache.geode.pdx.internal.PdxInstanceImpl;
@@ -126,7 +126,7 @@ public class AutoSerializableJUnitTest {
     list.add("string four");
     objOut.set("string_list", list);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -178,7 +178,7 @@ public class AutoSerializableJUnitTest {
     m.put("k1", "v1");
     m.put("k2", "v2");
     m.put("k3", "v3");
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(m, out);
 
     Object dObj =
@@ -190,7 +190,7 @@ public class AutoSerializableJUnitTest {
   public void testMonth() throws Exception {
     setupSerializer(false, false, "org.apache.geode.pdx.AutoSerializableJUnitTest.MyMonth");
     MyMonth m = new MyMonth(1);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(m, out);
 
     Object dObj =
@@ -273,7 +273,7 @@ public class AutoSerializableJUnitTest {
   public void testExternalizable() throws Exception {
     setupSerializer("org.apache.geode.pdx.AutoSerializableJUnitTest.MyExternalizable");
     MyExternalizable o = new MyExternalizable(79);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
 
     Object dObj =
@@ -300,7 +300,7 @@ public class AutoSerializableJUnitTest {
   public void testWriteReplace() throws Exception {
     setupSerializer("org.apache.geode.pdx.AutoSerializableJUnitTest.MyWriteReplace");
     MyWriteReplace o = new MyWriteReplace("79");
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
 
     Object dObj =
@@ -324,7 +324,7 @@ public class AutoSerializableJUnitTest {
   public void testComparator() throws Exception {
     setupSerializer("org.apache.geode.pdx.AutoSerializableJUnitTest.MyComparator");
     TreeSet o = new TreeSet(new MyComparator());
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
 
     Object dObj =
@@ -501,7 +501,7 @@ public class AutoSerializableJUnitTest {
     BigInteger bi = new BigInteger("12345678901234567890");
     BigDecimal bd = new BigDecimal("1234567890.1234567890");
     BigHolder bih = new BigHolder(bi, bd);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       DataSerializer.writeObject(bih, out);
       throw new RuntimeException("expected NonPortableClassException");
@@ -524,7 +524,7 @@ public class AutoSerializableJUnitTest {
   public void testIsClassAutoSerialized() throws IOException, ClassNotFoundException {
     setupSerializer(new ExplicitClassNameAutoSerializer(false, ""), false);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     DomainObject objIn = (DomainObject) DataSerializer
@@ -549,7 +549,7 @@ public class AutoSerializableJUnitTest {
         new ExplicitIdentityAutoSerializer(false, "org.apache.geode.pdx.DomainObjectPdxAuto"),
         true);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
     DataSerializer.writeObject(objOut, out);
 
@@ -581,7 +581,7 @@ public class AutoSerializableJUnitTest {
         new ExplicitIncludedAutoSerializer(false, "org.apache.geode.pdx.DomainObjectPdxAuto"),
         true);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pi = (PdxInstance) DataSerializer
@@ -611,7 +611,7 @@ public class AutoSerializableJUnitTest {
         new ExplicitFieldNameAutoSerializer(false, "org.apache.geode.pdx.DomainObjectPdxAuto"),
         true);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pi = (PdxInstance) DataSerializer
@@ -836,7 +836,7 @@ public class AutoSerializableJUnitTest {
     defaultHolder.l = 0L;
     defaultHolder.f = 0.0f;
     defaultHolder.d = 0.0;
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(nullHolder, out);
     PdxInstance pi =
         DataSerializer.readObject(new DataInputStream(new ByteArrayInputStream(out.toByteArray())));
@@ -846,7 +846,7 @@ public class AutoSerializableJUnitTest {
     assertFalse(nullHolder.equals(dObj));
     assertEquals(defaultHolder, dObj);
 
-    out = new HeapDataOutputStream(Version.CURRENT);
+    out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(defaultHolder, out);
     pi = DataSerializer
         .readObject(new DataInputStream(new ByteArrayInputStream(out.toByteArray())));
@@ -873,7 +873,7 @@ public class AutoSerializableJUnitTest {
     BigInteger bi = new BigInteger("12345678901234567890");
     BigDecimal bd = new BigDecimal("1234567890.1234567890");
     BigHolder bih = new BigHolder(bi, bd);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(bih, out);
     System.out.println(msg + " out.size=" + out.size());
     Object dObj =
@@ -964,7 +964,7 @@ public class AutoSerializableJUnitTest {
       chm.put("key" + i, new BigHolder(i));
     }
     CHMHolder h = new CHMHolder(chm);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(h, out);
     System.out.println(msg + " out.size=" + out.size());
     Object dObj =
@@ -985,7 +985,7 @@ public class AutoSerializableJUnitTest {
     DomainObject objOut = new DomainObjectPdxAuto(4);
     objOut.set("aString", "aString has a value");
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     // Now we want to read all fields.
@@ -1018,7 +1018,7 @@ public class AutoSerializableJUnitTest {
     DomainObjectPdxAuto objOut = new DomainObjectPdxAuto(4);
     objOut.anInteger = null;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     // Now we want to read all fields.
@@ -1039,7 +1039,7 @@ public class AutoSerializableJUnitTest {
   public void testNoZeroArgConstructor() throws Exception {
     setupSerializer(stdSerializableClasses);
     DomainObject objOut = new DomainObjectPdxAutoNoDefaultConstructor(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       DataSerializer.writeObject(objOut, out);
     } catch (NotSerializableException ex) {
@@ -1057,7 +1057,7 @@ public class AutoSerializableJUnitTest {
   public void testException() throws Exception {
     setupSerializer(stdSerializableClasses);
     DomainObject objOut = new DomainObjectBad();
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     try {
       DataSerializer.writeObject(objOut, out);
@@ -1117,7 +1117,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1144,7 +1144,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1172,7 +1172,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1200,7 +1200,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1308,7 +1308,7 @@ public class AutoSerializableJUnitTest {
     obj1.set("string_0", "test string value");
     obj1.set("long_0", 99L);
 
-    HeapDataOutputStream out1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(obj1, out1);
 
     PdxInstance pdxIn = DataSerializer
@@ -1325,7 +1325,7 @@ public class AutoSerializableJUnitTest {
     // They are definitely not the same class
     assertFalse(obj1.getClass() == obj2.getClass());
 
-    HeapDataOutputStream out2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(obj2, out2);
 
     pdxIn = DataSerializer
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java
index 03f15f4..7c04d0b 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
 import org.apache.geode.test.junit.categories.SerializationTest;
@@ -741,7 +741,7 @@ public class ByteSourceJUnitTest {
 
   @Test
   public void testSendToDataOutput() throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream((Version) null);
+    HeapDataOutputStream hdos = new HeapDataOutputStream((KnownVersion) null);
     ByteSource bs = createByteSource(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0});
     bs.sendTo(hdos);
     assertEquals(0, bs.remaining());
@@ -751,7 +751,7 @@ public class ByteSourceJUnitTest {
 
     bs.position(1);
     bs.limit(9);
-    hdos = new HeapDataOutputStream((Version) null);
+    hdos = new HeapDataOutputStream((KnownVersion) null);
     bs.sendTo(hdos);
     assertEquals(0, bs.remaining());
     bb = hdos.toByteBuffer();
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java
index c1249f4..3c4bc40 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java
@@ -52,7 +52,7 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
 import org.apache.geode.pdx.internal.PdxField;
 import org.apache.geode.pdx.internal.PdxInstanceEnum;
@@ -1226,7 +1226,7 @@ public class PdxInstanceFactoryJUnitTest {
   }
 
   private Object serializeAndDeserialize(Object in) throws IOException, ClassNotFoundException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(in, hdos);
     byte[] bytes = hdos.toByteArray();
     // System.out.println("Serialized bytes = " + Arrays.toString(bytes));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java
index d3f13f0..22b2688 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java
@@ -39,7 +39,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.EnumInfo.PdxInstanceEnumInfo;
 import org.apache.geode.pdx.internal.PdxInstanceFactoryImpl;
 import org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase;
@@ -386,7 +386,7 @@ public class PdxInstanceJUnitTest extends JUnit4CacheTestCase {
   }
 
   private PdxInstance getPdx(PdxSerializable toData) throws IOException, ClassNotFoundException {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(toData, out);
     return DataSerializer
         .readObject(new DataInputStream(new ByteArrayInputStream(out.toByteArray())));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
index c2179ff..150f64c 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
@@ -60,7 +60,7 @@ import org.apache.geode.internal.PdxSerializerObject;
 import org.apache.geode.internal.SystemAdmin;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.pdx.internal.DataSize;
@@ -102,7 +102,7 @@ public class PdxSerializableJUnitTest {
     this.cache.close();
     this.cache = (GemFireCacheImpl) new CacheFactory().set(MCAST_PORT, "0").setPdxPersistent(true)
         .setPdxDiskStore("doesNotExist").create();
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable object = new SimpleClass(1, (byte) 5, null);
     try {
       DataSerializer.writeObject(object, out);
@@ -284,7 +284,7 @@ public class PdxSerializableJUnitTest {
 
   @Test
   public void testByteFormatForSimpleClass() throws Exception {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable object = new SimpleClass(1, (byte) 5, null);
     DataSerializer.writeObject(object, out);
     int typeId = getPdxTypeIdForClass(SimpleClass.class);
@@ -335,19 +335,19 @@ public class PdxSerializableJUnitTest {
     int myInt = 1420;
     float myFloat = 123.023f;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     SimpleClass1 pdx =
         new SimpleClass1(myFlag, myShort, myString1, myLong, myString2, myString3, myInt, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(SimpleClass1.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos2);
     byte[] str2Bytes = hdos2.toByteArray();
-    HeapDataOutputStream hdos3 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos3 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString3, hdos3);
     byte[] str3Bytes = hdos3.toByteArray();
 
@@ -562,19 +562,19 @@ public class PdxSerializableJUnitTest {
     int myInt = 1420;
     float myFloat = 123.023f;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     SimpleClass1 pdx =
         new SimpleClass1(myFlag, myShort, myString1, myLong, myString2, myString3, myInt, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(SimpleClass1.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos2);
     byte[] str2Bytes = hdos2.toByteArray();
-    HeapDataOutputStream hdos3 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos3 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString3, hdos3);
     byte[] str3Bytes = hdos3.toByteArray();
 
@@ -773,18 +773,18 @@ public class PdxSerializableJUnitTest {
       myHashMap.put("KEY_" + i, new SimpleClass(i, (byte) 5));
     }
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable pdx = new NestedPdx(myString1, myLong, myHashMap, myString2, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(NestedPdx.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
-    HeapDataOutputStream hdosForMap = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosForMap = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(myHashMap, hdosForMap);
     byte[] mapBytes = hdosForMap.toByteArray();
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos2);
     byte[] str2Bytes = hdos2.toByteArray();
 
@@ -866,22 +866,22 @@ public class PdxSerializableJUnitTest {
     String myString2 = "ComplexClass1_myString2";
     float myFloat = 123.023f;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable pdx = new DSInsidePdx(myString1, myLong, myDS, myString2, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(DSInsidePdx.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
     System.out.println("Length of string1: " + str1Bytes.length);
 
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(myDS, hdos2);
     byte[] dsBytes = hdos2.toByteArray();
     System.out.println("Length of DS: " + dsBytes.length);
 
-    HeapDataOutputStream hdos3 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos3 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos3);
     byte[] str2Bytes = hdos3.toByteArray();
     System.out.println("Length of string2: " + str2Bytes.length);
@@ -978,27 +978,27 @@ public class PdxSerializableJUnitTest {
     }
     PdxSerializable myPDX = new NestedPdx(myString1, myLong, myHashMap, myString2, myFloat);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializable ds = new PdxInsideDS(myString1, myLong, myPDX, myString2);
     DataSerializer.writeObject(ds, out);
 
-    HeapDataOutputStream hdosString1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosString1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdosString1);
     byte[] str1Bytes = hdosString1.toByteArray();
     System.out.println("Length of string1: " + str1Bytes.length);
 
-    HeapDataOutputStream hdosMyPDX = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosMyPDX = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(myPDX, hdosMyPDX);
     byte[] pdxBytes = hdosMyPDX.toByteArray();
     System.out.println("Length of myPDX: " + pdxBytes.length);
 
-    HeapDataOutputStream hdosString2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosString2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdosString2);
     byte[] str2Bytes = hdosString2.toByteArray();
     System.out.println("Length of string2: " + str2Bytes.length);
 
     Class classInstance = ds.getClass();
-    HeapDataOutputStream hdosClass = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosClass = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeClass(classInstance, hdosClass);
     byte[] dsInitBytes = hdosClass.toByteArray();
 
@@ -1239,7 +1239,7 @@ public class PdxSerializableJUnitTest {
   }
 
   private Object serializeAndDeserialize(Object in) throws IOException, ClassNotFoundException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(in, hdos);
     byte[] bytes = hdos.toByteArray();
     System.out.println("Serialized bytes = " + Arrays.toString(bytes));
@@ -1666,7 +1666,7 @@ public class PdxSerializableJUnitTest {
 
   @Test
   public void testVariableFields() throws Exception {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(new VariableFields(1), out);
     try {
       DataSerializer.writeObject(new VariableFields(2), out);
@@ -2041,7 +2041,7 @@ public class PdxSerializableJUnitTest {
   }
 
   private byte[] createBlob(Object o) throws IOException {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
     return out.toByteArray();
   }
diff --git a/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java b/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
index 9f1476e..b6ab61e 100644
--- a/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
+++ b/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
@@ -35,7 +35,7 @@ import org.openjdk.jmh.annotations.Warmup;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 
 /**
@@ -51,7 +51,7 @@ public class InternalDataSerializerBenchmark {
 
   @Setup(Level.Trial)
   public void setup() throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString("12345678901234567890123456789012345", hdos);
     byte[] bytes = hdos.toByteArray();
     if (bytes[0] != DSCODE.STRING_BYTES.toByte()) {
@@ -67,7 +67,7 @@ public class InternalDataSerializerBenchmark {
   @BenchmarkMode(Mode.Throughput)
   @OutputTimeUnit(TimeUnit.MILLISECONDS)
   public String readStringBenchmark() throws IOException {
-    dataInput.initialize(serializedBytes, Version.CURRENT);
+    dataInput.initialize(serializedBytes, KnownVersion.CURRENT);
     String result = InternalDataSerializer.readString(dataInput, DSCODE.STRING_BYTES.toByte());
     return result;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/CopyHelper.java b/geode-core/src/main/java/org/apache/geode/CopyHelper.java
index cfd0b9b..c3af22a 100644
--- a/geode-core/src/main/java/org/apache/geode/CopyHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/CopyHelper.java
@@ -26,7 +26,7 @@ import java.util.UUID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.Token;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.WritablePdxInstance;
 import org.apache.geode.pdx.internal.PdxUnreadData;
@@ -237,7 +237,7 @@ public final class CopyHelper {
   @SuppressWarnings("unchecked")
   private static <T> T doDeepCopy(T o) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       DataSerializer.writeObject(o, hdos);
       return (T) DataSerializer.readObject(new DataInputStream(hdos.getInputStream()));
     } catch (ClassNotFoundException ex) {
diff --git a/geode-core/src/main/java/org/apache/geode/DataSerializer.java b/geode-core/src/main/java/org/apache/geode/DataSerializer.java
index 84a9c72..64291ed 100644
--- a/geode-core/src/main/java/org/apache/geode/DataSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/DataSerializer.java
@@ -62,8 +62,8 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.pdx.PdxInstance;
 
@@ -1235,9 +1235,9 @@ public abstract class DataSerializer {
       if (object instanceof HeapDataOutputStream) {
         hdos = (HeapDataOutputStream) object;
       } else {
-        Version v = StaticSerialization.getVersionForDataStreamOrNull(out);
+        KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(out);
         if (v == null) {
-          v = Version.CURRENT;
+          v = KnownVersion.CURRENT;
         }
         hdos = new HeapDataOutputStream(v);
         try {
diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java
index 7218a7e..b278520 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java
@@ -24,8 +24,8 @@ import org.apache.geode.internal.admin.StatAlert;
 import org.apache.geode.internal.admin.StatAlertDefinition;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Notification to be sent to clients (e.g GFMon2.0 ). It incorporates
@@ -150,7 +150,7 @@ public class StatAlertNotification extends StatAlert
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
index 1e97d82..e6985ba 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
@@ -32,7 +32,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -49,7 +49,7 @@ public abstract class AbstractOp implements Op {
   private boolean allowDuplicateMetadataRefresh;
 
   protected AbstractOp(int msgType, int msgParts) {
-    msg = new Message(msgParts, Version.CURRENT);
+    msg = new Message(msgParts, KnownVersion.CURRENT);
     getMessage().setMessageType(msgType);
   }
 
@@ -125,7 +125,7 @@ public abstract class AbstractOp implements Op {
         }
         userId = id;
       }
-      try (HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT)) {
+      try (HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
         hdos.writeLong(cnx.getConnectionID());
         hdos.writeLong(userId);
         getMessage().setSecurePart(((ConnectionImpl) cnx).encryptBytes(hdos.toByteArray()));
@@ -215,7 +215,7 @@ public abstract class AbstractOp implements Op {
    * By default just create a normal one part msg. Subclasses can override this.
    */
   protected Message createResponseMessage() {
-    return new Message(1, Version.CURRENT);
+    return new Message(1, KnownVersion.CURRENT);
   }
 
   protected Object processResponse(Message m, Connection con) throws Exception {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
index aa6e630..de0a8c9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
@@ -35,7 +35,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.command.PutUserCredentials;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.security.NotAuthorizedException;
@@ -107,7 +107,7 @@ public class AuthenticateUserOp {
           (InternalLogWriter) sys.getSecurityLogWriter());
 
       getMessage().setMessageHasSecurePartFlag();
-      try (HeapDataOutputStream heapdos = new HeapDataOutputStream(Version.CURRENT)) {
+      try (HeapDataOutputStream heapdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
         DataSerializer.writeProperties(credentials, heapdos);
         credentialBytes = ((ConnectionImpl) con).encryptBytes(heapdos.toByteArray());
       } catch (Exception e) {
@@ -131,7 +131,7 @@ public class AuthenticateUserOp {
 
     @Override
     protected void sendMessage(Connection cnx) throws Exception {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       byte[] secureBytes;
       hdos.writeLong(cnx.getConnectionID());
       if (securityProperties != null) {
@@ -144,7 +144,7 @@ public class AuthenticateUserOp {
             server, false, (InternalLogWriter) sys.getLogWriter(),
             (InternalLogWriter) sys.getSecurityLogWriter());
         byte[] credentialBytes;
-        try (HeapDataOutputStream heapdos = new HeapDataOutputStream(Version.CURRENT)) {
+        try (HeapDataOutputStream heapdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
           DataSerializer.writeProperties(credentials, heapdos);
           credentialBytes = ((ConnectionImpl) cnx).encryptBytes(heapdos.toByteArray());
         }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
index 08cd16a..2380db7 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
@@ -61,8 +61,8 @@ import org.apache.geode.internal.cache.tier.sockets.Handshake;
 import org.apache.geode.internal.cache.tier.sockets.ServerQueueStatus;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.Versioning;
@@ -114,11 +114,12 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
   }
 
   public static void setVersionForTesting(short ver) {
-    if (ver > Version.CURRENT_ORDINAL) {
+    if (ver > KnownVersion.CURRENT_ORDINAL) {
       overrideClientVersion = ver;
     } else {
       currentClientVersion =
-          Versioning.getKnownVersionOrDefault(Versioning.getVersionOrdinal(ver), Version.CURRENT);
+          Versioning.getKnownVersionOrDefault(Versioning.getVersionOrdinal(ver),
+              KnownVersion.CURRENT);
       overrideClientVersion = -1;
     }
   }
@@ -131,7 +132,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
     // handshakes.
     // Client side handshake code uses this.currentClientVersion which can be
     // set via tests.
-    if (currentClientVersion.isNotOlderThan(Version.GFE_603)) {
+    if (currentClientVersion.isNotOlderThan(KnownVersion.GFE_603)) {
       this.overrides = new byte[] {this.clientConflation};
     }
   }
@@ -218,10 +219,10 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
         short wanSiteVersion = VersioningIO.readOrdinal(dis);
         conn.setWanSiteVersion(wanSiteVersion);
         // establish a versioned stream for the other site, if necessary
-        if (wanSiteVersion < Version.CURRENT_ORDINAL) {
+        if (wanSiteVersion < KnownVersion.CURRENT_ORDINAL) {
           dis = new VersionedDataInputStream(dis, Versioning
               .getKnownVersionOrDefault(Versioning.getVersionOrdinal(wanSiteVersion),
-                  Version.CURRENT));
+                  KnownVersion.CURRENT));
         }
       }
 
@@ -240,14 +241,15 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // Read delta-propagation property value from server.
       // [sumedh] Static variable below? Client can connect to different
       // DSes with different values of this. It shoule be a member variable.
-      if (!communicationMode.isWAN() && currentClientVersion.isNotOlderThan(Version.GFE_61)) {
+      if (!communicationMode.isWAN() && currentClientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
         ((InternalDistributedSystem) system).setDeltaEnabledOnServer(dis.readBoolean());
       }
 
       // validate that the remote side has a different distributed system id.
       if (communicationMode.isWAN()
-          && Version.GFE_66.compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
-          && currentClientVersion.isNotOlderThan(Version.GFE_66)) {
+          && KnownVersion.GFE_66
+              .compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
+          && currentClientVersion.isNotOlderThan(KnownVersion.GFE_66)) {
         int remoteDistributedSystemId = in.read();
         int localDistributedSystemId =
             ((InternalDistributedSystem) system).getDistributionManager().getDistributedSystemId();
@@ -260,8 +262,9 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       }
       // Read the PDX registry size from the remote size
       if (communicationMode.isWAN()
-          && Version.GFE_80.compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
-          && currentClientVersion.isNotOlderThan(Version.GFE_80)) {
+          && KnownVersion.GFE_80
+              .compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
+          && currentClientVersion.isNotOlderThan(KnownVersion.GFE_80)) {
         int remotePdxSize = dis.readInt();
         serverQStatus.setPdxSize(remotePdxSize);
       }
@@ -277,7 +280,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
   private InternalDistributedMember readServerMember(DataInputStream p_dis) throws IOException {
 
     byte[] memberBytes = DataSerializer.readByteArray(p_dis);
-    Version v = StaticSerialization.getVersionForDataStreamOrNull(p_dis);
+    KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(p_dis);
     ByteArrayDataInput dis = new ByteArrayDataInput(memberBytes, v);
     try {
       return DataSerializer.readObject(dis);
@@ -330,7 +333,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // [sumedh] nothing more to be done for older clients used in tests
       // there is a difference in serializer map registration for >= 6.5.1.6
       // clients but that is not used in tests
-      if (currentClientVersion.isOlderThan(Version.GFE_61)) {
+      if (currentClientVersion.isOlderThan(KnownVersion.GFE_61)) {
         return new ServerQueueStatus(endpointType, queueSize, member);
       }
       HashMap instantiatorMap = DataSerializer.readHashMap(dis);
@@ -374,7 +377,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
   private byte write(DataOutputStream dos, DataInputStream dis, CommunicationMode communicationMode,
       int replyCode, int readTimeout, List ports, Properties p_credentials,
       DistributedMember member, boolean isCallbackConnection) throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
     byte acceptanceCode = -1;
     try {
       hdos.writeByte(communicationMode.getModeNumber());
@@ -397,10 +400,10 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // we do not know the receiver's version at this point, but the on-wire
       // form of InternalDistributedMember changed in 9.0, so we must serialize
       // it using the previous version
-      DataOutput idOut = new VersionedDataOutputStream(hdos, Version.GFE_82);
+      DataOutput idOut = new VersionedDataOutputStream(hdos, KnownVersion.GFE_82);
       DataSerializer.writeObject(this.id, idOut);
 
-      if (currentClientVersion.isNotOlderThan(Version.GFE_603)) {
+      if (currentClientVersion.isNotOlderThan(KnownVersion.GFE_603)) {
         byte[] overrides = getOverrides();
         for (int bytes = 0; bytes < overrides.length; bytes++) {
           hdos.writeByte(overrides[bytes]);
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java
index 16401f3..b289588 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.cache.execute.MemberMappedArgument;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -219,7 +219,7 @@ public class ExecuteFunctionNoAckOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new Message(1, Version.CURRENT);
+      return new Message(1, KnownVersion.CURRENT);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java
index 3baa857..77071b5 100755
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java
@@ -41,7 +41,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -426,7 +426,7 @@ public class ExecuteFunctionOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java
index 682efcf..fd641ae 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java
@@ -27,7 +27,7 @@ import org.apache.geode.internal.cache.execute.ServerRegionFunctionExecutor;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -210,7 +210,7 @@ public class ExecuteRegionFunctionNoAckOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new Message(1, Version.CURRENT);
+      return new Message(1, KnownVersion.CURRENT);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java
index c40df1c..043d9f3 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -505,7 +505,7 @@ public class ExecuteRegionFunctionOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java
index 712d629..5fc6ebe 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java
@@ -49,7 +49,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -433,7 +433,7 @@ public class ExecuteRegionFunctionSingleHopOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java
index b15d8ba..8a97ba5 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java
@@ -33,7 +33,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -181,7 +181,7 @@ public class GetAllOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java
index dee67b1..30af1c9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java
@@ -24,7 +24,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Does a region keySet on a server
@@ -59,7 +59,7 @@ public class KeySetOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java
index b86b517..99094ec 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java
@@ -24,7 +24,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class ProxyCacheCloseOp {
 
@@ -53,7 +53,7 @@ public class ProxyCacheCloseOp {
 
     @Override
     protected void sendMessage(Connection cnx) throws Exception {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       byte[] secureBytes = null;
       hdos.writeLong(cnx.getConnectionID());
       Object userId = UserAttributes.userAttributes.get().getServerToId().get(cnx.getServer());
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java
index d67d27c..7f9435f 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -319,7 +319,7 @@ public class PutAllOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(2, Version.CURRENT);
+      return new ChunkedMessage(2, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java
index 2344acc..0a37be0 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java
@@ -30,7 +30,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.ObjectPartList;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Does a region query on a server
@@ -98,7 +98,7 @@ public class QueryOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(2, Version.CURRENT);
+      return new ChunkedMessage(2, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java
index 9352fe2..ac7d682 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Does a region registerInterest on a server
@@ -149,7 +149,7 @@ public class RegisterInterestOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java
index c653e1c..f66b944 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java
@@ -39,7 +39,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -274,7 +274,7 @@ public class RemoveAllOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(2, Version.CURRENT);
+      return new ChunkedMessage(2, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java
index 3686365..f9d8747 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java
@@ -21,8 +21,8 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public abstract class ServerLocationRequest implements DataSerializableFixedID {
 
@@ -55,7 +55,7 @@ public abstract class ServerLocationRequest implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
index 47bc3d7..a6d8361 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
@@ -15,13 +15,13 @@
 package org.apache.geode.cache.client.internal.locator;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public abstract class ServerLocationResponse implements DataSerializableFixedID {
   public abstract boolean hasResult();
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java
index f728838..122c947 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java
@@ -21,8 +21,8 @@ import java.io.IOException;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 
 /**
@@ -111,7 +111,7 @@ public class CqEntry implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java
index ad49dc1..ad3aa09 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java
@@ -38,8 +38,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This is used as a wrapper over all the results of PR which are of non distinct type
@@ -273,7 +273,7 @@ public class CumulativeNonDistinctResults<E> implements SelectResults<E>, DataSe
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java
index 1957709..e4a89e9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java
@@ -33,8 +33,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class LinkedResultSet extends java.util.LinkedHashSet
     implements Ordered, SelectResults, DataSerializableFixedID {
@@ -139,7 +139,7 @@ public class LinkedResultSet extends java.util.LinkedHashSet
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java
index 1ab19e4..bb54527 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java
@@ -32,8 +32,8 @@ import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class LinkedStructSet extends LinkedHashSet<Struct>
     implements SelectResults<Struct>, Ordered, DataSerializableFixedID {
@@ -199,7 +199,7 @@ public class LinkedStructSet extends LinkedHashSet<Struct>
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java
index 8aa010a..bb146f5 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java
@@ -39,8 +39,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * The n - way merge results returns a sorted results on the cumulative sorted results for
@@ -433,7 +433,7 @@ public class NWayMergeResults<E> implements SelectResults<E>, Ordered, DataSeria
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java
index a5bd171..fe007c1 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java
@@ -22,8 +22,8 @@ import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.cache.query.internal.index.IndexManager;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A Token representing null.
@@ -76,7 +76,7 @@ public class NullToken implements DataSerializableFixedID, Comparable {
       DeserializationContext context) throws IOException, ClassNotFoundException {}
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java
index 8e95219..fd7e501 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java
@@ -25,8 +25,8 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 
 public class PRQueryTraceInfo implements DataSerializableFixedID {
@@ -57,7 +57,7 @@ public class PRQueryTraceInfo implements DataSerializableFixedID {
 
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java
index a529ec6..830091f 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java
@@ -26,8 +26,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.cache.CachePerfStats;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ResultsBag extends Bag implements DataSerializableFixedID {
 
@@ -194,7 +194,7 @@ public class ResultsBag extends Bag implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java
index 9dedff7..e910f06 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java
@@ -39,8 +39,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.EntriesSet;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of SelectResults that wraps an existing java.util.Collection and optionally adds a
@@ -656,7 +656,7 @@ public class ResultsCollectionWrapper implements SelectResults, DataSerializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java
index f672a1f..cd4ba07 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java
@@ -35,8 +35,8 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 // @todo probably should assert element type when elements added
 /**
@@ -165,7 +165,7 @@ public class ResultsSet extends HashSet implements SelectResults, DataSerializab
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java
index a9445b7..14ef1fa 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java
@@ -33,8 +33,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of SelectResults that extends TreeSet This is the sorted version of ResultSet used
@@ -147,7 +147,7 @@ public class SortedResultSet extends TreeSet
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java
index cf3005a..726bdbd 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java
@@ -34,8 +34,8 @@ import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A TreeSet constrained to contain Structs of all the same type. To conserve on objects, we store
@@ -395,7 +395,7 @@ public class SortedStructSet extends TreeSet
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java
index b1919c0..ca70400 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java
@@ -28,8 +28,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.internal.PdxString;
 
@@ -191,7 +191,7 @@ public class StructImpl implements Struct, DataSerializableFixedID, Serializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java
index cdbe064..0ec66c4 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java
@@ -37,8 +37,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A Set constrained to contain Structs of all the same type. To conserve on objects, we store the
@@ -477,7 +477,7 @@ public class StructSet /* extends ObjectOpenCustomHashSet */ implements Set, Sel
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java
index 4f5e75b..26c2df5 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java
@@ -23,8 +23,8 @@ import java.io.Serializable;
 import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * An UNDEFINED value is the result of accessing an attribute of a null-valued attribute. If you
@@ -92,7 +92,7 @@ public class Undefined implements DataSerializableFixedID, Comparable, Serializa
 
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java
index c3bf259..759b7f3 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java
@@ -26,8 +26,8 @@ import java.io.IOException;
 import org.apache.geode.cache.query.IndexType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  *
@@ -105,7 +105,7 @@ public class IndexCreationData implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java
index 3c0a308..9fd9ba0 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java
@@ -24,8 +24,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of ObjectType
@@ -122,7 +122,7 @@ public class ObjectTypeImpl implements ObjectType, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
index 1f58344..1cf97ca 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
@@ -80,7 +80,7 @@ import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.internal.sequencelog.MembershipLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ConnectionTable;
 import org.apache.geode.internal.tcp.ReenteredConnectException;
 import org.apache.geode.logging.internal.OSProcess;
@@ -1542,13 +1542,13 @@ public class ClusterDistributionManager implements DistributionManager {
 
   @Override
   public void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     members.removeIf(id -> id.getVersionOrdinalObject().compareTo(version) < 0);
   }
 
   @Override
   public void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     members.removeIf(id -> id.getVersionOrdinalObject().compareTo(version) >= 0);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java
index c13abcc..c17505f 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java
@@ -53,8 +53,8 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -1572,7 +1572,7 @@ public class DistributionAdvisor {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
index d63391c..c6713a3 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
@@ -69,8 +69,8 @@ import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.tcp.ConnectExceptions;
 import org.apache.geode.internal.tcp.ConnectionException;
 import org.apache.geode.internal.util.Breadcrumbs;
@@ -873,7 +873,7 @@ public class DistributionImpl implements Distribution {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java
index 2648796..f2ab9dd 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java
@@ -31,7 +31,7 @@ import org.apache.geode.distributed.internal.locks.ElderState;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * This interface defines the services provided by any class that is a distribution manager.
@@ -71,7 +71,7 @@ public interface DistributionManager extends ReplySender {
    * @since GemFire 8.0
    */
   void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version);
+      KnownVersion version);
 
   /**
    * removes members that have the given version or later from the given collection, typically a Set
@@ -80,7 +80,7 @@ public interface DistributionManager extends ReplySender {
    * @since GemFire 8.0
    */
   void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version);
+      KnownVersion version);
 
   /**
    * Returns an unmodifiable set containing the identities of all of the known distribution
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java
index 0f11b6b..a6a5528 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java
@@ -38,8 +38,8 @@ import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.sequencelog.MessageLogger;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.tcp.Connection;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -700,7 +700,7 @@ public abstract class DistributionMessage
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
index 114a0e1..5e8e3ed 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
@@ -52,7 +52,7 @@ import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.internal.monitoring.ThreadsMonitoringImpl;
 import org.apache.geode.internal.monitoring.ThreadsMonitoringImplDummy;
 import org.apache.geode.internal.net.SocketCreator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 
 /**
@@ -186,7 +186,7 @@ public class LonerDistributionManager implements DistributionManager {
 
   @Override // DM method
   public void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext();) {
       InternalDistributedMember id = it.next();
       if (id.getVersionOrdinalObject().compareTo(version) < 0) {
@@ -197,7 +197,7 @@ public class LonerDistributionManager implements DistributionManager {
 
   @Override // DM method
   public void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext();) {
       InternalDistributedMember id = it.next();
       if (id.getVersionOrdinalObject().compareTo(version) >= 0) {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
index ee5fcb4..af86e5f 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
@@ -37,8 +37,8 @@ import org.apache.geode.internal.InternalInstantiator.InstantiatorAttributesHold
 import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
@@ -321,7 +321,7 @@ public class StartupMessage extends DistributionMessage implements AdminMessageT
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
index 6b6607f..cb97b2c 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
@@ -30,8 +30,8 @@ import org.apache.geode.internal.InternalInstantiator;
 import org.apache.geode.internal.InternalInstantiator.InstantiatorAttributesHolder;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -203,7 +203,7 @@ public class StartupResponseMessage extends DistributionMessage
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java
index 72d28ff..bf2ce25 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java
@@ -25,8 +25,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -79,7 +79,7 @@ public class StartupResponseWithVersionMessage extends StartupResponseMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java
index 9bfa90a..11c4698 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java
@@ -24,8 +24,8 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Represents a held lock in a member for use when initializing a new grantor. All currently held
@@ -217,7 +217,7 @@ public class DLockRemoteToken implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java
index 724bb2b..6dde3a1 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java
@@ -56,8 +56,8 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.StopWatch;
 import org.apache.geode.internal.util.concurrent.FutureResult;
 import org.apache.geode.logging.internal.OSProcess;
@@ -3003,7 +3003,7 @@ public class DLockService extends DistributedLockService {
         SerializationContext context) {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index 4e7432d..30fb45e 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -47,8 +47,8 @@ import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionOrdinal;
 import org.apache.geode.logging.internal.OSProcess;
 
@@ -545,7 +545,7 @@ public class InternalDistributedMember
     return memberIdentifier.getUniqueId();
   }
 
-  public void setVersionObjectForTest(Version v) {
+  public void setVersionObjectForTest(KnownVersion v) {
     memberIdentifier.setVersionObjectForTest(v);
   }
 
@@ -555,7 +555,7 @@ public class InternalDistributedMember
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return memberIdentifier.getSerializationVersions();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
index e6ac0ba..0ee9323 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
@@ -57,9 +57,9 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator;
 import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -297,7 +297,8 @@ public abstract class StreamingOperation {
       int chunkSize = socketBufferSize - MSG_OVERHEAD;
       HeapDataOutputStream outStream =
           new HeapDataOutputStream(chunkSize, Versioning
-              .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(),
+                  KnownVersion.CURRENT));
       boolean sentFinalMessage = false;
       boolean receiverCacheClosed = false;
       int msgNum = 0;
@@ -514,8 +515,8 @@ public abstract class StreamingOperation {
       this.msgNum = in.readInt();
       this.lastMsg = in.readBoolean();
       this.pdxReadSerialized = in.readBoolean();
-      Version senderVersion = StaticSerialization.getVersionForDataStream(in);
-      boolean isSenderAbove_8_1 = senderVersion.isNewerThan(Version.GFE_81);
+      KnownVersion senderVersion = StaticSerialization.getVersionForDataStream(in);
+      boolean isSenderAbove_8_1 = senderVersion.isNewerThan(KnownVersion.GFE_81);
       InternalCache cache = null;
       Boolean initialPdxReadSerialized = false;
       try {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java b/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
index 6973dd6..bd613db 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
@@ -404,8 +404,8 @@ import org.apache.geode.internal.cache.wan.serial.BatchDestroyOperation;
 import org.apache.geode.internal.serialization.DSFIDSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfile;
 import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfileMessage;
 import org.apache.geode.management.internal.JmxManagerLocatorRequest;
@@ -451,7 +451,7 @@ public class DSFIDFactory implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     throw new UnsupportedOperationException();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java b/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
index 43e24ca..74e5b94 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
@@ -23,8 +23,8 @@ import java.nio.channels.SocketChannel;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 
 /**
@@ -48,7 +48,7 @@ public class HeapDataOutputStream extends
     org.apache.geode.internal.serialization.BufferDataOutputStream
     implements ObjToByteArraySerializer, ByteBufferWriter {
 
-  public HeapDataOutputStream(Version version) {
+  public HeapDataOutputStream(KnownVersion version) {
     this(INITIAL_CAPACITY, version);
   }
 
@@ -60,7 +60,7 @@ public class HeapDataOutputStream extends
     super(s);
   }
 
-  public HeapDataOutputStream(int allocSize, Version version) {
+  public HeapDataOutputStream(int allocSize, KnownVersion version) {
     this(allocSize, version, false);
   }
 
@@ -72,7 +72,7 @@ public class HeapDataOutputStream extends
    * @param doNotCopy if true then byte arrays/buffers/sources will not be copied to this hdos but
    *        instead referenced.
    */
-  public HeapDataOutputStream(int allocSize, Version version, boolean doNotCopy) {
+  public HeapDataOutputStream(int allocSize, KnownVersion version, boolean doNotCopy) {
     super(allocSize, version, doNotCopy);
   }
 
@@ -80,7 +80,7 @@ public class HeapDataOutputStream extends
    * @param doNotCopy if true then byte arrays/buffers/sources will not be copied to this hdos but
    *        instead referenced.
    */
-  public HeapDataOutputStream(ByteBuffer initialBuffer, Version version, boolean doNotCopy) {
+  public HeapDataOutputStream(ByteBuffer initialBuffer, KnownVersion version, boolean doNotCopy) {
     super(initialBuffer, version, doNotCopy);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
index 733f72b..ce02e96 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
@@ -113,12 +113,12 @@ import org.apache.geode.internal.serialization.DSFIDSerializerFactory;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.DscodeHelper;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.ObjectDeserializer;
 import org.apache.geode.internal.serialization.ObjectSerializer;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -352,9 +352,9 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
     if (out instanceof VersionedDataStream) {
       VersionedDataStream vout = (VersionedDataStream) out;
-      Version version = vout.getVersion();
+      KnownVersion version = vout.getVersion();
       if (null != version) {
-        if (version.isOlderThan(Version.GEODE_1_9_0)) {
+        if (version.isOlderThan(KnownVersion.GEODE_1_9_0)) {
           if (name.equals(POST_GEODE_190_SERVER_CQIMPL)) {
             return PRE_GEODE_190_SERVER_CQIMPL;
           }
@@ -2181,8 +2181,8 @@ public abstract class InternalDataSerializer extends DataSerializer {
       try {
         ObjectOutput oos = new ObjectOutputStream(stream);
         if (stream instanceof VersionedDataStream) {
-          Version v = ((VersionedDataStream) stream).getVersion();
-          if (v != null && v != Version.CURRENT) {
+          KnownVersion v = ((VersionedDataStream) stream).getVersion();
+          if (v != null && v != KnownVersion.CURRENT) {
             oos = new VersionedObjectOutput(oos, v);
           }
         }
@@ -2214,11 +2214,11 @@ public abstract class InternalDataSerializer extends DataSerializer {
         return;
       }
       boolean invoked = false;
-      Version v = StaticSerialization.getVersionForDataStreamOrNull(out);
+      KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(out);
 
-      if (Version.CURRENT != v && v != null) {
+      if (KnownVersion.CURRENT != v && v != null) {
         // get versions where DataOutput was upgraded
-        Version[] versions = null;
+        KnownVersion[] versions = null;
         if (serializableObject instanceof SerializationVersions) {
           SerializationVersions sv = (SerializationVersions) serializableObject;
           versions = sv.getSerializationVersions();
@@ -2226,7 +2226,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
         // check if the version of the peer or diskstore is different and
         // there has been a change in the message
         if (versions != null) {
-          for (Version version : versions) {
+          for (KnownVersion version : versions) {
             // if peer version is less than the greatest upgraded version
             if (v.compareTo(version) < 0) {
               serializableObject.getClass().getMethod("toDataPre_" + version.getMethodSuffix(),
@@ -2283,10 +2283,10 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
     try {
       boolean invoked = false;
-      Version v = StaticSerialization.getVersionForDataStreamOrNull(in);
-      if (Version.CURRENT != v && v != null) {
+      KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(in);
+      if (KnownVersion.CURRENT != v && v != null) {
         // get versions where DataOutput was upgraded
-        Version[] versions = null;
+        KnownVersion[] versions = null;
         if (deserializableObject instanceof SerializationVersions) {
           SerializationVersions vds = (SerializationVersions) deserializableObject;
           versions = vds.getSerializationVersions();
@@ -2294,7 +2294,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
         // check if the version of the peer or diskstore is different and
         // there has been a change in the message
         if (versions != null) {
-          for (Version version : versions) {
+          for (KnownVersion version : versions) {
             // if peer version is less than the greatest upgraded version
             if (v.compareTo(version) < 0) {
               deserializableObject.getClass()
@@ -2682,8 +2682,8 @@ public abstract class InternalDataSerializer extends DataSerializer {
       ObjectInput ois = new DSObjectInputStream(stream);
       serializationFilter.setFilterOn((ObjectInputStream) ois);
       if (stream instanceof VersionedDataStream) {
-        Version v = ((VersionedDataStream) stream).getVersion();
-        if (Version.CURRENT != v && v != null) {
+        KnownVersion v = ((VersionedDataStream) stream).getVersion();
+        if (KnownVersion.CURRENT != v && v != null) {
           ois = new VersionedObjectInput(ois, v);
         }
       }
@@ -3096,7 +3096,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
   /* test only method */
   public static int calculateBytesForTSandDSID(int dsid) {
-    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8, Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8, KnownVersion.CURRENT);
     long now = System.currentTimeMillis();
     try {
       writeUnsignedVL(now, out);
@@ -3383,7 +3383,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
      * The versions in which this message was modified
      */
     @Immutable
-    private static final Version[] dsfidVersions = new Version[] {};
+    private static final KnownVersion[] dsfidVersions = new KnownVersion[] {};
     /**
      * The eventId of the {@code DataSerializer} that was registered
      */
@@ -3506,7 +3506,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
index 0f8e1d1..2ceec56 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
@@ -18,7 +18,7 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectInput;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -30,7 +30,7 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
 public class VersionedObjectInput implements ObjectInput, VersionedDataStream {
 
   private final ObjectInput in;
-  private final Version version;
+  private final KnownVersion version;
 
   /**
    * Creates a VersionedObjectInput that wraps the specified underlying ObjectInput.
@@ -38,7 +38,7 @@ public class VersionedObjectInput implements ObjectInput, VersionedDataStream {
    * @param in the specified {@link ObjectInput}
    * @param version the product version that serialized object on the given {@link ObjectInput}
    */
-  public VersionedObjectInput(ObjectInput in, Version version) {
+  public VersionedObjectInput(ObjectInput in, KnownVersion version) {
     this.in = in;
     this.version = version;
   }
@@ -47,7 +47,7 @@ public class VersionedObjectInput implements ObjectInput, VersionedDataStream {
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
index 6dccb75..67bae0a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
@@ -18,7 +18,7 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectOutput;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -30,7 +30,7 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
 public class VersionedObjectOutput implements ObjectOutput, VersionedDataStream {
 
   private final ObjectOutput out;
-  private final Version version;
+  private final KnownVersion version;
 
   /**
    * Creates a VersionedObjectOutput that wraps the specified underlying ObjectOutput.
@@ -38,9 +38,9 @@ public class VersionedObjectOutput implements ObjectOutput, VersionedDataStream
    * @param out the underlying {@link ObjectOutput}
    * @param version the product version that serialized object on the given {@link ObjectOutput}
    */
-  public VersionedObjectOutput(ObjectOutput out, Version version) {
-    if (version.isNewerThan(Version.CURRENT)) {
-      Assert.fail("unexpected version: " + version + ", CURRENT: " + Version.CURRENT);
+  public VersionedObjectOutput(ObjectOutput out, KnownVersion version) {
+    if (version.isNewerThan(KnownVersion.CURRENT)) {
+      Assert.fail("unexpected version: " + version + ", CURRENT: " + KnownVersion.CURRENT);
     }
     this.out = out;
     this.version = version;
@@ -50,7 +50,7 @@ public class VersionedObjectOutput implements ObjectOutput, VersionedDataStream
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java
index fa8ca5f..edfef14 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java
@@ -27,8 +27,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Bean class act as container for client stats
@@ -95,8 +95,8 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
 
   /** The versions in which this message was modified */
   @Immutable
-  private static final Version[] dsfidVersions =
-      new Version[] {Version.GFE_80, Version.GEODE_1_9_0};
+  private static final KnownVersion[] dsfidVersions =
+      new KnownVersion[] {KnownVersion.GFE_80, KnownVersion.GEODE_1_9_0};
 
   public ClientHealthStats() {}
 
@@ -319,7 +319,7 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return dsfidVersions;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java
index 7858c9d..bd2c853 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java
@@ -23,8 +23,8 @@ import org.apache.geode.internal.admin.StatAlert;
 import org.apache.geode.internal.admin.StatAlertDefinition;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as data range
@@ -142,7 +142,7 @@ public class GaugeThresholdDecoratorImpl extends BaseDecoratorImpl
   public static final String ID = "GaugeThreshold";
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java
index a849581..a22472e 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java
@@ -24,8 +24,8 @@ import org.apache.geode.internal.admin.StatAlert;
 import org.apache.geode.internal.admin.StatAlertDefinition;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as number
@@ -143,7 +143,7 @@ public class NumberThresholdDecoratorImpl extends BaseDecoratorImpl
   public static final String ID = "NumberThreshold";
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
index 972c652..03a0856 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
@@ -39,8 +39,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -344,7 +344,7 @@ public abstract class AbstractUpdateOperation extends DistributedCacheOperation
 
         String msg =
             String.format("memberID cannot be null for persistent regions: %s", tag);
-        RuntimeException ex = (sender.getVersionOrdinalObject().isOlderThan(Version.GFE_80))
+        RuntimeException ex = (sender.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80))
             ? new InternalGemFireException(msg) : new InvalidVersionException(msg);
         throw ex;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
index d91786f..0136de6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
@@ -90,7 +90,7 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -1851,7 +1851,7 @@ public class BucketRegion extends DistributedRegion implements Bucket {
       if (instance instanceof org.apache.geode.Delta
           && ((org.apache.geode.Delta) instance).hasDelta()) {
         try {
-          HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
           long start = DistributionStats.getStatTime();
           ((org.apache.geode.Delta) instance).toDelta(hdos);
           event.setDeltaBytes(hdos.toByteArray());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java
index da743f8..6d54475 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java
@@ -38,8 +38,8 @@ import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor.PartitionProfile;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -217,8 +217,8 @@ public class DestroyPartitionedRegionMessage extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_9_0};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_9_0};
   }
 
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java
index 4b31bc2..82ccaa1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java
@@ -78,7 +78,7 @@ import org.apache.geode.internal.cache.versions.DiskRegionVersionVector;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
 import org.apache.geode.internal.cache.versions.RegionVersionVector;
 import org.apache.geode.internal.logging.log4j.LogMarker;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -357,7 +357,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
   private int ifTotalRecordCount = 0;
   private boolean compactInProgress;
   // the recovered version
-  private Version gfversion;
+  private KnownVersion gfversion;
 
 
   /**
@@ -416,7 +416,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
     return this.parent;
   }
 
-  public Version currentRecoveredGFVersion() {
+  public KnownVersion currentRecoveredGFVersion() {
     return this.gfversion;
   }
 
@@ -568,7 +568,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       // We don't want gateway queues to turn on versioning. Unfortunately, the only
       // way to indentify that a region is a gateway queue is by the region
       // name.
-      if (Version.GFE_80.compareTo(currentRecoveredGFVersion()) > 0
+      if (KnownVersion.GFE_80.compareTo(currentRecoveredGFVersion()) > 0
           && !dr.getName().contains("_SERIAL_GATEWAY_SENDER_QUEUE")
           && !dr.getName().contains("_PARALLEL__GATEWAY__SENDER__QUEUE")) {
         flags.add(DiskRegionFlag.IS_WITH_VERSIONING);
@@ -604,7 +604,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
   }
 
   @Override
-  public void cmnGemfireVersion(Version version) {
+  public void cmnGemfireVersion(KnownVersion version) {
     this.gfversion = version;
   }
 
@@ -673,7 +673,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
     DiskRegionView dr = getDiskRegionById(drId);
     if (dr != null) {
       if (this.parent.upgradeVersionOnly
-          && Version.GFE_70.compareTo(currentRecoveredGFVersion()) > 0) {
+          && KnownVersion.GFE_70.compareTo(currentRecoveredGFVersion()) > 0) {
         dr.addOnlineMember(pmid);
         if (dr.rmOfflineMember(pmid)) {
           this.ifLiveRecordCount--;
@@ -1002,7 +1002,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       if (hdosSize < 32) {
         hdosSize = 32;
       }
-      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, KnownVersion.CURRENT);
       hdos.write(b);
       writeDiskRegionID(hdos, dr.getId());
       hdos.writeUTF(s);
@@ -1026,7 +1026,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       if (hdosSize < 32) {
         hdosSize = 32;
       }
-      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, KnownVersion.CURRENT);
       hdos.write(b);
       writeDiskRegionID(hdos, regionId);
       hdos.writeUTF(fileName);
@@ -1053,7 +1053,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       if (hdosSize < 32) {
         hdosSize = 32;
       }
-      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, KnownVersion.CURRENT);
       hdos.write(b);
       writeDiskRegionID(hdos, regionId);
       hdos.writeUTF(fileName);
@@ -1365,7 +1365,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private void saveGemfireVersion() {
     if (this.gfversion == null) {
-      this.gfversion = Version.CURRENT;
+      this.gfversion = KnownVersion.CURRENT;
     }
     writeGemfireVersion(this.gfversion);
   }
@@ -1695,7 +1695,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private void writeRevokedMember(PersistentMemberPattern revoked) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
       hdos.write(IFREC_REVOKE_DISK_STORE_ID);
       InternalDataSerializer.invokeToData(revoked, hdos);
       hdos.write(END_OF_RECORD_ID);
@@ -1717,7 +1717,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       int comprLen = estimateByteSize(drv.getCompressorClassName());
       HeapDataOutputStream bb = new HeapDataOutputStream(
           1 + DR_ID_MAX_BYTES + 1 + 1 + 4 + 4 + 4 + 1 + 1 + 4 + len + 4 + 1 + 1 + 1,
-          Version.CURRENT);
+          KnownVersion.CURRENT);
       bb.write(IFREC_REGION_CONFIG_ID_90);
       writeDiskRegionID(bb, drv.getId());
       bb.write(drv.getLruAlgorithm());
@@ -1755,7 +1755,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       colocatedWith = colocatedWith == null ? "" : colocatedWith;
       int colocatedLength = estimateByteSize(colocatedWith);
       HeapDataOutputStream hdos =
-          new HeapDataOutputStream(1 + nameLength + 4 + colocatedLength + 1, Version.CURRENT);
+          new HeapDataOutputStream(1 + nameLength + 4 + colocatedLength + 1, KnownVersion.CURRENT);
       hdos.write(IFREC_PR_CREATE);
       hdos.writeUTF(name);
       hdos.writeInt(config.getTotalNumBuckets());
@@ -1776,7 +1776,8 @@ public class DiskInitFile implements DiskInitFileInterpreter {
   private void writePRDestroy(String name) {
     try {
       int nameLength = estimateByteSize(name);
-      HeapDataOutputStream hdos = new HeapDataOutputStream(1 + nameLength + 4 + 1, Version.CURRENT);
+      HeapDataOutputStream hdos =
+          new HeapDataOutputStream(1 + nameLength + 4 + 1, KnownVersion.CURRENT);
       hdos.write(IFREC_PR_DESTROY);
       hdos.writeUTF(name);
       hdos.write(END_OF_RECORD_ID);
@@ -1794,7 +1795,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private void writeCanonicalId(int id, Object object) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
       hdos.write(IFREC_ADD_CANONICAL_MEMBER_ID);
       hdos.writeInt(id);
       DataSerializer.writeObject(object, hdos);
@@ -1851,7 +1852,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private byte[] pmidToBytes(PersistentMemberID id) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       InternalDataSerializer.invokeToData(id, hdos);
       return hdos.toByteArray();
     } catch (IOException ex) {
@@ -2000,7 +2001,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
    */
   private void writeClearRecord(DiskRegionView dr, RegionVersionVector rvv) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
       hdos.write(IFREC_CLEAR_REGION_WITH_RVV_ID);
       writeDiskRegionID(hdos, dr.getId());
       // We only need the memberToVersionMap for clear purposes
@@ -2790,7 +2791,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
     return message;
   }
 
-  private void writeGemfireVersion(Version version) {
+  private void writeGemfireVersion(KnownVersion version) {
     lock(true);
     try {
       ByteBuffer bb = getIFWriteBuffer(1 + 3 + 1);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
index ec8bd6b..bb05e96 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
@@ -114,7 +114,7 @@ import org.apache.geode.internal.cache.versions.RegionVersionVector;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 import org.apache.geode.logging.internal.executors.LoggingThread;
@@ -1914,7 +1914,7 @@ public class DiskStoreImpl implements DiskStore {
 
   private String getRecoveredGFVersionName() {
     String currentVersionStr = "GFE pre-7.0";
-    Version version = getRecoveredGFVersion();
+    KnownVersion version = getRecoveredGFVersion();
     if (version != null) {
       currentVersionStr = version.toString();
     }
@@ -1964,7 +1964,7 @@ public class DiskStoreImpl implements DiskStore {
         this.initFile =
             new DiskInitFile(partialFileName, this, ifRequired, persistentBackupFiles.keySet());
         if (this.upgradeVersionOnly) {
-          if (Version.CURRENT.compareTo(getRecoveredGFVersion()) <= 0) {
+          if (KnownVersion.CURRENT.compareTo(getRecoveredGFVersion()) <= 0) {
             if (getCache() != null) {
               getCache().close();
             }
@@ -1973,7 +1973,7 @@ public class DiskStoreImpl implements DiskStore {
                     getRecoveredGFVersionName()));
           }
         } else {
-          if (Version.GFE_70.compareTo(getRecoveredGFVersion()) > 0) {
+          if (KnownVersion.GFE_70.compareTo(getRecoveredGFVersion()) > 0) {
             // TODO: In each new version, need to modify the highest version
             // that needs converstion.
             if (getCache() != null) {
@@ -3644,7 +3644,8 @@ public class DiskStoreImpl implements DiskStore {
   public final boolean upgradeVersionOnly;
 
   boolean isUpgradeVersionOnly() {
-    return this.upgradeVersionOnly && Version.GFE_70.compareTo(this.getRecoveredGFVersion()) > 0;
+    return this.upgradeVersionOnly
+        && KnownVersion.GFE_70.compareTo(this.getRecoveredGFVersion()) > 0;
   }
 
   private final boolean offlineCompacting;
@@ -4695,11 +4696,11 @@ public class DiskStoreImpl implements DiskStore {
     oplogSet.updateDiskRegion(dr);
   }
 
-  public Version getRecoveredGFVersion() {
+  public KnownVersion getRecoveredGFVersion() {
     return getRecoveredGFVersion(this.initFile);
   }
 
-  Version getRecoveredGFVersion(DiskInitFile initFile) {
+  KnownVersion getRecoveredGFVersion(DiskInitFile initFile) {
     return initFile.currentRecoveredGFVersion();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java
index c029690..f2fd1af 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java
@@ -51,8 +51,8 @@ import org.apache.geode.internal.cache.tx.DistTxEntryEvent;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class DistTXPrecommitMessage extends TXMessage {
@@ -481,7 +481,7 @@ public class DistTXPrecommitMessage extends TXMessage {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java
index b601730..d9fa0b4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java
@@ -26,8 +26,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.tier.sockets.ClientHealthMonitor;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class DistributedPingMessage extends HighPriorityDistributionMessage {
 
@@ -70,7 +70,7 @@ public class DistributedPingMessage extends HighPriorityDistributionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java
index 8895e84..9a9737e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java
@@ -59,9 +59,9 @@ import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -779,7 +779,7 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -1210,7 +1210,7 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
       this.putAllDataSize = (int) InternalDataSerializer.readUnsignedVL(in);
       this.putAllData = new PutAllEntryData[this.putAllDataSize];
       if (this.putAllDataSize > 0) {
-        final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+        final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
         final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
         for (int i = 0; i < this.putAllDataSize; i++) {
           this.putAllData[i] = new PutAllEntryData(in, context, eventId, i);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java
index acaea24..9e59d6d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java
@@ -35,9 +35,9 @@ import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
-import org.apache.geode.internal.serialization.Version;
 
 public class DistributedTombstoneOperation extends DistributedCacheOperation {
   private enum TOperation {
@@ -129,7 +129,7 @@ public class DistributedTombstoneOperation extends DistributedCacheOperation {
     protected EventID eventID;
 
     @Immutable
-    private static final Version[] serializationVersions = null; // new Version[]{ };
+    private static final KnownVersion[] serializationVersions = null; // new Version[]{ };
 
     /**
      * for deserialization
@@ -179,7 +179,7 @@ public class DistributedTombstoneOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return serializationVersions;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java
index 4168541..4e48bd6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java
@@ -77,8 +77,8 @@ import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.internal.util.BlobHelper;
@@ -2032,7 +2032,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
     return deserialize(bytes, null, null);
   }
 
-  public static Object deserialize(byte[] bytes, Version version, ByteArrayDataInput in) {
+  public static Object deserialize(byte[] bytes, KnownVersion version, ByteArrayDataInput in) {
     if (bytes == null)
       return null;
     try {
@@ -2084,7 +2084,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
    *
    * @throws IllegalArgumentException If <code>obj</code> should not be serialized
    */
-  public static byte[] serialize(Object obj, Version version) {
+  public static byte[] serialize(Object obj, KnownVersion version) {
     if (obj == null || obj == Token.NOT_AVAILABLE || Token.isInvalidOrRemoved(obj))
       throw new IllegalArgumentException(
           String.format("Must not serialize %s in this context.",
@@ -2117,7 +2117,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
     try {
       HeapDataOutputStream hdos = null;
       if (wrapper.getBytes().length < 32) {
-        hdos = new HeapDataOutputStream(Version.CURRENT);
+        hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       } else {
         hdos = new HeapDataOutputStream(wrapper.getBytes());
       }
@@ -2610,7 +2610,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java
index c6ccd12..8430baa 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java
@@ -43,9 +43,9 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -87,7 +87,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
 
   /** The versions in which this message was modified */
   @Immutable
-  private static final Version[] dsfidVersions = new Version[] {Version.GFE_80};
+  private static final KnownVersion[] dsfidVersions = new KnownVersion[] {KnownVersion.GFE_80};
 
 
   private static final ThreadLocal threadIDLocal = new ThreadLocal() {
@@ -300,7 +300,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
    * @return the member that initiated this event
    */
   public InternalDistributedMember getDistributedMember() {
-    return getDistributedMember(Version.CURRENT);
+    return getDistributedMember(KnownVersion.CURRENT);
   }
 
   /**
@@ -309,12 +309,12 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
    * memberID bytes and use that version to deserialize the bytes. Clients prior to 1.1.0 need to
    * have UUID bytes in the memberID. Newer clients don't require this.
    */
-  public InternalDistributedMember getDistributedMember(Version targetVersion) {
-    Version disVersion = null;
-    if (targetVersion.isOlderThan(Version.GEODE_1_1_0)) {
+  public InternalDistributedMember getDistributedMember(KnownVersion targetVersion) {
+    KnownVersion disVersion = null;
+    if (targetVersion.isOlderThan(KnownVersion.GEODE_1_1_0)) {
       // GEODE-3153: clients expect to receive UUID bytes, which are only
       // read if the stream's version is 1.0.0-incubating
-      disVersion = Version.GFE_90;
+      disVersion = KnownVersion.GFE_90;
     }
     ByteArrayDataInput dis =
         new ByteArrayDataInput(membershipID, disVersion);
@@ -351,16 +351,16 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
   @Override
   public void toData(DataOutput dop,
       SerializationContext context) throws IOException {
-    Version version = StaticSerialization.getVersionForDataStream(dop);
+    KnownVersion version = StaticSerialization.getVersionForDataStream(dop);
     // if we are sending to old clients we need to reserialize the ID
     // using the client's version to ensure it gets the proper on-wire form
     // of the identifier
     // See GEODE-3072
-    if (membershipID != null && version.isOlderThan(Version.GEODE_1_1_0)) {
-      InternalDistributedMember member = getDistributedMember(Version.GFE_90);
+    if (membershipID != null && version.isOlderThan(KnownVersion.GEODE_1_1_0)) {
+      InternalDistributedMember member = getDistributedMember(KnownVersion.GFE_90);
       // reserialize with the client's version so that we write the UUID
       // bytes
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.GFE_90);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.GFE_90);
       member.writeEssentialData(hdos);
       DataSerializer.writeByteArray(hdos.toByteArray(), dop);
     } else {
@@ -573,7 +573,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
       // DS already exists... make sure it's for current DS connection
       EventID.systemMemberId = sys.getDistributedMember();
       try {
-        HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
         ((InternalDistributedMember) EventID.systemMemberId).writeEssentialData(hdos);
         client_side_event_identity = hdos.toByteArray();
       } catch (IOException ioe) {
@@ -836,7 +836,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return dsfidVersions;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
index 3ffb3fa..955a4b2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
@@ -26,8 +26,8 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ExpireDisconnectedClientTransactionsMessage
     extends HighPriorityDistributionMessage {
@@ -47,7 +47,7 @@ public class ExpireDisconnectedClientTransactionsMessage
     Set newVersionRecipients = new HashSet();
     for (InternalDistributedMember recipient : recipients) {
       // to geode 1.7.0 and later version servers
-      if (recipient.getVersionOrdinalObject().isNotOlderThan(Version.GEODE_1_7_0)) {
+      if (recipient.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
         newVersionRecipients.add(recipient);
       }
     }
@@ -78,7 +78,7 @@ public class ExpireDisconnectedClientTransactionsMessage
     InternalDistributedMember sender = getSender();
     if (cache != null) {
       TXManagerImpl mgr = cache.getTXMgr();
-      if (sender.getVersionOrdinalObject().isNotOlderThan(Version.GEODE_1_7_0)) {
+      if (sender.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
         // schedule to expire disconnected client transaction.
         mgr.expireDisconnectedClientTransactions(this.txIds, false);
       } else {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java
index 8cd6e12..5ad4ab6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java
@@ -76,8 +76,8 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -2265,7 +2265,7 @@ public class FilterProfile implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java
index 83e648e..c4be1b3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java
@@ -34,8 +34,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.ObjToByteArraySerializer;
 import org.apache.geode.internal.VersionedDataSerializable;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This class is used to hold the information about the servers and their Filters (CQs and Interest
@@ -49,7 +49,8 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
       Boolean.getBoolean("optimized-cq-serialization");
 
   @Immutable
-  private static final Version[] serializationVersions = new Version[] {Version.GFE_71};
+  private static final KnownVersion[] serializationVersions =
+      new KnownVersion[] {KnownVersion.GFE_71};
 
   /** Set to true if any peer members has any filters. */
   private boolean memberWithFilterInfoExists = false;
@@ -248,7 +249,7 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
@@ -320,7 +321,7 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
     private transient byte[] myData;
 
     /** version of creator of myData, needed for deserialization */
-    private transient Version myDataVersion;
+    private transient KnownVersion myDataVersion;
 
     /** Clients that are interested in the event and want values */
     private Set interestedClients;
@@ -361,10 +362,11 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
     }
 
     @Immutable
-    private static final Version[] serializationVersions = new Version[] {Version.GFE_80};
+    private static final KnownVersion[] serializationVersions =
+        new KnownVersion[] {KnownVersion.GFE_80};
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return serializationVersions;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index 40ecc50..3db5973 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -251,7 +251,7 @@ import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.security.SecurityServiceFactory;
 import org.apache.geode.internal.sequencelog.SequenceLoggerImpl;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.shared.StringPrintWriter;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.statistics.StatisticsClockFactory;
@@ -4399,7 +4399,8 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
     // This block prevents sending a message to old members that do not know about
     // the RemoveCacheServerProfileMessage
     otherMembers
-        .removeIf(member -> Version.GEODE_1_5_0.compareTo(member.getVersionOrdinalObject()) > 0);
+        .removeIf(
+            member -> KnownVersion.GEODE_1_5_0.compareTo(member.getVersionOrdinalObject()) > 0);
 
     if (!otherMembers.isEmpty()) {
       if (logger.isDebugEnabled()) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
index 789a1ea..9eca817 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
@@ -95,9 +95,9 @@ import org.apache.geode.internal.sequencelog.RegionLogger;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.executors.LoggingThread;
@@ -339,14 +339,14 @@ public class InitialImageOperation {
       final ClusterDistributionManager dm =
           (ClusterDistributionManager) this.region.getDistributionManager();
       boolean allowDeltaGII = true;
-      if (FORCE_FULL_GII || recipient.getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+      if (FORCE_FULL_GII || recipient.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
         allowDeltaGII = false;
       }
       Set keysOfUnfinishedOps = null;
       RegionVersionVector received_rvv = null;
       RegionVersionVector remote_rvv = null;
       if (this.region.getConcurrencyChecksEnabled()
-          && recipient.getVersionOrdinalObject().isNotOlderThan(Version.GFE_80)) {
+          && recipient.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GFE_80)) {
         if (internalBeforeRequestRVV != null
             && internalBeforeRequestRVV.getRegionName().equals(this.region.getName())) {
           internalBeforeRequestRVV.run();
@@ -747,7 +747,7 @@ public class InitialImageOperation {
           Set recipients = this.region.getCacheDistributionAdvisor().adviseReplicates();
           for (Iterator it = recipients.iterator(); it.hasNext();) {
             InternalDistributedMember mbr = (InternalDistributedMember) it.next();
-            if (mbr.getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+            if (mbr.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
               it.remove();
             }
           }
@@ -1191,7 +1191,7 @@ public class InitialImageOperation {
         region.recordEventState(msg.getSender(), msg.eventState);
       }
       if (msg.versionVector != null
-          && msg.getSender().getVersionOrdinalObject().isOlderThan(Version.GFE_80)
+          && msg.getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)
           && region.getConcurrencyChecksEnabled()) {
         // for older version, save received rvv from RegionStateMessage
         logger.debug("Applying version vector to {}: {}", region.getName(), msg.versionVector);
@@ -1586,7 +1586,7 @@ public class InitialImageOperation {
 
     /** The versions in which this message was modified */
     @Immutable
-    private static final Version[] dsfidVersions = null;
+    private static final KnownVersion[] dsfidVersions = null;
 
     @Override
     public int getProcessorId() {
@@ -1600,7 +1600,7 @@ public class InitialImageOperation {
     }
 
     public boolean goWithFullGII(DistributedRegion rgn, RegionVersionVector requesterRVV) {
-      if (getSender().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+      if (getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
         // pre-8.0 could not handle a delta-GII
         return true;
       }
@@ -1745,7 +1745,7 @@ public class InitialImageOperation {
             if (eventState != null && eventState.size() > 0) {
               RegionStateMessage.send(dm, getSender(), this.processorId, eventState, true);
             }
-          } else if (getSender().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+          } else if (getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
             // older versions of the product expect a RegionStateMessage at this point
             if (rgn.getConcurrencyChecksEnabled() && this.versionVector == null
                 && !recoveringForLostMember) {
@@ -1994,8 +1994,8 @@ public class InitialImageOperation {
           it = rgn.getBestIterator(includeValues);
         }
 
-        final Version knownVersion = Versioning
-            .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), Version.CURRENT);
+        final KnownVersion knownVersion = Versioning
+            .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), KnownVersion.CURRENT);
 
         do {
           flowControl.acquirePermit();
@@ -2167,7 +2167,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
 
@@ -2807,12 +2807,12 @@ public class InitialImageOperation {
      */
     private Map<VersionSource, Long> gcVersions;
 
-    /** the {@link Version} of the remote peer */
-    private transient Version remoteVersion;
+    /** the {@link KnownVersion} of the remote peer */
+    private transient KnownVersion remoteVersion;
 
     /** The versions in which this message was modified */
     @Immutable
-    private static final Version[] dsfidVersions = null;
+    private static final KnownVersion[] dsfidVersions = null;
 
     @Override
     public boolean getInlineProcess() {
@@ -2996,7 +2996,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
   }
@@ -3148,7 +3148,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
@@ -3442,7 +3442,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java
index 53035e3..1b16574 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java
@@ -26,8 +26,8 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.internal.cache.partitioned.PartitionMessage;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class InvalidatePartitionedRegionMessage extends PartitionMessage {
 
@@ -124,7 +124,7 @@ public class InvalidatePartitionedRegionMessage extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_9_0};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_9_0};
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java
index 545d99c..983a241 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java
@@ -20,7 +20,7 @@ import org.apache.geode.CancelException;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Operation that determines the latest last access time for a given region and key
@@ -40,7 +40,7 @@ public class LatestLastAccessTimeOperation<K> {
     final Set<InternalDistributedMember> recipients =
         this.region.getCacheDistributionAdvisor().adviseNetSearch();
     final DistributionManager dm = this.region.getDistributionManager();
-    dm.retainMembersWithSameOrNewerVersion(recipients, Version.GEODE_1_4_0);
+    dm.retainMembersWithSameOrNewerVersion(recipients, KnownVersion.GEODE_1_4_0);
     final LatestLastAccessTimeReplyProcessor replyProcessor =
         new LatestLastAccessTimeReplyProcessor(dm, recipients);
     dm.putOutgoing(
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
index 7753ad1..257fa23 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
@@ -213,7 +213,7 @@ import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.sequencelog.EntryLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.internal.util.concurrent.FutureResult;
@@ -1727,7 +1727,7 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory,
           extractDelta = true;
         }
         if (extractDelta && ((Delta) value).hasDelta()) {
-          HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
           long start = DistributionStats.getStatTime();
           try {
             ((Delta) value).toDelta(hdos);
@@ -10686,7 +10686,7 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory,
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java
index e2ee950..cf120f1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java
@@ -25,8 +25,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.ExternalizableDSFID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Stores information about a PartitionedRegion singleton instance running inside a virtual machine.
@@ -172,7 +172,7 @@ public class Node extends ExternalizableDSFID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
index 0ab1182..0bc6970 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
@@ -35,7 +35,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class NonLocalRegionEntry implements RegionEntry, VersionStamp {
 
@@ -196,7 +196,7 @@ public class NonLocalRegionEntry implements RegionEntry, VersionStamp {
 
   @Override
   public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-      DistributionManager distributionManager, final Version version) {
+      DistributionManager distributionManager, final KnownVersion version) {
     throw new UnsupportedOperationException(
         "Not appropriate for PartitionedRegion.NonLocalRegionEntry");
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
index 4cfe591..559f965 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
@@ -104,7 +104,7 @@ import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.sequencelog.EntryLogger;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.internal.shared.NativeCalls;
@@ -152,14 +152,14 @@ public class Oplog implements CompactableOplog, Flushable {
   protected final long oplogId;
 
   /** recovered gemfire version * */
-  protected Version gfversion;
+  protected KnownVersion gfversion;
 
   /**
    * Recovered version of the data. Usually this is same as {@link #gfversion} except for the case
    * of upgrading disk store from previous version in which case the keys/values are carried forward
    * as is and need to be interpreted in load by latest product code if required.
    */
-  protected Version dataVersion;
+  protected KnownVersion dataVersion;
 
   /** Directory in which the file is present* */
   private DirectoryHolder dirHolder;
@@ -730,11 +730,11 @@ public class Oplog implements CompactableOplog, Flushable {
 
   private void writeGemfireVersionRecord(OplogFile olf) throws IOException {
     if (this.gfversion == null) {
-      this.gfversion = Version.CURRENT;
+      this.gfversion = KnownVersion.CURRENT;
     }
-    Version dataVersion = getDataVersionIfOld();
+    KnownVersion dataVersion = getDataVersionIfOld();
     if (dataVersion == null) {
-      dataVersion = Version.CURRENT;
+      dataVersion = KnownVersion.CURRENT;
     }
     // if gfversion and dataVersion are not same, then write a special token
     // version and then write both, else write gfversion as before
@@ -743,7 +743,7 @@ public class Oplog implements CompactableOplog, Flushable {
     if (this.gfversion == dataVersion) {
       writeProductVersionRecord(this.gfversion, olf);
     } else {
-      writeProductVersionRecord(Version.TOKEN, olf);
+      writeProductVersionRecord(KnownVersion.TOKEN, olf);
       clearOpState();
       writeProductVersionRecord(this.gfversion, olf);
       clearOpState();
@@ -751,14 +751,14 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private void writeProductVersionRecord(Version version, OplogFile olf) throws IOException {
+  private void writeProductVersionRecord(KnownVersion version, OplogFile olf) throws IOException {
     this.opState.initialize(version.ordinal());
     writeOpLogBytes(olf, false, true);
     olf.currSize += getOpStateSize();
     this.dirHolder.incrementTotalOplogSize(getOpStateSize());
   }
 
-  public Version currentRecoveredGFVersion() {
+  public KnownVersion currentRecoveredGFVersion() {
     return this.gfversion;
   }
 
@@ -1650,7 +1650,7 @@ public class Oplog implements CompactableOplog, Flushable {
       long oplogKeyIdHWM = DiskStoreImpl.INVALID_ID;
       int krfEntryCount = 0;
       DataInputStream dis = new DataInputStream(new BufferedInputStream(fis, 1024 * 1024));
-      final Version version = getProductVersionIfOld();
+      final KnownVersion version = getProductVersionIfOld();
       final ByteArrayDataInput in = new ByteArrayDataInput();
       try {
         try {
@@ -1836,9 +1836,9 @@ public class Oplog implements CompactableOplog, Flushable {
     CountingDataInputStream dis = null;
     try {
       final LocalRegion currentRegion = LocalRegion.getInitializingRegion();
-      final Version version = getProductVersionIfOld();
+      final KnownVersion version = getProductVersionIfOld();
       final ByteArrayDataInput in = new ByteArrayDataInput();
-      final HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      final HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       int recordCount = 0;
       boolean foundDiskStoreRecord = false;
       FileInputStream fis = null;
@@ -2035,9 +2035,9 @@ public class Oplog implements CompactableOplog, Flushable {
    * @throws DiskAccessException if this file does not belong to our parent
    */
   private void readGemfireVersionRecord(DataInput dis, File f) throws IOException {
-    Version recoveredGFVersion = readProductVersionRecord(dis, f);
+    KnownVersion recoveredGFVersion = readProductVersionRecord(dis, f);
     final boolean hasDataVersion;
-    if ((hasDataVersion = (recoveredGFVersion == Version.TOKEN))) {
+    if ((hasDataVersion = (recoveredGFVersion == KnownVersion.TOKEN))) {
       // actual GFE version will be the next record in this case
       byte opCode = dis.readByte();
       if (opCode != OPLOG_GEMFIRE_VERSION) {
@@ -2070,9 +2070,9 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private Version readProductVersionRecord(DataInput dis, File f) throws IOException {
+  private KnownVersion readProductVersionRecord(DataInput dis, File f) throws IOException {
     short ver = VersioningIO.readOrdinal(dis);
-    final Version recoveredGFVersion =
+    final KnownVersion recoveredGFVersion =
         Versioning.getKnownVersionOrDefault(
             Versioning.getVersionOrdinal(ver), null);
     if (recoveredGFVersion == null) {
@@ -2287,7 +2287,7 @@ public class Oplog implements CompactableOplog, Flushable {
    */
   public DiskEntry.RecoveredEntry createRecoveredEntry(byte[] valueBytes, int valueLength,
       byte userBits, long oplogId, long offsetInOplog, long oplogKeyId, boolean recoverValue,
-      Version version, ByteArrayDataInput in) {
+      KnownVersion version, ByteArrayDataInput in) {
     DiskEntry.RecoveredEntry re = null;
     if (recoverValue || EntryBits.isAnyInvalid(userBits) || EntryBits.isTombstone(userBits)) {
       Object value;
@@ -2352,7 +2352,7 @@ public class Oplog implements CompactableOplog, Flushable {
   }
 
   private VersionTag readVersionsFromOplog(DataInput dis) throws IOException {
-    if (Version.GFE_70.compareTo(currentRecoveredGFVersion()) <= 0) {
+    if (KnownVersion.GFE_70.compareTo(currentRecoveredGFVersion()) <= 0) {
       // this version format is for gemfire 7.0
       // if we have different version format in 7.1, it will be handled in
       // "else if"
@@ -2413,7 +2413,8 @@ public class Oplog implements CompactableOplog, Flushable {
    * @param opcode byte whether the id is short/int/long
    */
   private void readNewEntry(CountingDataInputStream dis, byte opcode, OplogEntryIdSet deletedIds,
-      boolean recoverValue, final LocalRegion currentRegion, Version version, ByteArrayDataInput in,
+      boolean recoverValue, final LocalRegion currentRegion, KnownVersion version,
+      ByteArrayDataInput in,
       HeapDataOutputStream hdos) throws IOException {
     final boolean isPersistRecoveryDebugEnabled =
         logger.isTraceEnabled(LogMarker.PERSIST_RECOVERY_VERBOSE);
@@ -2602,7 +2603,7 @@ public class Oplog implements CompactableOplog, Flushable {
    * @param opcode byte whether the id is short/int/long
    */
   private void readModifyEntry(CountingDataInputStream dis, byte opcode, OplogEntryIdSet deletedIds,
-      boolean recoverValue, LocalRegion currentRegion, Version version, ByteArrayDataInput in,
+      boolean recoverValue, LocalRegion currentRegion, KnownVersion version, ByteArrayDataInput in,
       HeapDataOutputStream hdos) throws IOException {
     final boolean isPersistRecoveryDebugEnabled =
         logger.isTraceEnabled(LogMarker.PERSIST_RECOVERY_VERBOSE);
@@ -2792,7 +2793,7 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private void validateValue(byte[] valueBytes, byte userBits, Version version,
+  private void validateValue(byte[] valueBytes, byte userBits, KnownVersion version,
       ByteArrayDataInput in) {
     if (getParent().isValidating()) {
       if (EntryBits.isSerialized(userBits)) {
@@ -2819,7 +2820,7 @@ public class Oplog implements CompactableOplog, Flushable {
    */
   private void readModifyEntryWithKey(CountingDataInputStream dis, byte opcode,
       OplogEntryIdSet deletedIds, boolean recoverValue, final LocalRegion currentRegion,
-      Version version, ByteArrayDataInput in, HeapDataOutputStream hdos) throws IOException {
+      KnownVersion version, ByteArrayDataInput in, HeapDataOutputStream hdos) throws IOException {
     long oplogOffset = -1;
 
     byte userBits = dis.readByte();
@@ -3911,14 +3912,14 @@ public class Oplog implements CompactableOplog, Flushable {
     // write both gemfire and data versions if the two are different else write
     // only gemfire version; a token distinguishes the two cases while reading
     // like in writeGemFireVersionRecord
-    Version dataVersion = getDataVersionIfOld();
+    KnownVersion dataVersion = getDataVersionIfOld();
     if (dataVersion == null) {
-      dataVersion = Version.CURRENT;
+      dataVersion = KnownVersion.CURRENT;
     }
     if (this.gfversion == dataVersion) {
       VersioningIO.writeOrdinal(this.krf.dos, this.gfversion.ordinal(), false);
     } else {
-      VersioningIO.writeOrdinal(this.krf.dos, Version.TOKEN.ordinal(), false);
+      VersioningIO.writeOrdinal(this.krf.dos, KnownVersion.TOKEN.ordinal(), false);
       this.krf.dos.writeByte(END_OF_RECORD_ID);
       this.krf.dos.writeByte(OPLOG_GEMFIRE_VERSION);
       VersioningIO.writeOrdinal(this.krf.dos, this.gfversion.ordinal(), false);
@@ -5352,7 +5353,7 @@ public class Oplog implements CompactableOplog, Flushable {
               this.stats.incOplogReads();
               bb = new BytesAndBits(valueBytes, userBits);
               // also set the product version for an older product
-              final Version version = getProductVersionIfOld();
+              final KnownVersion version = getProductVersionIfOld();
               if (version != null) {
                 bb.setVersion(version);
               }
@@ -6192,7 +6193,7 @@ public class Oplog implements CompactableOplog, Flushable {
 
   private byte[] serializeRVVs(Map<Long, AbstractDiskRegion> drMap, boolean gcRVV)
       throws IOException {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     // Filter out any regions that do not have versioning enabled
     drMap = new HashMap<Long, AbstractDiskRegion>(drMap);
@@ -6323,7 +6324,7 @@ public class Oplog implements CompactableOplog, Flushable {
 
   private byte[] serializeVersionTag(int entryVersion, long regionVersion,
       VersionSource versionMember, long timestamp, int dsId) throws IOException {
-    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8 + 4 + 8 + 4, Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8 + 4 + 8 + 4, KnownVersion.CURRENT);
     serializeVersionTag(entryVersion, regionVersion, versionMember, timestamp, dsId, out);
     return out.toByteArray();
   }
@@ -6353,7 +6354,7 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private Object deserializeKey(byte[] keyBytes, final Version version,
+  private Object deserializeKey(byte[] keyBytes, final KnownVersion version,
       final ByteArrayDataInput in) {
     if (!getParent().isOffline() || !PdxWriterImpl.isPdx(keyBytes)) {
       return EntryEventImpl.deserialize(keyBytes, version, in);
@@ -6364,20 +6365,20 @@ public class Oplog implements CompactableOplog, Flushable {
 
   /**
    * If this OpLog is from an older version of the product, then return that
-   * {@link Version} else
+   * {@link KnownVersion} else
    * return null.
    */
-  public Version getProductVersionIfOld() {
-    final Version version = this.gfversion;
+  public KnownVersion getProductVersionIfOld() {
+    final KnownVersion version = this.gfversion;
     if (version == null) {
       // check for the case of diskstore upgrade from 6.6 to >= 7.0
       if (getParent().isUpgradeVersionOnly()) {
         // assume previous release version
-        return Version.GFE_66;
+        return KnownVersion.GFE_66;
       } else {
         return null;
       }
-    } else if (version == Version.CURRENT) {
+    } else if (version == KnownVersion.CURRENT) {
       return null;
     } else {
       // version changed so return that for VersionedDataStream
@@ -6387,19 +6388,19 @@ public class Oplog implements CompactableOplog, Flushable {
 
   /**
    * If this OpLog has data that was written by an older version of the product, then return that
-   * {@link Version} else return null.
+   * {@link KnownVersion} else return null.
    */
-  public Version getDataVersionIfOld() {
-    final Version version = this.dataVersion;
+  public KnownVersion getDataVersionIfOld() {
+    final KnownVersion version = this.dataVersion;
     if (version == null) {
       // check for the case of diskstore upgrade from 6.6 to >= 7.0
       if (getParent().isUpgradeVersionOnly()) {
         // assume previous release version
-        return Version.GFE_66;
+        return KnownVersion.GFE_66;
       } else {
         return null;
       }
-    } else if (version == Version.CURRENT) {
+    } else if (version == KnownVersion.CURRENT) {
       return null;
     } else {
       // version changed so return that for VersionedDataStream
@@ -7222,7 +7223,7 @@ public class Oplog implements CompactableOplog, Flushable {
     @Override
     public boolean fillInValue(InternalRegion region, InitialImageOperation.Entry entry,
         ByteArrayDataInput in, DistributionManager distributionManager,
-        final Version version) {
+        final KnownVersion version) {
       return false;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
index e9f3e6e..d681804 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
@@ -53,8 +53,8 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.execute.BucketMovedException;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -380,7 +380,7 @@ public class PRQueryProcessor {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java
index 66c710a..23e3f9b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java
@@ -33,8 +33,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.ExternalizableDSFID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.Versionable;
 import org.apache.geode.internal.util.VersionedArrayList;
 
@@ -433,7 +433,7 @@ public class PartitionRegionConfig extends ExternalizableDSFID implements Versio
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
index 3178893..ad6d22b 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
@@ -249,7 +249,7 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.sequencelog.RegionLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.TransformUtils;
@@ -4685,7 +4685,7 @@ public class PartitionedRegion extends LocalRegion
 
     Set<InternalDistributedMember> oldMembers =
         new HashSet<InternalDistributedMember>(nodeToBuckets.keySet());
-    dm.removeMembersWithSameOrNewerVersion(oldMembers, Version.CURRENT);
+    dm.removeMembersWithSameOrNewerVersion(oldMembers, KnownVersion.CURRENT);
     Iterator<InternalDistributedMember> oldies = oldMembers.iterator();
     while (oldies.hasNext()) {
       InternalDistributedMember old = oldies.next();
@@ -4830,7 +4830,7 @@ public class PartitionedRegion extends LocalRegion
         oneBucketKeys.clear();
         oneBucketKeys.put(e.getKey(), e.getValue());
         try {
-          if (entry.getKey().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+          if (entry.getKey().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
             failures.putAll(nodeToBuckets.get(entry.getKey()));
             continue;
           }
@@ -4882,7 +4882,7 @@ public class PartitionedRegion extends LocalRegion
         bucketId.clear();
         bucketId.add(bucket);
         try {
-          if (entry.getKey().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+          if (entry.getKey().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
             failures.addAll(nodeToBuckets.get(entry.getKey()));
             continue;
           }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
index 1c7d4bb..4ced34c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
@@ -74,7 +74,7 @@ import org.apache.geode.internal.cache.partitioned.PartitionMessage;
 import org.apache.geode.internal.cache.partitioned.QueryMessage;
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.cache.partitioned.StreamingPartitionOperation;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
@@ -186,7 +186,7 @@ public class PartitionedRegionQueryEvaluator extends StreamingPartitionOperation
     // we will have to sort it
     boolean sortNeeded = false;
     List<CompiledSortCriterion> orderByAttribs = null;
-    if (sender.getVersionOrdinalObject().isOlderThan(Version.GFE_90)) {
+    if (sender.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_90)) {
       CompiledSelect cs = this.query.getSimpleSelect();
       if (cs != null && cs.isOrderBy()) {
         sortNeeded = true;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
index a674eed..74ce664 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
@@ -25,8 +25,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This cache deserializable always keeps its byte[] in serialized form. You can ask it for its
@@ -161,7 +161,7 @@ public class PreferBytesCachedDeserializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
index bb8420a..28963ea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.concurrent.ConcurrentMapWithReusableEntries;
 
 /**
@@ -467,7 +467,7 @@ class ProxyRegionMap extends BaseRegionMap {
 
     @Override
     public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-        DistributionManager distributionManager, final Version version) {
+        DistributionManager distributionManager, final KnownVersion version) {
       throw new UnsupportedOperationException(
           String.format("No entry support on regions with DataPolicy %s",
               DataPolicy.EMPTY));
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
index 33ded56..fee0954 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
@@ -33,7 +33,7 @@ import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Internal interface for a region entry. Note that a region is implemented with a ConcurrentHashMap
@@ -178,7 +178,7 @@ public interface RegionEntry {
    */
   boolean fillInValue(InternalRegion region,
       @Retained(ABSTRACT_REGION_ENTRY_FILL_IN_VALUE) Entry entry, ByteArrayDataInput in,
-      DistributionManager distributionManager, final Version version);
+      DistributionManager distributionManager, final KnownVersion version);
 
   /**
    * Returns true if this entry has overflowed to disk.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
index 402b7f2..fba513d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
@@ -33,8 +33,8 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of a region event
@@ -310,7 +310,7 @@ public class RegionEventImpl
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
index 8f8d337..5882fdd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
@@ -28,8 +28,8 @@ import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Ping to check if a server is alive. It waits for a specified time before returning false.
@@ -65,7 +65,7 @@ public class ServerPingMessage extends PooledDistributionMessage {
 
     // filtered recipients
     for (InternalDistributedMember recipient : recipients) {
-      if (Version.GFE_81.compareTo(recipient.getVersionOrdinalObject()) <= 0) {
+      if (KnownVersion.GFE_81.compareTo(recipient.getVersionOrdinalObject()) <= 0) {
         filteredRecipients.add(recipient);
       }
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
index 39aac63..62d1661 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
@@ -25,8 +25,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This cache deserializable always keeps its byte[] in serialized form and the object form.
@@ -158,7 +158,7 @@ public class StoreAllCachedDeserializable implements CachedDeserializable, DataS
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
index 21cefb2..f15ee80 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
@@ -74,9 +74,9 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -138,7 +138,7 @@ public class TXCommitMessage extends PooledDistributionMessage
    * Version of the client that this TXCommitMessage is being sent to. Used for backwards
    * compatibility
    */
-  private transient Version clientVersion;
+  private transient KnownVersion clientVersion;
 
   /**
    * A token to be put in TXManagerImpl#failoverMap to represent a CommitConflictException while
@@ -953,8 +953,8 @@ public class TXCommitMessage extends PooledDistributionMessage
     return hasFlagsField(StaticSerialization.getVersionForDataStream(in));
   }
 
-  private boolean hasFlagsField(final Version version) {
-    return version.isNotOlderThan(Version.GEODE_1_7_0);
+  private boolean hasFlagsField(final KnownVersion version) {
+    return version.isNotOlderThan(KnownVersion.GEODE_1_7_0);
   }
 
   private boolean useShadowKey() {
@@ -1503,7 +1503,8 @@ public class TXCommitMessage extends PooledDistributionMessage
         out.writeBoolean(largeModCount);
 
         final boolean sendVersionTags =
-            this.msg.clientVersion == null || Version.GFE_70.compareTo(this.msg.clientVersion) <= 0;
+            this.msg.clientVersion == null
+                || KnownVersion.GFE_70.compareTo(this.msg.clientVersion) <= 0;
         if (sendVersionTags) {
           VersionSource member = this.memberId;
           if (member == null) {
@@ -1536,7 +1537,7 @@ public class TXCommitMessage extends PooledDistributionMessage
         this.preserializedBuffer.rewind();
         this.preserializedBuffer.sendTo(out);
       } else if (this.refCount > 1) {
-        Version v = StaticSerialization.getVersionForDataStream(out);
+        KnownVersion v = StaticSerialization.getVersionForDataStream(out);
         HeapDataOutputStream hdos = new HeapDataOutputStream(1024, v);
         basicToData(hdos, context, useShadowKey);
         this.preserializedBuffer = hdos;
@@ -2417,11 +2418,11 @@ public class TXCommitMessage extends PooledDistributionMessage
     disableListeners = true;
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return clientVersion;
   }
 
-  public void setClientVersion(Version clientVersion) {
+  public void setClientVersion(KnownVersion clientVersion) {
     this.clientVersion = clientVersion;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
index e0afaad..ba795ca 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
@@ -51,8 +51,8 @@ import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -2077,7 +2077,7 @@ public class TXEntryState implements Releasable {
     public DistTxThinEntryState() {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java
index 89830e5..946587e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java
@@ -24,8 +24,8 @@ import org.apache.geode.internal.DSFIDFactory;
 import org.apache.geode.internal.ExternalizableDSFID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * The implementation of the {@link TransactionId} interface stored in the transaction state and
@@ -121,7 +121,7 @@ public class TXId extends ExternalizableDSFID implements TransactionId {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java
index 5ae0e19..fbf057d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java
@@ -29,8 +29,8 @@ import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.locks.TXRegionLockRequest;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -119,7 +119,8 @@ public class TXRegionLockRequestImpl implements TXRegionLockRequest {
       if (cache != null && size > 0) {
         this.r = (LocalRegion) cache.getRegion(this.regionPath);
       }
-      if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(Version.GEODE_1_10_0)) {
+      if (StaticSerialization.getVersionForDataStream(in)
+          .isNotOlderThan(KnownVersion.GEODE_1_10_0)) {
         this.entryKeys = readEntryKeyMap(size, in);
       } else {
         this.entryKeys = readEntryKeySet(size, in);
@@ -183,7 +184,8 @@ public class TXRegionLockRequestImpl implements TXRegionLockRequest {
   @Override
   public void toData(DataOutput out) throws IOException {
     DataSerializer.writeString(getRegionFullPath(), out);
-    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(Version.GEODE_1_10_0)) {
+    if (StaticSerialization.getVersionForDataStream(out)
+        .isNotOlderThan(KnownVersion.GEODE_1_10_0)) {
       InternalDataSerializer.writeHashMap(this.entryKeys, out);
     } else {
       HashSet hashset = new HashSet(this.entryKeys.keySet());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
index fea81be..9c032a3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
@@ -25,8 +25,8 @@ import org.apache.geode.annotations.Immutable;
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Internal tokens used as region values. These tokens are never seen from the public API.
@@ -161,7 +161,7 @@ public abstract class Token {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -214,7 +214,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -247,7 +247,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -280,7 +280,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -313,7 +313,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -365,7 +365,7 @@ public abstract class Token {
         SerializationContext context) throws IOException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
index f248e04..4870789 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
@@ -27,8 +27,8 @@ import org.apache.geode.internal.cache.eviction.EvictableEntry;
 import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxInstance;
 
 /**
@@ -273,7 +273,7 @@ public class VMCachedDeserializable implements CachedDeserializable, DataSeriali
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
index 7863ac4..b68e701 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
@@ -38,7 +38,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * A disk region that is created when doing offline validation.
@@ -351,7 +351,7 @@ public class ValidatingDiskRegion extends DiskRegion implements DiskRecoveryStor
 
     @Override
     public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-        DistributionManager distributionManager, final Version version) {
+        DistributionManager distributionManager, final KnownVersion version) {
       return false;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java
index 9655ebe..9615eb5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java
@@ -21,7 +21,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Unretained;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.PdxSerializable;
 import org.apache.geode.pdx.PdxSerializationException;
@@ -153,7 +153,7 @@ public class ValueComparisonHelper {
         }
         if (pdxSerializer != null || obj instanceof PdxSerializable) {
           // try to convert obj to a PdxInstance
-          HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
           try {
             if (InternalDataSerializer.autoSerialized(obj, hdos)
                 || InternalDataSerializer.writePdx(hdos, cache, obj, pdxSerializer)) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java
index bdbba0e..3630101 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java
@@ -19,7 +19,7 @@ import org.apache.geode.annotations.Immutable;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.compression.Compressor;
 import org.apache.geode.compression.SnappyCompressor;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * An implementation of {@link CompressedCachedDeserializable} that uses the built in Snappy
@@ -78,7 +78,7 @@ public class SnappyCompressedCachedDeserializable extends CompressedCachedDeseri
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java
index a3ab5f5..239c079 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java
@@ -22,8 +22,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.operation.RegionRedundancyStatusImpl;
 
 /**
@@ -109,7 +109,7 @@ public class SerializableRegionRedundancyStatusImpl extends
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java
index c9f80f0..746173d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java
@@ -22,8 +22,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.partition.PartitionRebalanceInfo;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.operation.RestoreRedundancyResultsImpl;
 
 /**
@@ -71,7 +71,7 @@ public class SerializableRestoreRedundancyResultsImpl
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
index f70ca65..5ba295c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Abstract implementation class of RegionEntry interface. This is adds Disk support behavior
@@ -65,7 +65,7 @@ public abstract class AbstractOplogDiskRegionEntry extends AbstractDiskRegionEnt
 
   @Override
   public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-      DistributionManager mgr, final Version version) {
+      DistributionManager mgr, final KnownVersion version) {
     return Helper.fillInValue(this, entry, region.getDiskRegion(), mgr, in, region, version);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
index 2e1da25..ec31aeb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
@@ -78,7 +78,7 @@ import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.internal.util.Versionable;
 import org.apache.geode.internal.util.concurrent.CustomEntryConcurrentHashMap;
@@ -329,7 +329,7 @@ public abstract class AbstractRegionEntry implements HashRegionEntry<Object, Obj
   @Override
   public boolean fillInValue(InternalRegion region,
       @Retained(ABSTRACT_REGION_ENTRY_FILL_IN_VALUE) Entry entry, ByteArrayDataInput in,
-      DistributionManager mgr, final Version version) {
+      DistributionManager mgr, final KnownVersion version) {
 
     // starting default value
     entry.setSerialized(false);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
index 7b33d65..989c65b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
@@ -59,7 +59,7 @@ import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -297,7 +297,7 @@ public interface DiskEntry extends RegionEntry {
      */
     static boolean fillInValue(DiskEntry de, InitialImageOperation.Entry entry, DiskRegion dr,
         DistributionManager mgr, ByteArrayDataInput in, RegionEntryContext context,
-        Version version) {
+        KnownVersion version) {
       @Retained
       @Released
       Object v = null;
@@ -1293,7 +1293,7 @@ public interface DiskEntry extends RegionEntry {
       return preparedValue;
     }
 
-    public static Object readSerializedValue(byte[] valueBytes, Version version,
+    public static Object readSerializedValue(byte[] valueBytes, KnownVersion version,
         ByteArrayDataInput in, boolean forceDeserialize, InternalCache cache) {
       if (forceDeserialize) {
         // deserialize checking for product version change
@@ -1306,7 +1306,8 @@ public interface DiskEntry extends RegionEntry {
       }
     }
 
-    public static Object readRawValue(byte[] valueBytes, Version version, ByteArrayDataInput in) {
+    public static Object readRawValue(byte[] valueBytes, KnownVersion version,
+        ByteArrayDataInput in) {
       return valueBytes;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java
index 8eca9be..9191a87 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java
@@ -26,8 +26,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.internal.cache.BucketSetHelper;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * FunctionContext for remote/target nodes
@@ -77,7 +77,7 @@ public class FunctionRemoteContext implements DataSerializable {
     }
     this.args = DataSerializer.readObject(in);
     this.filter = (HashSet) DataSerializer.readHashSet(in);
-    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(Version.GEODE_1_11_0)) {
+    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(KnownVersion.GEODE_1_11_0)) {
       this.bucketArray = DataSerializer.readIntArray(in);
     } else {
       HashSet<Integer> bucketSet = DataSerializer.readHashSet(in);
@@ -95,7 +95,8 @@ public class FunctionRemoteContext implements DataSerializable {
     }
     DataSerializer.writeObject(this.args, out);
     DataSerializer.writeHashSet((HashSet) this.filter, out);
-    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(Version.GEODE_1_11_0)) {
+    if (StaticSerialization.getVersionForDataStream(out)
+        .isNotOlderThan(KnownVersion.GEODE_1_11_0)) {
       DataSerializer.writeIntArray(this.bucketArray, out);
     } else {
       Set<Integer> bucketSet = BucketSetHelper.toSet(this.bucketArray);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java
index 586f4d9..ea06618 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java
@@ -27,7 +27,7 @@ import org.apache.geode.internal.cache.ForceReattemptException;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.execute.metrics.FunctionStatsManager;
 import org.apache.geode.internal.cache.partitioned.PartitionedRegionFunctionStreamingMessage;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -74,7 +74,7 @@ public class PartitionedRegionFunctionResultSender implements InternalResultSend
   private BucketMovedException bme;
 
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     if (serverSender != null && serverSender.sc != null) { // is a client-server connection
       return serverSender.sc.getClientVersion();
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
index 13475df..21558b8 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
@@ -99,8 +99,8 @@ import org.apache.geode.internal.cache.tier.sockets.Handshake;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.BlobHelper;
@@ -2118,7 +2118,7 @@ public class HARegionQueue implements RegionQueue {
     try {
       inputValue = BlobHelper.deserializeBlob(newValueCd.getSerializedValue(),
           Versioning
-              .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), Version.CURRENT),
+              .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), KnownVersion.CURRENT),
           null);
       newValueCd = new VMCachedDeserializable(inputValue, newValueCd.getSizeInBytes());
     } catch (IOException | ClassNotFoundException e) {
@@ -3382,7 +3382,7 @@ public class HARegionQueue implements RegionQueue {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       // TODO Auto-generated method stub
       return null;
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
index 94129ca..1eff2f5 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
@@ -31,8 +31,8 @@ import org.apache.geode.internal.cache.IdentityArrayList;
 import org.apache.geode.internal.cache.TXRegionLockRequestImpl;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Adapts multiple TXRegionLockRequests to one DLockBatch for DLock to use.
@@ -149,7 +149,7 @@ public class TXLockBatch implements DLockBatch, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
index 85121bc..454909d 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
@@ -24,8 +24,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Identifies a group of transaction locks.
@@ -154,7 +154,7 @@ public class TXLockIdImpl implements TXLockId, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
index 1ccdd65..5532f8c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
@@ -23,8 +23,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A load probe which calculates the load of a pr using the just the number of buckets on a member.
@@ -68,7 +68,7 @@ public class BucketCountLoadProbe implements LoadProbe, DataSerializableFixedID
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
index 6fb1a9a..9fc2756 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
@@ -56,8 +56,8 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -194,7 +194,7 @@ public class FetchBulkEntriesMessage extends PartitionMessage {
     private HashSet<Integer> failedBucketIds;
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
@@ -240,7 +240,7 @@ public class FetchBulkEntriesMessage extends PartitionMessage {
 
       HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
       Iterator<BucketRegion> mapsIterator = maps.iterator();
       BucketRegion map = null;
       Iterator it = null;
@@ -660,7 +660,7 @@ public class FetchBulkEntriesMessage extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
index a41ba14..69f1bea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
@@ -61,8 +61,8 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -178,10 +178,10 @@ public class FetchEntriesMessage extends PartitionMessage {
 
     /** The versions in which this message was modified */
     @Immutable
-    private static final Version[] dsfidVersions = null;
+    private static final KnownVersion[] dsfidVersions = null;
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
 
@@ -293,7 +293,7 @@ public class FetchEntriesMessage extends PartitionMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(receiver.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(receiver.getVersionOrdinalObject(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
index c457d3a..9655c44 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
@@ -48,8 +48,8 @@ import org.apache.geode.internal.cache.TXStateProxy;
 import org.apache.geode.internal.cache.tier.InterestType;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -215,10 +215,10 @@ public class FetchKeysMessage extends PartitionMessage {
   /**
    * Versions in which on-wire form has changed, requiring new toData/fromData methods
    */
-  public Version[] serializationVersions = null;
+  public KnownVersion[] serializationVersions = null;
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
@@ -372,7 +372,7 @@ public class FetchKeysMessage extends PartitionMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java
index bc933d6..7ab3dc2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java
@@ -58,9 +58,9 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -342,7 +342,7 @@ public class GetMessage extends PartitionMessageWithDirectReply {
      */
     public VersionTag versionTag;
 
-    public transient Version remoteVersion;
+    public transient KnownVersion remoteVersion;
 
     /**
      * Empty constructor to conform to DataSerializable interface
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
index 6b9534f..826ff43 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
@@ -49,8 +49,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionException;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class IndexCreationMsg extends PartitionMessage {
@@ -357,7 +357,7 @@ public class IndexCreationMsg extends PartitionMessage {
     }
 
     for (InternalDistributedMember rec : recipients) {
-      if (rec.getVersionOrdinalObject().isOlderThan(Version.GFE_81)) {
+      if (rec.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_81)) {
         throw new UnsupportedOperationException(
             "Indexes should not be created during rolling upgrade");
       }
@@ -422,7 +422,7 @@ public class IndexCreationMsg extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
index aa85eb6..1fe615c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
@@ -43,9 +43,9 @@ import org.apache.geode.internal.cache.tier.sockets.ClientTombstoneMessage;
 import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessage;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -59,7 +59,7 @@ public class PRTombstoneMessage extends PartitionMessageWithDirectReply
   private static final Logger logger = LogService.getLogger();
 
   @Immutable
-  private static final Version[] serializationVersions = null;
+  private static final KnownVersion[] serializationVersions = null;
 
   private Set<Object> keys;
   private EventID eventID;
@@ -129,7 +129,7 @@ public class PRTombstoneMessage extends PartitionMessageWithDirectReply
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java
index af54788..d676f92 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java
@@ -63,9 +63,9 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.sequencelog.EntryLogger;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -541,7 +541,7 @@ public abstract class PartitionMessage extends DistributionMessage
     setBooleans(this.flags, in, context);
     this.regionId = in.readInt();
     // extra field post 9.0
-    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(Version.GFE_90)) {
+    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(KnownVersion.GFE_90)) {
       this.isTransactionDistributed = in.readBoolean();
     }
   }
@@ -585,7 +585,7 @@ public abstract class PartitionMessage extends DistributionMessage
       context.getSerializer().writeObject(this.txMemberId, out);
     out.writeInt(this.regionId);
     // extra field post 9.0
-    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(Version.GFE_90)) {
+    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(KnownVersion.GFE_90)) {
       out.writeBoolean(this.isTransactionDistributed);
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
index d96e573..ffdd027 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
@@ -53,8 +53,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class QueryMessage extends StreamingPartitionOperation.StreamingPartitionMessage {
@@ -123,7 +123,8 @@ public class QueryMessage extends StreamingPartitionOperation.StreamingPartition
       }
     }
     Object data = this.currentResultIterator.next();
-    boolean isPostGFE_8_1 = this.getSender().getVersionOrdinalObject().isNewerThan(Version.GFE_81);
+    boolean isPostGFE_8_1 =
+        this.getSender().getVersionOrdinalObject().isNewerThan(KnownVersion.GFE_81);
 
     // There is a bug in older versions of GFE such that the query node expects the structs to have
     // type as ObjectTypes only & not specific types. So the new version needs to send the
@@ -190,7 +191,8 @@ public class QueryMessage extends StreamingPartitionOperation.StreamingPartition
         logger.debug("Started executing query from remote node: {}", query.getQueryString());
       }
       isQueryTraced =
-          query.isTraced() && this.sender.getVersionOrdinalObject().isNotOlderThan(Version.GFE_81);
+          query.isTraced()
+              && this.sender.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GFE_81);
 
       // Adds a query trace info object to the results list for remote queries
       PRQueryTraceInfo queryTraceInfo = null;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
index 6bbfd4c..aa9da20 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
@@ -23,8 +23,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 /**
@@ -77,7 +77,7 @@ public class SizedBasedLoadProbe implements LoadProbe, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
index 8d32211..16dd1e1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
@@ -47,7 +47,7 @@ import org.apache.geode.internal.cache.ForceReattemptException;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PrimaryBucketException;
 import org.apache.geode.internal.cache.Token;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -385,7 +385,7 @@ public abstract class StreamingPartitionOperation extends StreamingOperation {
       boolean receiverCacheClosed = false;
 
       this.outStream = new HeapDataOutputStream(chunkSize, Versioning
-          .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(), Version.CURRENT));
+          .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(), KnownVersion.CURRENT));
 
       try {
         do {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java
index 8a0306c..fe65b8d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.internal.cache.persistence;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Used to fetch a record's raw bytes and user bits.
@@ -24,7 +24,7 @@ import org.apache.geode.internal.serialization.Version;
 public class BytesAndBits {
   private final byte[] data;
   private final byte userBits;
-  private Version version;
+  private KnownVersion version;
 
   public BytesAndBits(byte[] data, byte userBits) {
     this.data = data;
@@ -39,11 +39,11 @@ public class BytesAndBits {
     return this.userBits;
   }
 
-  public void setVersion(Version v) {
+  public void setVersion(KnownVersion v) {
     this.version = v;
   }
 
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java
index 881e100..5fb5fea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java
@@ -19,7 +19,7 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.geode.internal.cache.DiskInitFile.DiskRegionFlag;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public interface DiskInitFileInterpreter {
 
@@ -85,5 +85,5 @@ public interface DiskInitFileInterpreter {
 
   boolean cmnRevokeDiskStoreId(PersistentMemberPattern id);
 
-  void cmnGemfireVersion(Version version);
+  void cmnGemfireVersion(KnownVersion version);
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
index 41fd9bdf..9bf801e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.Oplog.OPLOG_TYPE;
 import org.apache.geode.internal.cache.ProxyBucketRegion;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
 import org.apache.geode.internal.logging.log4j.LogMarker;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -65,7 +65,7 @@ public class DiskInitFileParser {
   private transient boolean gotEOF;
 
   public DiskStoreID parse() throws IOException, ClassNotFoundException {
-    Version gfversion = Version.GFE_662;
+    KnownVersion gfversion = KnownVersion.GFE_662;
     DiskStoreID result = null;
     boolean endOfFile = false;
     while (!endOfFile) {
@@ -571,7 +571,7 @@ public class DiskInitFileParser {
     }
   }
 
-  private PersistentMemberID readPMID(CountingDataInputStream dis, Version gfversion)
+  private PersistentMemberID readPMID(CountingDataInputStream dis, KnownVersion gfversion)
       throws IOException, ClassNotFoundException {
     int len = dis.readInt();
     byte[] buf = new byte[len];
@@ -579,12 +579,12 @@ public class DiskInitFileParser {
     return bytesToPMID(buf, gfversion);
   }
 
-  private PersistentMemberID bytesToPMID(byte[] bytes, Version gfversion)
+  private PersistentMemberID bytesToPMID(byte[] bytes, KnownVersion gfversion)
       throws IOException, ClassNotFoundException {
     ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
     DataInputStream dis = new DataInputStream(bais);
     PersistentMemberID result = new PersistentMemberID();
-    if (Version.GFE_70.compareTo(gfversion) > 0) {
+    if (KnownVersion.GFE_70.compareTo(gfversion) > 0) {
       result._fromData662(dis);
     } else {
       InternalDataSerializer.invokeFromData(result, dis);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java
index 202b74a..9dad9ba 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java
@@ -22,8 +22,8 @@ import java.util.UUID;
 
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A Unique ID for a disk store
@@ -142,7 +142,7 @@ public class DiskStoreID implements VersionSource<DiskStoreID>, Serializable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
index 10af540..06c8982 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
@@ -32,8 +32,8 @@ import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.BlobHelper;
 
 /**
@@ -175,7 +175,7 @@ public class SnapshotPacket implements DataSerializableFixedID {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -274,7 +274,7 @@ public class SnapshotPacket implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java
index f5f14ea..acb4e2f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java
@@ -15,7 +15,7 @@
 package org.apache.geode.internal.cache.tier;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Provides the version of the client.
@@ -31,5 +31,5 @@ public interface ConnectionProxy {
    * @since GemFire 5.7
    */
   @Immutable
-  Version VERSION = Version.CURRENT;
+  KnownVersion VERSION = KnownVersion.CURRENT;
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java
index f585e00..024b747 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java
@@ -21,7 +21,7 @@ import java.io.OutputStream;
 import java.security.Principal;
 
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
 
@@ -36,7 +36,7 @@ public interface ServerSideHandshake {
 
   int getClientReadTimeout();
 
-  Version getVersion();
+  KnownVersion getVersion();
 
   Object verifyCredentials() throws AuthenticationRequiredException, AuthenticationFailedException;
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
index d1a61fb..c173466 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
@@ -94,7 +94,7 @@ import org.apache.geode.internal.logging.CoreLoggingExecutors;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.statistics.StatisticsClockFactory;
 import org.apache.geode.internal.tcp.ConnectionTable;
@@ -1510,7 +1510,7 @@ public class AcceptorImpl implements Acceptor, Runnable {
 
   @Override
   public void refuseHandshake(OutputStream out, String message, byte exception) throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
     DataOutputStream dos = new DataOutputStream(hdos);
     // Write refused reply
     dos.writeByte(exception);
@@ -1522,7 +1522,7 @@ public class AcceptorImpl implements Acceptor, Runnable {
 
     // Write the server's member
     DistributedMember member = InternalDistributedSystem.getAnyInstance().getDistributedMember();
-    HeapDataOutputStream memberDos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream memberDos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(member, memberDos);
     DataSerializer.writeByteArray(memberDos.toByteArray(), dos);
     memberDos.close();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java
index b68bc94..e8ccbbc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java
@@ -78,7 +78,7 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.sequencelog.EntryLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.GemFireSecurityException;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -215,7 +215,7 @@ public abstract class BaseCommand implements Command {
    */
   protected boolean shouldMasqueradeForTx(Message clientMessage,
       ServerConnection serverConnection) {
-    return serverConnection.getClientVersion().isNotOlderThan(Version.GFE_66)
+    return serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_66)
         && clientMessage.getTransactionId() > TXManagerImpl.NOTX;
   }
 
@@ -901,7 +901,7 @@ public abstract class BaseCommand implements Command {
       sendRegisterInterestResponseChunk(region, riKey, new ArrayList(), true, servConn);
       return;
     }
-    if (policy.isKeysValues() && servConn.getClientVersion().isNotOlderThan(Version.GFE_80)) {
+    if (policy.isKeysValues() && servConn.getClientVersion().isNotOlderThan(KnownVersion.GFE_80)) {
       handleKeysValuesPolicy(region, riKey, interestType, serializeValues, servConn);
       return;
     }
@@ -1018,7 +1018,7 @@ public abstract class BaseCommand implements Command {
   private static boolean sendTombstonesInRIResults(ServerConnection servConn,
       InterestResultPolicy policy) {
     return policy == InterestResultPolicy.KEYS_VALUES
-        && servConn.getClientVersion().isNotOlderThan(Version.GFE_80);
+        && servConn.getClientVersion().isNotOlderThan(KnownVersion.GFE_80);
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java
index 7f8d7ec..7a5cb6e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.CachedRegionHelper;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -97,7 +97,7 @@ public abstract class BaseCommandQuery extends BaseCommand {
 
     // from 7.0, set flag to indicate a remote query irrespective of the
     // object type
-    if (servConn.getClientVersion().isNotOlderThan(Version.GFE_70)) {
+    if (servConn.getClientVersion().isNotOlderThan(KnownVersion.GFE_70)) {
       ((DefaultQuery) query).setRemoteQuery(true);
     }
     // Process the query request
@@ -309,8 +309,8 @@ public abstract class BaseCommandQuery extends BaseCommand {
   }
 
   private boolean sendCqResultsWithKey(ServerConnection servConn) {
-    Version clientVersion = servConn.getClientVersion();
-    if (clientVersion.isNotOlderThan(Version.GFE_65)) {
+    KnownVersion clientVersion = servConn.getClientVersion();
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_65)) {
       return true;
     }
     return false;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
index fff2bb2..aaa7dea 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
@@ -102,7 +102,7 @@ import org.apache.geode.internal.cache.tier.OverflowAttributes;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.net.SocketCloser;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.DummyStatisticsFactory;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -184,7 +184,7 @@ public class CacheClientNotifier {
     ClientProxyMembershipID clientProxyMembershipID =
         clientRegistrationMetadata.getClientProxyMembershipID();
     DataOutputStream dataOutputStream = clientRegistrationMetadata.getDataOutputStream();
-    Version clientVersion = clientRegistrationMetadata.getClientVersion();
+    KnownVersion clientVersion = clientRegistrationMetadata.getClientVersion();
 
     try {
       if (isClientPermitted(clientRegistrationMetadata, clientProxyMembershipID)) {
@@ -246,7 +246,7 @@ public class CacheClientNotifier {
     ClientProxyMembershipID clientProxyMembershipID =
         clientRegistrationMetadata.getClientProxyMembershipID();
     byte clientConflation = clientRegistrationMetadata.getClientConflation();
-    Version clientVersion = clientRegistrationMetadata.getClientVersion();
+    KnownVersion clientVersion = clientRegistrationMetadata.getClientVersion();
 
     CacheClientProxy cacheClientProxy = getClientProxy(clientProxyMembershipID);
     DistributedMember member = clientProxyMembershipID.getDistributedMember();
@@ -446,7 +446,7 @@ public class CacheClientNotifier {
   }
 
   private void handleAuthenticationException(final ClientProxyMembershipID clientProxyMembershipID,
-      final DataOutputStream dataOutputStream, final Version clientVersion,
+      final DataOutputStream dataOutputStream, final KnownVersion clientVersion,
       final GemFireSecurityException ex, final byte replyExceptionAuthenticationFailed)
       throws IOException {
     securityLogWriter.warning(
@@ -683,7 +683,7 @@ public class CacheClientNotifier {
       Object[] objects = filterClients.toArray();
       for (Object id : objects) {
         CacheClientProxy ccp = getClientProxy((ClientProxyMembershipID) id, true);
-        if (ccp != null && ccp.getVersion().isOlderThan(Version.GFE_70)) {
+        if (ccp != null && ccp.getVersion().isOlderThan(KnownVersion.GFE_70)) {
           filterClients.remove(id);
         }
       }
@@ -1864,7 +1864,7 @@ public class CacheClientNotifier {
         for (CacheClientProxy proxy : getClientProxies()) {
           logger.debug("Checking whether to ping {}", proxy);
           // Ping clients whose version is GE 6.6.2.2
-          if (proxy.getVersion().isNotOlderThan(Version.GFE_6622)) {
+          if (proxy.getVersion().isNotOlderThan(KnownVersion.GFE_6622)) {
             // Send the ping message directly to the client. Do not qo through
             // the queue. If the queue were used, the secondary connection would
             // not be pinged. Instead, pings would just build up in secondary
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
index 89d9878..c17b302 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
@@ -79,7 +79,7 @@ import org.apache.geode.internal.logging.LogWriterImpl;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.AccessControl;
@@ -242,7 +242,7 @@ public class CacheClientProxy implements ClientSession {
   /**
    * The version of the client
    */
-  private Version clientVersion;
+  private KnownVersion clientVersion;
 
   /**
    * A map of region name as key and integer as its value. Basically, it stores the names of the
@@ -313,7 +313,7 @@ public class CacheClientProxy implements ClientSession {
    */
   protected CacheClientProxy(CacheClientNotifier ccn, Socket socket,
       ClientProxyMembershipID proxyID, boolean isPrimary, byte clientConflation,
-      Version clientVersion, long acceptorId, boolean notifyBySubscription,
+      KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
       SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
       throws CacheException {
     this(ccn.getCache(), ccn, socket, proxyID, isPrimary, clientConflation, clientVersion,
@@ -326,7 +326,7 @@ public class CacheClientProxy implements ClientSession {
   @VisibleForTesting
   protected CacheClientProxy(InternalCache cache, CacheClientNotifier ccn, Socket socket,
       ClientProxyMembershipID proxyID, boolean isPrimary, byte clientConflation,
-      Version clientVersion, long acceptorId, boolean notifyBySubscription,
+      KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
       SecurityService securityService, Subject subject, StatisticsClock statisticsClock,
       StatisticsFactory statisticsFactory,
       CacheClientProxyStatsFactory cacheClientProxyStatsFactory,
@@ -358,7 +358,7 @@ public class CacheClientProxy implements ClientSession {
     initializeClientAuths();
   }
 
-  Version getClientVersion() {
+  KnownVersion getClientVersion() {
     return clientVersion;
   }
 
@@ -405,7 +405,7 @@ public class CacheClientProxy implements ClientSession {
   }
 
   private void initializeTransientFields(Socket socket, ClientProxyMembershipID pid, boolean ip,
-      byte cc, Version vers) {
+      byte cc, KnownVersion vers) {
     this._socket = socket;
     this.proxyID = pid;
     this.connected = true;
@@ -1171,7 +1171,7 @@ public class CacheClientProxy implements ClientSession {
     // If the client is not 7.0.1 or greater and the key of interest is a list,
     // then create an individual message for each entry in the list since the
     // client doesn't support a ClientInterestMessageImpl containing a list.
-    if (Version.GFE_701.compareTo(this.clientVersion) > 0
+    if (KnownVersion.GFE_701.compareTo(this.clientVersion) > 0
         && message.getKeyOfInterest() instanceof List) {
       for (Iterator i = ((List) message.getKeyOfInterest()).iterator(); i.hasNext();) {
         this._messageDispatcher.enqueueMessage(
@@ -1826,7 +1826,7 @@ public class CacheClientProxy implements ClientSession {
    * @param ip whether this proxy represents the primary
    */
   protected void reinitialize(Socket socket, ClientProxyMembershipID proxyId, Cache cache,
-      boolean ip, byte cc, Version ver) {
+      boolean ip, byte cc, KnownVersion ver) {
     // Re-initialize transient fields
     initializeTransientFields(socket, proxyId, ip, cc, ver);
     getCacheClientNotifier().getAcceptorStats().incCurrentQueueConnections();
@@ -1874,7 +1874,7 @@ public class CacheClientProxy implements ClientSession {
     return this._messageDispatcher._messageQueue.getRegion();
   }
 
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.clientVersion;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java
index ae26aa7..6a42352 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java
@@ -26,7 +26,7 @@ import org.apache.geode.annotations.VisibleForTesting;
 import org.apache.geode.cache.CacheException;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 
 /**
@@ -75,7 +75,7 @@ public class CacheClientProxyFactory {
 
   public CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
       ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-      Version clientVersion, long acceptorId, boolean notifyBySubscription,
+      KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
       SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
       throws CacheException {
     return internalFactory.create(notifier, socket, proxyId, isPrimary, clientConflation,
@@ -87,7 +87,7 @@ public class CacheClientProxyFactory {
   public interface InternalCacheClientProxyFactory {
     CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
index eed2107..3a14feb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
@@ -83,7 +83,7 @@ import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.sequencelog.EntryLogger;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -562,7 +562,7 @@ public class CacheClientUpdater extends LoggingThread implements ClientUpdater,
    * the server.
    */
   private Message initializeMessage() {
-    Message message = new Message(2, Version.CURRENT);
+    Message message = new Message(2, KnownVersion.CURRENT);
     message.setComms(this.socket, this.in, this.out, this.commBuffer, this.stats);
     return message;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java
index 9cf4aec..973b4a6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java
@@ -27,7 +27,7 @@ import java.util.zip.GZIPOutputStream;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.CacheServerImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 
 /**
@@ -68,7 +68,7 @@ public class CacheServerHelper {
     return unzipObject ? unzip(blob) : BlobHelper.deserializeBlob(blob);
   }
 
-  public static Object deserialize(byte[] blob, Version version, boolean unzipObject)
+  public static Object deserialize(byte[] blob, KnownVersion version, boolean unzipObject)
       throws IOException, ClassNotFoundException {
     return unzipObject ? unzip(blob) : BlobHelper.deserializeBlob(blob, version, null);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java
index a1250a9..0be09bf 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java
@@ -22,7 +22,7 @@ import java.nio.ByteBuffer;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.internal.cache.tier.MessageType;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -107,7 +107,7 @@ public class ChunkedMessage extends Message {
    *
    * @param numberOfParts The number of parts to create
    */
-  public ChunkedMessage(int numberOfParts, Version version) {
+  public ChunkedMessage(int numberOfParts, KnownVersion version) {
     super(numberOfParts, version);
   }
 
@@ -152,7 +152,7 @@ public class ChunkedMessage extends Message {
   public void setLastChunkAndNumParts(boolean lastChunk, int numParts) {
     setLastChunk(lastChunk);
     if (this.serverConnection != null
-        && this.serverConnection.getClientVersion().isNotOlderThan(Version.GFE_65)) {
+        && this.serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_65)) {
       // we us e three bits for number of parts in last chunk byte
       // we us e three bits for number of parts in last chunk byte
       byte localLastChunk = (byte) (numParts << 5);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java
index 66c84567..ea25d31 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java
@@ -25,8 +25,8 @@ import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
   private byte[][] serializedDataSerializer;
@@ -65,9 +65,9 @@ public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
    */
   @Override
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    if (proxy.getVersion().isNotOlderThan(Version.GFE_6516)) {
+    if (proxy.getVersion().isNotOlderThan(KnownVersion.GFE_6516)) {
       return getGFE6516Message(proxy.getVersion());
-    } else if (proxy.getVersion().isNotOlderThan(Version.GFE_57)) {
+    } else if (proxy.getVersion().isNotOlderThan(KnownVersion.GFE_57)) {
       return getGFEMessage(proxy.getVersion());
     } else {
       throw new IOException("Unsupported client version for server-to-client message creation: "
@@ -75,7 +75,7 @@ public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
     }
   }
 
-  protected Message getGFEMessage(Version clientVersion) {
+  protected Message getGFEMessage(KnownVersion clientVersion) {
     Message message = null;
     int dataSerializerLength = this.serializedDataSerializer.length;
     message = new Message(dataSerializerLength + 1, clientVersion); // one for eventID
@@ -90,7 +90,7 @@ public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
     return message;
   }
 
-  protected Message getGFE6516Message(Version clientVersion) {
+  protected Message getGFE6516Message(KnownVersion clientVersion) {
     Message message = null;
 
     // The format:
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java
index 2405ff5..29dd180 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.TXManagerImpl;
 import org.apache.geode.internal.cache.tier.Acceptor;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.lang.JavaWorkarounds;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -129,7 +129,8 @@ public class ClientHealthMonitor {
    *
    * @see CacheClientNotifier#addClientProxy(CacheClientProxy)
    */
-  AtomicIntegerArray numOfClientsPerVersion = new AtomicIntegerArray(Version.HIGHEST_VERSION + 1);
+  AtomicIntegerArray numOfClientsPerVersion =
+      new AtomicIntegerArray(KnownVersion.HIGHEST_VERSION + 1);
 
   public long getMonitorInterval() {
     return monitorInterval;
@@ -647,7 +648,7 @@ public class ClientHealthMonitor {
     return cleanupTable;
   }
 
-  private int getNumberOfClientsAtOrAboveVersion(Version version) {
+  private int getNumberOfClientsAtOrAboveVersion(KnownVersion version) {
     int number = 0;
     for (int i = version.ordinal(); i < numOfClientsPerVersion.length(); i++) {
       number += numOfClientsPerVersion.get(i);
@@ -656,7 +657,7 @@ public class ClientHealthMonitor {
   }
 
   public boolean hasDeltaClients() {
-    return getNumberOfClientsAtOrAboveVersion(Version.GFE_61) > 0;
+    return getNumberOfClientsAtOrAboveVersion(KnownVersion.GFE_61) > 0;
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java
index 8557f56..54a9f0d 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java
@@ -26,8 +26,8 @@ import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientInstantiatorMessage</code> represents a message that is to be sent to the
@@ -106,9 +106,9 @@ public class ClientInstantiatorMessage extends ClientUpdateMessageImpl {
 
   @Override
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage(proxy.getProxyID(), null, clientVersion);
     } else {
       throw new IOException(
@@ -120,7 +120,7 @@ public class ClientInstantiatorMessage extends ClientUpdateMessageImpl {
 
   @Override
   protected Message getGFEMessage(ClientProxyMembershipID proxy, byte[] latestValue,
-      Version clientVersion) throws IOException {
+      KnownVersion clientVersion) throws IOException {
     Message message = null;
     int instantiatorsLength = this.serializedInstantiators.length;
     message = new Message(instantiatorsLength + 1, clientVersion); // one for eventID
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
index 02c9d08..028f536 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
@@ -29,8 +29,8 @@ import org.apache.geode.internal.cache.tier.InterestType;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientInterestMessageImpl</code> represents an update to the a client's interest
@@ -135,9 +135,9 @@ public class ClientInterestMessageImpl implements ClientMessage {
 
   @Override
   public Message getMessage(CacheClientProxy proxy, boolean notify) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage();
     } else {
       throw new IOException(
@@ -148,7 +148,7 @@ public class ClientInterestMessageImpl implements ClientMessage {
   }
 
   protected Message getGFEMessage() throws IOException {
-    Message message = new Message(isRegister() ? 7 : 6, Version.CURRENT);
+    Message message = new Message(isRegister() ? 7 : 6, KnownVersion.CURRENT);
     message.setTransactionId(0);
 
     // Set the message type
@@ -304,7 +304,7 @@ public class ClientInterestMessageImpl implements ClientMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java
index 03f9ba4..70717bf 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java
@@ -23,8 +23,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientMarkerMessageImpl</code> is a marker message that is placed in the
@@ -59,9 +59,9 @@ public class ClientMarkerMessageImpl implements ClientMessage {
 
   @Override
   public Message getMessage(CacheClientProxy proxy, boolean notify) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage();
     } else {
       throw new IOException(
@@ -72,7 +72,7 @@ public class ClientMarkerMessageImpl implements ClientMessage {
   }
 
   protected Message getGFEMessage() throws IOException {
-    Message message = new Message(1, Version.CURRENT);
+    Message message = new Message(1, KnownVersion.CURRENT);
     message.setMessageType(MessageType.CLIENT_MARKER);
     message.setTransactionId(0);
     message.addObjPart(this.eventId);
@@ -131,7 +131,7 @@ public class ClientMarkerMessageImpl implements ClientMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java
index 9d42deb..cc74f0a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java
@@ -22,8 +22,8 @@ import java.io.IOException;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientPingMessageImpl</code> is a ping message that is periodically placed in the
@@ -43,9 +43,9 @@ public class ClientPingMessageImpl implements ClientMessage {
 
   @Override
   public Message getMessage(CacheClientProxy proxy, boolean notify) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_6622)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_6622)) {
       message = getGFEMessage();
     } else {
       throw new IOException(
@@ -56,7 +56,7 @@ public class ClientPingMessageImpl implements ClientMessage {
   }
 
   protected Message getGFEMessage() throws IOException {
-    Message message = new Message(0, Version.CURRENT);
+    Message message = new Message(0, KnownVersion.CURRENT);
     message.setMessageType(MessageType.SERVER_TO_CLIENT_PING);
     message.setTransactionId(0);
     return message;
@@ -110,7 +110,7 @@ public class ClientPingMessageImpl implements ClientMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
index 17fd036..0fa67e4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
@@ -41,8 +41,8 @@ import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -194,7 +194,7 @@ public class ClientProxyMembershipID
             ((InternalDistributedMember) systemMemberId).setDurableId(attributes.getId());
           }
         }
-        HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
         DataSerializer.writeObject(systemMemberId, hdos);
         client_side_identity = hdos.toByteArray();
       } catch (IOException ioe) {
@@ -349,11 +349,11 @@ public class ClientProxyMembershipID
     // {toString(); this.transientPort = ((InternalDistributedMember)this.memberId).getPort();}
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return Versioning
         .getKnownVersionOrDefault(
             ((InternalDistributedMember) getDistributedMember()).getVersionOrdinalObject(),
-            Version.CURRENT);
+            KnownVersion.CURRENT);
   }
 
   public String getDSMembership() {
@@ -374,7 +374,7 @@ public class ClientProxyMembershipID
   private String getMemberIdAsString() {
     String memberIdAsString = null;
     InternalDistributedMember idm = (InternalDistributedMember) getDistributedMember();
-    if (getClientVersion().isOlderThan(Version.GFE_90)) {
+    if (getClientVersion().isOlderThan(KnownVersion.GFE_90)) {
       memberIdAsString = idm.toString();
     } else {
       StringBuilder sb = new StringBuilder();
@@ -493,7 +493,7 @@ public class ClientProxyMembershipID
     // new Exception("stack trace")
     // ));
     // }
-    HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
     try {
       DataSerializer.writeObject(idm, hdos);
     } catch (IOException e) {
@@ -607,7 +607,7 @@ public class ClientProxyMembershipID
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
index 4a051d3..b50be26 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
@@ -29,7 +29,7 @@ import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.Command;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.Versioning;
@@ -44,7 +44,7 @@ class ClientRegistrationMetadata {
   private ClientProxyMembershipID clientProxyMembershipID;
   private byte clientConflation;
   private Properties clientCredentials;
-  private Version clientVersion;
+  private KnownVersion clientVersion;
   private DataInputStream dataInputStream;
   private DataOutputStream dataOutputStream;
 
@@ -106,7 +106,7 @@ class ClientRegistrationMetadata {
     return clientCredentials;
   }
 
-  Version getClientVersion() {
+  KnownVersion getClientVersion() {
     return clientVersion;
   }
 
@@ -124,7 +124,7 @@ class ClientRegistrationMetadata {
 
     final String message;
     if (clientVersion == null) {
-      message = Version.unsupportedVersionMessage(clientVersionOrdinal);
+      message = KnownVersion.unsupportedVersionMessage(clientVersionOrdinal);
     } else {
       final Map<Integer, Command> commands = CommandInitializer.getCommands(clientVersion);
       if (commands == null) {
@@ -161,15 +161,15 @@ class ClientRegistrationMetadata {
   }
 
   private boolean doesClientSupportExtractOverrides() {
-    return clientVersion.isNotOlderThan(Version.GFE_603);
+    return clientVersion.isNotOlderThan(KnownVersion.GFE_603);
   }
 
-  private boolean oldClientRequiresVersionedStreams(final Version clientVersion) {
-    return Version.CURRENT.compareTo(clientVersion) > 0;
+  private boolean oldClientRequiresVersionedStreams(final KnownVersion clientVersion) {
+    return KnownVersion.CURRENT.compareTo(clientVersion) > 0;
   }
 
-  private boolean isVersionOlderThan57(final Version clientVersion) {
-    return Version.GFE_57.compareTo(clientVersion) > 0;
+  private boolean isVersionOlderThan57(final KnownVersion clientVersion) {
+    return KnownVersion.GFE_57.compareTo(clientVersion) > 0;
   }
 
   private void getAndValidateClientProxyMembershipID()
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java
index c76409e..c6685a7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java
@@ -27,8 +27,8 @@ import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ClientTombstoneMessage extends ClientUpdateMessageImpl {
 
@@ -76,14 +76,14 @@ public class ClientTombstoneMessage extends ClientUpdateMessageImpl {
    */
   @Override
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    if (Version.GFE_70.compareTo(proxy.getVersion()) <= 0) {
+    if (KnownVersion.GFE_70.compareTo(proxy.getVersion()) <= 0) {
       return getGFE70Message(proxy.getVersion());
     } else {
       return null;
     }
   }
 
-  protected Message getGFE70Message(Version clientVersion) {
+  protected Message getGFE70Message(KnownVersion clientVersion) {
     Message message = null;
 
     // The format:
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
index 5042d45..7ef848c 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
@@ -46,8 +46,8 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -353,7 +353,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
    */
 
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     byte[] serializedValue = null;
     Message message;
     boolean conflation;
@@ -374,13 +374,13 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
         this._value = serializedValue = CacheServerHelper.serialize(latestValue);
       }
     }
-    if (clientVersion.isNotOlderThan(Version.GFE_70)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_70)) {
       message = getGFE70Message(proxy, serializedValue, conflation, clientVersion);
-    } else if (clientVersion.isNotOlderThan(Version.GFE_65)) {
+    } else if (clientVersion.isNotOlderThan(KnownVersion.GFE_65)) {
       message = getGFE65Message(proxy, serializedValue, conflation, clientVersion);
-    } else if (clientVersion.isNotOlderThan(Version.GFE_61)) {
+    } else if (clientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
       message = getGFE61Message(proxy, serializedValue, conflation, clientVersion);
-    } else if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    } else if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage(proxy.getProxyID(), latestValue, clientVersion);
     } else {
       throw new IOException(
@@ -391,7 +391,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   protected Message getGFEMessage(ClientProxyMembershipID proxyId, byte[] latestValue,
-      Version clientVersion) throws IOException {
+      KnownVersion clientVersion) throws IOException {
     Message message;
     // Add CQ info.
     int cqMsgParts = 0;
@@ -499,7 +499,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   private Message getGFE61Message(CacheClientProxy proxy, byte[] latestValue, boolean conflation,
-      Version clientVersion) throws IOException {
+      KnownVersion clientVersion) throws IOException {
     Message message;
     ClientProxyMembershipID proxyId = proxy.getProxyID();
 
@@ -663,7 +663,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   private Message getGFE65Message(CacheClientProxy proxy, byte[] p_latestValue,
-      boolean conflation, Version clientVersion) throws IOException {
+      boolean conflation, KnownVersion clientVersion) throws IOException {
     byte[] latestValue = p_latestValue;
     Message message;
     ClientProxyMembershipID proxyId = proxy.getProxyID();
@@ -824,7 +824,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
 
 
   private Message getGFE70Message(CacheClientProxy proxy, byte[] p_latestValue,
-      boolean conflation, Version clientVersion) throws IOException {
+      boolean conflation, KnownVersion clientVersion) throws IOException {
     byte[] latestValue = p_latestValue;
 
     Message message;
@@ -970,10 +970,10 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   private static final ThreadLocal<Map<Integer, Message>> CACHED_MESSAGES =
       ThreadLocal.withInitial(HashMap::new);
 
-  private Message getMessage(int numParts, Version clientVersion) {
+  private Message getMessage(int numParts, KnownVersion clientVersion) {
     Message m = CACHED_MESSAGES.get().get(numParts);
     if (m == null) {
-      m = new Message(numParts, Version.CURRENT);
+      m = new Message(numParts, KnownVersion.CURRENT);
       CACHED_MESSAGES.get().put(numParts, m);
     }
     m.clearParts();
@@ -1396,7 +1396,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java
index 2376624..cbce1b2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java
@@ -103,7 +103,7 @@ import org.apache.geode.internal.cache.tier.sockets.command.TXSynchronizationCom
 import org.apache.geode.internal.cache.tier.sockets.command.UnregisterInterest;
 import org.apache.geode.internal.cache.tier.sockets.command.UnregisterInterestList;
 import org.apache.geode.internal.cache.tier.sockets.command.UpdateClientNotification;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * A <code>CommandInitializer</code> maintains version specific commands map.
@@ -114,7 +114,7 @@ import org.apache.geode.internal.serialization.Version;
 public class CommandInitializer {
 
   @Immutable
-  static final Map<Version, Map<Integer, Command>> ALL_COMMANDS = initializeAllCommands();
+  static final Map<KnownVersion, Map<Integer, Command>> ALL_COMMANDS = initializeAllCommands();
 
   /**
    * Register a new command with the system.
@@ -125,12 +125,13 @@ public class CommandInitializer {
    *        earliest version for which this command class is valid (starting with GFE_57). The value
    *        is the command object for clients starting with that version.
    */
-  public static void registerCommand(int messageType, Map<Version, Command> versionToNewCommand) {
+  public static void registerCommand(int messageType,
+      Map<KnownVersion, Command> versionToNewCommand) {
     Command command = null;
     // Iterate through all the gemfire versions, and
     // add a command to the map for that version
-    for (Map.Entry<Version, Map<Integer, Command>> entry : ALL_COMMANDS.entrySet()) {
-      Version version = entry.getKey();
+    for (Map.Entry<KnownVersion, Map<Integer, Command>> entry : ALL_COMMANDS.entrySet()) {
+      KnownVersion version = entry.getKey();
 
       // Get the current set of commands for this version.
       Map<Integer, Command> commandMap = entry.getValue();
@@ -154,15 +155,15 @@ public class CommandInitializer {
     }
   }
 
-  private static Map<Version, Map<Integer, Command>> initializeAllCommands() {
-    final LinkedHashMap<Version, Map<Integer, Command>> allCommands =
-        new LinkedHashMap<Version, Map<Integer, Command>>();
+  private static Map<KnownVersion, Map<Integer, Command>> initializeAllCommands() {
+    final LinkedHashMap<KnownVersion, Map<Integer, Command>> allCommands =
+        new LinkedHashMap<KnownVersion, Map<Integer, Command>>();
 
-    allCommands.put(Version.GFE_56, new HashMap<>());
+    allCommands.put(KnownVersion.GFE_56, new HashMap<>());
 
     // Initialize the GFE 5.7 commands
     Map<Integer, Command> gfe57Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_57, gfe57Commands);
+    allCommands.put(KnownVersion.GFE_57, gfe57Commands);
     gfe57Commands.put(MessageType.PING, Ping.getCommand());
     gfe57Commands.put(MessageType.REQUEST, Request.getCommand());
     gfe57Commands.put(MessageType.PUT, Put.getCommand());
@@ -193,20 +194,20 @@ public class CommandInitializer {
 
     // Initialize the GFE 5.8 commands example
     Map<Integer, Command> gfe58Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_58, gfe58Commands);
-    gfe58Commands.putAll(allCommands.get(Version.GFE_57));
+    allCommands.put(KnownVersion.GFE_58, gfe58Commands);
+    gfe58Commands.putAll(allCommands.get(KnownVersion.GFE_57));
     gfe58Commands.put(MessageType.EXECUTE_REGION_FUNCTION, ExecuteRegionFunction.getCommand());
     gfe58Commands.put(MessageType.EXECUTE_FUNCTION, ExecuteFunction.getCommand());
 
     // Initialize the GFE 6.0.3 commands map
     Map<Integer, Command> gfe603Commands =
-        new HashMap<Integer, Command>(allCommands.get(Version.GFE_58));
-    allCommands.put(Version.GFE_603, gfe603Commands);
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GFE_58));
+    allCommands.put(KnownVersion.GFE_603, gfe603Commands);
 
     // Initialize the GFE 6.1 commands
     Map<Integer, Command> gfe61Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_61, gfe61Commands);
-    gfe61Commands.putAll(allCommands.get(Version.GFE_603));
+    allCommands.put(KnownVersion.GFE_61, gfe61Commands);
+    gfe61Commands.putAll(allCommands.get(KnownVersion.GFE_603));
     gfe61Commands.put(MessageType.REGISTER_INTEREST, RegisterInterest61.getCommand());
     gfe61Commands.put(MessageType.REGISTER_INTEREST_LIST, RegisterInterestList61.getCommand());
     gfe61Commands.put(MessageType.REQUEST_EVENT_VALUE, RequestEventValue.getCommand());
@@ -215,8 +216,8 @@ public class CommandInitializer {
 
     // Initialize the GFE 6.5 commands
     Map<Integer, Command> gfe65Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_65, gfe65Commands);
-    gfe65Commands.putAll(allCommands.get(Version.GFE_61));
+    allCommands.put(KnownVersion.GFE_65, gfe65Commands);
+    gfe65Commands.putAll(allCommands.get(KnownVersion.GFE_61));
     gfe65Commands.put(MessageType.DESTROY, Destroy65.getCommand());
     gfe65Commands.put(MessageType.PUT, Put65.getCommand());
     gfe65Commands.put(MessageType.EXECUTE_REGION_FUNCTION, ExecuteRegionFunction65.getCommand());
@@ -231,22 +232,22 @@ public class CommandInitializer {
 
     // Initialize the GFE 6.5.1 commands
     Map<Integer, Command> gfe651Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_651, gfe651Commands);
-    gfe651Commands.putAll(allCommands.get(Version.GFE_65));
+    allCommands.put(KnownVersion.GFE_651, gfe651Commands);
+    gfe651Commands.putAll(allCommands.get(KnownVersion.GFE_65));
     gfe651Commands.put(MessageType.QUERY_WITH_PARAMETERS, Query651.getCommand());
 
     // Initialize the GFE 6.5.1.6 commands
     Map<Integer, Command> gfe6516Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_6516, gfe6516Commands);
-    gfe6516Commands.putAll(allCommands.get(Version.GFE_651));
+    allCommands.put(KnownVersion.GFE_6516, gfe6516Commands);
+    gfe6516Commands.putAll(allCommands.get(KnownVersion.GFE_651));
     gfe6516Commands.put(MessageType.GET_ALL, GetAll651.getCommand());
     gfe6516Commands.put(MessageType.GET_CLIENT_PR_METADATA,
         GetClientPRMetadataCommand66.getCommand());
 
     // Initialize the GFE 6.6 commands
     Map<Integer, Command> gfe66Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_66, gfe66Commands);
-    gfe66Commands.putAll(allCommands.get(Version.GFE_6516));
+    allCommands.put(KnownVersion.GFE_66, gfe66Commands);
+    gfe66Commands.putAll(allCommands.get(KnownVersion.GFE_6516));
     gfe66Commands.put(MessageType.ADD_PDX_TYPE, AddPdxType.getCommand());
     gfe66Commands.put(MessageType.GET_PDX_ID_FOR_TYPE, GetPDXIdForType.getCommand());
     gfe66Commands.put(MessageType.GET_PDX_TYPE_BY_ID, GetPDXTypeById.getCommand());
@@ -269,20 +270,20 @@ public class CommandInitializer {
 
     // Initialize the GFE 6.6.2 commands
     Map<Integer, Command> gfe662Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_662, gfe662Commands);
-    gfe662Commands.putAll(allCommands.get(Version.GFE_66));
+    allCommands.put(KnownVersion.GFE_662, gfe662Commands);
+    gfe662Commands.putAll(allCommands.get(KnownVersion.GFE_66));
     gfe662Commands.put(MessageType.ADD_PDX_ENUM, AddPdxEnum.getCommand());
     gfe662Commands.put(MessageType.GET_PDX_ID_FOR_ENUM, GetPDXIdForEnum.getCommand());
     gfe662Commands.put(MessageType.GET_PDX_ENUM_BY_ID, GetPDXEnumById.getCommand());
 
     // Initialize the GFE 6.6.2.2 commands (same commands as the GFE 6.6.2 commands)
     // The SERVER_TO_CLIENT_PING message was added, but it doesn't need to be registered here
-    allCommands.put(Version.GFE_6622, gfe662Commands);
+    allCommands.put(KnownVersion.GFE_6622, gfe662Commands);
 
     // Initialize the GFE 70 commands
     Map<Integer, Command> gfe70Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_70, gfe70Commands);
-    gfe70Commands.putAll(allCommands.get(Version.GFE_662));
+    allCommands.put(KnownVersion.GFE_70, gfe70Commands);
+    gfe70Commands.putAll(allCommands.get(KnownVersion.GFE_662));
     gfe70Commands.remove(MessageType.GET_ALL_FOR_RI);
     gfe70Commands.put(MessageType.REQUEST, Get70.getCommand());
     gfe70Commands.put(MessageType.GET_ENTRY, GetEntry70.getCommand());
@@ -295,56 +296,57 @@ public class CommandInitializer {
     gfe70Commands.put(MessageType.GET_PDX_ENUMS, GetPdxEnums70.getCommand());
     gfe70Commands.put(MessageType.EXECUTE_FUNCTION, ExecuteFunction70.getCommand());
 
-    allCommands.put(Version.GFE_701, gfe70Commands);
-    allCommands.put(Version.GFE_7099, gfe70Commands);
-    allCommands.put(Version.GFE_71, gfe70Commands);
+    allCommands.put(KnownVersion.GFE_701, gfe70Commands);
+    allCommands.put(KnownVersion.GFE_7099, gfe70Commands);
+    allCommands.put(KnownVersion.GFE_71, gfe70Commands);
 
     Map<Integer, Command> gfe80Commands =
-        new HashMap<Integer, Command>(allCommands.get(Version.GFE_71));
-    allCommands.put(Version.GFE_80, gfe80Commands);
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GFE_71));
+    allCommands.put(KnownVersion.GFE_80, gfe80Commands);
     // PutAll is changed to chunk responses back to the client
     gfe80Commands.put(MessageType.PUTALL, PutAll80.getCommand());
 
-    allCommands.put(Version.GFE_8009, gfe80Commands);
+    allCommands.put(KnownVersion.GFE_8009, gfe80Commands);
 
     Map<Integer, Command> gfe81Commands = new HashMap<Integer, Command>(gfe80Commands);
     gfe81Commands.put(MessageType.GET_ALL_WITH_CALLBACK, GetAllWithCallback.getCommand());
     gfe81Commands.put(MessageType.PUT_ALL_WITH_CALLBACK, PutAllWithCallback.getCommand());
     gfe81Commands.put(MessageType.REMOVE_ALL, RemoveAll.getCommand());
 
-    allCommands.put(Version.GFE_81, gfe81Commands);
-    allCommands.put(Version.GFE_82, gfe81Commands);
+    allCommands.put(KnownVersion.GFE_81, gfe81Commands);
+    allCommands.put(KnownVersion.GFE_82, gfe81Commands);
 
-    Map<Integer, Command> commands = new HashMap<Integer, Command>(allCommands.get(Version.GFE_82));
-    allCommands.put(Version.GFE_90, commands);
+    Map<Integer, Command> commands =
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GFE_82));
+    allCommands.put(KnownVersion.GFE_90, commands);
     commands.put(MessageType.QUERY_WITH_PARAMETERS, QueryWithParametersGeode10.getCommand());
     commands.put(MessageType.QUERY, QueryGeode10.getCommand());
 
-    allCommands.put(Version.GEODE_1_1_0, commands);
-    allCommands.put(Version.GEODE_1_1_1, commands);
-    allCommands.put(Version.GEODE_1_2_0, commands);
-    allCommands.put(Version.GEODE_1_3_0, commands);
-    allCommands.put(Version.GEODE_1_4_0, commands);
-    allCommands.put(Version.GEODE_1_5_0, commands);
-    allCommands.put(Version.GEODE_1_6_0, commands);
-    allCommands.put(Version.GEODE_1_7_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_1_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_1_1, commands);
+    allCommands.put(KnownVersion.GEODE_1_2_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_3_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_4_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_5_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_6_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_7_0, commands);
 
     Map<Integer, Command> geode18Commands =
-        new HashMap<Integer, Command>(allCommands.get(Version.GEODE_1_7_0));
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GEODE_1_7_0));
     geode18Commands.put(MessageType.EXECUTE_REGION_FUNCTION,
         ExecuteRegionFunctionGeode18.getCommand());
-    allCommands.put(Version.GEODE_1_8_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_9_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_10_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_11_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_12_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_13_0, geode18Commands);
-
-    allCommands.put(Version.GEODE_1_14_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_8_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_9_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_10_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_11_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_12_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_13_0, geode18Commands);
+
+    allCommands.put(KnownVersion.GEODE_1_14_0, geode18Commands);
     return Collections.unmodifiableMap(allCommands);
   }
 
-  public static Map<Integer, Command> getCommands(Version version) {
+  public static Map<Integer, Command> getCommands(KnownVersion version) {
     return ALL_COMMANDS.get(version);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
index 00b6495..73a345c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
@@ -69,7 +69,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.GemFireSecurityException;
 
@@ -413,7 +413,7 @@ public class EncryptorImpl implements Encryptor {
         // PublicKey pubKey = keyFact.generatePublic(x509KeySpec);
         this.clientPublicKey = keyFact.generatePublic(x509KeySpec);
 
-        try (HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT)) {
+        try (HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
           // Add the challenge string
           DataSerializer.writeByteArray(serverChallenge, hdos);
           // byte[] encBytes = encrypt.doFinal(hdos.toByteArray());
@@ -498,7 +498,7 @@ public class EncryptorImpl implements Encryptor {
 
 
 
-        HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
         try {
           DataSerializer.writeProperties(p_credentials, hdos);
           // Also add the challenge string
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
index 9d0f95c..9ac47e9 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
@@ -35,8 +35,8 @@ import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl.CqNa
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -393,7 +393,7 @@ public class HAEventWrapper implements Conflatable, DataSerializableFixedID, Siz
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java
index baa9283..9755475 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java
@@ -41,7 +41,7 @@ import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.security.CallbackInstantiator;
 import org.apache.geode.internal.security.Credentials;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.AuthInitialize;
 import org.apache.geode.security.AuthenticationFailedException;
@@ -75,7 +75,7 @@ public abstract class Handshake {
    * @since GemFire 5.7
    */
   @MutableForTesting
-  protected static Version currentClientVersion = ConnectionProxy.VERSION;
+  protected static KnownVersion currentClientVersion = ConnectionProxy.VERSION;
 
   protected SecurityService securityService;
 
@@ -223,7 +223,7 @@ public abstract class Handshake {
   public void writeCredentials(DataOutputStream dos, DataInputStream dis, Properties p_credentials,
       boolean isNotification, DistributedMember member)
       throws IOException, GemFireSecurityException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
     try {
       writeCredentials(dos, dis, p_credentials, isNotification, member, hdos);
     } finally {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
index 66a134f..ff4f885 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
@@ -23,8 +23,8 @@ import java.io.IOException;
 import org.apache.geode.cache.InterestResultPolicy;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Used to make InterestResultPolicy implement DataSerializableFixedID
@@ -60,7 +60,7 @@ public class InterestResultPolicyImpl extends InterestResultPolicy
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java
index 3d73565..4a617d1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java
@@ -37,7 +37,7 @@ import org.apache.geode.internal.cache.TXManagerImpl;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Unretained;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -169,12 +169,12 @@ public class Message {
   Part securePart = null;
   private boolean isMetaRegion = false;
 
-  private Version version;
+  private KnownVersion version;
 
   /**
    * Creates a new message with the given number of parts
    */
-  public Message(int numberOfParts, Version destVersion) {
+  public Message(int numberOfParts, KnownVersion destVersion) {
     this.version = destVersion;
     Assert.assertTrue(destVersion != null, "Attempt to create an unversioned message");
     this.partsList = new Part[numberOfParts];
@@ -202,7 +202,7 @@ public class Message {
     this.messageType = msgType;
   }
 
-  public void setVersion(Version clientVersion) {
+  public void setVersion(KnownVersion clientVersion) {
     this.version = clientVersion;
   }
 
@@ -371,8 +371,8 @@ public class Message {
   }
 
   private void serializeAndAddPartNoCopying(Object o) {
-    Version v = this.version;
-    if (this.version.equals(Version.CURRENT)) {
+    KnownVersion v = this.version;
+    if (this.version.equals(KnownVersion.CURRENT)) {
       v = null;
     }
 
@@ -395,8 +395,8 @@ public class Message {
       throw new UnsupportedOperationException("zipValues no longer supported");
     }
 
-    Version v = this.version;
-    if (this.version.equals(Version.CURRENT)) {
+    KnownVersion v = this.version;
+    if (this.version.equals(KnownVersion.CURRENT)) {
       v = null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java
index 91b1496..0b75c86 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.ha.HARegionQueueAttributes;
 import org.apache.geode.internal.cache.ha.HARegionQueueStats;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -137,7 +137,7 @@ public class MessageDispatcher extends LoggingThread {
       ((HAContainerWrapper) proxy._cacheClientNotifier.getHaContainer())
           .putProxy(HARegionQueue.createRegionName(getProxy().getHARegionName()), getProxy());
       boolean createDurableQueue = proxy.proxyID.isDurable();
-      boolean canHandleDelta = (proxy.getClientVersion().isNotOlderThan(Version.GFE_61))
+      boolean canHandleDelta = (proxy.getClientVersion().isNotOlderThan(KnownVersion.GFE_61))
           && InternalDistributedSystem.getAnyInstance().getConfig().getDeltaPropagation()
           && !(this._proxy.clientConflation == Handshake.CONFLATION_ON);
       if ((createDurableQueue || canHandleDelta) && logger.isDebugEnabled()) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
index cb4f5d2..9a710e3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
@@ -30,8 +30,8 @@ import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.offheap.Releasable;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -249,7 +249,7 @@ public class ObjectPartList implements DataSerializableFixedID, Releasable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java
index 3663902..45344c8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java
@@ -19,7 +19,7 @@ import java.io.DataInput;
 import java.io.DataOutput;
 
 import org.apache.geode.internal.cache.CacheService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Support for old GemFire clients
@@ -33,7 +33,7 @@ public interface OldClientSupportService extends CacheService {
    * @param clientVersion the version of the client
    * @return the exception to give the client
    */
-  Throwable getThrowable(Throwable theThrowable, Version clientVersion);
+  Throwable getThrowable(Throwable theThrowable, KnownVersion clientVersion);
 
   /**
    * Process a class name read from a serialized object of unknown origin
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
index 9654cee..7f26668 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.offheap.AddressableMemoryManager;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Represents one unit of information (essentially a <code>byte</code> array) in the wire protocol.
@@ -44,7 +44,7 @@ public class Part {
   private static final byte BYTE_CODE = 0;
   private static final byte OBJECT_CODE = 1;
 
-  private Version version;
+  private KnownVersion version;
 
   /**
    * Used to represent and empty byte array for bug 36279
@@ -534,7 +534,7 @@ public class Part {
     return sb.toString();
   }
 
-  public void setVersion(Version clientVersion) {
+  public void setVersion(KnownVersion clientVersion) {
     this.version = clientVersion;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
index d47e39d..2ecd411 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
@@ -69,7 +69,7 @@ import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.AuthenticationFailedException;
@@ -170,20 +170,20 @@ public abstract class ServerConnection implements Runnable {
 
   // IMPORTANT: if new messages are added change setHandshake to initialize them
   // to the correct Version for serializing to the client
-  private Message requestMessage = new Message(2, Version.CURRENT);
-  private final Message replyMessage = new Message(1, Version.CURRENT);
-  private final Message responseMessage = new Message(1, Version.CURRENT);
-  private final Message errorMessage = new Message(1, Version.CURRENT);
+  private Message requestMessage = new Message(2, KnownVersion.CURRENT);
+  private final Message replyMessage = new Message(1, KnownVersion.CURRENT);
+  private final Message responseMessage = new Message(1, KnownVersion.CURRENT);
+  private final Message errorMessage = new Message(1, KnownVersion.CURRENT);
 
   // IMPORTANT: if new messages are added change setHandshake to initialize them
   // to the correct Version for serializing to the client
-  private final ChunkedMessage queryResponseMessage = new ChunkedMessage(2, Version.CURRENT);
-  private final ChunkedMessage chunkedResponseMessage = new ChunkedMessage(1, Version.CURRENT);
+  private final ChunkedMessage queryResponseMessage = new ChunkedMessage(2, KnownVersion.CURRENT);
+  private final ChunkedMessage chunkedResponseMessage = new ChunkedMessage(1, KnownVersion.CURRENT);
   private final ChunkedMessage executeFunctionResponseMessage =
-      new ChunkedMessage(1, Version.CURRENT);
+      new ChunkedMessage(1, KnownVersion.CURRENT);
   private final ChunkedMessage registerInterestResponseMessage =
-      new ChunkedMessage(1, Version.CURRENT);
-  private final ChunkedMessage keySetResponseMessage = new ChunkedMessage(1, Version.CURRENT);
+      new ChunkedMessage(1, KnownVersion.CURRENT);
+  private final ChunkedMessage keySetResponseMessage = new ChunkedMessage(1, KnownVersion.CURRENT);
 
   @Deprecated
   private final InternalLogWriter logWriter;
@@ -362,7 +362,7 @@ public abstract class ServerConnection implements Runnable {
 
         setHandshake(readHandshake);
         setProxyId(readHandshake.getMembershipId());
-        if (readHandshake.getVersion().isOlderThan(Version.GFE_65)
+        if (readHandshake.getVersion().isOlderThan(KnownVersion.GFE_65)
             || getCommunicationMode().isWAN()) {
           try {
             setAuthAttributes();
@@ -469,7 +469,7 @@ public abstract class ServerConnection implements Runnable {
 
   public void setHandshake(ServerSideHandshake handshake) {
     this.handshake = handshake;
-    Version v = handshake.getVersion();
+    KnownVersion v = handshake.getVersion();
 
     replyMessage.setVersion(v);
     requestMessage.setVersion(v);
@@ -487,7 +487,7 @@ public abstract class ServerConnection implements Runnable {
     this.requestMessage = requestMessage;
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return handshake.getVersion();
   }
 
@@ -1125,7 +1125,7 @@ public abstract class ServerConnection implements Runnable {
   public Part updateAndGetSecurityPart() {
     // need to take care all message types here
     if (AcceptorImpl.isAuthenticationRequired()
-        && handshake.getVersion().isNotOlderThan(Version.GFE_65)
+        && handshake.getVersion().isNotOlderThan(KnownVersion.GFE_65)
         && !communicationMode.isWAN() && !requestMessage.getAndResetIsMetaRegion()
         && !isInternalMessage(requestMessage, allowInternalMessagesWithoutCredentials)) {
       setSecurityPart();
@@ -1652,7 +1652,8 @@ public abstract class ServerConnection implements Runnable {
 
   private byte[] encryptId(long id) throws Exception {
     // deserialize this using handshake keys
-    try (HeapDataOutputStream heapDataOutputStream = new HeapDataOutputStream(Version.CURRENT)) {
+    try (HeapDataOutputStream heapDataOutputStream =
+        new HeapDataOutputStream(KnownVersion.CURRENT)) {
 
       heapDataOutputStream.writeLong(id);
 
@@ -1663,7 +1664,7 @@ public abstract class ServerConnection implements Runnable {
   public long getUniqueId() {
     long uniqueId;
 
-    if (handshake.getVersion().isOlderThan(Version.GFE_65) || communicationMode.isWAN()) {
+    if (handshake.getVersion().isOlderThan(KnownVersion.GFE_65) || communicationMode.isWAN()) {
       uniqueId = userAuthId;
     } else if (requestMessage.isSecureMode()) {
       uniqueId = messageIdExtractor.getUniqueIdFromMessage(requestMessage,
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
index 7f86825..c2ff9b3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
@@ -31,7 +31,7 @@ import org.apache.geode.internal.cache.tier.Command;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -40,18 +40,18 @@ class ServerSideHandshakeFactory {
   private static final Logger logger = LogService.getLogger();
 
   @Immutable
-  static final Version currentServerVersion = Version.CURRENT;
+  static final KnownVersion currentServerVersion = KnownVersion.CURRENT;
 
   ServerSideHandshake readHandshake(Socket socket, int timeout, CommunicationMode communicationMode,
       DistributedSystem system, SecurityService securityService) throws Exception {
     // Read the version byte from the socket
-    Version clientVersion = readClientVersion(socket, timeout, communicationMode.isWAN());
+    KnownVersion clientVersion = readClientVersion(socket, timeout, communicationMode.isWAN());
 
     if (logger.isDebugEnabled()) {
       logger.debug("Client version: {}", clientVersion);
     }
 
-    if (clientVersion.isOlderThan(Version.GFE_57)) {
+    if (clientVersion.isOlderThan(KnownVersion.GFE_57)) {
       throw new UnsupportedVersionException("Unsupported version " + clientVersion
           + "Server's current version " + currentServerVersion);
     }
@@ -60,7 +60,7 @@ class ServerSideHandshakeFactory {
         securityService);
   }
 
-  private Version readClientVersion(Socket socket, int timeout, boolean isWan)
+  private KnownVersion readClientVersion(Socket socket, int timeout, boolean isWan)
       throws IOException, VersionException {
     int soTimeout = -1;
     try {
@@ -72,11 +72,11 @@ class ServerSideHandshakeFactory {
         throw new EOFException(
             "HandShakeReader: EOF reached before client version could be read");
       }
-      final Version clientVersion = Versioning.getKnownVersionOrDefault(
+      final KnownVersion clientVersion = Versioning.getKnownVersionOrDefault(
           Versioning.getVersionOrdinal(clientVersionOrdinal), null);
       final String message;
       if (clientVersion == null) {
-        message = Version.unsupportedVersionMessage(clientVersionOrdinal);
+        message = KnownVersion.unsupportedVersionMessage(clientVersionOrdinal);
       } else {
         final Map<Integer, Command> commands = CommandInitializer.getCommands(clientVersion);
         if (commands == null) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
index e4c62e0..44d71af 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
@@ -34,7 +34,7 @@ import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.VersionedDataStream;
@@ -44,9 +44,9 @@ import org.apache.geode.security.AuthenticationRequiredException;
 
 public class ServerSideHandshakeImpl extends Handshake implements ServerSideHandshake {
   @Immutable
-  private static final Version currentServerVersion =
+  private static final KnownVersion currentServerVersion =
       ServerSideHandshakeFactory.currentServerVersion;
-  private Version clientVersion;
+  private KnownVersion clientVersion;
 
   private final byte replyCode;
 
@@ -59,7 +59,8 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
    * HandShake Constructor used by server side connection
    */
   public ServerSideHandshakeImpl(Socket sock, int timeout, DistributedSystem sys,
-      Version clientVersion, CommunicationMode communicationMode, SecurityService securityService)
+      KnownVersion clientVersion, CommunicationMode communicationMode,
+      SecurityService securityService)
       throws IOException, AuthenticationRequiredException {
 
     this.clientVersion = clientVersion;
@@ -86,7 +87,7 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
         DataInputStream dataInputStream = new DataInputStream(inputStream);
         DataOutputStream dataOutputStream = new DataOutputStream(sock.getOutputStream());
         this.clientReadTimeout = dataInputStream.readInt();
-        if (clientVersion.isOlderThan(Version.CURRENT)) {
+        if (clientVersion.isOlderThan(KnownVersion.CURRENT)) {
           // versioned streams allow object serialization code to deal with older clients
           dataInputStream = new VersionedDataInputStream(dataInputStream, clientVersion);
           dataOutputStream =
@@ -95,12 +96,12 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
         this.id = ClientProxyMembershipID.readCanonicalized(dataInputStream);
         // Note: credentials should always be the last piece in handshake for
         // Diffie-Hellman key exchange to work
-        if (clientVersion.isNotOlderThan(Version.GFE_603)) {
+        if (clientVersion.isNotOlderThan(KnownVersion.GFE_603)) {
           setOverrides(new byte[] {dataInputStream.readByte()});
         } else {
           setClientConflation(dataInputStream.readByte());
         }
-        if (this.clientVersion.isOlderThan(Version.GFE_65) || communicationMode.isWAN()) {
+        if (this.clientVersion.isOlderThan(KnownVersion.GFE_65) || communicationMode.isWAN()) {
           this.credentials =
               readCredentials(dataInputStream, dataOutputStream, sys, this.securityService);
         } else {
@@ -120,12 +121,12 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
     }
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return this.clientVersion;
   }
 
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.clientVersion;
   }
 
@@ -134,7 +135,7 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
       int queueSize, CommunicationMode communicationMode, Principal principal) throws IOException {
     DataOutputStream dos = new DataOutputStream(out);
     DataInputStream dis;
-    if (clientVersion.isOlderThan(Version.CURRENT)) {
+    if (clientVersion.isOlderThan(KnownVersion.CURRENT)) {
       dis = new VersionedDataInputStream(in, clientVersion);
       dos = new VersionedDataOutputStream(dos, clientVersion);
     } else {
@@ -159,9 +160,9 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
     // Write the server's member
     DistributedMember member = this.system.getDistributedMember();
 
-    Version v = Version.CURRENT;
+    KnownVersion v = KnownVersion.CURRENT;
     if (dos instanceof VersionedDataStream) {
-      v = (Version) ((VersionedDataStream) dos).getVersion();
+      v = (KnownVersion) ((VersionedDataStream) dos).getVersion();
     }
     HeapDataOutputStream hdos = new HeapDataOutputStream(v);
     DataSerializer.writeObject(member, hdos);
@@ -172,7 +173,7 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
     dos.writeUTF("");
 
     // Write delta-propagation property value if this is not WAN.
-    if (!communicationMode.isWAN() && this.clientVersion.isNotOlderThan(Version.GFE_61)) {
+    if (!communicationMode.isWAN() && this.clientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
       dos.writeBoolean(((InternalDistributedSystem) this.system).getConfig().getDeltaPropagation());
     }
 
@@ -184,14 +185,14 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
 
     // Write the distributed system id if this is a 6.6 or greater client
     // on the remote side of the gateway
-    if (communicationMode.isWAN() && this.clientVersion.isNotOlderThan(Version.GFE_66)
-        && currentServerVersion.isNotOlderThan(Version.GFE_66)) {
+    if (communicationMode.isWAN() && this.clientVersion.isNotOlderThan(KnownVersion.GFE_66)
+        && currentServerVersion.isNotOlderThan(KnownVersion.GFE_66)) {
       dos.writeByte(((InternalDistributedSystem) this.system).getDistributionManager()
           .getDistributedSystemId());
     }
 
-    if ((communicationMode.isWAN()) && this.clientVersion.isNotOlderThan(Version.GFE_80)
-        && currentServerVersion.isNotOlderThan(Version.GFE_80)) {
+    if ((communicationMode.isWAN()) && this.clientVersion.isNotOlderThan(KnownVersion.GFE_80)
+        && currentServerVersion.isNotOlderThan(KnownVersion.GFE_80)) {
       int pdxSize = PeerTypeRegistration.getPdxRegistrySize();
       dos.writeInt(pdxSize);
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java
index a18b750..4a4a8bb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java
@@ -24,7 +24,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.Instantiator;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 public class SocketMessageWriter {
@@ -32,7 +32,7 @@ public class SocketMessageWriter {
       Integer.getInteger(GeodeGlossary.GEMFIRE_PREFIX + "serverToClientPingPeriod", 60000);
 
   public void writeHandshakeMessage(DataOutputStream dos, byte type, String p_msg,
-      Version clientVersion, byte endpointType, int queueSize) throws IOException {
+      KnownVersion clientVersion, byte endpointType, int queueSize) throws IOException {
     String msg = p_msg;
 
     // write the message type
@@ -45,7 +45,7 @@ public class SocketMessageWriter {
       msg = "";
     }
     dos.writeUTF(msg);
-    if (clientVersion != null && clientVersion.isNotOlderThan(Version.GFE_61)) {
+    if (clientVersion != null && clientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
       // get all the instantiators.
       Instantiator[] instantiators = InternalInstantiator.getInstantiators();
       HashMap instantiatorMap = new HashMap();
@@ -68,7 +68,7 @@ public class SocketMessageWriter {
         for (DataSerializer dataSerializer : dataSerializers) {
           dataSerializersMap.put(dataSerializer.getId(),
               dataSerializer.getClass().toString().substring(6));
-          if (clientVersion.isNotOlderThan(Version.GFE_6516)) {
+          if (clientVersion.isNotOlderThan(KnownVersion.GFE_6516)) {
             ArrayList<String> supportedClassNames = new ArrayList<String>();
             for (Class clazz : dataSerializer.getSupportedClasses()) {
               supportedClassNames.add(clazz.getName());
@@ -78,10 +78,10 @@ public class SocketMessageWriter {
         }
       }
       DataSerializer.writeHashMap(dataSerializersMap, dos);
-      if (clientVersion.isNotOlderThan(Version.GFE_6516)) {
+      if (clientVersion.isNotOlderThan(KnownVersion.GFE_6516)) {
         DataSerializer.writeHashMap(dsToSupportedClasses, dos);
       }
-      if (clientVersion.isNotOlderThan(Version.GEODE_1_5_0)) {
+      if (clientVersion.isNotOlderThan(KnownVersion.GEODE_1_5_0)) {
         dos.writeInt(CLIENT_PING_TASK_PERIOD);
       }
     }
@@ -95,7 +95,8 @@ public class SocketMessageWriter {
    * @param type a byte representing the exception type
    * @param ex the exception to be written; should not be null
    */
-  public void writeException(DataOutputStream dos, byte type, Exception ex, Version clientVersion)
+  public void writeException(DataOutputStream dos, byte type, Exception ex,
+      KnownVersion clientVersion)
       throws IOException {
     writeHandshakeMessage(dos, type, ex.toString(), clientVersion, (byte) 0x00, 0);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
index 5628f2d..023690f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
@@ -46,8 +46,8 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -298,10 +298,11 @@ public class VersionedObjectList extends ObjectPartList implements Externalizabl
   }
 
   @Immutable
-  private static final Version[] serializationVersions = new Version[] {Version.GFE_80};
+  private static final KnownVersion[] serializationVersions =
+      new KnownVersion[] {KnownVersion.GFE_80};
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
@@ -778,7 +779,7 @@ public class VersionedObjectList extends ObjectPartList implements Externalizabl
     // }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return this.list.getSerializationVersions();
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java
index 27f94f6..00cb4af 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java
@@ -25,7 +25,7 @@ import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class CloseConnection extends BaseCommand {
 
@@ -43,7 +43,8 @@ public class CloseConnection extends BaseCommand {
       final SecurityService securityService, long start) throws IOException {
     CacheServerStats stats = serverConnection.getCacheServerStats();
     long oldStart = start;
-    boolean respondToClient = serverConnection.getClientVersion().isNotOlderThan(Version.GFE_90);
+    boolean respondToClient =
+        serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_90);
     start = DistributionStats.getStatTime();
     stats.incReadCloseConnectionRequestTime(start - oldStart);
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java
index ea7b402..bb68e04 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java
@@ -56,7 +56,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 
 /**
@@ -113,7 +113,7 @@ public class ExecuteFunction66 extends BaseCommand {
       byte[] bytes = clientMessage.getPart(0).getSerializedForm();
       functionState = bytes[0];
       if (bytes.length >= 5
-          && serverConnection.getClientVersion().ordinal() >= Version.GFE_8009.ordinal()) {
+          && serverConnection.getClientVersion().ordinal() >= KnownVersion.GFE_8009.ordinal()) {
         functionTimeout = Part.decodeInt(bytes, 1);
       }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java
index 2e6a75e..bc6da8f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java
@@ -49,7 +49,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * @since GemFire 6.6
@@ -84,7 +84,7 @@ public class ExecuteRegionFunction66 extends BaseCommand {
       byte[] bytes = clientMessage.getPart(0).getSerializedForm();
       functionState = bytes[0];
       if (bytes.length >= 5
-          && serverConnection.getClientVersion().ordinal() >= Version.GFE_8009.ordinal()) {
+          && serverConnection.getClientVersion().ordinal() >= KnownVersion.GFE_8009.ordinal()) {
         functionTimeout = Part.decodeInt(bytes, 1);
       }
       if (functionState != 1) {
@@ -103,7 +103,7 @@ public class ExecuteRegionFunction66 extends BaseCommand {
       memberMappedArg = extractMemberMappedArgument(part);
 
       byte[] flags = clientMessage.getPart(5).getSerializedForm();
-      if (serverConnection.getClientVersion().ordinal() > Version.GFE_81.ordinal()) {
+      if (serverConnection.getClientVersion().ordinal() > KnownVersion.GFE_81.ordinal()) {
         isBucketsAsFilter = (flags[0] & ExecuteFunctionHelper.BUCKETS_AS_FILTER_MASK) != 0;
         isReExecute = (flags[0] & ExecuteFunctionHelper.IS_REXECUTE_MASK) != 0 ? (byte) 1 : 0;
       } else {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java
index c4946c4..98c848f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * @since GemFire 6.5
@@ -85,7 +85,7 @@ public class ExecuteRegionFunctionSingleHop extends BaseCommand {
       byte[] bytes = clientMessage.getPart(0).getSerializedForm();
       functionState = bytes[0];
       if (bytes.length >= 5
-          && serverConnection.getClientVersion().ordinal() >= Version.GFE_8009.ordinal()) {
+          && serverConnection.getClientVersion().ordinal() >= KnownVersion.GFE_8009.ordinal()) {
         functionTimeout = Part.decodeInt(bytes, 1);
       }
       if (functionState != 1) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
index df6f5f6..c345130 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
@@ -45,7 +45,7 @@ import org.apache.geode.internal.cache.wan.BatchException70;
 import org.apache.geode.internal.cache.wan.GatewayReceiverStats;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.pdx.PdxConfigurationException;
 import org.apache.geode.pdx.PdxRegistryMismatchException;
@@ -802,7 +802,7 @@ public class GatewayReceiverCommand extends BaseCommand {
     // For older gateway senders, we need to send back an exception
     // they can deserialize.
     if ((servConn.getClientVersion() == null
-        || servConn.getClientVersion().isOlderThan(Version.GFE_80))
+        || servConn.getClientVersion().isOlderThan(KnownVersion.GFE_80))
         && exception instanceof PdxRegistryMismatchException) {
       PdxConfigurationException newException =
           new PdxConfigurationException(exception.getMessage());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java
index 8d007d7..e40193b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java
@@ -38,7 +38,7 @@ import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -282,7 +282,7 @@ public class GetAll70 extends BaseCommand {
       }
 
       // Send the last chunk even if the list is of zero size.
-      if (Version.GFE_701.compareTo(servConn.getClientVersion()) <= 0) {
+      if (KnownVersion.GFE_701.compareTo(servConn.getClientVersion()) <= 0) {
         // 7.0.1 and later clients do not expect the keys in the response
         values.setKeys(null);
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java
index a6f3f97..7a1c10f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.security.GemFireSecurityException;
 import org.apache.geode.security.ResourcePermission;
@@ -305,15 +305,16 @@ public class Put65 extends BaseCommand {
         }
         sendOldValue = true;
         oldValueIsObject = true;
-        Version clientVersion = serverConnection.getClientVersion();
+        KnownVersion clientVersion = serverConnection.getClientVersion();
         if (oldValue instanceof CachedDeserializable) {
           oldValue = ((CachedDeserializable) oldValue).getSerializedValue();
         } else if (oldValue instanceof byte[]) {
           oldValueIsObject = false;
-        } else if ((oldValue instanceof Token) && clientVersion.isNotNewerThan(Version.GFE_651)) {
+        } else if ((oldValue instanceof Token)
+            && clientVersion.isNotNewerThan(KnownVersion.GFE_651)) {
           // older clients don't know that Token is now a DSFID class, so we
           // put the token in a serialized form they can consume
-          HeapDataOutputStream str = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream str = new HeapDataOutputStream(KnownVersion.CURRENT);
           DataOutput dstr = new DataOutputStream(str);
           InternalDataSerializer.writeSerializableObject(oldValue, dstr);
           oldValue = str.toByteArray();
@@ -339,15 +340,16 @@ public class Put65 extends BaseCommand {
               serverConnection.getProxyID(), true, clientEvent);
           sendOldValue = !clientEvent.isConcurrencyConflict();
           oldValueIsObject = true;
-          Version clientVersion = serverConnection.getClientVersion();
+          KnownVersion clientVersion = serverConnection.getClientVersion();
           if (oldValue instanceof CachedDeserializable) {
             oldValue = ((CachedDeserializable) oldValue).getSerializedValue();
           } else if (oldValue instanceof byte[]) {
             oldValueIsObject = false;
-          } else if ((oldValue instanceof Token) && clientVersion.isNotNewerThan(Version.GFE_651)) {
+          } else if ((oldValue instanceof Token)
+              && clientVersion.isNotNewerThan(KnownVersion.GFE_651)) {
             // older clients don't know that Token is now a DSFID class, so we
             // put the token in a serialized form they can consume
-            HeapDataOutputStream str = new HeapDataOutputStream(Version.CURRENT);
+            HeapDataOutputStream str = new HeapDataOutputStream(KnownVersion.CURRENT);
             DataOutput dstr = new DataOutputStream(str);
             InternalDataSerializer.writeSerializableObject(oldValue, dstr);
             oldValue = str.toByteArray();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java
index e2ca674..db19802 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java
@@ -45,7 +45,7 @@ import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -287,7 +287,8 @@ public class PutAll70 extends BaseCommand {
           serverConnection.getName(), serverConnection.getSocketString(), regionName, response);
     }
     // Starting in 7.0.1 we do not send the keys back
-    if (response != null && Version.GFE_70.compareTo(serverConnection.getClientVersion()) < 0) {
+    if (response != null
+        && KnownVersion.GFE_70.compareTo(serverConnection.getClientVersion()) < 0) {
       if (logger.isDebugEnabled()) {
         logger.debug("setting putAll keys to null");
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
index 086c353..d40b094 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
@@ -36,7 +36,7 @@ import org.apache.geode.internal.cache.vmotion.VMotionObserver;
 import org.apache.geode.internal.cache.vmotion.VMotionObserverHolder;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -98,7 +98,7 @@ public class RegisterInterest61 extends BaseCommand {
     try {
       Part regionDataPolicyPart = clientMessage.getPart(clientMessage.getNumberOfParts() - 1);
       regionDataPolicyPartBytes = (byte[]) regionDataPolicyPart.getObject();
-      if (serverConnection.getClientVersion().isNotOlderThan(Version.GFE_80)) {
+      if (serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_80)) {
         // The second byte here is serializeValues
         serializeValues = regionDataPolicyPartBytes[1] == (byte) 0x01;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java
index 3e5817a..1ab7417 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java
@@ -33,7 +33,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -95,7 +95,7 @@ public class RegisterInterestList66 extends BaseCommand {
     try {
       Part regionDataPolicyPart = clientMessage.getPart(clientMessage.getNumberOfParts() - 1);
       regionDataPolicyPartBytes = (byte[]) regionDataPolicyPart.getObject();
-      if (serverConnection.getClientVersion().isNotOlderThan(Version.GFE_80)) {
+      if (serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_80)) {
         // The second byte here is serializeValues
         serializeValues = regionDataPolicyPartBytes[1] == (byte) 0x01;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
index 40ddf56..0358101 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
@@ -33,9 +33,9 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 
 public class DistTxEntryEvent extends EntryEventImpl {
 
@@ -61,7 +61,7 @@ public class DistTxEntryEvent extends EntryEventImpl {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
@@ -153,7 +153,7 @@ public class DistTxEntryEvent extends EntryEventImpl {
     int putAllSize = DataSerializer.readInteger(in);
     PutAllEntryData[] putAllEntries = new PutAllEntryData[putAllSize];
     if (putAllSize > 0) {
-      final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+      final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
       final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
       for (int i = 0; i < putAllSize; i++) {
         putAllEntries[i] = new PutAllEntryData(in, context, this.eventID, i);
@@ -203,7 +203,7 @@ public class DistTxEntryEvent extends EntryEventImpl {
       DeserializationContext context) throws IOException, ClassNotFoundException {
     int removeAllSize = DataSerializer.readInteger(in);
     final RemoveAllEntryData[] removeAllData = new RemoveAllEntryData[removeAllSize];
-    final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+    final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
     final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
     for (int i = 0; i < removeAllSize; i++) {
       removeAllData[i] = new RemoveAllEntryData(in, this.eventID, i, context);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
index 8048afa..3466119 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
@@ -48,8 +48,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.RemoteOperationException;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -224,7 +224,7 @@ public class RemoteFetchKeysMessage extends RemoteOperationMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java
index 2938e6a..0ae2247 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java
@@ -49,9 +49,9 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -219,7 +219,7 @@ public class RemoteGetMessage extends RemoteOperationMessageWithDirectReply {
      */
     public transient byte[] valueInBytes;
 
-    public transient Version remoteVersion;
+    public transient KnownVersion remoteVersion;
 
     /**
      * Empty constructor to conform to DataSerializable interface
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
index 6ed9073..67f0f39 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
@@ -62,9 +62,9 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -237,7 +237,7 @@ public class RemotePutAllMessage extends RemoteOperationMessageWithDirectReply {
     this.putAllDataCount = (int) InternalDataSerializer.readUnsignedVL(in);
     this.putAllData = new PutAllEntryData[putAllDataCount];
     if (this.putAllDataCount > 0) {
-      final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+      final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
       final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
       for (int i = 0; i < this.putAllDataCount; i++) {
         this.putAllData[i] = new PutAllEntryData(in, context, this.eventId, i);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
index da8d8ef..f155e29 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
@@ -63,9 +63,9 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -232,7 +232,7 @@ public class RemoteRemoveAllMessage extends RemoteOperationMessageWithDirectRepl
     this.removeAllDataCount = (int) InternalDataSerializer.readUnsignedVL(in);
     this.removeAllData = new RemoveAllEntryData[removeAllDataCount];
     if (this.removeAllDataCount > 0) {
-      final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+      final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
       final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
       for (int i = 0; i < this.removeAllDataCount; i++) {
         this.removeAllData[i] = new RemoveAllEntryData(in, this.eventId, i,
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
index 232e685..77de281 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * The version tag class for version tags for persistent regions. The VersionSource held in these
@@ -74,7 +74,7 @@ public class DiskVersionTag extends VersionTag<DiskStoreID> {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java
index a9020c3..3d9e1c8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import org.apache.geode.annotations.internal.MutableForTesting;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.VersionedDataSerializable;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * RVV exceptions are part of a RegionVersionVector. They are held by RegionVersionHolders.
@@ -205,7 +205,7 @@ abstract class RVVException
   public void fromData(DataInput in) throws IOException, ClassNotFoundException {}
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
index 79633fd..13a0da7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
@@ -47,8 +47,8 @@ import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
@@ -1542,7 +1542,7 @@ public abstract class RegionVersionVector<T extends VersionSource<?>>
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java
index 68dd7cb..9a06bf5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * The version tag class for version tags for non-persistent regions. The VersionSource held in
@@ -64,7 +64,7 @@ public class VMVersionTag extends VersionTag<InternalDistributedMember> {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
index 045ab2c..fb29480 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
@@ -29,8 +29,8 @@ import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.ReflectionSingleObjectSizer;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -417,7 +417,7 @@ public abstract class VersionTag<T extends VersionSource>
         try {
           this.previousMemberID = readMember(in);
         } catch (BufferUnderflowException e) {
-          if (context.getSerializationVersion().isOlderThan(Version.GEODE_1_11_0)) {
+          if (context.getSerializationVersion().isOlderThan(KnownVersion.GEODE_1_11_0)) {
             // GEODE-7219: older versions may report HAS_PREVIOUS_MEMBER_ID but not transmit it
             logger.info("Buffer underflow encountered while reading a version tag - ignoring");
           } else {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
index 0a9e3c7..adf80cb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
@@ -46,9 +46,9 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.UpdateAttributesProcessor;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -557,7 +557,7 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
       this.senderEventListenerClassNames = DataSerializer.readArrayList(in);
       this.isDiskSynchronous = in.readBoolean();
       this.dispatcherThreads = in.readInt();
-      if (StaticSerialization.getVersionForDataStream(in).isOlderThan(Version.GFE_90)) {
+      if (StaticSerialization.getVersionForDataStream(in).isOlderThan(KnownVersion.GFE_90)) {
         Gateway.OrderPolicy oldOrderPolicy = DataSerializer.readObject(in);
         if (oldOrderPolicy != null) {
           if (oldOrderPolicy.name().equals(OrderPolicy.KEY.name())) {
@@ -599,7 +599,7 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
       DataSerializer.writeArrayList(senderEventListenerClassNames, out);
       out.writeBoolean(isDiskSynchronous);
       out.writeInt(dispatcherThreads);
-      if (StaticSerialization.getVersionForDataStream(out).isOlderThan(Version.GFE_90)
+      if (StaticSerialization.getVersionForDataStream(out).isOlderThan(KnownVersion.GFE_90)
           && this.orderPolicy != null) {
         String orderPolicyName = this.orderPolicy.name();
         if (orderPolicyName.equals(Gateway.OrderPolicy.KEY.name())) {
@@ -683,10 +683,11 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
     }
 
     @Immutable
-    private static final Version[] serializationVersions = new Version[] {Version.GFE_80};
+    private static final KnownVersion[] serializationVersions =
+        new KnownVersion[] {KnownVersion.GFE_80};
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return serializationVersions;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
index 41cf4f1..85f60aa 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
@@ -27,8 +27,8 @@ import org.apache.geode.cache.wan.GatewaySender;
 import org.apache.geode.internal.cache.WrappedCallbackArgument;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>GatewayEventCallbackArgument</code> is a wrapper on a callback arg plus the id of the
@@ -180,7 +180,7 @@ public class GatewaySenderEventCallbackArgument extends WrappedCallbackArgument
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
index 6ec7c40..19ece6e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
@@ -52,9 +52,9 @@ import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.size.Sizeable;
 
@@ -73,7 +73,7 @@ public class GatewaySenderEventImpl
 
   // It should use current version. But it was hard-coded to be 0x11, i.e. GEODE_120_ORDINAL,
   // by mistake since 120 to pre-190
-  protected static final short VERSION = Version.getCurrentVersion().ordinal();
+  protected static final short VERSION = KnownVersion.getCurrentVersion().ordinal();
 
   protected EnumListenerEvent operation;
 
@@ -749,7 +749,7 @@ public class GatewaySenderEventImpl
   public void fromData(DataInput in,
       DeserializationContext context) throws IOException, ClassNotFoundException {
     fromDataPre_GEODE_1_13_0_0(in, context);
-    if (version >= Version.GEODE_1_13_0.ordinal()) {
+    if (version >= KnownVersion.GEODE_1_13_0.ordinal()) {
       boolean hasTransaction = DataSerializer.readBoolean(in);
       if (hasTransaction) {
         this.isLastEventInTransaction = DataSerializer.readBoolean(in);
@@ -761,7 +761,7 @@ public class GatewaySenderEventImpl
   public void fromDataPre_GEODE_1_13_0_0(DataInput in, DeserializationContext context)
       throws IOException, ClassNotFoundException {
     fromDataPre_GEODE_1_9_0_0(in, context);
-    if (version >= Version.GEODE_1_9_0.ordinal()) {
+    if (version >= KnownVersion.GEODE_1_9_0.ordinal()) {
       this.isConcurrencyConflict = DataSerializer.readBoolean(in);
     }
   }
@@ -774,8 +774,8 @@ public class GatewaySenderEventImpl
     this.numberOfParts = in.readInt();
     // this._id = in.readUTF();
     if (version < 0x11 && (in instanceof InputStream)
-        && StaticSerialization.getVersionForDataStream(in) == Version.CURRENT) {
-      in = new VersionedDataInputStream((InputStream) in, Version.GFE_701);
+        && StaticSerialization.getVersionForDataStream(in) == KnownVersion.CURRENT) {
+      in = new VersionedDataInputStream((InputStream) in, KnownVersion.GFE_701);
     }
     this.id = (EventID) context.getDeserializer().readObject(in);
     // TODO:Asif ; Check if this violates Barry's logic of not assiging VM
@@ -1280,8 +1280,8 @@ public class GatewaySenderEventImpl
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_9_0, Version.GEODE_1_13_0};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_9_0, KnownVersion.GEODE_1_13_0};
   }
 
   public int getSerializedValueSize() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
index c13b3c5..00a1196 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
@@ -46,8 +46,8 @@ import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class GatewaySenderQueueEntrySynchronizationOperation {
@@ -287,7 +287,7 @@ public class GatewaySenderQueueEntrySynchronizationOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java b/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java
index 691798f..ab095b6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java
@@ -42,7 +42,7 @@ import java.util.TreeMap;
 import org.apache.geode.SystemFailure;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.VersionDescription;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.ArgumentRedactor;
 import org.apache.geode.logging.internal.ConfigurationInfo;
 import org.apache.geode.logging.internal.OSProcess;
@@ -123,7 +123,7 @@ public class Banner {
     sp.remove("os.arch");
 
     int processId = attemptToReadProcessId();
-    short currentOrdinal = Version.CURRENT_ORDINAL;
+    short currentOrdinal = KnownVersion.CURRENT_ORDINAL;
 
     List<String> commandLineArguments = new ArrayList<>();
     RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java b/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java
index 9818f50..c38a6f1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java
@@ -22,7 +22,7 @@ import java.util.regex.Pattern;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.sequencelog.GraphType;
 import org.apache.geode.internal.sequencelog.model.GraphSet;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class GraphReader {
 
@@ -66,7 +66,7 @@ public class GraphReader {
     if (areGemfireLogs) {
       // TODO - probably don't need to go all the way
       // to a binary format here, but this is quick and easy.
-      HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
       GemfireLogConverter.convertFiles(out, files);
       InputStreamReader reader = new InputStreamReader(out.getInputStream());
       reader.addToGraphs(graphs, filter);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
index 5bc8bc4..fb4b331 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
@@ -81,7 +81,7 @@ import org.apache.geode.internal.net.BufferPool;
 import org.apache.geode.internal.net.NioFilter;
 import org.apache.geode.internal.net.NioPlainEngine;
 import org.apache.geode.internal.net.SocketCreator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.internal.tcp.MsgReader.Header;
@@ -187,7 +187,7 @@ public class Connection implements Runnable {
   /**
    * Identifies the version of the member on the other side of the connection.
    */
-  private Version remoteVersion;
+  private KnownVersion remoteVersion;
 
   /**
    * True if this connection was accepted by a listening socket. This makes it a receiver. False if
@@ -711,7 +711,7 @@ public class Connection implements Runnable {
       bb.putInt(cfg.getAsyncQueueTimeout());
       bb.putInt(cfg.getAsyncMaxQueueSize());
       // write own product version
-      VersioningIO.writeOrdinal(bb, Version.CURRENT.ordinal(), true);
+      VersioningIO.writeOrdinal(bb, KnownVersion.CURRENT.ordinal(), true);
       // now set the msg length into position 0
       bb.putInt(0, calcHdrSize(bb.position() - MSG_HEADER_BYTES));
       my_okHandshakeBuf = bb;
@@ -888,7 +888,7 @@ public class Connection implements Runnable {
     connectHandshake.writeBoolean(preserveOrder);
     connectHandshake.writeLong(uniqueId);
     // write the product version ordinal
-    VersioningIO.writeOrdinal(connectHandshake, Version.CURRENT.ordinal(), true);
+    VersioningIO.writeOrdinal(connectHandshake, KnownVersion.CURRENT.ordinal(), true);
     connectHandshake.writeInt(dominoCount.get() + 1);
     // this writes the sending member + thread name that is stored in senderName
     // on the receiver to show the cause of reader thread creation
@@ -1793,7 +1793,7 @@ public class Connection implements Runnable {
     }
   }
 
-  private MsgDestreamer obtainMsgDestreamer(short msgId, final Version v) {
+  private MsgDestreamer obtainMsgDestreamer(short msgId, final KnownVersion v) {
     synchronized (destreamerLock) {
       if (destreamerMap == null) {
         destreamerMap = new HashMap();
@@ -2636,7 +2636,7 @@ public class Connection implements Runnable {
     socketInUse = true;
     MsgReader msgReader = null;
     DMStats stats = owner.getConduit().getStats();
-    final Version version = getRemoteVersion();
+    final KnownVersion version = getRemoteVersion();
     try {
       msgReader = new MsgReader(this, ioFilter, version);
 
@@ -2817,7 +2817,7 @@ public class Connection implements Runnable {
           null);
       int dominoNumber = 0;
       if (remoteVersion == null
-          || remoteVersion.isNotOlderThan(Version.GFE_80)) {
+          || remoteVersion.isNotOlderThan(KnownVersion.GFE_80)) {
         dominoNumber = dis.readInt();
         if (sharedResource) {
           dominoNumber = 0;
@@ -3265,14 +3265,14 @@ public class Connection implements Runnable {
   /**
    * Return the version of the member on the other side of this connection.
    */
-  Version getRemoteVersion() {
+  KnownVersion getRemoteVersion() {
     return remoteVersion;
   }
 
   @Override
   public String toString() {
     return remoteAddr + "(uid=" + uniqueId + ")"
-        + (remoteVersion != null && remoteVersion != Version.CURRENT
+        + (remoteVersion != null && remoteVersion != KnownVersion.CURRENT
             ? "(v" + remoteVersion.toString() + ')' : "");
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
index 95d201e..49b9889 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
@@ -29,7 +29,7 @@ import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 /**
@@ -64,9 +64,9 @@ public class MsgDestreamer {
 
   final CancelCriterion stopper;
 
-  final Version version;
+  final KnownVersion version;
 
-  public MsgDestreamer(DMStats stats, CancelCriterion stopper, Version v) {
+  public MsgDestreamer(DMStats stats, CancelCriterion stopper, KnownVersion v) {
     this.stopper = stopper;
     this.t = new DestreamerThread(stats, stopper);
     this.version = v;
@@ -237,7 +237,7 @@ public class MsgDestreamer {
         }
         try {
           ReplyProcessor21.initMessageRPId();
-          final Version v = version;
+          final KnownVersion v = version;
           DataInputStream dis =
               v == null ? new DataInputStream(this.is)
                   : new VersionedDataInputStream(this.is, v);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
index 4561562..87cbfdc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
@@ -27,7 +27,7 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.net.BufferPool;
 import org.apache.geode.internal.net.NioFilter;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -46,7 +46,7 @@ public class MsgReader {
 
 
 
-  MsgReader(Connection conn, NioFilter nioFilter, Version version) {
+  MsgReader(Connection conn, NioFilter nioFilter, KnownVersion version) {
     this.conn = conn;
     this.ioFilter = nioFilter;
     this.byteBufferInputStream =
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java
index ae48a46..74bc829 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java
@@ -35,8 +35,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.ObjToByteArraySerializer;
 import org.apache.geode.internal.net.BufferPool;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 /**
@@ -147,7 +147,7 @@ public class MsgStreamer extends OutputStream
       final boolean directReply, final DMStats stats, BufferPool bufferPool) {
     final Connection firstCon = (Connection) cons.get(0);
     // split into different versions if required
-    Version version;
+    KnownVersion version;
     final int numCons = cons.size();
     if (numCons > 1) {
       Connection con;
@@ -157,7 +157,7 @@ public class MsgStreamer extends OutputStream
         con = (Connection) c;
         version = con.getRemoteVersion();
         if (version != null
-            && Version.CURRENT_ORDINAL > version.ordinal()) {
+            && KnownVersion.CURRENT_ORDINAL > version.ordinal()) {
           if (versionToConnMap == null) {
             versionToConnMap = new Object2ObjectOpenHashMap();
           }
@@ -187,7 +187,7 @@ public class MsgStreamer extends OutputStream
           for (Object c : cons) {
             con = (Connection) c;
             version = con.getRemoteVersion();
-            if (version == null || version.ordinal() >= Version.CURRENT_ORDINAL) {
+            if (version == null || version.ordinal() >= KnownVersion.CURRENT_ORDINAL) {
               currentVersionConnections.add(con);
             }
           }
@@ -201,7 +201,7 @@ public class MsgStreamer extends OutputStream
           Object ver = entry.getKey();
           Object l = entry.getValue();
           streamers.add(new VersionedMsgStreamer((List<?>) l, msg, directReply, stats,
-              bufferPool, sendBufferSize, (Version) ver));
+              bufferPool, sendBufferSize, (KnownVersion) ver));
         }
         return new MsgStreamerList(streamers);
       }
@@ -308,7 +308,7 @@ public class MsgStreamer extends OutputStream
     if (isOverflowMode()) {
       if (this.overflowBuf == null) {
         this.overflowBuf = new HeapDataOutputStream(
-            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, Version.CURRENT);
+            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, KnownVersion.CURRENT);
       }
       return;
     }
@@ -934,7 +934,7 @@ public class MsgStreamer extends OutputStream
         // we don't even have room to write the length field so just create
         // the overflowBuf
         this.overflowBuf = new HeapDataOutputStream(
-            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, Version.CURRENT);
+            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, KnownVersion.CURRENT);
         this.overflowBuf.writeAsSerializedByteArray(v);
         return;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
index ef4ffe6..c3b4e9e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
@@ -17,7 +17,7 @@ package org.apache.geode.internal.tcp;
 
 import java.nio.ByteBuffer;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -29,26 +29,26 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
 public class VersionedByteBufferInputStream extends ByteBufferInputStream
     implements VersionedDataStream {
 
-  private final Version version;
+  private final KnownVersion version;
 
   /**
-   * Create a ByteBuffer input stream whose contents are null at given product {@link Version}.
+   * Create a ByteBuffer input stream whose contents are null at given product {@link KnownVersion}.
    *
    * @param version the product version for which this stream was created
    */
-  public VersionedByteBufferInputStream(Version version) {
+  public VersionedByteBufferInputStream(KnownVersion version) {
     super();
     this.version = version;
   }
 
   /**
    * Create a ByteBuffer input stream whose contents are the given {@link ByteBuffer} at given
-   * product {@link Version}.
+   * product {@link KnownVersion}.
    *
    * @param buffer the byte buffer to read
    * @param version the product version for which this stream was created
    */
-  public VersionedByteBufferInputStream(ByteBuffer buffer, Version version) {
+  public VersionedByteBufferInputStream(ByteBuffer buffer, KnownVersion version) {
     super(buffer);
     this.version = version;
   }
@@ -57,7 +57,7 @@ public class VersionedByteBufferInputStream extends ByteBufferInputStream
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
index 0f5639e..552c028 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
@@ -20,7 +20,7 @@ import java.util.List;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.internal.net.BufferPool;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -30,10 +30,10 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
  */
 class VersionedMsgStreamer extends MsgStreamer implements VersionedDataStream {
 
-  private final Version version;
+  private final KnownVersion version;
 
   VersionedMsgStreamer(List<?> cons, DistributionMessage msg, boolean directReply, DMStats stats,
-      BufferPool bufferPool, int sendBufferSize, Version version) {
+      BufferPool bufferPool, int sendBufferSize, KnownVersion version) {
     super(cons, msg, directReply, stats, sendBufferSize, bufferPool);
     this.version = version;
   }
@@ -42,7 +42,7 @@ class VersionedMsgStreamer extends MsgStreamer implements VersionedDataStream {
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java b/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
index dcff5c9..c057cc6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
@@ -24,7 +24,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.PdxInputStream;
 
 /**
@@ -47,7 +47,7 @@ public class BlobHelper {
    * A blob is a serialized Object. This method serializes the object into a blob and returns the
    * byte array that contains the blob.
    */
-  public static byte[] serializeToBlob(Object obj, Version version) throws IOException {
+  public static byte[] serializeToBlob(Object obj, KnownVersion version) throws IOException {
     final long start = startSerialization();
     HeapDataOutputStream hdos = new HeapDataOutputStream(version);
     DataSerializer.writeObject(obj, hdos);
@@ -77,7 +77,7 @@ public class BlobHelper {
   /**
    * A blob is a serialized Object. This method returns the deserialized object.
    */
-  public static Object deserializeBlob(byte[] blob, Version version, ByteArrayDataInput in)
+  public static Object deserializeBlob(byte[] blob, KnownVersion version, ByteArrayDataInput in)
       throws IOException, ClassNotFoundException {
     Object result;
     final long start = startDeserialization();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java b/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
index 6b7b7e9..ac3d0c2 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
@@ -28,8 +28,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -284,7 +284,7 @@ public class FederationComponent
 
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
index 5075af7..104629a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
@@ -30,8 +30,8 @@ import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Sent to a locator to request it to find (and possibly start) a jmx manager for us. It returns a
@@ -98,7 +98,7 @@ public class JmxManagerLocatorRequest implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
index b0d69c8..025e19a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
@@ -23,8 +23,8 @@ import java.net.UnknownHostException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Sent to a locator to request it to find (and possibly start) a jmx manager for us. It returns a
@@ -100,7 +100,7 @@ public class JmxManagerLocatorResponse implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
index 3ac8885..b825718 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
@@ -52,7 +52,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.process.PidUnavailableException;
 import org.apache.geode.internal.process.ProcessUtils;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.ClientHealthStatus;
 import org.apache.geode.management.ClientQueueDetail;
@@ -89,7 +89,7 @@ public class CacheServerBridge extends ServerBridge {
 
   private ClientMembershipListener membershipListener;
 
-  public static final ThreadLocal<Version> clientVersion = new ThreadLocal<Version>();
+  public static final ThreadLocal<KnownVersion> clientVersion = new ThreadLocal<KnownVersion>();
 
   protected static int identifyPid() {
     try {
@@ -405,7 +405,7 @@ public class CacheServerBridge extends ServerBridge {
     }
   }
 
-  public Version getClientVersion(ClientConnInfo connInfo) {
+  public KnownVersion getClientVersion(ClientConnInfo connInfo) {
     if (cache.getCacheServers().size() == 0) {
       return null;
     }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java
index 76606d3..2edf133 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java
@@ -72,7 +72,7 @@ import org.apache.geode.internal.offheap.MemoryAllocator;
 import org.apache.geode.internal.offheap.OffHeapMemoryStats;
 import org.apache.geode.internal.process.PidUnavailableException;
 import org.apache.geode.internal.process.ProcessUtils;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.OsStatisticsProvider;
 import org.apache.geode.internal.statistics.StatSamplerStats;
 import org.apache.geode.internal.statistics.StatisticsManager;
@@ -1424,6 +1424,6 @@ public class MemberMBeanBridge {
   }
 
   String getGeodeReleaseVersion() {
-    return Version.CURRENT.getName();
+    return KnownVersion.CURRENT.getName();
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
index 85c2ee8..b3ade4e 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
@@ -38,7 +38,7 @@ import org.xml.sax.SAXException;
 
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionOrdinal;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
@@ -169,7 +169,7 @@ public class Configuration implements DataSerializable {
     // configuration, and will now also write the deployment map.
     DataSerializer.writeHashSet(null, out);
     // As of 1.12, this class starting writing the current version
-    VersioningIO.writeOrdinal(out, Version.getCurrentVersion().ordinal(), true);
+    VersioningIO.writeOrdinal(out, KnownVersion.getCurrentVersion().ordinal(), true);
     DataSerializer.writeHashMap(deployments, out);
   }
 
@@ -189,7 +189,7 @@ public class Configuration implements DataSerializable {
     } else {
       // version of the data we are reading (1.12 or later)
       final VersionOrdinal version = Versioning.getVersionOrdinal(VersioningIO.readOrdinal(in));
-      if (version.isNotOlderThan(Version.GEODE_1_12_0)) {
+      if (version.isNotOlderThan(KnownVersion.GEODE_1_12_0)) {
         deployments.putAll(DataSerializer.readHashMap(in));
       }
     }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
index 427aaf6..118b14a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
@@ -47,7 +47,7 @@ import org.apache.geode.internal.VersionedDataSerializable;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils.XPathContext;
@@ -426,8 +426,8 @@ public class XmlEntity implements VersionedDataSerializable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_1_1};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_1_1};
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
index a7dd234..a4553e1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
@@ -36,8 +36,8 @@ import org.apache.geode.InternalGemFireError;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
 
@@ -148,7 +148,7 @@ public class ConfigurationResponse implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java
index 2175f44..29de7ea 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java
@@ -29,8 +29,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 
 public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSerializableFixedID {
@@ -352,7 +352,7 @@ public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSer
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GFE_80};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GFE_80};
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
index 70dea88..14e9e08 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
@@ -31,7 +31,7 @@ import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.management.ManagementService;
 import org.apache.geode.management.internal.functions.RestoreRedundancyFunction;
 import org.apache.geode.management.internal.util.ManagementUtils;
@@ -42,7 +42,7 @@ public class RestoreRedundancyPerformer
     implements OperationPerformer<RestoreRedundancyRequest, RestoreRedundancyResults> {
   @Immutable
   @VisibleForTesting
-  static final Version ADDED_VERSION = Version.GEODE_1_13_0;
+  static final KnownVersion ADDED_VERSION = KnownVersion.GEODE_1_13_0;
   private static final String NO_MEMBERS_WITH_VERSION_FOR_REGION =
       "No members with a version greater than or equal to %s were found for region %s";
   private static final String EXCEPTION_MEMBER_MESSAGE = "Exception occurred on member %s: %s";
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java b/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
index cf097f0..823b7a0 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
@@ -49,7 +49,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.AbstractExecution;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.management.DistributedRegionMXBean;
 import org.apache.geode.management.ManagementService;
 import org.apache.geode.management.internal.MBeanJMXAdapter;
@@ -75,7 +75,7 @@ public class ManagementUtils {
    */
   @SuppressWarnings("unchecked")
   public static Set<DistributedMember> getNormalMembersWithSameOrNewerVersion(InternalCache cache,
-      Version version) {
+      KnownVersion version) {
     return getAllNormalMembers(cache).stream().filter(
         member -> ((InternalDistributedMember) member).getVersionOrdinalObject()
             .compareTo(version) >= 0)
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
index d03385d..e65a58e 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class EnumId implements DataSerializableFixedID {
 
@@ -90,7 +90,7 @@ public class EnumId implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
index a37763e..2891014 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
@@ -29,8 +29,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.pdx.WritablePdxInstance;
@@ -327,7 +327,7 @@ public class EnumInfo implements DataSerializableFixedID {
 
     @Override
     public byte[] toBytes() throws IOException {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(16, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(16, KnownVersion.CURRENT);
       sendTo(hdos);
       return hdos.toByteArray();
     }
@@ -349,7 +349,7 @@ public class EnumInfo implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java
index 5ea3700..ef629ec 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java
@@ -21,8 +21,8 @@ import java.io.PrintStream;
 
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.FieldType;
 
 public class PdxField implements DataSerializable, Comparable<PdxField> {
@@ -172,8 +172,8 @@ public class PdxField implements DataSerializable, Comparable<PdxField> {
       // to set identityField to true.
       // For this reason the pdx delete-field command should only be used after
       // all member have been upgraded to 8.1 or later.
-      Version sourceVersion = StaticSerialization.getVersionForDataStream(out);
-      if (sourceVersion.isNotOlderThan(Version.GFE_81)) {
+      KnownVersion sourceVersion = StaticSerialization.getVersionForDataStream(out);
+      if (sourceVersion.isNotOlderThan(KnownVersion.GFE_81)) {
         if (this.deleted) {
           bits |= DELETED_BIT;
         }
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
index 553c8e2..ebe3068 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
@@ -25,7 +25,7 @@ import org.apache.geode.annotations.Immutable;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.pdx.WritablePdxInstance;
 
@@ -179,7 +179,7 @@ public class PdxInstanceEnum implements InternalPdxInstance, ComparableEnum {
 
   @Override
   public byte[] toBytes() throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     sendTo(hdos);
     return hdos.toByteArray();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java
index b087a57..fde1ce4 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java
@@ -23,7 +23,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.ByteBufferWriter;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
 import org.apache.geode.pdx.PdxSerializationException;
 
@@ -36,11 +36,11 @@ public class PdxOutputStream implements ByteBufferWriter {
   private final HeapDataOutputStream hdos;
 
   public PdxOutputStream() {
-    this.hdos = new HeapDataOutputStream(Version.CURRENT);
+    this.hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
   }
 
   public PdxOutputStream(int allocSize) {
-    this.hdos = new HeapDataOutputStream(allocSize, Version.CURRENT);
+    this.hdos = new HeapDataOutputStream(allocSize, KnownVersion.CURRENT);
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java
index 0fc2daa..0948de0 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java
@@ -32,8 +32,8 @@ import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.tier.sockets.OldClientSupportService;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxFieldAlreadyExistsException;
 import org.apache.geode.pdx.internal.AutoSerializableManager.AutoClassInfo;
 
@@ -134,8 +134,8 @@ public class PdxType implements DataSerializable {
       // to set noDomainClass to true.
       // For this reason the pdx delete-field command should only be used after
       // all member have been upgraded to 8.1 or later.
-      Version sourceVersion = StaticSerialization.getVersionForDataStream(out);
-      if (sourceVersion.isNotOlderThan(Version.GFE_81)) {
+      KnownVersion sourceVersion = StaticSerialization.getVersionForDataStream(out);
+      if (sourceVersion.isNotOlderThan(KnownVersion.GFE_81)) {
         if (this.hasDeletedField) {
           bits |= HAS_DELETED_FIELD_BIT;
         }
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
index 0eb090d..58c770b 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
@@ -30,7 +30,7 @@ import com.fasterxml.jackson.core.JsonGenerator.Feature;
 
 import org.apache.geode.annotations.internal.MutableForTesting;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.JSONFormatter;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.internal.EnumInfo;
@@ -52,7 +52,7 @@ public class PdxToJSON {
 
   public String getJSON() {
     JsonFactory jf = new JsonFactory();
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       JsonGenerator jg = jf.createJsonGenerator(hdos, JsonEncoding.UTF8);
       enableDisableJSONGeneratorFeature(jg);
@@ -68,7 +68,7 @@ public class PdxToJSON {
 
   public byte[] getJSONByteArray() {
     JsonFactory jf = new JsonFactory();
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       JsonGenerator jg = jf.createJsonGenerator(hdos, JsonEncoding.UTF8);
       enableDisableJSONGeneratorFeature(jg);
diff --git a/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
index dc5dede..e67ebaf 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 public class FunctionAdapterJUnitTest {
@@ -77,7 +77,7 @@ public class FunctionAdapterJUnitTest {
                 + "serializedFunctionAdapterWithDifferentSerialVersionUID.ser").getAbsolutePath());
 
     DataInputStream dis =
-        new VersionedDataInputStream(new DataInputStream(fis), Version.GFE_82);
+        new VersionedDataInputStream(new DataInputStream(fis), KnownVersion.GFE_82);
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof FunctionAdapter);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java
index 41490f7..ab2634c 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java
@@ -29,7 +29,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.query.SelectResults;
 import org.apache.geode.cache.query.internal.types.ObjectTypeImpl;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Test ResultsBag, including null elements
@@ -102,7 +102,7 @@ public class ResultsBagJUnitTest {
     ResultsCollectionWrapper w =
         new ResultsCollectionWrapper(new ObjectTypeImpl(Integer.class), set);
 
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(w, hdos);
     DataInputStream in = new DataInputStream(hdos.getInputStream());
     SelectResults setCopy = (SelectResults) DataSerializer.readObject(in);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
index 796db60..e8e93a8 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
@@ -68,7 +68,7 @@ import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.Instantiator;
 import org.apache.geode.SystemFailure;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.statistics.StatArchiveWriter;
@@ -1166,13 +1166,13 @@ public class DataSerializableJUnitTest implements Serializable {
     VersionedDataSerializableImpl ds = new VersionedDataSerializableImpl(getRandom());
 
     VersionedDataOutputStream v =
-        new VersionedDataOutputStream(this.baos, Version.GFE_70);
+        new VersionedDataOutputStream(this.baos, KnownVersion.GFE_70);
     DataSerializer.writeObject(ds, v);
     v.flush();
 
     ByteBuffer bb = ByteBuffer.wrap(this.baos.toByteArray());
     ByteBufferInputStream bbis = new ByteBufferInputStream(bb);
-    VersionedDataInputStream vin = new VersionedDataInputStream(bbis, Version.GFE_70);
+    VersionedDataInputStream vin = new VersionedDataInputStream(bbis, KnownVersion.GFE_70);
     VersionedDataSerializableImpl ds2 =
         (VersionedDataSerializableImpl) DataSerializer.readObject(vin);
 
@@ -2737,7 +2737,7 @@ public class DataSerializableJUnitTest implements Serializable {
     int[] offsets = new int[] {0, 1, 4, 9, 14, 15, 16, -1, -4, -9, -14, -15, -16};
 
     // write all combos of longs to the outputstream
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataOutput out = hdos;
     for (long valueToTest : valuesToTest) {
       for (int offset : offsets) {
@@ -3032,8 +3032,8 @@ public class DataSerializableJUnitTest implements Serializable {
       implements VersionedDataSerializable {
 
     @Override
-    public Version[] getSerializationVersions() {
-      return new Version[] {Version.GFE_71};
+    public KnownVersion[] getSerializationVersions() {
+      return new KnownVersion[] {KnownVersion.GFE_71};
     }
 
     transient boolean preMethodInvoked;
diff --git a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
index e1338a4..539bc95 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
@@ -29,7 +29,7 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.UnitTestValueHolder;
 import org.apache.geode.internal.serialization.BufferDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.TypeRegistry;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
@@ -50,7 +50,7 @@ public class HeapDataOutputStreamJUnitTest {
 
   @Test
   public void testWriteByteBuffer() {
-    HeapDataOutputStream out = new HeapDataOutputStream(64, Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(64, KnownVersion.CURRENT);
 
     byte[] bytes = "1234567890qwertyuiopasdfghjklzxcvbnm,./;'".getBytes();
     out.write(ByteBuffer.wrap(bytes, 0, 2));
@@ -69,7 +69,7 @@ public class HeapDataOutputStreamJUnitTest {
   @Test
   public void testWriteByteBufferCopyUseBuffer() {
     ByteBuffer buf = ByteBuffer.allocate(32);
-    HeapDataOutputStream out = new HeapDataOutputStream(buf, Version.CURRENT, true);
+    HeapDataOutputStream out = new HeapDataOutputStream(buf, KnownVersion.CURRENT, true);
 
     out.write(0);
 
@@ -108,7 +108,7 @@ public class HeapDataOutputStreamJUnitTest {
   @Test
   public void testWriteByteBufferNoCopyUseBuffer() {
     ByteBuffer buf = ByteBuffer.allocate(32);
-    HeapDataOutputStream out = new HeapDataOutputStream(buf, Version.CURRENT, true);
+    HeapDataOutputStream out = new HeapDataOutputStream(buf, KnownVersion.CURRENT, true);
 
     out.write(0);
 
@@ -155,7 +155,7 @@ public class HeapDataOutputStreamJUnitTest {
     }
     UnitTestValueHolder vh = new UnitTestValueHolder(bytes);
     ByteBuffer buf = ByteBuffer.allocate(32);
-    HeapDataOutputStream out = new HeapDataOutputStream(buf, Version.CURRENT, true);
+    HeapDataOutputStream out = new HeapDataOutputStream(buf, KnownVersion.CURRENT, true);
     DataSerializer.writeObject(vh, out);
     UnitTestValueHolder vh2 = DataSerializer.readObject(new DataInputStream(out.getInputStream()));
     if (!Arrays.equals(bytes, (byte[]) vh2.getValue())) {
diff --git a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java
index fc8e787..faad718 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java
@@ -20,7 +20,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.internal.lang.ClassUtils;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
 /*
@@ -47,7 +47,7 @@ public class InternalDataSerializerSerializationAcceptlistTest {
   public void setUp() {
     Assume.assumeTrue("ObjectInputFilter is present in this JVM (post- 8.111)",
         hasObjectInputFilter());
-    outputStream = new HeapDataOutputStream(Version.CURRENT);
+    outputStream = new HeapDataOutputStream(KnownVersion.CURRENT);
     testSerializable = new TestSerializable();
     properties = new Properties();
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
index 8711d30..0625d68 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
@@ -64,7 +64,7 @@ import org.apache.geode.internal.cache.versions.VersionHolder;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.concurrent.ConcurrentMapWithReusableEntries;
 import org.apache.geode.internal.util.concurrent.CustomEntryConcurrentHashMap;
 
@@ -1594,8 +1594,8 @@ public class AbstractRegionMapTest {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
-      return new Version[0];
+    public KnownVersion[] getSerializationVersions() {
+      return new KnownVersion[0];
     }
 
     @Override
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java
index 5fdc8ca..6287280 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java
@@ -22,7 +22,7 @@ import org.junit.Test;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 public class EventIDTest {
@@ -30,16 +30,16 @@ public class EventIDTest {
   @Test
   public void emptyEventIdCanBeSerializedWithCurrentVersion()
       throws IOException, ClassNotFoundException {
-    emptyEventIdCanBeSerialized(Version.CURRENT);
+    emptyEventIdCanBeSerialized(KnownVersion.CURRENT);
 
   }
 
   @Test
   public void emptyEventIdCanBeSerializedToGeode100() throws IOException, ClassNotFoundException {
-    emptyEventIdCanBeSerialized(Version.GFE_90);
+    emptyEventIdCanBeSerialized(KnownVersion.GFE_90);
   }
 
-  private void emptyEventIdCanBeSerialized(Version version)
+  private void emptyEventIdCanBeSerialized(KnownVersion version)
       throws IOException, ClassNotFoundException {
     EventID eventID = new EventID();
     HeapDataOutputStream out = new HeapDataOutputStream(version);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
index 4f5f9d3..a4257d3 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;
 
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class ExpireDisconnectedClientTransactionsMessageTest {
   private final ClusterDistributionManager dm = mock(ClusterDistributionManager.class);
@@ -37,7 +37,7 @@ public class ExpireDisconnectedClientTransactionsMessageTest {
   private final InternalDistributedMember sender = mock(InternalDistributedMember.class);
   private final ExpireDisconnectedClientTransactionsMessage message =
       spy(new ExpireDisconnectedClientTransactionsMessage());
-  private Version version = mock(Version.class);
+  private KnownVersion version = mock(KnownVersion.class);
 
   @Before
   public void setup() {
@@ -49,7 +49,7 @@ public class ExpireDisconnectedClientTransactionsMessageTest {
 
   @Test
   public void processMessageFromServerOfGeode170AndLaterVersionWillExpireDisconnectedClientTransactions() {
-    when(version.compareTo(Version.GEODE_1_7_0)).thenReturn(1);
+    when(version.compareTo(KnownVersion.GEODE_1_7_0)).thenReturn(1);
 
     message.process(dm);
 
@@ -58,7 +58,7 @@ public class ExpireDisconnectedClientTransactionsMessageTest {
 
   @Test
   public void processMessageFromServerOfPriorGeode170VersionWillRemoveExpiredClientTransactions() {
-    when(version.compareTo(Version.GEODE_1_7_0)).thenReturn(-1);
+    when(version.compareTo(KnownVersion.GEODE_1_7_0)).thenReturn(-1);
 
     message.process(dm);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
index 5c08c50..090bd99 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
@@ -26,7 +26,7 @@ import org.junit.Test;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Unit test for FilterRoutingInfo.FilterInfo
@@ -47,12 +47,12 @@ public class FilterInfoTest {
     clientsInv.add(3L);
     clientsInv.add(4L);
     serialized.setInterestedClientsInv(clientsInv);
-    HeapDataOutputStream dataOut = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream dataOut = new HeapDataOutputStream(KnownVersion.CURRENT);
     serialized.toData(dataOut);
     byte[] outputBytes = dataOut.toByteArray();
     FilterInfo deserialized = new FilterInfo();
     ByteArrayDataInput dataInput = new ByteArrayDataInput();
-    dataInput.initialize(outputBytes, Version.CURRENT);
+    dataInput.initialize(outputBytes, KnownVersion.CURRENT);
     deserialized.fromData(dataInput);
     assertThat(deserialized.getCQs()).isEqualTo(cqs);
     assertThat(deserialized.getInterestedClients()).isEqualTo(clients);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
index 483714d..6935e48 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.serialization.DeserializationContext;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.test.junit.categories.ClientServerTest;
@@ -176,14 +176,14 @@ public class EventIdOptimizationJUnitTest {
   @Test
   public void testEventIDForGEODE100Member() throws IOException, ClassNotFoundException {
     InternalDistributedMember distributedMember = new InternalDistributedMember("localhost", 10999);
-    HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
     distributedMember.writeEssentialData(hdos);
     byte[] memberBytes = hdos.toByteArray();
     EventID eventID = new EventID(memberBytes, 1, 1);
 
 
-    HeapDataOutputStream hdos90 = new HeapDataOutputStream(256, Version.GFE_90);
-    VersionedDataOutputStream dop = new VersionedDataOutputStream(hdos90, Version.GFE_90);
+    HeapDataOutputStream hdos90 = new HeapDataOutputStream(256, KnownVersion.GFE_90);
+    VersionedDataOutputStream dop = new VersionedDataOutputStream(hdos90, KnownVersion.GFE_90);
 
     eventID.toData(dop, InternalDataSerializer.createSerializationContext(dop));
 
@@ -191,12 +191,12 @@ public class EventIdOptimizationJUnitTest {
 
 
     VersionedDataInputStream dataInputStream =
-        new VersionedDataInputStream(bais, Version.GFE_90);
+        new VersionedDataInputStream(bais, KnownVersion.GFE_90);
 
     EventID eventID2 = new EventID();
     eventID2.fromData(dataInputStream, mock(DeserializationContext.class));
 
-    assertEquals(distributedMember, eventID2.getDistributedMember(Version.GFE_90));
+    assertEquals(distributedMember, eventID2.getDistributedMember(KnownVersion.GFE_90));
 
     assertEquals(memberBytes.length + 17, eventID2.getMembershipID().length);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
index 4c8a21a..38a9b49 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
@@ -27,7 +27,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.ha.ThreadIdentifier.WanType;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @Category({ClientServerTest.class})
@@ -36,7 +36,7 @@ public class ThreadIdentifierJUnitTest {
   @Test
   public void testEqualsIgnoresUUIDBytes() throws Exception {
     InternalDistributedMember id = new InternalDistributedMember(InetAddress.getLocalHost(), 1234);
-    id.setVersionObjectForTest(Version.GFE_90);
+    id.setVersionObjectForTest(KnownVersion.GFE_90);
     byte[] memberIdBytes = EventID.getMembershipId(new ClientProxyMembershipID(id));
     byte[] memberIdBytesWithoutUUID = new byte[memberIdBytes.length - (2 * 8 + 1)];// UUID bytes +
                                                                                    // weight byte
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java
index f981d30..48e167d 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java
@@ -33,7 +33,7 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage.FetchEntriesReplyMessage;
 import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage.FetchEntriesResponse;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.fake.Fakes;
 
 public class FetchEntriesMessageJUnitTest {
@@ -52,7 +52,8 @@ public class FetchEntriesMessageJUnitTest {
 
   private HeapDataOutputStream createDummyChunk() throws IOException, ClassNotFoundException {
     HeapDataOutputStream mos =
-        new HeapDataOutputStream(InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Version.CURRENT);
+        new HeapDataOutputStream(InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048,
+            KnownVersion.CURRENT);
     mos.reset();
     DataSerializer.writeObject("keyWithOutVersionTag", mos);
     DataSerializer.writeObject("valueWithOutVersionTag", mos);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java
index d51c10d..5867f9e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java
@@ -34,7 +34,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxyFactory.InternalCacheClientProxyFactory;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.statistics.StatisticsManager;
 
@@ -43,7 +43,7 @@ public class CacheClientProxyFactoryTest {
   private CacheClientNotifier notifier;
   private Socket socket;
   private ClientProxyMembershipID proxyId;
-  private Version clientVersion;
+  private KnownVersion clientVersion;
   private SecurityService securityService;
   private Subject subject;
   private StatisticsClock statisticsClock;
@@ -56,7 +56,7 @@ public class CacheClientProxyFactoryTest {
     notifier = mock(CacheClientNotifier.class);
     socket = mock(Socket.class);
     proxyId = mock(ClientProxyMembershipID.class);
-    clientVersion = mock(Version.class);
+    clientVersion = mock(KnownVersion.class);
     securityService = mock(SecurityService.class);
     subject = mock(Subject.class);
     statisticsClock = mock(StatisticsClock.class);
@@ -105,7 +105,7 @@ public class CacheClientProxyFactoryTest {
     @Override
     public CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       return new SubCacheClientProxy(notifier, socket, proxyId, isPrimary, clientConflation,
@@ -118,7 +118,7 @@ public class CacheClientProxyFactoryTest {
 
     SubCacheClientProxy(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       super(notifier, socket, proxyId, isPrimary, clientConflation, clientVersion, acceptorId,
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java
index 67701d9..6a28398 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java
@@ -16,13 +16,13 @@ package org.apache.geode.internal.cache.tier.sockets;
 
 import org.junit.Test;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class CommandInitializerJUnitTest {
 
   @Test
   public void testCommandMapContainsAllVersions() {
-    for (Version version : Version.getAllVersions()) {
+    for (KnownVersion version : KnownVersion.getAllVersions()) {
       org.junit.Assert.assertNotNull(
           "Please add a commnd set for " + version + " of Geode to CommandInitializer",
           CommandInitializer.getCommands(version));
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java
index d6f0151..465670a 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java
@@ -35,7 +35,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @Category({ClientServerTest.class})
@@ -46,7 +46,7 @@ public class MessageJUnitTest {
   @Before
   public void setUp() throws Exception {
     Socket mockSocket = mock(Socket.class);
-    this.message = new Message(2, Version.CURRENT);
+    this.message = new Message(2, KnownVersion.CURRENT);
     assertEquals(2, this.message.getNumberOfParts());
     MessageStats mockStats = mock(MessageStats.class);
     ByteBuffer msgBuffer = ByteBuffer.allocate(1000);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
index a2669fe..638114d 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
@@ -93,7 +93,7 @@ public class ServerConnectionTest {
   @Test
   public void pre65SecureShouldReturnUserAuthId() {
     long userAuthId = 12345L;
-    when(handshake.getVersion()).thenReturn(Version.GFE_61);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_61);
     serverConnection.setUserAuthId(userAuthId);
 
     long value = serverConnection.getUniqueId();
@@ -103,7 +103,7 @@ public class ServerConnectionTest {
 
   @Test
   public void pre65NonSecureShouldReturnUserAuthId() {
-    when(handshake.getVersion()).thenReturn(Version.GFE_61);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_61);
     long userAuthId = 12345L;
     serverConnection.setUserAuthId(userAuthId);
 
@@ -117,7 +117,7 @@ public class ServerConnectionTest {
     long uniqueIdFromMessage = 23456L;
     MessageIdExtractor messageIdExtractor = mock(MessageIdExtractor.class);
     when(handshake.getEncryptor()).thenReturn(mock(Encryptor.class));
-    when(handshake.getVersion()).thenReturn(Version.GFE_82);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_82);
     when(messageIdExtractor.getUniqueIdFromMessage(any(Message.class), any(Encryptor.class),
         anyLong())).thenReturn(uniqueIdFromMessage);
     when(requestMessage.isSecureMode()).thenReturn(true);
@@ -131,7 +131,7 @@ public class ServerConnectionTest {
 
   @Test
   public void post65NonSecureShouldThrow() {
-    when(handshake.getVersion()).thenReturn(Version.GFE_82);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_82);
 
     Throwable thrown = catchThrowable(() -> serverConnection.getUniqueId());
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java
index eaa8684..a0dd813 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java
@@ -35,7 +35,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -88,7 +88,7 @@ public class ContainsKey66Test {
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getResponseMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.regionNamePart.getCachedString()).thenReturn(REGION_NAME);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java
index 29b4546..9967028 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java
@@ -38,7 +38,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -97,7 +97,7 @@ public class CreateRegionTest {
     when(this.serverConnection.getCacheServerStats()).thenReturn(mock(CacheServerStats.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java
index 054754d..c1617ef 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class Destroy65Test {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java
index 85c8a14..25cf12f 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java
@@ -39,7 +39,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -108,7 +108,7 @@ public class DestroyRegionTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java
index 310b1c0..5a9eff0 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class DestroyTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java
index d8dc48a..61f2183 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -115,7 +115,7 @@ public class Get70Test {
     when(serverConnection.getResponseMessage()).thenReturn(responseMessage);
     when(serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(serverConnection.getErrorResponseMessage()).thenReturn(errorResponseMessage);
-    when(serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(valuePart.getObject()).thenReturn(CALLBACK_ARG);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java
index a9b9e57..3999586 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -113,7 +113,7 @@ public class InvalidateTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java
index 331409d..f73bd51 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -132,7 +132,7 @@ public class Put61Test {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.localRegion.basicBridgePut(eq(KEY), eq(VALUE), eq(VALUE), eq(true), eq(CALLBACK_ARG),
         any(), eq(true), any())).thenReturn(true);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java
index f643ccf..90d786d 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -153,7 +153,7 @@ public class Put65Test {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.valuePart.getSerializedForm()).thenReturn(VALUE);
     when(this.valuePart.isObject()).thenReturn(true);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java
index 1dba615..24cff7d 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -130,7 +130,7 @@ public class PutTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.localRegion.basicBridgePut(eq(KEY), eq(VALUE), isNull(), eq(true), eq(CALLBACK_ARG),
         any(), anyBoolean(), any())).thenReturn(true);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java
index f2dc383..03bc8cb 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -120,7 +120,7 @@ public class RegisterInterest61Test {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java
index c9fdef4..7944990 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class RegisterInterestList61Test {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java
index 655ee8b..587227b 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java
@@ -45,7 +45,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -130,7 +130,7 @@ public class RegisterInterestList66Test {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java
index b95ae8e..f1a4615 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class RegisterInterestListTest {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java
index 528cd2e..60950e2 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java
@@ -40,7 +40,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -110,7 +110,7 @@ public class RequestTest {
     when(this.serverConnection.getResponseMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.valuePart.getObject()).thenReturn(CALLBACK_ARG);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java
index 8912e05..75b9707 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -129,7 +129,7 @@ public class UnregisterInterestTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getAcceptor()).thenReturn(this.acceptor);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.valuePart.getObject()).thenReturn(CALLBACK_ARG);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java
index 42a2076..36a865e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java
@@ -43,7 +43,7 @@ import org.mockito.stubbing.Answer;
 
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 
@@ -163,7 +163,7 @@ public abstract class AbstractVersionTagTestBase {
         new ByteBufferInputStream(ByteBuffer.wrap(outputStream.toByteArray()));
     DataInputStream in = new DataInputStream(inputStream);
     VersionedDataInputStream versionedDataInputStream =
-        new VersionedDataInputStream(in, Version.GEODE_1_10_0);
+        new VersionedDataInputStream(in, KnownVersion.GEODE_1_10_0);
     DeserializationContext context =
         InternalDataSerializer.createDeserializationContext(versionedDataInputStream);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
index cdced60..6dd9ecb 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
@@ -49,7 +49,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.inet.LocalHostUtil;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.rules.ExecutorServiceRule;
 
 public class RegionVersionVectorTest {
@@ -485,7 +485,7 @@ public class RegionVersionVectorTest {
 
     assertTrue(rvv.sameAs(rvv.getCloneForTransmission()));
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(rvv.getCloneForTransmission(), out);
     byte[] bytes = out.toByteArray();
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
index f8a1996..9740b7b 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
@@ -64,8 +64,8 @@ import org.apache.geode.internal.cache.execute.data.CustId;
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl;
 
 /**
@@ -943,7 +943,7 @@ public class DataTypeJUnitTest {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
index e6634f0..b2f99d9 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.RegionEntryContext;
 import org.apache.geode.internal.offheap.MemoryBlock.State;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class OffHeapStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
 
@@ -571,7 +571,7 @@ public class OffHeapStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
     OffHeapStoredObject chunk = createValueAsUnserializedStoredObject(regionEntryValue);
 
     // writeByte is a final method and cannot be mocked, so creating a real one
-    HeapDataOutputStream dataOutput = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream dataOutput = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     chunk.sendTo(dataOutput);
 
@@ -594,7 +594,7 @@ public class OffHeapStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
     OffHeapStoredObject chunk = createValueAsUnserializedStoredObject(regionEntryValue);
 
     // writeByte is a final method and cannot be mocked, so creating a real one
-    HeapDataOutputStream dataOutput = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream dataOutput = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     chunk.sendAsByteArray(dataOutput);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java b/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java
index 362d718..0dee9f9 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class ObjectTraverserPerf {
 
@@ -57,7 +57,7 @@ public class ObjectTraverserPerf {
   private static void calcSize(TestObject testObject) throws IllegalAccessException, IOException {
     if (USE_SERIALIZATION) {
       // NullDataOutputStream out = new NullDataOutputStream();
-      HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
       testObject.toData(out);
     } else {
       ObjectGraphSizer.size(testObject);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java b/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java
index 8094a37..b7df195 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java
@@ -39,7 +39,7 @@ import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.SerialAckedMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.net.BufferPool;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class MsgStreamerTest {
   private DMStats stats = mock(DMStats.class);
@@ -87,12 +87,12 @@ public class MsgStreamerTest {
     message.setRecipients(Arrays.asList(member1, member2));
 
     when(connection1.getRemoteAddress()).thenReturn(member1);
-    when(connection1.getRemoteVersion()).thenReturn(Version.CURRENT);
+    when(connection1.getRemoteVersion()).thenReturn(KnownVersion.CURRENT);
     when(connection2.getRemoteAddress()).thenReturn(member2);
     if (mixedDestinationVersions) {
-      when(connection1.getRemoteVersion()).thenReturn(Version.GEODE_1_12_0);
+      when(connection1.getRemoteVersion()).thenReturn(KnownVersion.GEODE_1_12_0);
     } else {
-      when(connection1.getRemoteVersion()).thenReturn(Version.CURRENT);
+      when(connection1.getRemoteVersion()).thenReturn(KnownVersion.CURRENT);
     }
     List<Connection> connections = Arrays.asList(connection1, connection2);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java b/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
index 60bfe69..2f25bfa 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
@@ -34,16 +34,16 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Unit Tests for {@link BlobHelper}.
  *
  * TODO: add coverage for additional methods:
- * <li>{@link BlobHelper#deserializeBlob(byte[], Version, ByteArrayDataInput)}
+ * <li>{@link BlobHelper#deserializeBlob(byte[], KnownVersion, ByteArrayDataInput)}
  * <li>{@link BlobHelper#deserializeBuffer(ByteArrayDataInput, int)}
  * <li>{@link BlobHelper#deserializeOffHeapBlob(StoredObject)}
- * <li>{@link BlobHelper#serializeToBlob(Object, Version)}
+ * <li>{@link BlobHelper#serializeToBlob(Object, KnownVersion)}
  */
 public class BlobHelperTest {
 
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
index c46f1a2..e02a453 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
@@ -40,7 +40,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalCacheForClientAccess;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.management.DistributedRegionMXBean;
 import org.apache.geode.management.DistributedSystemMXBean;
 import org.apache.geode.management.internal.BaseManagementService;
@@ -240,9 +240,9 @@ public class RestoreRedundancyPerformerTest {
 
 
     when(server1.getVersionOrdinalObject())
-        .thenReturn(Version.GEODE_1_2_0);
+        .thenReturn(KnownVersion.GEODE_1_2_0);
     when(server2.getVersionOrdinalObject())
-        .thenReturn(Version.GEODE_1_9_0);
+        .thenReturn(KnownVersion.GEODE_1_9_0);
 
 
     // intercept the executeFunctionAndGetFunctionResult method call on the performer
diff --git a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
index 5cce73c..7f8f3a7 100644
--- a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
+++ b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
@@ -55,7 +55,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.distributed.internal.membership.api.MembershipView;
 import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
 import org.apache.geode.internal.AvailablePortHelper;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionOrdinal;
 import org.apache.geode.test.dunit.DistributedTestUtils;
 import org.apache.geode.test.dunit.Host;
@@ -210,7 +210,7 @@ public abstract class RollingUpgradeDUnitTest extends JUnit4DistributedTestCase
       verifyValues(objectType, regionName, 0, 10, server2);
       putAndVerify(objectType, server2, regionName, 15, 25, server1);
 
... 4185 lines suppressed ...


[geode] 04/04: GEODE-8337: fix support branch creation script to mod KnownVersion.java

Posted by bu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

burcham pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 52018fcf1da513c888092775295a121992abcec2
Author: Bill Burcham <bi...@gmail.com>
AuthorDate: Tue Aug 11 13:38:34 2020 -0700

    GEODE-8337: fix support branch creation script to mod KnownVersion.java
---
 dev-tools/release/create_support_branches.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/dev-tools/release/create_support_branches.sh b/dev-tools/release/create_support_branches.sh
index 95ba74c..19e59f7 100755
--- a/dev-tools/release/create_support_branches.sh
+++ b/dev-tools/release/create_support_branches.sh
@@ -165,7 +165,8 @@ sed -e "s/^version =.*/version = ${NEWVERSION}-build.0/" -i.bak gradle.propertie
 #  initial_version: 1.13.0-((stuff)).0
 sed -e "s/^  initial_version:[^-]*\(-[^.0-9]*\)[.0-9]*/  initial_version: ${NEWVERSION}\1.0/" -i.bak ./ci/pipelines/shared/jinja.variables.yml
 
-VER=geode-serialization/src/main/java/org/apache/geode/internal/serialization/Version.java
+VER=geode-serialization/src/main/java/org/apache/geode/internal/serialization/KnownVersion.java
+[ -r $VER ] || VER=geode-serialization/src/main/java/org/apache/geode/internal/serialization/Version.java
 #add the new ordinal and Version constants and set them as current&highest
 CURORD=$(cat $VER | awk '/private static final short GEODE_.*_ORDINAL/{print $NF}' | tr -d ';' | sort -n | tail -1)
 NEWORD=$(( CURORD + 5 ))