You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2017/10/21 00:12:48 UTC

[geode] branch feature/GEODE-3245 updated (32e8c0b -> f1e8e2f)

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

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


 discard 32e8c0b  GEODE-3245: fix iteration of primitive array
 discard c3a796b  GEODE-3245: Flattening LuceneSerializer should support PDX values             add junit and dunit tests for pdx nested object serializer
     add c855209  GEODE-3299: refactor functions to get Cache from FunctionContext
     add b5e3db5  GEODE-3299: Remove unneeded constructor
     add 8fdacaf  GEODE-2405 Update docs with changes to export cluster-configuration
     add 2636bd8  GEODE-3841 CI Failure : WanCommandListDUnitTest.testListGatewaySenderGatewayReceiver_group GEODE-3780 suspected member is never watched again after passing final check
     add 10c3111  Parameterizing LuceneSerializer with a type
     add 6206fc1  GEODE-3614 remove JUnit3CacheTestCase, cleanup JUnit4CacheTestCase
     add 2e710e5  GEODE-3708: Added a separate iterator for MemoryIndexStore which doesn't iterate over the values in the Map.
     add bfdaeba  GEODE-3857: Pulse login fails after second login (#939)
     add d118ea6  GEODE-3538 Update doc section Running Geode Server Processes (#945)
     add cff010f  GEODE-3701 Emphasize performance penalty of hash indexes in docs (#949)
     add b0e0070  GEODE-3026: Removed the AsyncEventQueue for the Lucene index if the region isn't created
     add 5a1108f  GEODE-3521: Allow region set operations to bootstrap a transaction. (#891)
     add d7ea68f  GEODE-3739: Refactor protobuf authentication (#922)
     add 9fc8b79  GEODE-3864: Added protobuf message file archiving
     add 46c0fe6  GEODE-3864: Added protobuf message file archiving
     add d7e7a06  GEODE-3068: fix alphabetical ordering
     add bbcfb83  GEODE-3866: add integration tests for deprecated launchers
     add 97ff1ae  Change DeprecatedAgentLauncherIntegrationTest to use TemporaryFolder
     add 674fd88  Isolate new methods accepting workingDirectory to only require workingDirectory
     add 674d4ae  Fix format with spotless
     add 58a28c7  GEODE-3847: upgrade to AssertJ 3.8.0
     add 8c873f9  Squashed commit of the following:
     add 472b96c  GEODE-3719: Improve invocations of disk store backups (#853)
     add 7e1d029  GEODE-3859: Simplify API for reading output from a GfshScript
     add ff6bfd9  GEODE-3830: Add more logging for GfshRule
     add dc9acd2  GEODE-3345: Refactor ClusterConfigurationDUnitTest to use test rules
     add 2cb5fed  GEODE-3810: Incremented test timestamp by 1 in case it is the same as the previous event
     add 378a1de  GEODE-3521: Correct a javadoc issue.
     add 65f6c6c  GEODE-1772: Removal of flaky tag.
     add b92f295  GEODE-3870: regenerate Region Entry classes from Linux
     add 70d428f  GEODE-3871 allow exclusion of serializable classes in AnalyzeSerializablesJUnitTest
     add caf71d8  GEODE-3882: ClusterConfiguration to support GatewayReceiver hostnameForSenders
     new f1e8e2f  GEODE-3245: Flattening LuceneSerializer should support PDX values

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (32e8c0b)
            \
             N -- N -- N   refs/heads/feature/GEODE-3245 (f1e8e2f)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 geode-assembly/build.gradle                        |   4 +
 .../StopServerWithSecurityAcceptanceTest.java      |   8 +-
 .../geode/test/junit/rules/HttpClientRule.java     |   4 +
 .../geode/tools/pulse/PulseSecurityTest.java       |   7 +
 .../apache/geode/admin/AdminDistributedSystem.java |   1 -
 .../java/org/apache/geode/admin/BackupStatus.java  |  21 +-
 .../admin/internal/AdminDistributedSystemImpl.java |  38 +-
 .../geode/admin/internal/BackupStatusImpl.java     |  35 +-
 .../geode/admin/jmx/internal/AgentLauncher.java    |  12 +
 .../asyncqueue/internal/AsyncEventQueueImpl.java   |   6 +
 .../geode/cache/query/internal/DefaultQuery.java   |   4 +-
 .../query/internal/index/CompactRangeIndex.java    |  14 +-
 .../cache/query/internal/index/IndexManager.java   |  10 +-
 .../query/internal/index/MemoryIndexStore.java     |  64 +++
 .../gms/messages/FinalCheckPassedMessage.java      |   2 +
 .../org/apache/geode/internal/DSFIDFactory.java    |   2 +
 .../org/apache/geode/internal/SystemAdmin.java     |   9 +-
 .../apache/geode/internal/cache/BackupUtil.java    |  75 +++
 .../geode/internal/cache/DistributedRegion.java    |   4 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |  25 +-
 .../apache/geode/internal/cache/InternalCache.java |   6 +
 .../geode/internal/cache/LeafRegionEntry.cpp       |  44 +-
 .../apache/geode/internal/cache/LocalRegion.java   |  49 +-
 .../geode/internal/cache/PartitionedRegion.java    |  16 +-
 .../internal/cache/PartitionedRegionDataStore.java |   1 -
 .../internal/cache/PartitionedRegionDataView.java  |   8 +-
 .../internal/cache/PausedTXStateProxyImpl.java     | 422 ++++++++++++++
 .../geode/internal/cache/RegionListener.java       |  23 +-
 .../apache/geode/internal/cache/RegionService.java |  30 -
 .../apache/geode/internal/cache/TXManagerImpl.java | 111 +++-
 .../org/apache/geode/internal/cache/TXState.java   |   4 +-
 .../apache/geode/internal/cache/TXStateProxy.java  |   6 +-
 .../geode/internal/cache/TXStateProxyImpl.java     |  55 +-
 .../apache/geode/internal/cache/TXStateStub.java   |   7 +-
 .../cache/VMStatsDiskLRURegionEntryHeapIntKey.java | 115 +---
 .../VMStatsDiskLRURegionEntryHeapLongKey.java      | 113 +---
 .../VMStatsDiskLRURegionEntryHeapObjectKey.java    | 111 +---
 .../VMStatsDiskLRURegionEntryHeapStringKey1.java   | 111 +---
 .../VMStatsDiskLRURegionEntryHeapStringKey2.java   | 110 +---
 .../VMStatsDiskLRURegionEntryHeapUUIDKey.java      | 114 +---
 .../VMStatsDiskLRURegionEntryOffHeapIntKey.java    | 128 +----
 .../VMStatsDiskLRURegionEntryOffHeapLongKey.java   | 126 +----
 .../VMStatsDiskLRURegionEntryOffHeapObjectKey.java | 125 +----
 ...VMStatsDiskLRURegionEntryOffHeapStringKey1.java | 125 +----
 ...VMStatsDiskLRURegionEntryOffHeapStringKey2.java | 124 +----
 .../VMStatsDiskLRURegionEntryOffHeapUUIDKey.java   | 127 +----
 .../cache/VMStatsDiskRegionEntryHeapIntKey.java    |  98 +---
 .../cache/VMStatsDiskRegionEntryHeapLongKey.java   |  96 +---
 .../cache/VMStatsDiskRegionEntryHeapObjectKey.java |  95 +---
 .../VMStatsDiskRegionEntryHeapStringKey1.java      |  96 +---
 .../VMStatsDiskRegionEntryHeapStringKey2.java      |  95 +---
 .../cache/VMStatsDiskRegionEntryHeapUUIDKey.java   |  97 +---
 .../cache/VMStatsDiskRegionEntryOffHeapIntKey.java | 111 +---
 .../VMStatsDiskRegionEntryOffHeapLongKey.java      | 109 +---
 .../VMStatsDiskRegionEntryOffHeapObjectKey.java    | 108 +---
 .../VMStatsDiskRegionEntryOffHeapStringKey1.java   | 108 +---
 .../VMStatsDiskRegionEntryOffHeapStringKey2.java   | 107 +---
 .../VMStatsDiskRegionEntryOffHeapUUIDKey.java      | 110 +---
 .../cache/VMStatsLRURegionEntryHeapIntKey.java     |  67 +--
 .../cache/VMStatsLRURegionEntryHeapLongKey.java    |  65 +--
 .../cache/VMStatsLRURegionEntryHeapObjectKey.java  |  65 +--
 .../cache/VMStatsLRURegionEntryHeapStringKey1.java |  65 +--
 .../cache/VMStatsLRURegionEntryHeapStringKey2.java |  64 +--
 .../cache/VMStatsLRURegionEntryHeapUUIDKey.java    |  64 +--
 .../cache/VMStatsLRURegionEntryOffHeapIntKey.java  |  80 +--
 .../cache/VMStatsLRURegionEntryOffHeapLongKey.java |  78 +--
 .../VMStatsLRURegionEntryOffHeapObjectKey.java     |  78 +--
 .../VMStatsLRURegionEntryOffHeapStringKey1.java    |  77 +--
 .../VMStatsLRURegionEntryOffHeapStringKey2.java    |  76 +--
 .../cache/VMStatsLRURegionEntryOffHeapUUIDKey.java |  77 +--
 .../cache/VMStatsRegionEntryHeapIntKey.java        |  49 +-
 .../cache/VMStatsRegionEntryHeapLongKey.java       |  47 +-
 .../cache/VMStatsRegionEntryHeapObjectKey.java     |  47 +-
 .../cache/VMStatsRegionEntryHeapStringKey1.java    |  47 +-
 .../cache/VMStatsRegionEntryHeapStringKey2.java    |  46 +-
 .../cache/VMStatsRegionEntryHeapUUIDKey.java       |  46 +-
 .../cache/VMStatsRegionEntryOffHeapIntKey.java     |  62 +--
 .../cache/VMStatsRegionEntryOffHeapLongKey.java    |  60 +-
 .../cache/VMStatsRegionEntryOffHeapObjectKey.java  |  60 +-
 .../cache/VMStatsRegionEntryOffHeapStringKey1.java |  59 +-
 .../cache/VMStatsRegionEntryOffHeapStringKey2.java |  58 +-
 .../cache/VMStatsRegionEntryOffHeapUUIDKey.java    |  59 +-
 .../cache/VMThinDiskLRURegionEntryHeapIntKey.java  | 107 +---
 .../cache/VMThinDiskLRURegionEntryHeapLongKey.java | 105 +---
 .../VMThinDiskLRURegionEntryHeapObjectKey.java     | 103 +---
 .../VMThinDiskLRURegionEntryHeapStringKey1.java    | 103 +---
 .../VMThinDiskLRURegionEntryHeapStringKey2.java    | 102 +---
 .../cache/VMThinDiskLRURegionEntryHeapUUIDKey.java | 106 +---
 .../VMThinDiskLRURegionEntryOffHeapIntKey.java     | 120 +---
 .../VMThinDiskLRURegionEntryOffHeapLongKey.java    | 118 +---
 .../VMThinDiskLRURegionEntryOffHeapObjectKey.java  | 117 +---
 .../VMThinDiskLRURegionEntryOffHeapStringKey1.java | 117 +---
 .../VMThinDiskLRURegionEntryOffHeapStringKey2.java | 116 +---
 .../VMThinDiskLRURegionEntryOffHeapUUIDKey.java    | 119 +---
 .../cache/VMThinDiskRegionEntryHeapIntKey.java     |  89 +--
 .../cache/VMThinDiskRegionEntryHeapLongKey.java    |  87 +--
 .../cache/VMThinDiskRegionEntryHeapObjectKey.java  |  86 +--
 .../cache/VMThinDiskRegionEntryHeapStringKey1.java |  87 +--
 .../cache/VMThinDiskRegionEntryHeapStringKey2.java |  86 +--
 .../cache/VMThinDiskRegionEntryHeapUUIDKey.java    |  88 +--
 .../cache/VMThinDiskRegionEntryOffHeapIntKey.java  | 102 +---
 .../cache/VMThinDiskRegionEntryOffHeapLongKey.java | 100 +---
 .../VMThinDiskRegionEntryOffHeapObjectKey.java     |  99 +---
 .../VMThinDiskRegionEntryOffHeapStringKey1.java    |  99 +---
 .../VMThinDiskRegionEntryOffHeapStringKey2.java    |  98 +---
 .../cache/VMThinDiskRegionEntryOffHeapUUIDKey.java | 101 +---
 .../cache/VMThinLRURegionEntryHeapIntKey.java      |  59 +-
 .../cache/VMThinLRURegionEntryHeapLongKey.java     |  57 +-
 .../cache/VMThinLRURegionEntryHeapObjectKey.java   |  57 +-
 .../cache/VMThinLRURegionEntryHeapStringKey1.java  |  57 +-
 .../cache/VMThinLRURegionEntryHeapStringKey2.java  |  56 +-
 .../cache/VMThinLRURegionEntryHeapUUIDKey.java     |  56 +-
 .../cache/VMThinLRURegionEntryOffHeapIntKey.java   |  72 +--
 .../cache/VMThinLRURegionEntryOffHeapLongKey.java  |  70 +--
 .../VMThinLRURegionEntryOffHeapObjectKey.java      |  70 +--
 .../VMThinLRURegionEntryOffHeapStringKey1.java     |  69 +--
 .../VMThinLRURegionEntryOffHeapStringKey2.java     |  68 +--
 .../cache/VMThinLRURegionEntryOffHeapUUIDKey.java  |  69 +--
 .../cache/VMThinRegionEntryHeapIntKey.java         |  40 +-
 .../cache/VMThinRegionEntryHeapLongKey.java        |  38 +-
 .../cache/VMThinRegionEntryHeapObjectKey.java      |  38 +-
 .../cache/VMThinRegionEntryHeapStringKey1.java     |  38 +-
 .../cache/VMThinRegionEntryHeapStringKey2.java     |  37 +-
 .../cache/VMThinRegionEntryHeapUUIDKey.java        |  37 +-
 .../cache/VMThinRegionEntryOffHeapIntKey.java      |  53 +-
 .../cache/VMThinRegionEntryOffHeapLongKey.java     |  51 +-
 .../cache/VMThinRegionEntryOffHeapObjectKey.java   |  51 +-
 .../cache/VMThinRegionEntryOffHeapStringKey1.java  |  50 +-
 .../cache/VMThinRegionEntryOffHeapStringKey2.java  |  49 +-
 .../cache/VMThinRegionEntryOffHeapUUIDKey.java     |  50 +-
 ...VersionedStatsDiskLRURegionEntryHeapIntKey.java | 123 +---
 ...ersionedStatsDiskLRURegionEntryHeapLongKey.java | 121 +---
 ...sionedStatsDiskLRURegionEntryHeapObjectKey.java | 120 +---
 ...ionedStatsDiskLRURegionEntryHeapStringKey1.java | 120 +---
 ...ionedStatsDiskLRURegionEntryHeapStringKey2.java | 119 +---
 ...ersionedStatsDiskLRURegionEntryHeapUUIDKey.java | 122 +---
 ...sionedStatsDiskLRURegionEntryOffHeapIntKey.java | 137 +----
 ...ionedStatsDiskLRURegionEntryOffHeapLongKey.java | 135 +----
 ...nedStatsDiskLRURegionEntryOffHeapObjectKey.java | 134 +----
 ...edStatsDiskLRURegionEntryOffHeapStringKey1.java | 134 +----
 ...edStatsDiskLRURegionEntryOffHeapStringKey2.java | 133 +----
 ...ionedStatsDiskLRURegionEntryOffHeapUUIDKey.java | 136 +----
 .../VersionedStatsDiskRegionEntryHeapIntKey.java   | 106 +---
 .../VersionedStatsDiskRegionEntryHeapLongKey.java  | 104 +---
 ...VersionedStatsDiskRegionEntryHeapObjectKey.java | 103 +---
 ...ersionedStatsDiskRegionEntryHeapStringKey1.java | 103 +---
 ...ersionedStatsDiskRegionEntryHeapStringKey2.java | 102 +---
 .../VersionedStatsDiskRegionEntryHeapUUIDKey.java  | 105 +---
 ...VersionedStatsDiskRegionEntryOffHeapIntKey.java | 120 +---
 ...ersionedStatsDiskRegionEntryOffHeapLongKey.java | 118 +---
 ...sionedStatsDiskRegionEntryOffHeapObjectKey.java | 117 +---
 ...ionedStatsDiskRegionEntryOffHeapStringKey1.java | 117 +---
 ...ionedStatsDiskRegionEntryOffHeapStringKey2.java | 116 +---
 ...ersionedStatsDiskRegionEntryOffHeapUUIDKey.java | 119 +---
 .../VersionedStatsLRURegionEntryHeapIntKey.java    |  76 +--
 .../VersionedStatsLRURegionEntryHeapLongKey.java   |  73 +--
 .../VersionedStatsLRURegionEntryHeapObjectKey.java |  73 +--
 ...VersionedStatsLRURegionEntryHeapStringKey1.java |  72 +--
 ...VersionedStatsLRURegionEntryHeapStringKey2.java |  71 +--
 .../VersionedStatsLRURegionEntryHeapUUIDKey.java   |  72 +--
 .../VersionedStatsLRURegionEntryOffHeapIntKey.java |  89 +--
 ...VersionedStatsLRURegionEntryOffHeapLongKey.java |  87 +--
 ...rsionedStatsLRURegionEntryOffHeapObjectKey.java |  87 +--
 ...sionedStatsLRURegionEntryOffHeapStringKey1.java |  86 +--
 ...sionedStatsLRURegionEntryOffHeapStringKey2.java |  85 +--
 ...VersionedStatsLRURegionEntryOffHeapUUIDKey.java |  86 +--
 .../cache/VersionedStatsRegionEntryHeapIntKey.java |  58 +-
 .../VersionedStatsRegionEntryHeapLongKey.java      |  56 +-
 .../VersionedStatsRegionEntryHeapObjectKey.java    |  55 +-
 .../VersionedStatsRegionEntryHeapStringKey1.java   |  54 +-
 .../VersionedStatsRegionEntryHeapStringKey2.java   |  53 +-
 .../VersionedStatsRegionEntryHeapUUIDKey.java      |  55 +-
 .../VersionedStatsRegionEntryOffHeapIntKey.java    |  71 +--
 .../VersionedStatsRegionEntryOffHeapLongKey.java   |  69 +--
 .../VersionedStatsRegionEntryOffHeapObjectKey.java |  69 +--
 ...VersionedStatsRegionEntryOffHeapStringKey1.java |  68 +--
 ...VersionedStatsRegionEntryOffHeapStringKey2.java |  67 +--
 .../VersionedStatsRegionEntryOffHeapUUIDKey.java   |  68 +--
 .../VersionedThinDiskLRURegionEntryHeapIntKey.java | 115 +---
 ...VersionedThinDiskLRURegionEntryHeapLongKey.java | 113 +---
 ...rsionedThinDiskLRURegionEntryHeapObjectKey.java | 112 +---
 ...sionedThinDiskLRURegionEntryHeapStringKey1.java | 112 +---
 ...sionedThinDiskLRURegionEntryHeapStringKey2.java | 111 +---
 ...VersionedThinDiskLRURegionEntryHeapUUIDKey.java | 114 +---
 ...rsionedThinDiskLRURegionEntryOffHeapIntKey.java | 129 +----
 ...sionedThinDiskLRURegionEntryOffHeapLongKey.java | 127 +----
 ...onedThinDiskLRURegionEntryOffHeapObjectKey.java | 126 +----
 ...nedThinDiskLRURegionEntryOffHeapStringKey1.java | 126 +----
 ...nedThinDiskLRURegionEntryOffHeapStringKey2.java | 125 +----
 ...sionedThinDiskLRURegionEntryOffHeapUUIDKey.java | 128 +----
 .../VersionedThinDiskRegionEntryHeapIntKey.java    |  98 +---
 .../VersionedThinDiskRegionEntryHeapLongKey.java   |  95 +---
 .../VersionedThinDiskRegionEntryHeapObjectKey.java |  94 +---
 ...VersionedThinDiskRegionEntryHeapStringKey1.java |  94 +---
 ...VersionedThinDiskRegionEntryHeapStringKey2.java |  93 +---
 .../VersionedThinDiskRegionEntryHeapUUIDKey.java   |  96 +---
 .../VersionedThinDiskRegionEntryOffHeapIntKey.java | 111 +---
 ...VersionedThinDiskRegionEntryOffHeapLongKey.java | 109 +---
 ...rsionedThinDiskRegionEntryOffHeapObjectKey.java | 108 +---
 ...sionedThinDiskRegionEntryOffHeapStringKey1.java | 108 +---
 ...sionedThinDiskRegionEntryOffHeapStringKey2.java | 107 +---
 ...VersionedThinDiskRegionEntryOffHeapUUIDKey.java | 110 +---
 .../VersionedThinLRURegionEntryHeapIntKey.java     |  68 +--
 .../VersionedThinLRURegionEntryHeapLongKey.java    |  65 +--
 .../VersionedThinLRURegionEntryHeapObjectKey.java  |  65 +--
 .../VersionedThinLRURegionEntryHeapStringKey1.java |  64 +--
 .../VersionedThinLRURegionEntryHeapStringKey2.java |  63 +--
 .../VersionedThinLRURegionEntryHeapUUIDKey.java    |  64 +--
 .../VersionedThinLRURegionEntryOffHeapIntKey.java  |  81 +--
 .../VersionedThinLRURegionEntryOffHeapLongKey.java |  79 +--
 ...ersionedThinLRURegionEntryOffHeapObjectKey.java |  79 +--
 ...rsionedThinLRURegionEntryOffHeapStringKey1.java |  78 +--
 ...rsionedThinLRURegionEntryOffHeapStringKey2.java |  77 +--
 .../VersionedThinLRURegionEntryOffHeapUUIDKey.java |  78 +--
 .../cache/VersionedThinRegionEntryHeapIntKey.java  |  49 +-
 .../cache/VersionedThinRegionEntryHeapLongKey.java |  47 +-
 .../VersionedThinRegionEntryHeapObjectKey.java     |  46 +-
 .../VersionedThinRegionEntryHeapStringKey1.java    |  45 +-
 .../VersionedThinRegionEntryHeapStringKey2.java    |  44 +-
 .../cache/VersionedThinRegionEntryHeapUUIDKey.java |  46 +-
 .../VersionedThinRegionEntryOffHeapIntKey.java     |  62 +--
 .../VersionedThinRegionEntryOffHeapLongKey.java    |  60 +-
 .../VersionedThinRegionEntryOffHeapObjectKey.java  |  60 +-
 .../VersionedThinRegionEntryOffHeapStringKey1.java |  59 +-
 .../VersionedThinRegionEntryOffHeapStringKey2.java |  58 +-
 .../VersionedThinRegionEntryOffHeapUUIDKey.java    |  59 +-
 .../tier/sockets/ClientProtocolProcessor.java      |   2 +
 .../cache/tier/sockets/ClientProtocolService.java  |   9 +-
 .../tier/sockets/ClientProtocolStatistics.java     |  24 -
 .../tier/sockets/ServerConnectionFactory.java      |  37 +-
 .../internal/cache/xmlcache/CacheCreation.java     |  15 +
 .../internal/cache/xmlcache/CacheXmlGenerator.java |   3 +
 .../geode/internal/lang/SystemPropertyHelper.java  |  57 ++
 .../geode/{admin => management}/BackupStatus.java  |   9 +-
 .../apache/geode/management/DiskBackupStatus.java  |  37 +-
 .../internal/BackupStatusImpl.java                 |   6 +-
 .../DiskBackupStatusImpl.java}                     |  58 +-
 .../internal/beans/DistributedSystemBridge.java    |  48 +-
 .../cli/commands/BackupDiskStoreCommand.java       |   9 +-
 .../internal/cli/commands/CreateRegionCommand.java |   2 +-
 .../internal/cli/commands/GetCommand.java          |   3 +-
 .../internal/cli/commands/PutCommand.java          |   2 +-
 .../internal/cli/commands/RemoveCommand.java       |   2 +-
 .../internal/cli/domain/DataCommandRequest.java    |  36 +-
 .../cli/functions/DataCommandFunction.java         |  62 +--
 .../functions/FetchRegionAttributesFunction.java   |   7 +-
 .../cli/functions/ListDiskStoresFunction.java      |   7 +-
 .../internal/cli/functions/ListIndexFunction.java  |   7 +-
 .../geode/pdx/internal/PeerTypeRegistration.java   |   4 +-
 .../geode/security/internal/server/package.html    |  45 --
 .../org/apache/geode/SetOperationTXJUnitTest.java  | 167 ++++++
 .../java/org/apache/geode/TXExpiryJUnitTest.java   |   4 +-
 .../test/java/org/apache/geode/TXJUnitTest.java    | 219 ++++----
 .../DeprecatedAgentLauncherIntegrationTest.java    | 303 ++++++++++
 .../CacheServerSSLConnectionDUnitTest.java         | 209 ++++---
 .../client/internal/SSLNoClientAuthDUnitTest.java  |   3 +-
 .../cache/query/JoinQueriesIntegrationTest.java    |  13 +-
 .../geode/cache30/MultiVMRegionTestCase.java       |  12 +-
 .../AnalyzeSerializablesJUnitTest.java             |  14 +-
 .../gms/fd/GMSHealthMonitorJUnitTest.java          |  17 +
 .../geode/internal/cache/BackupDUnitTest.java      |   2 +-
 .../cache/ClientServerTransactionDUnitTest.java    |  26 +-
 ...precatedCacheServerLauncherIntegrationTest.java | 618 +++++++++++++++++++++
 .../internal/cache/IncrementalBackupDUnitTest.java |  75 +--
 .../internal/cache/RegionListenerDUnitTest.java    | 110 ++++
 .../internal/cache/RegionListenerJUnitTest.java    |   8 +
 .../internal/cache/RemoteTransactionDUnitTest.java | 100 ++--
 .../cache/TransactionsWithDeltaDUnitTest.java      |   4 +-
 .../cache/execute/MyTransactionFunction.java       |  18 +-
 .../cache/execute/PRSetOperationJTADUnitTest.java  | 256 +++++++++
 .../cache/execute/PRSetOperationTXDUnitTest.java   | 237 ++++++++
 .../ExtensionClusterConfigurationDUnitTest.java    | 217 ++++++++
 .../PersistentPartitionedRegionTestBase.java       |  21 +-
 .../internal/jta/ClientServerJTADUnitTest.java     |   8 +-
 .../internal/jta/SetOperationJTAJUnitTest.java     | 183 ++++++
 .../lang/SystemPropertyHelperJUnitTest.java        |  56 ++
 .../geode/management/DiskBackupStatusTest.java     | 105 ++++
 .../geode/management/DiskManagementDUnitTest.java  |   2 +-
 .../functions/DataCommandFunctionJUnitTest.java    |   8 +-
 .../DataCommandFunctionWithPDXJUnitTest.java       |   7 +-
 .../internal/cli/functions/Geode3544JUnitTest.java |   3 +-
 .../functions/ListDiskStoresFunctionJUnitTest.java |  75 +--
 .../cli/functions/ListIndexFunctionJUnitTest.java  |  31 +-
 .../internal/cli/result/CommandResultTest.java     |  17 +-
 .../SharedConfigurationTestUtils.java              |   4 +-
 .../dunit/cache/internal/JUnit3CacheTestCase.java  | 236 --------
 .../dunit/cache/internal/JUnit4CacheTestCase.java  |  96 +---
 .../dunit/internal/JUnit3DistributedTestCase.java  | 240 --------
 .../dunit/internal/JUnit4DistributedTestCase.java  |   2 +-
 .../apache/geode/codeAnalysis/excludedClasses.txt  | 272 +++++++--
 .../org/apache/geode/codeAnalysis/openBugs.txt     |   3 -
 .../geode/codeAnalysis/sanctionedSerializables.txt | 218 +-------
 .../cluster_config/export-import.html.md.erb       |   2 +-
 .../persisting_configurations.html.md.erb          |   2 +-
 .../running/running_the_cacheserver.html.md.erb    | 121 ++--
 .../query_index/creating_hash_indexes.html.md.erb  |  28 +-
 .../gfsh/command-pages/export.html.md.erb          |  13 +-
 .../gfsh/command-pages/start.html.md.erb           |   2 +-
 .../geode/test/junit/rules/gfsh/GfshExecution.java |  81 ++-
 .../geode/test/junit/rules/gfsh/GfshRule.java      |  21 +-
 .../geode/test/junit/rules/gfsh/GfshScript.java    |  45 +-
 .../test/junit/rules/gfsh/internal/OutputLine.java |  36 +-
 .../rules/gfsh/{ => internal}/ProcessLogger.java   |  40 +-
 .../rules/gfsh/{ => internal}/StreamGobbler.java   |   2 +-
 .../geode/cache/lucene/LuceneSerializer.java       |  11 +-
 .../lucene/internal/InternalLuceneService.java     |   4 +-
 .../cache/lucene/internal/LuceneIndexImpl.java     |  21 +
 .../lucene/internal/LuceneRegionListener.java      |  30 +-
 .../cache/lucene/internal/LuceneServiceImpl.java   |  55 +-
 .../apache/geode/cache/lucene/LuceneDUnitTest.java |  37 +-
 .../cache/lucene/LuceneIndexCreationDUnitTest.java |  45 +-
 geode-protobuf/build.gradle                        |  10 +-
 .../tier/sockets/MessageExecutionContext.java      |  21 +-
 .../internal/protocol/ProtobufCachePipeline.java   |  22 +-
 .../internal/protocol/ProtobufProtocolService.java |  56 +-
 .../protocol/protobuf/ProtobufOpsProcessor.java    |   5 +-
 .../protobuf/ProtobufSimpleAuthenticator.java      |  78 ---
 .../protocol/protobuf/security}/Authenticator.java |  30 +-
 .../protocol/protobuf/security}/Authorizer.java    |   4 +-
 .../security/InvalidConfigAuthenticator.java       |  51 ++
 .../protobuf/security}/NoOpAuthenticator.java      |  24 +-
 .../protobuf/security}/NoOpAuthorizer.java         |   4 +-
 .../security/ProtobufShiroAuthenticator.java       |  87 +++
 .../protobuf/security/ProtobufShiroAuthorizer.java |  45 ++
 .../statistics/ProtobufClientStatistics.java       |   4 +-
 .../src/main/proto/authentication_API.proto        |   7 +-
 geode-protobuf/src/main/proto/clientProtocol.proto |   5 +
 ...he.geode.security.internal.server.Authenticator |   1 -
 .../GenericProtocolServerConnectionTest.java       |   2 +
 .../protocol/AuthenticationIntegrationTest.java    | 259 +++++++--
 .../protocol/AuthorizationIntegrationTest.java     |  21 +-
 .../acceptance/CacheConnectionJUnitTest.java       |   2 +
 .../CacheConnectionTimeoutJUnitTest.java           |   4 +-
 .../acceptance/CacheMaxConnectionJUnitTest.java    |   1 +
 .../acceptance/CacheOperationsJUnitTest.java       |   1 +
 .../ProtobufShiroAuthenticatorJUnitTest.java       | 117 ++++
 .../ProtobufSimpleAuthenticatorJUnitTest.java      | 128 -----
 .../protobuf/ProtobufStreamProcessorTest.java      |  19 +-
 .../protobuf/ProtobufTestExecutionContext.java}    |  26 +-
 .../GetAllRequestOperationHandlerJUnitTest.java    |  25 +-
 ...egionNamesRequestOperationHandlerJUnitTest.java |  13 +-
 .../GetRegionRequestOperationHandlerJUnitTest.java |  11 +-
 .../GetRequestOperationHandlerJUnitTest.java       |  19 +-
 .../PutAllRequestOperationHandlerJUnitTest.java    |  13 +-
 .../PutRequestOperationHandlerJUnitTest.java       |  16 +-
 .../RemoveRequestOperationHandlerJUnitTest.java    |  16 +-
 .../tools/pulse/internal/data/Repository.java      |  10 +
 .../internal/security/GemFireAuthentication.java   |   4 -
 .../security/GemFireAuthenticationProvider.java    |   3 +-
 .../pulse/internal/security/LogoutHandler.java     |   3 +-
 .../internal/cache/UpdateVersionDUnitTest.java     |  24 +-
 ...ParallelGatewaySenderOperation_1_DUnitTest.java |   6 -
 .../ClusterConfigurationDUnitTest.java             | 511 -----------------
 .../WANClusterConfigurationDUnitTest.java          | 157 ++++++
 gradle/dependency-versions.properties              |  15 +-
 355 files changed, 6436 insertions(+), 18500 deletions(-)
 create mode 100644 geode-core/src/main/java/org/apache/geode/internal/cache/BackupUtil.java
 create mode 100644 geode-core/src/main/java/org/apache/geode/internal/cache/PausedTXStateProxyImpl.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/internal/cache/RegionService.java
 delete mode 100644 geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolStatistics.java
 create mode 100644 geode-core/src/main/java/org/apache/geode/internal/lang/SystemPropertyHelper.java
 copy geode-core/src/main/java/org/apache/geode/{admin => management}/BackupStatus.java (85%)
 copy geode-core/src/main/java/org/apache/geode/{admin => management}/internal/BackupStatusImpl.java (92%)
 copy geode-core/src/main/java/org/apache/geode/management/{DiskBackupStatus.java => internal/DiskBackupStatusImpl.java} (52%)
 delete mode 100644 geode-core/src/main/java/org/apache/geode/security/internal/server/package.html
 create mode 100644 geode-core/src/test/java/org/apache/geode/SetOperationTXJUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/admin/jmx/internal/DeprecatedAgentLauncherIntegrationTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/DeprecatedCacheServerLauncherIntegrationTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/RegionListenerDUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/execute/PRSetOperationJTADUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/execute/PRSetOperationTXDUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/extension/ExtensionClusterConfigurationDUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/jta/SetOperationJTAJUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/lang/SystemPropertyHelperJUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/management/DiskBackupStatusTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/test/dunit/cache/internal/JUnit3CacheTestCase.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/test/dunit/internal/JUnit3DistributedTestCase.java
 rename geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/statistics/NoOpProtobufStatistics.java => geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/internal/OutputLine.java (56%)
 rename geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/{ => internal}/ProcessLogger.java (72%)
 rename geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/{ => internal}/StreamGobbler.java (96%)
 delete mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSimpleAuthenticator.java
 rename {geode-core/src/main/java/org/apache/geode/security/internal/server => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security}/Authenticator.java (60%)
 rename {geode-core/src/main/java/org/apache/geode/security/internal/server => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security}/Authorizer.java (85%)
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java
 rename {geode-core/src/main/java/org/apache/geode/security/internal/server => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security}/NoOpAuthenticator.java (70%)
 rename {geode-core/src/main/java/org/apache/geode/security/internal/server => geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security}/NoOpAuthorizer.java (86%)
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java
 create mode 100644 geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthorizer.java
 delete mode 100644 geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.security.internal.server.Authenticator
 create mode 100644 geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java
 delete mode 100644 geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufSimpleAuthenticatorJUnitTest.java
 rename geode-protobuf/src/{main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSimpleAuthorizer.java => test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java} (55%)
 delete mode 100644 geode-wan/src/test/java/org/apache/geode/management/internal/configuration/ClusterConfigurationDUnitTest.java
 create mode 100644 geode-wan/src/test/java/org/apache/geode/management/internal/configuration/WANClusterConfigurationDUnitTest.java

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].

