You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "nabarun (JIRA)" <ji...@apache.org> on 2018/04/12 20:36:00 UTC

[jira] [Updated] (GEODE-5061) Lucene queries can be executed on an accessor which causes the system to go into stack overflow

     [ https://issues.apache.org/jira/browse/GEODE-5061?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

nabarun updated GEODE-5061:
---------------------------
    Summary: Lucene queries can be executed on an accessor which causes the system to go into stack overflow  (was: Lucene queries cannot be executed on an accessor)

> Lucene queries can be executed on an accessor which causes the system to go into stack overflow
> -----------------------------------------------------------------------------------------------
>
>                 Key: GEODE-5061
>                 URL: https://issues.apache.org/jira/browse/GEODE-5061
>             Project: Geode
>          Issue Type: Bug
>          Components: lucene
>            Reporter: nabarun
>            Priority: Major
>
> h2. Current:
> An Apache Geode user can execute a Lucene query on an accessor without ever creating a Lucene index. This should not be allowed but it is and it causes a stack overflow when we execute a Lucene query from the accessor. This can be observed in the below test case.
>  
> {code:java}
> public void asynchronousLuceneIndexCreationWithDifferentFieldsMustFail(
>  RegionTestableType regionTestType) throws Exception {
>  SerializableRunnableIF createIndex = () -> {
>  LuceneService luceneService = LuceneServiceProvider.get(getCache());
>  luceneService.createIndexFactory().addField("text").create(INDEX_NAME, REGION_NAME);
>  };
>  dataStore1.invoke(() -> initDataStore(createIndex, regionTestType));
>  dataStore2.invoke(() -> initDataStore(createIndex, regionTestType));
>  accessor.invoke(() -> initAccessor(createIndex, regionTestType));
>  putDataInRegion(accessor);
>  assertTrue(waitForFlushBeforeExecuteTextSearch(accessor, 60000));
>  assertTrue(waitForFlushBeforeExecuteTextSearch(dataStore1, 60000));
>  executeTextSearch(accessor);
>  dataStore1.invoke(() -> destroyIndex());
>  // re-index stored data
>  AsyncInvocation ai1 = dataStore1.invokeAsync(() -> {
>  recreateIndex();
>  });
>  
>  dataStore2.invoke(() -> closeCache());
>  ai1.join();
>  aia.join();
>  assertTrue(waitForFlushBeforeExecuteTextSearch(dataStore1, 60000));
>  ai1.checkException();
>  putAllDataIntoRegion(accessor);
>  executeTextSearch(accessor);
> }{code}
>  
> However we can see that the issue is resolved when the accessor creates the Lucene Index. 
> This can be seen in the below test case.
>  
> {code:java}
> public void asynchronousLuceneIndexCreationWithDifferentFieldsMustFail(
>  RegionTestableType regionTestType) throws Exception {
>  SerializableRunnableIF createIndex = () -> {
>  LuceneService luceneService = LuceneServiceProvider.get(getCache());
>  luceneService.createIndexFactory().addField("text").create(INDEX_NAME, REGION_NAME);
>  };
>  dataStore1.invoke(() -> initDataStore(createIndex, regionTestType));
>  dataStore2.invoke(() -> initDataStore(createIndex, regionTestType));
>  accessor.invoke(() -> initAccessor(createIndex, regionTestType));
>  putDataInRegion(accessor);
>  assertTrue(waitForFlushBeforeExecuteTextSearch(accessor, 60000));
>  assertTrue(waitForFlushBeforeExecuteTextSearch(dataStore1, 60000));
>  executeTextSearch(accessor);
>  dataStore1.invoke(() -> destroyIndex());
>  // re-index stored data
>  AsyncInvocation ai1 = dataStore1.invokeAsync(() -> {
>  recreateIndex();
>  });
>  AsyncInvocation aia = accessor.invokeAsync(() -> {
>  recreateIndex();
>  });
>  dataStore2.invoke(() -> closeCache());
>  ai1.join();
>  aia.join();
>  assertTrue(waitForFlushBeforeExecuteTextSearch(dataStore1, 60000));
>  ai1.checkException();
>  putAllDataIntoRegion(accessor);
>  executeTextSearch(accessor);
> }{code}
>  
>  
> h2. Solution:
>  
> Make sure that Lucene queries cannot be executed in the accessor if the accessor has not created the Lucene index used in the query.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)