Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud)

65735: Merged V4.2-BUG-FIX (4.2.2) to HEAD-BUG-FIX (4.3/Cloud)
      65518: Merged DEV to V4.2-BUG-FIX (4.2.2)
         62566 : MNT-8804 : CMIS and WebScript inconsistent behavior with corrupt indexes 
            - Filter not existing nodes in CMIS layer 


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@66265 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2014-04-02 22:10:41 +00:00
parent c79418dc3a
commit 5d4d86cf1d
3 changed files with 61 additions and 3 deletions

View File

@@ -31,10 +31,13 @@ import org.alfresco.cmis.CMISResultSet;
import org.alfresco.cmis.CMISScope;
import org.alfresco.cmis.CMISServices;
import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode;
import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet;
import org.alfresco.repo.search.impl.querymodel.Query;
import org.alfresco.repo.search.impl.querymodel.QueryEngine;
import org.alfresco.repo.search.impl.querymodel.QueryEngineResults;
import org.alfresco.repo.security.permissions.impl.acegi.FilteringResultSet;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.search.LimitBy;
import org.alfresco.service.cmr.search.ResultSet;
@@ -133,7 +136,7 @@ public class CMISQueryServiceImpl implements CMISQueryService
ResultSet current = map.get(group);
for (String selector : group)
{
wrapped.put(selector, current);
wrapped.put(selector, filterNotExistingNodes(current));
}
}
LimitBy limitBy = null;
@@ -144,6 +147,32 @@ public class CMISQueryServiceImpl implements CMISQueryService
CMISResultSet cmis = new CMISResultSetImpl(wrapped, options, limitBy, nodeService, query, cmisDictionaryService, alfrescoDictionaryService);
return cmis;
}
/* MNT-8804 filter ResultSet for nodes with corrupted indexes */
private ResultSet filterNotExistingNodes(ResultSet resultSet)
{
if (resultSet instanceof PagingLuceneResultSet)
{
ResultSet wrapped = ((PagingLuceneResultSet)resultSet).getWrapped();
if (wrapped instanceof FilteringResultSet)
{
FilteringResultSet filteringResultSet = (FilteringResultSet)wrapped;
for (int i = 0; i < filteringResultSet.length(); i++)
{
NodeRef nodeRef = filteringResultSet.getNodeRef(i);
/* filter node if it does not exist */
if (!nodeService.exists(nodeRef))
{
filteringResultSet.setIncluded(i, false);
}
}
}
}
return resultSet;
}
/*
* (non-Javadoc)

View File

@@ -24,10 +24,13 @@ import java.util.Set;
import org.alfresco.opencmis.dictionary.CMISDictionaryService;
import org.alfresco.opencmis.search.CMISQueryOptions.CMISQueryMode;
import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet;
import org.alfresco.repo.search.impl.querymodel.Query;
import org.alfresco.repo.search.impl.querymodel.QueryEngine;
import org.alfresco.repo.search.impl.querymodel.QueryEngineResults;
import org.alfresco.repo.security.permissions.impl.acegi.FilteringResultSet;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.LimitBy;
@@ -110,7 +113,7 @@ public class CMISQueryServiceImpl implements CMISQueryService
ResultSet current = map.get(group);
for (String selector : group)
{
wrapped.put(selector, current);
wrapped.put(selector, filterNotExistingNodes(current));
}
}
LimitBy limitBy = null;
@@ -123,6 +126,32 @@ public class CMISQueryServiceImpl implements CMISQueryService
alfrescoDictionaryService);
return cmis;
}
/* MNT-8804 filter ResultSet for nodes with corrupted indexes */
private ResultSet filterNotExistingNodes(ResultSet resultSet)
{
if (resultSet instanceof PagingLuceneResultSet)
{
ResultSet wrapped = ((PagingLuceneResultSet)resultSet).getWrapped();
if (wrapped instanceof FilteringResultSet)
{
FilteringResultSet filteringResultSet = (FilteringResultSet)wrapped;
for (int i = 0; i < filteringResultSet.length(); i++)
{
NodeRef nodeRef = filteringResultSet.getNodeRef(i);
/* filter node if it does not exist */
if (!nodeService.exists(nodeRef))
{
filteringResultSet.setIncluded(i, false);
}
}
}
}
return resultSet;
}
public CMISResultSet query(String query, StoreRef storeRef)
{

View File

@@ -64,7 +64,7 @@ public class FilteringResultSet extends ACLEntryAfterInvocationProvider implemen
return unfiltered;
}
/* package */void setIncluded(int i, boolean excluded)
public void setIncluded(int i, boolean excluded)
{
inclusionMask.set(i, excluded);
}