[geode] 01/01: GEODE-3245: Flattening LuceneSerializer should support PDX values

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

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

commit f1e8e2f8129ac8c1e94650e0830e2f184e6b2fd2
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Wed Oct 18 11:35:00 2017 -0700

    GEODE-3245: Flattening LuceneSerializer should support PDX values
---
 .../geode/cache/lucene/FlatFormatSerializer.java   |  37 ++-
 .../lucene/FlatFormatPdxSerializerJunitTest.java   | 169 +++++++++++
 .../lucene/FlatFormatSerializerJUnitTest.java      | 114 +++++---
 .../apache/geode/cache/lucene/LocalCacheRule.java  |  40 +++
 .../NestedObjectSeralizerIntegrationTest.java      | 324 ++++++++++++++++++++-
 5 files changed, 630 insertions(+), 54 deletions(-)

diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/FlatFormatSerializer.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/FlatFormatSerializer.java
index 7621356..9f3664e 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/FlatFormatSerializer.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/FlatFormatSerializer.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.cache.lucene;
 
+import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collection;
@@ -24,6 +25,7 @@ import java.util.concurrent.ConcurrentMap;
 
 import org.apache.geode.cache.lucene.internal.repository.serializer.SerializerUtil;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.pdx.PdxInstance;
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.document.Document;
 
