You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2018/03/26 17:53:50 UTC

[geode] branch feature/GEODE-3926_3 updated (80f37f7 -> bb245b3)

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

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


 discard 80f37f7  GEODE-3926 Initial commit to add LuceneIndexCreationInProgressException
     add 3f2bae8  GEODE-3881: Prevent illegal region names in the unit tests. (#1668)
     add 1b66a65  GEODE-4749: Remove method bytecodes from serializable analysis. (#1660)
     add 6446d17  GEODE-4910: Modify method description to mention exception. (#1657)
     add 405559d   GEODE-4882: Prevent intermittent test failure from CacheClosedException (#1670)
     add 78dcf4b  GEODE-4859: Create a public version of GfshCommand (#1662)
     add 6367925  GEODE-4924: Fixes JAVA_ARGS environemnt parameter. (#1673)
     add da51fce  GEODE-4894: Changes are made to support case sensitivity between region, table name and pdx field, column name (#1663)
     add f3b47a5  GEODE-4928 DistributedLockService doesn't work as expected while the dlock grantor is initialized
     add d79a2b2  GEODE-4827: null check for the cache. (#1646)
     add 0ffb983  Revert "GEODE-4928 DistributedLockService doesn't work as expected while the dlock grantor is initialized"
     add 2953dc0  GEODE-1279: Rename Bug51616JUnitTest as CreateRegionFactoryNewInstanceRegressionTest
     add 0618d54  GEODE-1279: Rename Bug33726JUnitTest as AfterRegionCreateNotBeforeRegionInitRegressionTest
     add be91870  GEODE-1279: Rename Bug34179TooManyFilesOpenJUnitTest as OplogTooManyFilesOpenRegressionTest
     add cd3ff6d  GEODE-1279: Rename Bug34583JUnitTest as RegionValuesIteratorAfterLocalInvalidateRegressionTest
     add 020291f  GEODE-1279: Fix serialization of LocalVM
     add 8009a12  GEODE-1279: Rename Bug37241DUnitTest as CleanupFailedInitWithDiskFilesRegressionTest
     add 3e2619f  GEODE-1279: Rename Bug37377DUnitTest as ClearDuringGiiOplogWithMissingCreateRegressionTest
     add 10eabfb  GEODE-1279: Rename Bug37500JUnitTest as DiskAccessExceptionDisablesServerRegressionTest
     add 0e6a1b9  GEODE-1279: Rename Bug39079DUnitTest
     add e2e2b90  GEODE-1279: Rename Bug40299DUnitTest as ClearDuringNetSearchOplogRegressionTest
     add f542032  GEODE-1279: Rename Bug40632DUnitTest as CreatePRWithLocalExpirationRegressionTest
     add f53b5a6  GEODE-1279: Rename Bug41091DUnitTest as BucketCreationGIIHARegressionTest
     add d93f3d5  GEODE-1279: Rename Bug41733DUnitTest as BucketCreationRequesterCrashHARegressionTest
     add 735b855  GEODE-1279: Rename Bug41957DUnitTest as RegisterInterestWithEvictionRegressionTest
     add ca73e12  GEODE-1279: Rename Bug42055DUnitTest as BucketRegionSizeWithOverflowRegressionTest
     add 5561078  GEODE-1279: Rename Bug45164DUnitTest as PREntrySetIteratorRegressionTest
     add 3b4791c  GEODE-1279: Rename Bug45934DUnitTest as DiskRecoveryWithVersioningGiiRegressionTest
     add 5349447  GEODE-1279: Rename Bug47667DUnitTest as ClientTxCommitShouldNotHangRegressionTest
     add 3b32fd5  GEODE-1279: Rename Bug36853EventsExpiryDUnitTest as ClientSubscriptionExpiryDataLossRegressionTest
     new bb245b3  GEODE-3926 Initial commit to add LuceneIndexCreationInProgressException

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   (80f37f7)
            \
             N -- N -- N   refs/heads/feature/GEODE-3926_3 (bb245b3)

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

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

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


Summary of changes:
 .gitignore                                         |    2 +
 geode-assembly/src/main/dist/bin/gfsh.bat          |   51 +-
 .../connectors/jdbc/internal/RegionMapping.java    |  194 +-
 .../geode/connectors/jdbc/internal/SqlHandler.java |   41 +-
 .../jdbc/internal/SqlStatementFactory.java         |   14 +-
 .../jdbc/internal/SqlToPdxInstanceCreator.java     |   15 +-
 .../connectors/jdbc/internal/TableMetaData.java    |   29 +-
 .../jdbc/internal/TableMetaDataManager.java        |   24 +-
 .../jdbc/internal/TableMetaDataView.java           |    6 +
 .../jdbc/internal/cli/AlterConnectionCommand.java  |    8 +-
 .../jdbc/internal/cli/AlterMappingCommand.java     |    8 +-
 .../jdbc/internal/cli/CreateConnectionCommand.java |    8 +-
 .../jdbc/internal/cli/CreateMappingCommand.java    |    8 +-
 .../internal/cli/DescribeConnectionCommand.java    |    4 +-
 .../jdbc/internal/cli/DescribeMappingCommand.java  |    4 +-
 .../internal/cli/DestroyConnectionCommand.java     |    8 +-
 .../jdbc/internal/cli/DestroyMappingCommand.java   |    8 +-
 .../jdbc/internal/cli/ListConnectionCommand.java   |    4 +-
 .../jdbc/internal/cli/ListMappingCommand.java      |    4 +-
 .../sanctioned-geode-connectors-serializables.txt  |    2 +-
 .../AnalyzeConnectorsSerializablesJUnitTest.java   |    2 +-
 .../jdbc/ClassWithSupportedPdxFields.java          |   18 +-
 .../geode/connectors/jdbc/JdbcDUnitTest.java       |   42 +-
 .../connectors/jdbc/JdbcLoaderIntegrationTest.java |    5 +
 .../jdbc/internal/RegionMappingBuilderTest.java    |   16 +-
 .../jdbc/internal/RegionMappingTest.java           |  283 ++-
 .../connectors/jdbc/internal/SqlHandlerTest.java   |   24 +-
 .../jdbc/internal/SqlStatementFactoryTest.java     |   17 +-
 .../jdbc/internal/SqlToPdxInstanceCreatorTest.java |   30 +-
 .../TableMetaDataManagerIntegrationTest.java       |    4 +-
 .../jdbc/internal/TableMetaDataManagerTest.java    |   78 +-
 .../cli/CreateMappingCommandIntegrationTest.java   |    8 +-
 .../cli/JdbcClusterConfigDistributedTest.java      |    8 +-
 .../jdbc/internal/xml/ElementTypeTest.java         |    4 +-
 .../main/java/org/apache/geode/cache/Region.java   |    4 +-
 .../geode/internal/cache/AbstractRegion.java       |   13 -
 .../apache/geode/internal/cache/FilterProfile.java |    5 +
 .../geode/internal/cache/InternalRegion.java       |   13 +
 .../apache/geode/internal/cache/LocalRegion.java   |    2 +-
 .../cache/SearchLoadAndWriteProcessor.java         |   17 +-
 .../cli/commands => cli}/GfshCommand.java          |   84 +-
 .../management/internal/cli/CommandManager.java    |    5 +-
 .../cli/commands/AlterAsyncEventQueueCommand.java  |    5 +-
 .../cli/commands/AlterOfflineDiskStoreCommand.java |    2 +-
 .../internal/cli/commands/AlterRegionCommand.java  |    6 +-
 .../cli/commands/AlterRuntimeConfigCommand.java    |    6 +-
 .../cli/commands/BackupDiskStoreCommand.java       |    2 +-
 .../cli/commands/ChangeLogLevelCommand.java        |    2 +-
 .../cli/commands/ClearDefinedIndexesCommand.java   |    2 +-
 .../cli/commands/CloseDurableCQsCommand.java       |    2 +-
 .../cli/commands/CloseDurableClientCommand.java    |    2 +-
 .../cli/commands/CompactDiskStoreCommand.java      |    2 +-
 .../commands/CompactOfflineDiskStoreCommand.java   |    2 +-
 .../internal/cli/commands/ConfigurePDXCommand.java |    6 +-
 .../internal/cli/commands/ConnectCommand.java      |    2 +-
 .../cli/commands/CountDurableCQEventsCommand.java  |    2 +-
 .../cli/commands/CreateAsyncEventQueueCommand.java |    6 +-
 .../cli/commands/CreateDefinedIndexesCommand.java  |    6 +-
 .../cli/commands/CreateDiskStoreCommand.java       |    6 +-
 .../cli/commands/CreateGatewayReceiverCommand.java |    6 +-
 .../cli/commands/CreateGatewaySenderCommand.java   |    6 +-
 .../internal/cli/commands/CreateIndexCommand.java  |    6 +-
 .../cli/commands/CreateJndiBindingCommand.java     |    5 +-
 .../internal/cli/commands/CreateRegionCommand.java |    6 +-
 .../internal/cli/commands/DebugCommand.java        |    2 +-
 .../internal/cli/commands/DefineIndexCommand.java  |    2 +-
 .../internal/cli/commands/DeployCommand.java       |    5 +-
 .../cli/commands/DescribeClientCommand.java        |    2 +-
 .../cli/commands/DescribeConfigCommand.java        |    2 +-
 .../cli/commands/DescribeConnectionCommand.java    |    2 +-
 .../cli/commands/DescribeDiskStoreCommand.java     |    2 +-
 .../cli/commands/DescribeJndiBindingCommand.java   |    5 +-
 .../cli/commands/DescribeMemberCommand.java        |    2 +-
 .../commands/DescribeOfflineDiskStoreCommand.java  |    2 +-
 .../cli/commands/DescribeRegionCommand.java        |    2 +-
 .../commands/DestroyAsyncEventQueueCommand.java    |    6 +-
 .../cli/commands/DestroyDiskStoreCommand.java      |    6 +-
 .../cli/commands/DestroyFunctionCommand.java       |    2 +-
 .../cli/commands/DestroyGatewaySenderCommand.java  |    6 +-
 .../internal/cli/commands/DestroyIndexCommand.java |    6 +-
 .../cli/commands/DestroyJndiBindingCommand.java    |    5 +-
 .../cli/commands/DestroyRegionCommand.java         |    6 +-
 .../internal/cli/commands/DisconnectCommand.java   |    2 +-
 .../internal/cli/commands/EchoCommand.java         |    2 +-
 .../cli/commands/ExecuteFunctionCommand.java       |    2 +-
 .../cli/commands/ExecuteScriptCommand.java         |    2 +-
 .../internal/cli/commands/ExitCommand.java         |    2 +-
 .../internal/cli/commands/ExportConfigCommand.java |    2 +-
 .../internal/cli/commands/ExportDataCommand.java   |    2 +-
 .../ExportImportClusterConfigurationCommands.java  |    2 +-
 .../internal/cli/commands/ExportLogsCommand.java   |    2 +-
 .../commands/ExportOfflineDiskStoreCommand.java    |    2 +-
 .../cli/commands/ExportStackTraceCommand.java      |    2 +-
 .../internal/cli/commands/GCCommand.java           |    3 +-
 .../internal/cli/commands/GetCommand.java          |    2 +-
 .../internal/cli/commands/GfshHelpCommand.java     |    2 +-
 .../internal/cli/commands/GfshHintCommand.java     |    2 +-
 .../internal/cli/commands/HistoryCommand.java      |    2 +-
 .../internal/cli/commands/ImportDataCommand.java   |    2 +-
 .../internal/cli/commands/InternalGfshCommand.java |   76 +
 .../cli/commands/ListAsyncEventQueuesCommand.java  |    2 +-
 .../internal/cli/commands/ListClientCommand.java   |    2 +-
 .../internal/cli/commands/ListDeployedCommand.java |    2 +-
 .../cli/commands/ListDiskStoresCommand.java        |    2 +-
 .../cli/commands/ListDurableClientCQsCommand.java  |    2 +-
 .../internal/cli/commands/ListFunctionCommand.java |    2 +-
 .../internal/cli/commands/ListGatewayCommand.java  |    2 +-
 .../internal/cli/commands/ListIndexCommand.java    |    2 +-
 .../cli/commands/ListJndiBindingCommand.java       |    5 +-
 .../internal/cli/commands/ListMembersCommand.java  |    2 +-
 .../internal/cli/commands/ListRegionCommand.java   |    2 +-
 .../commands/LoadBalanceGatewaySenderCommand.java  |    2 +-
 .../internal/cli/commands/LocateEntryCommand.java  |    2 +-
 .../internal/cli/commands/NetstatCommand.java      |    2 +-
 .../internal/cli/commands/PDXRenameCommand.java    |    2 +-
 .../cli/commands/PauseGatewaySenderCommand.java    |    2 +-
 .../internal/cli/commands/PutCommand.java          |    2 +-
 .../internal/cli/commands/QueryCommand.java        |    2 +-
 .../internal/cli/commands/RebalanceCommand.java    |    2 +-
 .../internal/cli/commands/RemoveCommand.java       |    2 +-
 .../cli/commands/ResumeGatewaySenderCommand.java   |    2 +-
 .../commands/RevokeMissingDiskStoreCommand.java    |    2 +-
 .../internal/cli/commands/SetVariableCommand.java  |    2 +-
 .../internal/cli/commands/ShCommand.java           |    2 +-
 .../internal/cli/commands/ShowDeadlockCommand.java |    2 +-
 .../internal/cli/commands/ShowLogCommand.java      |    3 +-
 .../internal/cli/commands/ShowMetricsCommand.java  |    2 +-
 .../cli/commands/ShowMissingDiskStoreCommand.java  |    2 +-
 .../internal/cli/commands/ShutdownCommand.java     |    2 +-
 .../internal/cli/commands/SleepCommand.java        |    2 +-
 .../cli/commands/StartGatewayReceiverCommand.java  |    2 +-
 .../cli/commands/StartGatewaySenderCommand.java    |    2 +-
 .../internal/cli/commands/StartLocatorCommand.java |    2 +-
 .../internal/cli/commands/StartMemberUtils.java    |    4 +-
 .../internal/cli/commands/StartServerCommand.java  |    2 +-
 .../StatusClusterConfigServiceCommand.java         |    2 +-
 .../cli/commands/StatusGatewayReceiverCommand.java |    2 +-
 .../cli/commands/StatusGatewaySenderCommand.java   |    2 +-
 .../cli/commands/StopGatewayReceiverCommand.java   |    2 +-
 .../cli/commands/StopGatewaySenderCommand.java     |    3 +-
 .../internal/cli/commands/UndeployCommand.java     |    6 +-
 .../commands/UpgradeOfflineDiskStoreCommand.java   |    2 +-
 .../cli/commands/ValidateDiskStoreCommand.java     |    2 +-
 .../internal/cli/commands/VersionCommand.java      |    2 +-
 .../commands/lifecycle/StartJConsoleCommand.java   |    4 +-
 .../commands/lifecycle/StartJVisualVMCommand.java  |    4 +-
 .../cli/commands/lifecycle/StartPulseCommand.java  |    4 +-
 .../cli/commands/lifecycle/StartVsdCommand.java    |    4 +-
 .../commands/lifecycle/StatusLocatorCommand.java   |    4 +-
 .../commands/lifecycle/StatusServerCommand.java    |    4 +-
 .../cli/commands/lifecycle/StopLocatorCommand.java |    4 +-
 .../cli/commands/lifecycle/StopServerCommand.java  |    4 +-
 .../geode/pdx/internal/ClientTypeRegistration.java |   16 +
 .../geode/pdx/internal/LonerTypeRegistration.java  |    6 +
 .../geode/pdx/internal/NullTypeRegistration.java   |    6 +
 .../geode/pdx/internal/PeerTypeRegistration.java   |   32 +-
 .../geode/pdx/internal/TypeRegistration.java       |    9 +-
 .../apache/geode/pdx/internal/TypeRegistry.java    |    9 +
 .../org/apache/geode/redis/GeodeRedisServer.java   |    7 +-
 .../geode/cache/query/dunit/PdxQueryDUnitTest.java |    8 +-
 .../AnalyzeSerializablesJUnitTest.java             |    2 +
 .../geode/codeAnalysis/ClassAndMethodDetails.java  |   56 +-
 .../geode/codeAnalysis/CompiledClassUtils.java     |   33 +-
 .../apache/geode/internal/Bug51616JUnitTest.java   |   58 -
 ...eateRegionFactoryNewInstanceRegressionTest.java |  100 +
 ...ionCreateNotBeforeRegionInitRegressionTest.java |   94 +
 .../cache/BucketCreationGIIHARegressionTest.java   |  120 ++
 ...cketCreationRequesterCrashHARegressionTest.java |  261 +++
 ...BucketRegionSizeWithOverflowRegressionTest.java |  147 ++
 .../geode/internal/cache/Bug33726JUnitTest.java    |  110 -
 .../cache/Bug34179TooManyFilesOpenJUnitTest.java   |   96 -
 .../geode/internal/cache/Bug34583JUnitTest.java    |   96 -
 .../geode/internal/cache/Bug37241DUnitTest.java    |  205 --
 .../geode/internal/cache/Bug37377DUnitTest.java    |  317 ---
 .../geode/internal/cache/Bug37500JUnitTest.java    |  163 --
 .../geode/internal/cache/Bug39079DUnitTest.java    |  341 ---
 .../geode/internal/cache/Bug40299DUnitTest.java    |  263 ---
 .../geode/internal/cache/Bug40632DUnitTest.java    |  109 -
 .../geode/internal/cache/Bug41091DUnitTest.java    |  169 --
 .../geode/internal/cache/Bug41733DUnitTest.java    |  211 --
 .../geode/internal/cache/Bug41957DUnitTest.java    |  165 --
 .../geode/internal/cache/Bug42055DUnitTest.java    |   95 -
 .../geode/internal/cache/Bug45164DUnitTest.java    |  113 -
 .../geode/internal/cache/Bug45934DUnitTest.java    |  138 --
 .../geode/internal/cache/Bug47667DUnitTest.java    |   96 -
 ...eanupFailedInitWithDiskFilesRegressionTest.java |  161 ++
 ...ingGiiOplogWithMissingCreateRegressionTest.java |  229 +++
 .../ClearDuringNetSearchOplogRegressionTest.java   |  205 ++
 .../ClientTxCommitShouldNotHangRegressionTest.java |  175 ++
 .../CreatePRWithLocalExpirationRegressionTest.java |   96 +
 ...ccessExceptionDisablesServerRegressionTest.java |  241 +++
 ...iskRecoveryWithVersioningGiiRegressionTest.java |  206 ++
 .../GiiDiskAccessExceptionRegressionTest.java      |  211 ++
 ...zedDiskRegionWithIoExceptionRegressionTest.java |  174 ++
 .../cache/OplogTooManyFilesOpenRegressionTest.java |  155 ++
 .../cache/PREntrySetIteratorRegressionTest.java    |   98 +
 ...IteratorAfterLocalInvalidateRegressionTest.java |  101 +
 ...RegisterInterestWithEvictionRegressionTest.java |  144 ++
 .../cache/ha/Bug36853EventsExpiryDUnitTest.java    |  268 ---
 ...ntSubscriptionExpiryDataLossRegressionTest.java |  195 ++
 .../cli/commands/AlterDiskStoreJUnitTest.java      |    1 +
 .../commands/CommandAvailabilityIndicatorTest.java |    2 +-
 ... DescribeConnectionCommandIntegrationTest.java} |   15 +-
 .../cli/commands/GfshCommandJUnitTest.java         |    4 +-
 .../java/org/apache/geode/redis/SetsJUnitTest.java |   14 +-
 .../java/org/apache/geode/test/dunit/LocalVM.java  |    3 +-
 .../codeAnalysis/sanctionedDataSerializables.txt   | 2160 ++++++++++----------
 .../codeAnalysis/sanctionedDataSerializables.txt   |    4 +-
 .../lucene/internal/cli/LuceneIndexCommands.java   |   13 +-
 .../codeAnalysis/sanctionedDataSerializables.txt   |   60 +-
 .../codeAnalysis/sanctionedDataSerializables.txt   |   28 +-
 211 files changed, 5373 insertions(+), 4762 deletions(-)
 rename geode-core/src/main/java/org/apache/geode/management/{internal/cli/commands => cli}/GfshCommand.java (76%)
 create mode 100644 geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/InternalGfshCommand.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/Bug51616JUnitTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/CreateRegionFactoryNewInstanceRegressionTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/AfterRegionCreateNotBeforeRegionInitRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/BucketCreationGIIHARegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/BucketCreationRequesterCrashHARegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionSizeWithOverflowRegressionTest.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/Bug33726JUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug34179TooManyFilesOpenJUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug34583JUnitTest.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/Bug37241DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug37377DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug37500JUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug39079DUnitTest.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/Bug40299DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug40632DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug41091DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug41733DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug41957DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug42055DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug45164DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug45934DUnitTest.java
 delete mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/Bug47667DUnitTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/CleanupFailedInitWithDiskFilesRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/ClearDuringGiiOplogWithMissingCreateRegressionTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/ClearDuringNetSearchOplogRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/ClientTxCommitShouldNotHangRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/CreatePRWithLocalExpirationRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/DiskAccessExceptionDisablesServerRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/DiskRecoveryWithVersioningGiiRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/GiiDiskAccessExceptionRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/InitializedDiskRegionWithIoExceptionRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/OplogTooManyFilesOpenRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/PREntrySetIteratorRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/RegionValuesIteratorAfterLocalInvalidateRegressionTest.java
 create mode 100644 geode-core/src/test/java/org/apache/geode/internal/cache/RegisterInterestWithEvictionRegressionTest.java
 delete mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/ha/Bug36853EventsExpiryDUnitTest.java
 create mode 100755 geode-core/src/test/java/org/apache/geode/internal/cache/ha/ClientSubscriptionExpiryDataLossRegressionTest.java
 rename geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/{DescribeConnectionCommandJUnitTest.java => DescribeConnectionCommandIntegrationTest.java} (81%)

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

[geode] 01/01: GEODE-3926 Initial commit to add LuceneIndexCreationInProgressException

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

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

commit bb245b35a74f11d8b7786043fba778c58b073201
Author: Udo <uk...@pivotal.io>
AuthorDate: Mon Mar 26 10:51:16 2018 -0700

    GEODE-3926 Initial commit to add LuceneIndexCreationInProgressException
---
 .../sanctioned-geode-core-serializables.txt        |   1 +
 .../cache/lucene/internal/InternalLuceneIndex.java |   2 +
 .../LuceneIndexCreationInProgressException.java    |   9 ++
 .../internal/LuceneIndexForPartitionedRegion.java  |  14 +-
 .../cache/lucene/internal/LuceneRawIndex.java      |  17 ++-
 .../lucene/internal/LuceneRawIndexFactory.java     |   8 +-
 .../internal/PartitionedRepositoryManager.java     |  35 ++++-
 .../lucene/internal/RawIndexRepositoryFactory.java |  23 +++-
 .../internal/RawLuceneRepositoryManager.java       |  10 +-
 .../lucene/LuceneIndexCreationIntegrationTest.java |   8 +-
 .../LuceneIndexRecoveryHAIntegrationTest.java      |   5 +-
 .../PartitionedRepositoryManagerJUnitTest.java     | 150 ++++++++++++++-------
 .../RawLuceneRepositoryManagerJUnitTest.java       |  20 +--
 13 files changed, 223 insertions(+), 79 deletions(-)

diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
index d296f77..c2d1aa4 100644
--- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
+++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
@@ -803,3 +803,4 @@ org/apache/geode/security/AuthenticationFailedException,true,-820286647227908887
 org/apache/geode/security/AuthenticationRequiredException,true,4675976651103154919
 org/apache/geode/security/GemFireSecurityException,true,3814254578203076926,cause:java/lang/Throwable
 org/apache/geode/security/NotAuthorizedException,true,419215768216387745,principal:java/security/Principal
+org/apache/geode/cache/lucene/internal/LuceneIndexCreationInProgressException,false
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneIndex.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneIndex.java
index 74e4ac8..1e95a46 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneIndex.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneIndex.java
@@ -39,4 +39,6 @@ public interface InternalLuceneIndex extends LuceneIndex {
 
   void initialize();
 
+  boolean isIndexAvailable(int id);
+
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationInProgressException.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationInProgressException.java
new file mode 100644
index 0000000..7077246
--- /dev/null
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationInProgressException.java
@@ -0,0 +1,9 @@
+package org.apache.geode.cache.lucene.internal;
+
+import org.apache.geode.GemFireException;
+
+public class LuceneIndexCreationInProgressException extends GemFireException {
+  public LuceneIndexCreationInProgressException(String message) {
+    super(message);
+  }
+}
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java
index 577bdef..2f3e4ee 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexForPartitionedRegion.java
@@ -16,6 +16,7 @@
 package org.apache.geode.cache.lucene.internal;
 
 import java.util.Set;
+import java.util.concurrent.ExecutorService;
 
 import org.apache.geode.CancelException;
 import org.apache.geode.cache.AttributesFactory;
@@ -49,6 +50,8 @@ public class LuceneIndexForPartitionedRegion extends LuceneIndexImpl {
 
   public static final String FILES_REGION_SUFFIX = ".files";
 
+  private ExecutorService waitingThreadPoolFromDM;
+
   public LuceneIndexForPartitionedRegion(String indexName, String regionPath, InternalCache cache) {
     super(indexName, regionPath, cache);
 
@@ -62,7 +65,7 @@ public class LuceneIndexForPartitionedRegion extends LuceneIndexImpl {
       mapper = new HeterogeneousLuceneSerializer();
     }
     PartitionedRepositoryManager partitionedRepositoryManager =
-        new PartitionedRepositoryManager(this, mapper);
+        new PartitionedRepositoryManager(this, mapper, this.waitingThreadPoolFromDM);
     return partitionedRepositoryManager;
   }
 
@@ -202,6 +205,15 @@ public class LuceneIndexForPartitionedRegion extends LuceneIndexImpl {
     }
   }
 
+  @Override
+  public boolean isIndexAvailable(int id) {
+    PartitionedRegion fileAndChunkRegion = getFileAndChunkRegion();
+    if (fileAndChunkRegion != null) {
+      return fileAndChunkRegion.get(IndexRepositoryFactory.APACHE_GEODE_INDEX_COMPLETE, id) != null;
+    }
+    return false;
+  }
+
   private void destroyOnRemoteMembers() {
     PartitionedRegion pr = (PartitionedRegion) getDataRegion();
     DistributionManager dm = pr.getDistributionManager();
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java
index d4168bd..6ad03c7 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndex.java
@@ -22,8 +22,12 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 
 public class LuceneRawIndex extends LuceneIndexImpl {
 
-  protected LuceneRawIndex(String indexName, String regionPath, InternalCache cache) {
+  private String luceneFolderPath;
+
+  protected LuceneRawIndex(String indexName, String regionPath, InternalCache cache,
+                           String luceneFolderPath) {
     super(indexName, regionPath, cache);
+    this.luceneFolderPath = luceneFolderPath;
   }
 
   @Override
@@ -33,7 +37,8 @@ public class LuceneRawIndex extends LuceneIndexImpl {
       mapper = new HeterogeneousLuceneSerializer();
     }
     RawLuceneRepositoryManager rawLuceneRepositoryManager =
-        new RawLuceneRepositoryManager(this, mapper);
+        new RawLuceneRepositoryManager(this, mapper,
+            cache.getDistributionManager().getWaitingThreadPool(),luceneFolderPath);
     return rawLuceneRepositoryManager;
   }
 
@@ -49,5 +54,11 @@ public class LuceneRawIndex extends LuceneIndexImpl {
   }
 
   @Override
-  public void destroy(boolean initiator) {}
+  public void destroy(boolean initiator) {
+  }
+
+  @Override
+  public boolean isIndexAvailable(int id) {
+    return true;
+  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndexFactory.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndexFactory.java
index 4a92049..0c921ef 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndexFactory.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRawIndexFactory.java
@@ -17,8 +17,14 @@ package org.apache.geode.cache.lucene.internal;
 import org.apache.geode.internal.cache.InternalCache;
 
 public class LuceneRawIndexFactory extends LuceneIndexImplFactory {
+  private String luceneFolderPath;
+
+  public LuceneRawIndexFactory(String luceneFolderPath) {
+    this.luceneFolderPath = luceneFolderPath;
+  }
+
   @Override
   public LuceneIndexImpl create(String indexName, String regionPath, InternalCache cache) {
-    return new LuceneRawIndex(indexName, regionPath, cache);
+    return new LuceneRawIndex(indexName, regionPath, cache,luceneFolderPath);
   }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManager.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManager.java
index f60f83b..99e4f79 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManager.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManager.java
@@ -20,6 +20,9 @@ import java.util.Collection;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+
+import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.InternalGemFireError;
 import org.apache.geode.cache.Region;
@@ -32,8 +35,10 @@ import org.apache.geode.internal.cache.BucketNotFoundException;
 import org.apache.geode.internal.cache.BucketRegion;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.execute.InternalRegionFunctionContext;
+import org.apache.geode.internal.logging.LogService;
 
 public class PartitionedRepositoryManager implements RepositoryManager {
+  private final Logger logger = LogService.getLogger();
   public static IndexRepositoryFactory indexRepositoryFactory = new IndexRepositoryFactory();
   /**
    * map of the parent bucket region to the index repository
@@ -47,17 +52,23 @@ public class PartitionedRepositoryManager implements RepositoryManager {
   protected final ConcurrentHashMap<Integer, IndexRepository> indexRepositories =
       new ConcurrentHashMap<Integer, IndexRepository>();
 
-  /** The user region for this index */
+  /**
+   * The user region for this index
+   */
   protected PartitionedRegion userRegion = null;
   protected final LuceneSerializer serializer;
   protected final InternalLuceneIndex index;
   protected volatile boolean closed;
   private final CountDownLatch isDataRegionReady = new CountDownLatch(1);
 
-  public PartitionedRepositoryManager(InternalLuceneIndex index, LuceneSerializer serializer) {
+  private final ExecutorService waitingThreadPoolFromDM;
+
+  public PartitionedRepositoryManager(InternalLuceneIndex index, LuceneSerializer serializer,
+      ExecutorService waitingThreadPool) {
     this.index = index;
     this.serializer = serializer;
     this.closed = false;
+    this.waitingThreadPoolFromDM = waitingThreadPool;
   }
 
   public void setUserRegionForRepositoryManager(PartitionedRegion userRegion) {
@@ -70,13 +81,28 @@ public class PartitionedRepositoryManager implements RepositoryManager {
     Region<Object, Object> region = ctx.getDataSet();
     Set<Integer> buckets = ((InternalRegionFunctionContext) ctx).getLocalBucketSet(region);
     ArrayList<IndexRepository> repos = new ArrayList<IndexRepository>(buckets.size());
+
     for (Integer bucketId : buckets) {
       BucketRegion userBucket = userRegion.getDataStore().getLocalBucketById(bucketId);
       if (userBucket == null) {
         throw new BucketNotFoundException(
             "User bucket was not found for region " + region + "bucket id " + bucketId);
       } else {
-        repos.add(getRepository(userBucket.getId()));
+        if (index.isIndexAvailable(userBucket.getId())) {
+          repos.add(getRepository(userBucket.getId()));
+        } else {
+          waitingThreadPoolFromDM.execute(() -> {
+            try {
+              IndexRepository repository = getRepository(userBucket.getId());
+              repos.add(repository);
+            } catch (BucketNotFoundException e) {
+              logger.debug(
+                  "Lucene Index creation still in progress. Catching BucketNotFoundException");
+            }
+          });
+          throw new LuceneIndexCreationInProgressException(
+              "Lucene Index creation still in progress for bucket: " + userBucket.getId());
+        }
       }
     }
 
@@ -155,7 +181,8 @@ public class PartitionedRepositoryManager implements RepositoryManager {
       try {
         computeRepository(bucketId);
       } catch (LuceneIndexDestroyedException e) {
-        /* expected exception */}
+        /* expected exception */
+      }
     }
   }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawIndexRepositoryFactory.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawIndexRepositoryFactory.java
index 984d3eb..0a7ad42 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawIndexRepositoryFactory.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawIndexRepositoryFactory.java
@@ -30,12 +30,19 @@ import org.apache.geode.internal.cache.BucketRegion;
 import org.apache.geode.internal.cache.PartitionedRegion;
 
 public class RawIndexRepositoryFactory extends IndexRepositoryFactory {
-  public RawIndexRepositoryFactory() {}
+
+  private String luceneFolderPath = "";
+
+  public RawIndexRepositoryFactory() {
+  }
 
   @Override
   public IndexRepository computeIndexRepository(final Integer bucketId, LuceneSerializer serializer,
-      InternalLuceneIndex index, PartitionedRegion userRegion, IndexRepository oldRepository,
-      PartitionedRepositoryManager partitionedRepositoryManager) throws IOException {
+                                                InternalLuceneIndex index,
+                                                PartitionedRegion userRegion,
+                                                IndexRepository oldRepository,
+                                                PartitionedRepositoryManager partitionedRepositoryManager)
+      throws IOException {
     final IndexRepository repo;
     if (oldRepository != null) {
       oldRepository.cleanup();
@@ -46,7 +53,11 @@ public class RawIndexRepositoryFactory extends IndexRepositoryFactory {
     if (indexForRaw.withPersistence()) {
       String bucketLocation = LuceneServiceImpl.getUniqueIndexName(index.getName(),
           index.getRegionPath() + "_" + bucketId);
-      File location = new File(index.getName(), bucketLocation);
+      String
+          filePath =
+          luceneFolderPath.isEmpty() ? index.getName()
+              : luceneFolderPath + File.separator + index.getName();
+      File location = new File(filePath, bucketLocation);
       if (!location.exists()) {
         location.mkdirs();
       }
@@ -60,4 +71,8 @@ public class RawIndexRepositoryFactory extends IndexRepositoryFactory {
     return new IndexRepositoryImpl(null, writer, serializer, indexForRaw.getIndexStats(),
         dataBucket, null, "", indexForRaw);
   }
+
+  public void setLuceneFolderPath(String luceneFolderPath) {
+    this.luceneFolderPath = luceneFolderPath;
+  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManager.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManager.java
index 0b38c45..5480e74 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManager.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManager.java
@@ -15,6 +15,7 @@
 package org.apache.geode.cache.lucene.internal;
 
 import java.io.IOException;
+import java.util.concurrent.ExecutorService;
 
 import org.apache.geode.cache.lucene.LuceneSerializer;
 import org.apache.geode.cache.lucene.internal.repository.IndexRepository;
@@ -22,10 +23,13 @@ import org.apache.geode.internal.cache.BucketNotFoundException;
 import org.apache.geode.internal.cache.PartitionedRegion;
 
 public class RawLuceneRepositoryManager extends PartitionedRepositoryManager {
-  public static IndexRepositoryFactory indexRepositoryFactory = new RawIndexRepositoryFactory();
+  public static RawIndexRepositoryFactory indexRepositoryFactory = new RawIndexRepositoryFactory();
 
-  public RawLuceneRepositoryManager(LuceneIndexImpl index, LuceneSerializer serializer) {
-    super(index, serializer);
+  public RawLuceneRepositoryManager(LuceneIndexImpl index, LuceneSerializer serializer,
+                                    ExecutorService waitingThreadPool,
+                                    String luceneFolderPath) {
+    super(index, serializer,waitingThreadPool);
+    indexRepositoryFactory.setLuceneFolderPath(luceneFolderPath);
   }
 
   @Override
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java
index 55c2222..2f061b0 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationIntegrationTest.java
@@ -69,6 +69,7 @@ import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.test.junit.categories.IntegrationTest;
 import org.apache.geode.test.junit.categories.LuceneTest;
+import org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder;
 
 /**
  * Tests of creating lucene indexes on regions. All tests of index creation use cases should be in
@@ -85,6 +86,9 @@ public class LuceneIndexCreationIntegrationTest extends LuceneIntegrationTest {
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
 
+  @Rule
+  public SerializableTemporaryFolder temporaryFolder = new SerializableTemporaryFolder();
+
 
   @Test
   public void shouldCreateIndexWriterWithAnalyzersWhenSettingPerFieldAnalyzers()
@@ -162,14 +166,14 @@ public class LuceneIndexCreationIntegrationTest extends LuceneIntegrationTest {
 
   @Test
   public void shouldCreateRawIndexIfSpecifiedItsFactory()
-      throws BucketNotFoundException, InterruptedException {
+      throws BucketNotFoundException, InterruptedException, IOException {
     Map<String, Analyzer> analyzers = new HashMap<>();
 
     final RecordingAnalyzer field1Analyzer = new RecordingAnalyzer();
     final RecordingAnalyzer field2Analyzer = new RecordingAnalyzer();
     analyzers.put("field1", field1Analyzer);
     analyzers.put("field2", field2Analyzer);
-    LuceneServiceImpl.luceneIndexFactory = new LuceneRawIndexFactory();
+    LuceneServiceImpl.luceneIndexFactory = new LuceneRawIndexFactory(temporaryFolder.newFolder("lucene").getPath());
     try {
       luceneService.createIndexFactory().setFields(analyzers).create(INDEX_NAME, REGION_NAME);
       Region region = createRegion();
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexRecoveryHAIntegrationTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexRecoveryHAIntegrationTest.java
index 0f67cb6..a0753d1 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexRecoveryHAIntegrationTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexRecoveryHAIntegrationTest.java
@@ -19,6 +19,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
+import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.lucene.analysis.Analyzer;
@@ -91,7 +92,7 @@ public class LuceneIndexRecoveryHAIntegrationTest {
     userRegion.put("rebalance", "test");
     service.waitUntilFlushed("index1", "userRegion", 30000, TimeUnit.MILLISECONDS);
 
-    RepositoryManager manager = new PartitionedRepositoryManager((LuceneIndexImpl) index, mapper);
+    RepositoryManager manager = new PartitionedRepositoryManager(index, mapper,Executors.newSingleThreadExecutor());
     IndexRepository repo = manager.getRepository(userRegion, 0, null);
     assertNotNull(repo);
 
@@ -106,7 +107,7 @@ public class LuceneIndexRecoveryHAIntegrationTest {
 
     userRegion = (PartitionedRegion) regionfactory.create("userRegion");
     userRegion.put("rebalance", "test");
-    manager = new PartitionedRepositoryManager((LuceneIndexImpl) index, mapper);
+    manager = new PartitionedRepositoryManager(index, mapper,Executors.newSingleThreadExecutor());
     IndexRepository newRepo = manager.getRepository(userRegion, 0, null);
 
     Assert.assertNotEquals(newRepo, repo);
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java
index b2c30b1..06ec0ce 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java
@@ -29,20 +29,24 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.index.IndexWriter;
+import org.awaitility.Awaitility;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PowerMockIgnore;
@@ -64,13 +68,13 @@ import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.PartitionRegionConfig;
 import org.apache.geode.internal.cache.PartitionedRegion;
-import org.apache.geode.internal.cache.PartitionedRegion.RetryTimeKeeper;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
 import org.apache.geode.internal.cache.PartitionedRegionHelper;
 import org.apache.geode.internal.cache.execute.InternalRegionFunctionContext;
 import org.apache.geode.test.fake.Fakes;
 import org.apache.geode.test.junit.categories.LuceneTest;
 import org.apache.geode.test.junit.categories.UnitTest;
+import org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder;
 
 @Category({UnitTest.class, LuceneTest.class})
 @RunWith(PowerMockRunner.class)
@@ -83,20 +87,24 @@ public class PartitionedRepositoryManagerJUnitTest {
   protected LuceneSerializer serializer;
   protected PartitionedRegionDataStore userDataStore;
   protected PartitionedRegionDataStore fileDataStore;
-  protected PartitionedRegionHelper prHelper;
   protected PartitionRegionConfig prConfig;
   protected LocalRegion prRoot;
 
-  protected Map<Integer, BucketRegion> fileAndChunkBuckets = new HashMap<Integer, BucketRegion>();
-  protected Map<Integer, BucketRegion> dataBuckets = new HashMap<Integer, BucketRegion>();
+  protected Map<Integer, BucketRegion> fileAndChunkBuckets = new HashMap<>();
+  protected Map<Integer, BucketRegion> dataBuckets = new HashMap<>();
   protected LuceneIndexStats indexStats;
   protected FileSystemStats fileSystemStats;
   protected LuceneIndexImpl indexForPR;
   protected PartitionedRepositoryManager repoManager;
   protected GemFireCacheImpl cache;
+  private final Map<Integer, Boolean> isIndexAvailableMap = new HashMap<>();
+
+  @Rule
+  public SerializableTemporaryFolder temporaryFolder = new SerializableTemporaryFolder();
+
 
   @Before
-  public void setUp() {
+  public void setUp() throws IOException {
     cache = Fakes.cache();
     userRegion = Mockito.mock(PartitionedRegion.class);
     userDataStore = Mockito.mock(PartitionedRegionDataStore.class);
@@ -117,7 +125,10 @@ public class PartitionedRepositoryManagerJUnitTest {
     DLockService.removeLockServiceForTests(PartitionedRegionHelper.PARTITION_LOCK_SERVICE_NAME);
   }
 
-  protected void createIndexAndRepoManager() {
+  protected void createIndexAndRepoManager() throws IOException {
+    String luceneFolderPath = temporaryFolder.newFolder("lucene").getPath();
+    LuceneServiceImpl.luceneIndexFactory = new LuceneRawIndexFactory(luceneFolderPath);
+
     fileAndChunkRegion = Mockito.mock(PartitionedRegion.class);
     fileDataStore = Mockito.mock(PartitionedRegionDataStore.class);
     when(fileAndChunkRegion.getDataStore()).thenReturn(fileDataStore);
@@ -142,13 +153,14 @@ public class PartitionedRepositoryManagerJUnitTest {
     when(prRoot.get("rid")).thenReturn(prConfig);
     PowerMockito.mockStatic(PartitionedRegionHelper.class);
     PowerMockito.when(PartitionedRegionHelper.getPRRoot(cache)).thenReturn(prRoot);
-    repoManager = new PartitionedRepositoryManager(indexForPR, serializer);
+    repoManager = new PartitionedRepositoryManager(indexForPR, serializer,
+        Executors.newSingleThreadExecutor());
     repoManager.setUserRegionForRepositoryManager(userRegion);
     repoManager.allowRepositoryComputation();
   }
 
   @Test
-  public void getByKey() throws BucketNotFoundException, IOException {
+  public void getByKey() throws BucketNotFoundException {
     setUpMockBucket(0);
     setUpMockBucket(1);
 
@@ -165,8 +177,8 @@ public class PartitionedRepositoryManagerJUnitTest {
     assertEquals(repo0, repo113);
     assertNotEquals(repo0, repo1);
 
-    checkRepository(repo0, 0);
-    checkRepository(repo1, 1);
+    checkRepositoryContainsBucket(repo0, 0);
+    checkRepositoryContainsBucket(repo1, 1);
   }
 
   /**
@@ -174,14 +186,14 @@ public class PartitionedRepositoryManagerJUnitTest {
    */
   @Test
   public void destroyBucketShouldCreateNewIndexRepository()
-      throws BucketNotFoundException, IOException {
+      throws BucketNotFoundException {
     setUpMockBucket(0);
 
     IndexRepositoryImpl repo0 =
         (IndexRepositoryImpl) repoManager.getRepository(userRegion, 0, null);
 
     assertNotNull(repo0);
-    checkRepository(repo0, 0);
+    checkRepositoryContainsBucket(repo0, 0);
 
     BucketRegion fileBucket0 = fileAndChunkBuckets.get(0);
     BucketRegion dataBucket0 = dataBuckets.get(0);
@@ -194,7 +206,7 @@ public class PartitionedRepositoryManagerJUnitTest {
     IndexRepositoryImpl newRepo0 =
         (IndexRepositoryImpl) repoManager.getRepository(userRegion, 0, null);
     assertNotEquals(repo0, newRepo0);
-    checkRepository(newRepo0, 0);
+    checkRepositoryContainsBucket(newRepo0, 0);
     assertTrue(repo0.isClosed());
     assertFalse(repo0.getWriter().isOpen());
   }
@@ -213,45 +225,19 @@ public class PartitionedRepositoryManagerJUnitTest {
 
     when(fileDataStore.getLocalBucketById(eq(0))).thenReturn(null);
 
-    when(fileAndChunkRegion.getOrCreateNodeForBucketWrite(eq(0), (RetryTimeKeeper) any()))
-        .then(new Answer() {
-          @Override
-          public Object answer(InvocationOnMock invocation) throws Throwable {
-            when(fileDataStore.getLocalBucketById(eq(0))).thenReturn(fileAndChunkBuckets.get(0));
-            return null;
-          }
+    when(fileAndChunkRegion.getOrCreateNodeForBucketWrite(eq(0),  any()))
+        .then((Answer) invocation -> {
+          when(fileDataStore.getLocalBucketById(eq(0))).thenReturn(fileAndChunkBuckets.get(0));
+          return null;
         });
 
     assertNotNull(repoManager.getRepository(userRegion, 0, null));
   }
 
-  @Test
-  public void getByRegion() throws BucketNotFoundException {
-    setUpMockBucket(0);
-    setUpMockBucket(1);
-
-    Set<Integer> buckets = new LinkedHashSet<Integer>(Arrays.asList(0, 1));
-    InternalRegionFunctionContext ctx = Mockito.mock(InternalRegionFunctionContext.class);
-    when(ctx.getLocalBucketSet((any()))).thenReturn(buckets);
-    Collection<IndexRepository> repos = repoManager.getRepositories(ctx);
-    assertEquals(2, repos.size());
-
-    Iterator<IndexRepository> itr = repos.iterator();
-    IndexRepositoryImpl repo0 = (IndexRepositoryImpl) itr.next();
-    IndexRepositoryImpl repo1 = (IndexRepositoryImpl) itr.next();
-
-    assertNotNull(repo0);
-    assertNotNull(repo1);
-    assertNotEquals(repo0, repo1);
-
-    checkRepository(repo0, 0);
-    checkRepository(repo1, 1);
-  }
-
   /**
    * Test that we get the expected exception when a user bucket is missing
    */
-  @Test(expected = BucketNotFoundException.class)
+  @Test(expected = LuceneIndexCreationInProgressException.class)
   public void getMissingBucketByRegion() throws BucketNotFoundException {
     setUpMockBucket(0);
 
@@ -262,15 +248,21 @@ public class PartitionedRepositoryManagerJUnitTest {
     repoManager.getRepositories(ctx);
   }
 
-  protected void checkRepository(IndexRepositoryImpl repo0, int bucketId) {
+  protected void checkRepositoryContainsBucket(IndexRepositoryImpl repo0, int... bucketIds) {
     IndexWriter writer0 = repo0.getWriter();
     RegionDirectory dir0 = (RegionDirectory) writer0.getDirectory();
-    assertEquals(new BucketTargetingMap(fileAndChunkBuckets.get(bucketId), bucketId),
-        dir0.getFileSystem().getFileAndChunkRegion());
+    boolean result = false;
+    for (int bucketId : bucketIds) {
+      BucketTargetingMap bucketTargetingMap =
+          new BucketTargetingMap(fileAndChunkBuckets.get(bucketId), bucketId);
+      result |= bucketTargetingMap.equals(dir0.getFileSystem().getFileAndChunkRegion());
+    }
+
+    assertTrue(result);
     assertEquals(serializer, repo0.getSerializer());
   }
 
-  protected BucketRegion setUpMockBucket(int id) throws BucketNotFoundException {
+  protected void setUpMockBucket(int id) {
     BucketRegion mockBucket = Mockito.mock(BucketRegion.class);
     BucketRegion fileAndChunkBucket = Mockito.mock(BucketRegion.class);
     // Allowing the fileAndChunkBucket to behave like a map so that the IndexWriter operations don't
@@ -290,6 +282,64 @@ public class PartitionedRepositoryManagerJUnitTest {
     BucketAdvisor mockBucketAdvisor = Mockito.mock(BucketAdvisor.class);
     when(fileAndChunkBucket.getBucketAdvisor()).thenReturn(mockBucketAdvisor);
     when(mockBucketAdvisor.isPrimary()).thenReturn(true);
-    return mockBucket;
   }
+
+  @Test
+  public void queryByRegionWaitingForRepoToBeCreated() {
+    setUpMockBucket(0);
+    setUpMockBucket(1);
+
+    setupIsIndexAvailable();
+
+    Set<Integer> buckets = new LinkedHashSet<>(Arrays.asList(0, 1));
+    InternalRegionFunctionContext ctx = Mockito.mock(InternalRegionFunctionContext.class);
+    when(ctx.getLocalBucketSet((any()))).thenReturn(buckets);
+    final Collection<IndexRepository> repositories = new HashSet<>();
+
+    Awaitility.await().pollDelay(1, TimeUnit.SECONDS).pollInterval(1, TimeUnit.SECONDS)
+        .atMost(500, TimeUnit.SECONDS).until(() -> {
+          try {
+            repositories.addAll(repoManager.getRepositories(ctx));
+          } catch (BucketNotFoundException | LuceneIndexCreationInProgressException e) {
+          }
+          return repositories.size() == 2;
+        });
+
+    Iterator<IndexRepository> itr = repositories.iterator();
+    IndexRepositoryImpl repo0 = (IndexRepositoryImpl) itr.next();
+    IndexRepositoryImpl repo1 = (IndexRepositoryImpl) itr.next();
+
+    assertNotNull(repo0);
+    assertNotNull(repo1);
+    assertNotEquals(repo0, repo1);
+
+    checkRepositoryContainsBucket(repo0, 0, 1);
+    checkRepositoryContainsBucket(repo1, 0, 1);
+  }
+
+  private void setupIsIndexAvailable() {
+    when(indexForPR.isIndexAvailable(1)).then((Answer) invocation -> {
+      boolean result;
+      Boolean isAvailable = isIndexAvailableMap.get(1);
+      if (isAvailable == null || !isAvailable) {
+        isIndexAvailableMap.put(1, true);
+        result = false;
+      } else {
+        result = true;
+      }
+      return result;
+    });
+    when(indexForPR.isIndexAvailable(0)).then((Answer) invocation -> {
+      boolean result;
+      Boolean isAvailable = isIndexAvailableMap.get(0);
+      if (isAvailable == null || !isAvailable) {
+        isIndexAvailableMap.put(0, true);
+        result = false;
+      } else {
+        result = true;
+      }
+      return result;
+    });
+  }
+
 }
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManagerJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManagerJUnitTest.java
index a000d2f..818b416 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManagerJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/RawLuceneRepositoryManagerJUnitTest.java
@@ -19,6 +19,9 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.when;
 
+import java.io.IOException;
+import java.util.concurrent.Executors;
+
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.store.Directory;
@@ -35,12 +38,11 @@ import org.apache.geode.internal.cache.BucketRegion;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
 import org.apache.geode.test.fake.Fakes;
-import org.apache.geode.test.junit.categories.LuceneTest;
 
 public class RawLuceneRepositoryManagerJUnitTest extends PartitionedRepositoryManagerJUnitTest {
 
   @Before
-  public void setUp() {
+  public void setUp() throws IOException {
     cache = Fakes.cache();
 
     userRegion = Mockito.mock(PartitionedRegion.class);
@@ -53,11 +55,12 @@ public class RawLuceneRepositoryManagerJUnitTest extends PartitionedRepositoryMa
 
   @After
   public void tearDown() {
-    ((RawLuceneRepositoryManager) repoManager).close();
+    repoManager.close();
   }
 
-  protected void createIndexAndRepoManager() {
-    LuceneServiceImpl.luceneIndexFactory = new LuceneRawIndexFactory();
+  protected void createIndexAndRepoManager() throws IOException {
+    String luceneFolderPath = temporaryFolder.newFolder("lucene").getPath();
+    LuceneServiceImpl.luceneIndexFactory = new LuceneRawIndexFactory(luceneFolderPath);
 
     indexStats = Mockito.mock(LuceneIndexStats.class);
     indexForPR = Mockito.mock(LuceneRawIndex.class);
@@ -66,7 +69,7 @@ public class RawLuceneRepositoryManagerJUnitTest extends PartitionedRepositoryMa
     when(indexForPR.getCache()).thenReturn(cache);
     when(indexForPR.getRegionPath()).thenReturn("/testRegion");
     when(indexForPR.withPersistence()).thenReturn(true);
-    repoManager = new RawLuceneRepositoryManager(indexForPR, serializer);
+    repoManager = new RawLuceneRepositoryManager(indexForPR, serializer,Executors.newSingleThreadExecutor(), luceneFolderPath);
     repoManager.setUserRegionForRepositoryManager(userRegion);
     repoManager.allowRepositoryComputation();
   }
@@ -78,14 +81,14 @@ public class RawLuceneRepositoryManagerJUnitTest extends PartitionedRepositoryMa
   }
 
   @Override
-  protected void checkRepository(IndexRepositoryImpl repo0, int bucketId) {
+  protected void checkRepositoryContainsBucket(IndexRepositoryImpl repo0, int... bucketIds) {
     IndexWriter writer0 = repo0.getWriter();
     Directory dir0 = writer0.getDirectory();
     assertTrue(dir0 instanceof NIOFSDirectory);
   }
 
   @Override
-  protected BucketRegion setUpMockBucket(int id) throws BucketNotFoundException {
+  protected void setUpMockBucket(int id) {
     BucketRegion mockBucket = Mockito.mock(BucketRegion.class);
     when(mockBucket.getId()).thenReturn(id);
     when(userRegion.getBucketRegion(eq(id), eq(null))).thenReturn(mockBucket);
@@ -95,7 +98,6 @@ public class RawLuceneRepositoryManagerJUnitTest extends PartitionedRepositoryMa
     dataBuckets.put(id, mockBucket);
 
     repoManager.computeRepository(mockBucket.getId());
-    return mockBucket;
   }
 
   @Test

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