@@ -97,8 +99,8 @@ public class FlatFormatSerializer implements LuceneSerializer {
     }
 
     if (fieldValue.getClass().isArray()) {
-      Object[] array = (Object[]) fieldValue;
-      for (Object item : array) {
+      for (int i = 0; i < Array.getLength(fieldValue); i++) {
+        Object item = Array.get(fieldValue, i);
         addFieldValueForNonCollectionObject(doc, indexedFieldName, item, tokenizedFields);
       }
     } else if (fieldValue instanceof Collection) {
@@ -122,17 +124,26 @@ public class FlatFormatSerializer implements LuceneSerializer {
   }
 
   private Object getFieldValue(Object value, String fieldName) {
-    Class<?> clazz = value.getClass();
-    if (fieldName.equals(LuceneService.REGION_VALUE_FIELD)
-        && SerializerUtil.supportedPrimitiveTypes().contains(clazz)) {
-      return value;
-    }
-    try {
-      Field field = clazz.getDeclaredField(fieldName);
-      field.setAccessible(true);
-      return field.get(value);
-    } catch (Exception e) {
-      return null;
+    if (value instanceof PdxInstance) {
+      PdxInstance pdx = (PdxInstance) value;
+      Object fieldValue = null;
+      if (pdx.hasField(fieldName)) {
+        fieldValue = pdx.getField(fieldName);
+      }
+      return fieldValue;
+    } else {
+      Class<?> clazz = value.getClass();
+      if (fieldName.equals(LuceneService.REGION_VALUE_FIELD)
+          && SerializerUtil.supportedPrimitiveTypes().contains(clazz)) {
+        return value;
+      }
+      try {
+        Field field = clazz.getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(value);
+      } catch (Exception e) {
+        return null;
+      }
     }
   }
 }
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/FlatFormatPdxSerializerJunitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/FlatFormatPdxSerializerJunitTest.java
new file mode 100644
index 0000000..d6a98cd
--- /dev/null
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/FlatFormatPdxSerializerJunitTest.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.cache.lucene;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+
+import org.apache.geode.cache.lucene.internal.repository.serializer.SerializerTestHelper;
+import org.apache.geode.pdx.PdxInstance;
+import org.apache.geode.pdx.internal.PdxInstanceFactoryImpl;
+import org.apache.geode.test.junit.categories.UnitTest;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.IndexableField;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(UnitTest.class)
+public class FlatFormatPdxSerializerJunitTest {
+
+  private PdxInstance createPdxInstance() {
+    HashSet positions = new HashSet();
+
+    PdxInstanceFactoryImpl outForPosition1 =
+        (PdxInstanceFactoryImpl) PdxInstanceFactoryImpl.newCreator("dummy.PositionPdx", false);
+    outForPosition1.writeString("country", "USA");
+    outForPosition1.writeString("secId", "DELL");
+    outForPosition1.writeDouble("sharesOutstanding", 3000);
+    outForPosition1.writeInt("pid", 13);
+    outForPosition1.writeInt("portfolioId", 3);
+    // Identity Field.
+    outForPosition1.markIdentityField("secId");
+    PdxInstance position1_pdx = outForPosition1.create();
+
+    PdxInstanceFactoryImpl outForPositions1 =
+        (PdxInstanceFactoryImpl) PdxInstanceFactoryImpl.newCreator("dummy.PositionPdx", false);
+    outForPositions1.writeString("country", "USA");
+    outForPositions1.writeString("secId", "AAPL");
+    outForPositions1.writeDouble("sharesOutstanding", 5000);
+    outForPositions1.writeInt("pid", 15);
+    outForPositions1.writeInt("portfolioId", 3);
+    // Identity Field.
+    outForPositions1.markIdentityField("secId");
+    PdxInstance positions1_pdx = outForPositions1.create();
+
+    PdxInstanceFactoryImpl outForPositions2 =
+        (PdxInstanceFactoryImpl) PdxInstanceFactoryImpl.newCreator("dummy.PositionPdx", false);
+    outForPositions2.writeString("country", "USA");
+    outForPositions2.writeString("secId", "IBM");
+    outForPositions2.writeDouble("sharesOutstanding", 4000);
+    outForPositions2.writeInt("pid", 14);
+    outForPositions2.writeInt("portfolioId", 3);
+    // Identity Field.
+    outForPositions2.markIdentityField("secId");
+    PdxInstance positions2_pdx = outForPositions2.create();
+
+    positions.add(positions1_pdx);
+    positions.add(positions2_pdx);
+
+    PdxInstanceFactoryImpl out =
+        (PdxInstanceFactoryImpl) PdxInstanceFactoryImpl.newCreator("dummy.PortfolioPdx", false);
+    out.writeInt("ID", 3);
+    out.writeObject("position1", position1_pdx);
+    out.writeObject("positions", positions);
+    out.writeString("status", "active");
+    out.writeStringArray("names", new String[] {"aaa", "bbb", "ccc", "ddd"});
+    out.writeString("description", "John Denver");
+    out.writeLong("createTime", 0);
+    out.writeIntArray("intArr", new int[] {2001, 2017});
+    // Identity Field.
+    out.markIdentityField("ID");
+    PdxInstance pdx = out.create();
+    return pdx;
+  }
+
+  @Rule
+  public LocalCacheRule localCacheRule = new LocalCacheRule();
+
+  @Test
+  public void shouldParseTopLevelPdxIntArray() {
+    String[] fields = new String[] {"description", "status", "names", "intArr", "position1.country",
+        "position1.sharesOutstanding", "position1.secId", "positions.country",
+        "positions.sharesOutstanding", "positions.secId"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+    PdxInstance pdx = createPdxInstance();
+
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, pdx, fields);
+    assertEquals(17, doc1.getFields().size());
+
+    IndexableField[] fieldsInDoc = doc1.getFields("intArr");
+    Collection<Object> results = getResultCollection(fieldsInDoc, true);
+    assertEquals(2, results.size());
+    assertTrue(results.contains(2001));
+    assertTrue(results.contains(2017));
+  }
+
+  @Test
+  public void shouldParseTopLevelPdxStringField() {
+    String[] fields = new String[] {"status"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+    PdxInstance pdx = createPdxInstance();
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, pdx, fields);
+
+    IndexableField[] fieldsInDoc = doc1.getFields("status");
+    Collection<Object> results = getResultCollection(fieldsInDoc, false);
+    assertEquals(1, results.size());
+    assertTrue(results.contains("active"));
+  }
+
+  @Test
+  public void shouldParseSecondTopLevelPdxStringField() {
+    String[] fields = new String[] {"positions.secId"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+    PdxInstance pdx = createPdxInstance();
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, pdx, fields);
+
+    IndexableField[] fieldsInDoc = doc1.getFields("positions.secId");
+    Collection<Object> results = getResultCollection(fieldsInDoc, false);
+    assertEquals(2, results.size());
+    assertTrue(results.contains("IBM"));
+    assertTrue(results.contains("AAPL"));
+  }
+
+  @Test
+  public void shouldParseSecondTopLevelPdxDoubleField() {
+    String[] fields = new String[] {"positions.sharesOutstanding"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+    PdxInstance pdx = createPdxInstance();
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, pdx, fields);
+
+    IndexableField[] fieldsInDoc = doc1.getFields("positions.sharesOutstanding");
+    Collection<Object> results = getResultCollection(fieldsInDoc, true);
+    assertEquals(2, results.size());
+    assertTrue(results.contains(5000.0));
+    assertTrue(results.contains(4000.0));
+  }
+
+  private Collection<Object> getResultCollection(IndexableField[] fieldsInDoc, boolean isNumeric) {
+    Collection<Object> results = new LinkedHashSet();
+    for (IndexableField field : fieldsInDoc) {
+      if (isNumeric) {
+        results.add((Object) field.numericValue());
+      } else {
+        results.add(field.stringValue());
+      }
+    }
+    return results;
+  }
+}
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/FlatFormatSerializerJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/FlatFormatSerializerJUnitTest.java
index 7c45879..2c0155d 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/FlatFormatSerializerJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/FlatFormatSerializerJUnitTest.java
@@ -17,7 +17,6 @@ package org.apache.geode.cache.lucene;
 import static org.junit.Assert.*;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
@@ -36,8 +35,17 @@ import org.junit.experimental.categories.Category;
 @Category(UnitTest.class)
 public class FlatFormatSerializerJUnitTest {
 
+  private HashSet<Person> createCollectionObjectContacts() {
+    Person contact1 = new Person("Tommi Jackson", new String[] {"5036330001", "5036330002"}, 1);
+    Person contact2 = new Person("Tommi2 Skywalker", new String[] {"5036330003", "5036330004"}, 2);
+    HashSet<Person> contacts1 = new HashSet();
+    contacts1.add(contact1);
+    contacts1.add(contact2);
+    return contacts1;
+  }
+
   @Test
-  public void shouldParseMultiLayerNestObject() {
+  public void verifyFieldCountsInDocument() {
     String[] fields = new String[] {"name", "phoneNumbers", "myHomePages.content", "contacts.name",
         "contacts.email", "contacts.phoneNumbers", "contacts.address", "contacts.revenue",
         "contacts.homepage.id", "contacts.homepage.title", "contacts.homepage.content",
@@ -58,48 +66,91 @@ public class FlatFormatSerializerJUnitTest {
     Document doc1 = SerializerTestHelper.invokeSerializer(serializer, customer, fields);
     assertEquals(23, doc1.getFields().size());
     assertEquals("Tommy Jackson", doc1.getField("name").stringValue());
+  }
+
+  @Test
+  public void shouldQueryOnFieldInArrayObject() {
+    String[] fields = new String[] {"myHomePages.content"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+
+    Page[] myHomePages1 = new Page[] {new Page(131), new Page(132)};
+    Customer customer = new Customer("Tommy Jackson", null, null, myHomePages1);
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, customer, fields);
 
     IndexableField[] fieldsInDoc = doc1.getFields("myHomePages.content");
-    Collection<String> results = getStringResultCollection(fieldsInDoc);
+    Collection<Object> results = getResultCollection(fieldsInDoc, false);
     assertEquals(2, results.size());
     assertTrue(results.contains("Hello world no 131"));
     assertTrue(results.contains("Hello world no 132"));
+  }
+
+  @Test
+  public void shouldQueryOnFieldInCollectionObject() {
+    String[] fields = new String[] {"contacts.name"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
 
-    fieldsInDoc = doc1.getFields("contacts.name");
-    results = getStringResultCollection(fieldsInDoc);
+    HashSet<Person> contacts1 = createCollectionObjectContacts();
+    Customer customer = new Customer("Tommy Jackson", null, contacts1, null);
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, customer, fields);
+
+    IndexableField[] fieldsInDoc = doc1.getFields("contacts.name");
+    Collection<Object> results = getResultCollection(fieldsInDoc, false);
     assertEquals(2, results.size());
     assertTrue(results.contains("Tommi Jackson"));
     assertTrue(results.contains("Tommi2 Skywalker"));
+  }
 
-    fieldsInDoc = doc1.getFields("contacts.email");
-    results = getStringResultCollection(fieldsInDoc);
+  @Test
+  public void shouldQueryOnFieldWithAnalyzerInCollectionObject() {
+    String[] fields = new String[] {"contacts.email"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+
+    HashSet<Person> contacts1 = createCollectionObjectContacts();
+    Customer customer = new Customer("Tommy Jackson", null, contacts1, null);
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, customer, fields);
+
+    IndexableField[] fieldsInDoc = doc1.getFields("contacts.email");
+    Collection<Object> results = getResultCollection(fieldsInDoc, false);
     assertEquals(2, results.size());
     assertTrue(results.contains("Tommi.Jackson@pivotal.io"));
     assertTrue(results.contains("Tommi2.Skywalker@pivotal.io"));
+  }
 
-    fieldsInDoc = doc1.getFields("contacts.revenue");
-    Collection<Integer> intResults = getIntResultCollection(fieldsInDoc);
+  @Test
+  public void shouldQueryOnIntFieldInCollectionObject() {
+    String[] fields = new String[] {"contacts.revenue"};
+
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+
+    HashSet<Person> contacts1 = createCollectionObjectContacts();
+    Customer customer = new Customer("Tommy Jackson", null, contacts1, null);
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, customer, fields);
+
+    IndexableField[] fieldsInDoc = doc1.getFields("contacts.revenue");
+    Collection<Object> intResults = getResultCollection(fieldsInDoc, true);
     assertEquals(2, intResults.size());
     assertTrue(intResults.contains(100));
     assertTrue(intResults.contains(200));
+  }
 
-    fieldsInDoc = doc1.getFields("contacts.address");
-    results = getStringResultCollection(fieldsInDoc);
-    assertEquals(2, results.size());
-    assertTrue(results.contains("1 NW Greenbrier PKWY, Portland OR 97006"));
-    assertTrue(results.contains("2 NW Greenbrier PKWY, Portland OR 97006"));
+  @Test
+  public void shouldQueryOnFieldInThirdLevelObject() {
+    String[] fields = new String[] {"contacts.homepage.title"};
 
-    fieldsInDoc = doc1.getFields("contacts.homepage.title");
-    results = getStringResultCollection(fieldsInDoc);
+    FlatFormatSerializer serializer = new FlatFormatSerializer();
+
+    HashSet<Person> contacts1 = createCollectionObjectContacts();
+    Customer customer = new Customer("Tommy Jackson", null, contacts1, null);
+    Document doc1 = SerializerTestHelper.invokeSerializer(serializer, customer, fields);
+
+    IndexableField[] fieldsInDoc = doc1.getFields("contacts.homepage.title");
+    Collection<Object> results = getResultCollection(fieldsInDoc, false);
     assertEquals(2, results.size());
     assertTrue(results.contains("developer"));
     assertTrue(results.contains("manager"));
-
-    fieldsInDoc = doc1.getFields("contacts.homepage.content");
-    results = getStringResultCollection(fieldsInDoc);
-    assertEquals(2, results.size());
-    assertTrue(results.contains("Hello world no 1"));
-    assertTrue(results.contains("Hello world no 1"));
   }
 
   @Test
@@ -149,20 +200,15 @@ public class FlatFormatSerializerJUnitTest {
     assertEquals("Tommy Jackson", doc1.getField("name").stringValue());
   }
 
-  private Collection<String> getStringResultCollection(IndexableField[] fieldsInDoc) {
-    Collection<String> results = new LinkedHashSet();
+  private Collection<Object> getResultCollection(IndexableField[] fieldsInDoc, boolean isNumeric) {
+    Collection<Object> results = new LinkedHashSet();
     for (IndexableField field : fieldsInDoc) {
-      results.add(field.stringValue());
+      if (isNumeric) {
+        results.add((Object) field.numericValue());
+      } else {
+        results.add(field.stringValue());
+      }
     }
     return results;
   }
-
-  private Collection<Integer> getIntResultCollection(IndexableField[] fieldsInDoc) {
-    Collection<Integer> results = new LinkedHashSet();
-    for (IndexableField field : fieldsInDoc) {
-      results.add((Integer) field.numericValue());
-    }
-    return results;
-  }
-
 }
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LocalCacheRule.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LocalCacheRule.java
new file mode 100644
index 0000000..bc438a2
--- /dev/null
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LocalCacheRule.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.cache.lucene;
+
+import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
+
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.CacheFactory;
+import org.apache.geode.internal.cache.InternalCache;
+import org.junit.rules.ExternalResource;
+
+public class LocalCacheRule extends ExternalResource {
+  private InternalCache cache;
+
+  @Override
+  protected void before() {
+    this.cache = (InternalCache) new CacheFactory().set(MCAST_PORT, "0").create();
+  }
+
+  @Override
+  protected void after() {
+    this.cache.close();
+  }
+
+  public InternalCache getCache() {
+    return cache;
+  }
+}
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/NestedObjectSeralizerIntegrationTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/NestedObjectSeralizerIntegrationTest.java
index 4893ca6..a5801d0 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/NestedObjectSeralizerIntegrationTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/NestedObjectSeralizerIntegrationTest.java
@@ -18,9 +18,12 @@ import static org.apache.geode.cache.lucene.test.LuceneTestUtilities.INDEX_NAME;
 import static org.apache.geode.cache.lucene.test.LuceneTestUtilities.REGION_NAME;
 import static org.junit.Assert.assertEquals;
 
+import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.Logger;
@@ -30,6 +33,9 @@ import org.apache.geode.cache.lucene.test.Customer;
 import org.apache.geode.cache.lucene.test.Page;
 import org.apache.geode.cache.lucene.test.Person;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.pdx.PdxReader;
+import org.apache.geode.pdx.PdxSerializable;
+import org.apache.geode.pdx.PdxWriter;
 import org.apache.geode.test.junit.categories.IntegrationTest;
 import org.apache.lucene.analysis.core.KeywordAnalyzer;
 import org.junit.Test;
@@ -40,8 +46,8 @@ public class NestedObjectSeralizerIntegrationTest extends LuceneIntegrationTest
 
   private static int WAIT_FOR_FLUSH_TIME = 10000;
   private static final Logger logger = LogService.getLogger();
-  LuceneQuery<Integer, Customer> query;
-  PageableLuceneQueryResults<Integer, Customer> results;
+  LuceneQuery<Integer, Object> query;
+  PageableLuceneQueryResults<Integer, Object> results;
 
   private Region createRegionAndIndex() {
     luceneService.createIndexFactory().setLuceneSerializer(new FlatFormatSerializer())
@@ -120,7 +126,6 @@ public class NestedObjectSeralizerIntegrationTest extends LuceneIntegrationTest
     region.put("key-3", "region value 3");
     region.put("key-4", "region value 4");
 
-    LuceneIndex index = luceneService.getIndex(INDEX_NAME, REGION_NAME);
     luceneService.waitUntilFlushed(INDEX_NAME, REGION_NAME, WAIT_FOR_FLUSH_TIME,
         TimeUnit.MILLISECONDS);
   }
@@ -337,7 +342,7 @@ public class NestedObjectSeralizerIntegrationTest extends LuceneIntegrationTest
 
     LuceneQuery query = luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME,
         "Jackson2*", "name");
-    PageableLuceneQueryResults<Integer, Customer> results = query.findPages();
+    PageableLuceneQueryResults<Integer, Object> results = query.findPages();
     assertEquals(2, results.size());
     printResults(results);
   }
@@ -427,14 +432,319 @@ public class NestedObjectSeralizerIntegrationTest extends LuceneIntegrationTest
     assertEquals(0, results.size());
   }
 
-  private void printResults(PageableLuceneQueryResults<Integer, Customer> results) {
+  private void printResults(PageableLuceneQueryResults<Integer, Object> results) {
     if (results.size() > 0) {
       while (results.hasNext()) {
         results.next().stream().forEach(struct -> {
-          logger.info("Result is:" + struct.getValue());
+          if (logger.isDebugEnabled()) {
+            logger.debug("Result is:" + struct.getValue());
+          }
         });
       }
     }
   }
 
+  private Region createRegionAndIndexForPdxObject() {
+    luceneService.createIndexFactory().setLuceneSerializer(new FlatFormatSerializer())
+        .addField("ID").addField("description").addField("status").addField("names")
+        .addField("position1.country").addField("position1.secId").addField("positions.secId")
+        .addField("positions.country").create(INDEX_NAME, REGION_NAME);
+
+    Region region = createRegion(REGION_NAME, RegionShortcut.PARTITION);
+    return region;
+  }
+
+  private void feedSomePdxObjects(Region region) throws InterruptedException {
+    SimplePortfolioPdx.resetCounter();
+    SimplePositionPdx.resetCounter();
+    for (int i = 1; i < 10; i++) {
+      SimplePortfolioPdx pdx = new SimplePortfolioPdx(i);
+      region.put("object-" + i, pdx);
+    }
+
+    luceneService.waitUntilFlushed(INDEX_NAME, REGION_NAME, WAIT_FOR_FLUSH_TIME,
+        TimeUnit.MILLISECONDS);
+  }
+
+  @Test
+  public void queryOnTopLevelPdxField() throws InterruptedException, LuceneQueryException {
+    Region region = createRegionAndIndexForPdxObject();
+    feedSomePdxObjects(region);
+
+    query = luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME, "active",
+        "status");
+    results = query.findPages();
+    // even id number: active status; odd id number: inactive status
+    assertEquals(4, results.size());
+    printResults(results);
+  }
+
+  @Test
+  public void queryOnTopLevelPdxArrayField() throws InterruptedException, LuceneQueryException {
+    Region region = createRegionAndIndexForPdxObject();
+    feedSomePdxObjects(region);
+
+    query = luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME, "bbb AND ccc",
+        "names");
+    results = query.findPages();
+    // all the entries should be found
+    assertEquals(9, results.size());
+    printResults(results);
+  }
+
+  @Test
+  public void queryOnSecondLevelPdxCollectionField()
+      throws InterruptedException, LuceneQueryException {
+    Region region = createRegionAndIndexForPdxObject();
+    feedSomePdxObjects(region);
+
+    query = luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME, "NOVL",
+        "positions.secId");
+    results = query.findPages();
+    assertEquals(1, results.size());
+    printResults(results);
+  }
+
+  @Test
+  public void queryOnSecondLevelPdxField() throws InterruptedException, LuceneQueryException {
+    Region region = createRegionAndIndexForPdxObject();
+    feedSomePdxObjects(region);
+
+    query = luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME, "DELL",
+        "position1.secId");
+    results = query.findPages();
+    assertEquals(1, results.size());
+    printResults(results);
+  }
+
+  public static class SimplePortfolioPdx implements Serializable, PdxSerializable {
+    private int ID;
+    public String description;
+    public long createTime;
+    public String status;
+    public String[] names = {"aaa", "bbb", "ccc", "ddd"};
+    public int[] intArr = {2001, 2017};
+
+    public SimplePositionPdx position1;
+    public HashSet positions = new HashSet();
+
+    public static int numInstance = 0;
+
+    /*
+     * public String getStatus(){ return status;
+     */
+    public int getID() {
+      return ID;
+    }
+
+    public long getCreateTime() {
+      return this.createTime;
+    }
+
+    public void setCreateTime(long time) {
+      this.createTime = time;
+    }
+
+    public HashSet getPositions() {
+      return positions;
+    }
+
+    public SimplePositionPdx getP1() {
+      return position1;
+    }
+
+    public boolean isActive() {
+      return status.equals("active");
+    }
+
+    public static String secIds[] = {"SUN", "IBM", "YHOO", "GOOG", "MSFT", "AOL", "APPL", "ORCL",
+        "SAP", "DELL", "RHAT", "NOVL", "HP"};
+
+    /* public no-arg constructor required for Deserializable */
+    public SimplePortfolioPdx() {
+      this.numInstance++;
+    }
+
+    public SimplePortfolioPdx(int i) {
+      this.numInstance++;
+      ID = i;
+      if (i % 2 == 0) {
+        description = "YYYY";
+      } else {
+        description = "XXXX";
+      }
+      status = i % 2 == 0 ? "active" : "inactive";
+      position1 = new SimplePositionPdx(secIds[SimplePositionPdx.cnt % secIds.length],
+          SimplePositionPdx.cnt * 1000);
+
+      positions.add(new SimplePositionPdx(secIds[SimplePositionPdx.cnt % secIds.length],
+          SimplePositionPdx.cnt * 1000));
+      positions.add(new SimplePositionPdx(secIds[SimplePositionPdx.cnt % secIds.length],
+          SimplePositionPdx.cnt * 1000));
+    }
+
+    public SimplePortfolioPdx(int i, int j) {
+      this(i);
+      this.position1.portfolioId = j;
+    }
+
+    public static void resetCounter() {
+      numInstance = 0;
+    }
+
+    private boolean eq(Object o1, Object o2) {
+      return o1 == null ? o2 == null : o1.equals(o2);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      if (!(o instanceof SimplePortfolioPdx)) {
+        return false;
+      }
+      SimplePortfolioPdx p2 = (SimplePortfolioPdx) o;
+      return this.ID == p2.getID();
+    }
+
+    @Override
+    public int hashCode() {
+      return this.ID;
+    }
+
+
+    public String toString() {
+      String out = "SimplePortfolioPdx [ID=" + ID + " status=" + status + "\n ";
+      Iterator iter = positions.iterator();
+      while (iter.hasNext()) {
+        out += (SimplePositionPdx) (iter.next()) + ", ";
+      }
+      out += "\n P1:" + position1;
+      return out + "\n]";
+    }
+
+    /**
+     * Getter for property type.S
+     * 
+     * @return Value of property type.
+     */
+    public boolean boolFunction(String strArg) {
+      return "active".equals(strArg);
+    }
+
+    public int intFunction(int j) {
+      return j;
+    }
+
+    public String funcReturnSecId(Object o) {
+      return ((SimplePositionPdx) o).getSecId();
+    }
+
+    public long longFunction(long j) {
+      return j;
+    }
+
+    public void fromData(PdxReader in) {
+      this.ID = in.readInt("ID");
+      this.position1 = (SimplePositionPdx) in.readObject("position1");
+      this.positions = (HashSet) in.readObject("positions");
+      this.status = in.readString("status");
+      this.names = in.readStringArray("names");
+      this.description = in.readString("description");
+      this.createTime = in.readLong("createTime");
+      this.intArr = in.readIntArray("intArr");
+    }
+
+    public void toData(PdxWriter out) {
+      out.writeInt("ID", this.ID);
+      out.writeObject("position1", this.position1);
+      out.writeObject("positions", this.positions);
+      out.writeString("status", this.status);
+      out.writeStringArray("names", this.names);
+      out.writeString("description", this.description);
+      out.writeLong("createTime", this.createTime);
+      out.writeIntArray("intArr", this.intArr);
+      // Identity Field.
+      out.markIdentityField("ID");
+    }
+
+  }
+
+  public static class SimplePositionPdx implements Serializable, PdxSerializable, Comparable {
+    public String secId;
+    private String country = "USA";
+    private int pid;
+    private double sharesOutstanding;
+    public int portfolioId = 0;
+    public static int cnt = 0;
+
+    public static int numInstance = 0;
+
+    public SimplePositionPdx() {
+      this.numInstance++;
+    }
+
+    public SimplePositionPdx(String id, double out) {
+      secId = id;
+      sharesOutstanding = out;
+      pid = cnt++;
+
+      this.numInstance++;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      if (!(o instanceof SimplePositionPdx))
+        return false;
+      return this.secId.equals(((SimplePositionPdx) o).secId);
+    }
+
+    @Override
+    public int hashCode() {
+      return this.secId.hashCode();
+    }
+
+    public String getSecId() {
+      return secId;
+    }
+
+    public static void resetCounter() {
+      cnt = 0;
+    }
+
+    public double getSharesOutstanding() {
+      return sharesOutstanding;
+    }
+
+    public String toString() {
+      return "SimplePositionPdx [secId=" + this.secId + " pid=" + this.pid + " out="
+          + this.sharesOutstanding + "]";
+    }
+
+    public void fromData(PdxReader in) {
+      this.country = in.readString("country");
+      this.secId = in.readString("secId");
+      this.sharesOutstanding = in.readDouble("sharesOutstanding");
+      this.pid = in.readInt("pid");
+      this.portfolioId = in.readInt("portfolioId");
+    }
+
+    public void toData(PdxWriter out) {
+      out.writeString("country", this.country);
+      out.writeString("secId", this.secId);
+      out.writeDouble("sharesOutstanding", this.sharesOutstanding);
+      out.writeInt("pid", this.pid);
+      out.writeInt("portfolioId", this.portfolioId);
+      // Identity Field.
+      out.markIdentityField("secId");
+    }
+
+
+    public int compareTo(Object o) {
+      if (o == this || ((SimplePositionPdx) o).secId.equals(this.secId)) {
+        return 0;
+      } else {
+        return this.pid < ((SimplePositionPdx) o).pid ? -1 : 1;
+      }
+
+    }
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@geode.apache.org" <co...@geode.apache.org>.