solved error on vre recents

This commit is contained in:
lucio.lelii 2021-10-13 11:35:19 +02:00
parent 882f849e2f
commit 2a46ac3aa2
3 changed files with 18 additions and 14 deletions

View File

@ -101,16 +101,16 @@ public class Utils {
} }
public static <T extends Item> List<T> serachByNameOnFolder(Session ses, String user, AuthorizationChecker authChecker, Node parent, List<String> excludes, Range range, boolean showHidden, boolean excludeTrashed, Class<? extends RootItem> nodeTypeToInclude, String nameParam) throws RepositoryException, BackendGenericError{ public static <T extends Item> List<T> searchByNameOnFolder(Session ses, String user, AuthorizationChecker authChecker, Node parent, List<String> excludes, Range range, boolean showHidden, boolean excludeTrashed, Class<? extends RootItem> nodeTypeToInclude, String nameParam) throws RepositoryException, BackendGenericError{
String xpath = String.format("/jcr:root%s//element(*,nthl:workspaceItem)[jcr:like(fn:lower-case(@jcr:title), '%s')]",ISO9075.encodePath(parent.getPath()), nameParam.toLowerCase()); String xpath = String.format("/jcr:root%s//element(*,nthl:workspaceItem)[jcr:like(fn:lower-case(@jcr:title), '%s')]",ISO9075.encodePath(parent.getPath()), nameParam.toLowerCase());
//String query = String.format("SELECT * FROM [nthl:workspaceLeafItem] AS node WHERE ISDESCENDANTNODE('%s') ORDER BY node.[jcr:lastModified] DESC ",vreFolder.getPath()); //String query = String.format("SELECT * FROM [nthl:workspaceLeafItem] AS node WHERE ISDESCENDANTNODE('%s') ORDER BY node.[jcr:lastModified] DESC ",vreFolder.getPath());
logger.debug("query for search is {}",xpath); logger.trace("query for search is {}",xpath);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH); Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH);
NodeChildrenFilterIterator iterator = new NodeChildrenFilterIterator(jcrQuery.execute().getNodes()); NodeChildrenFilterIterator iterator = new NodeChildrenFilterIterator(jcrQuery.execute().getNodes());
logger.debug("[SEARCH] real search took {} millis",(System.currentTimeMillis()-start)); logger.trace("[SEARCH] real search took {} millis",(System.currentTimeMillis()-start));
Predicate<Node> checker = new Predicate<Node>() { Predicate<Node> checker = new Predicate<Node>() {
@Override @Override
@ -152,7 +152,7 @@ public class Utils {
while (iterator.hasNext()){ while (iterator.hasNext()){
Node current = iterator.next(); Node current = iterator.next();
logger.debug("[SEARCH] evaluating node {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName()); logger.trace("[SEARCH] evaluating node {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName());
//REMOVE duplicate nodes, in case the indexes are not working //REMOVE duplicate nodes, in case the indexes are not working
if (duplicateId.contains(current.getIdentifier())) { if (duplicateId.contains(current.getIdentifier())) {
@ -168,7 +168,7 @@ public class Utils {
if (isToExclude(current, showHidden)) if (isToExclude(current, showHidden))
continue; continue;
logger.debug("[SEARCH] current node not excluded {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName()); logger.trace("[SEARCH] current node not excluded {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName());
if (range==null || (count>=range.getStart() && returnList.size()<range.getLimit())) { if (range==null || (count>=range.getStart() && returnList.size()<range.getLimit())) {
T item = node2Item.getFilteredItem(current, excludes, nodeTypeToInclude); T item = node2Item.getFilteredItem(current, excludes, nodeTypeToInclude);

View File

@ -39,14 +39,15 @@ public class VREQueryRetriever implements Callable<List<Item>> {
private Credentials credentials; private Credentials credentials;
private Item vreFolder; private Item vreFolder;
Map<String, Long> cachedMap = new HashMap<>(CACHE_DIMENSION); Map<String, Long> cachedMap = new HashMap<>(CACHE_DIMENSION);
long higherTimestamp = Long.MAX_VALUE;
long lastTimestamp =0; long lastTimestamp =0;
long doTime= 0; long doTime= 0;
boolean underRedo = false; boolean underRedo = false;
Node2ItemConverter node2Item; Node2ItemConverter node2Item;
private static int TIME_MEASURE = Calendar.MINUTE;
private static int VALUE_TIME_BEFORE = 10;
public VREQueryRetriever(Repository repository, Credentials credentials, Node2ItemConverter node2Item, Item vreFolder) { public VREQueryRetriever(Repository repository, Credentials credentials, Node2ItemConverter node2Item, Item vreFolder) {
@ -62,7 +63,7 @@ public class VREQueryRetriever implements Callable<List<Item>> {
try { try {
ses = repository.login(credentials); ses = repository.login(credentials);
Calendar now = Calendar.getInstance(); Calendar now = Calendar.getInstance();
now.add(Calendar.HOUR_OF_DAY, -1); now.add(TIME_MEASURE, -1*Math.abs(VALUE_TIME_BEFORE));
if (doTime> now.getTimeInMillis() || underRedo) { if (doTime> now.getTimeInMillis() || underRedo) {
logger.debug("executing recents task for {} (cahced result)",vreFolder.getTitle()); logger.debug("executing recents task for {} (cahced result)",vreFolder.getTitle());
@ -86,7 +87,7 @@ public class VREQueryRetriever implements Callable<List<Item>> {
public synchronized List<Item> redo(Session ses) { public synchronized List<Item> redo(Session ses) {
underRedo = true; underRedo = true;
try { try {
Map<String, Long> tempCachedMap = new HashMap<>(CACHE_DIMENSION); Map<String, Long> tempCachedMap = new HashMap<>(cachedMap);
if (cachedMap.isEmpty()) if (cachedMap.isEmpty())
init(ses, tempCachedMap); init(ses, tempCachedMap);
else { else {
@ -131,12 +132,11 @@ public class VREQueryRetriever implements Callable<List<Item>> {
} }
private void insertItemInTheRightPlace(Item item, Map<String, Long> tempCachedMap) { private void insertItemInTheRightPlace(Item item, Map<String, Long> tempCachedMap) {
long lastModifiedTime = item.getLastModificationTime().getTime().getTime(); long lastModifiedTime = item.getLastModificationTime().getTimeInMillis();
if (!(lastModifiedTime>higherTimestamp && tempCachedMap.size()>CACHE_DIMENSION)) { if (tempCachedMap.size()<CACHE_DIMENSION || lastModifiedTime>Collections.min(tempCachedMap.values()))
tempCachedMap.put(item.getId(), lastModifiedTime); tempCachedMap.put(item.getId(), lastModifiedTime);
if (lastModifiedTime>higherTimestamp) higherTimestamp = lastModifiedTime;
}
} }
@ -185,6 +185,8 @@ public class VREQueryRetriever implements Callable<List<Item>> {
Item item = node2Item.getItem(nodeAdded, Excludes.ALL); Item item = node2Item.getItem(nodeAdded, Excludes.ALL);
if (tempCachedMap.get(event.getIdentifier())!=null) if (tempCachedMap.get(event.getIdentifier())!=null)
tempCachedMap.remove(event.getIdentifier()); tempCachedMap.remove(event.getIdentifier());
if (item.isHidden())
break;
insertItemInTheRightPlace(item,tempCachedMap); insertItemInTheRightPlace(item,tempCachedMap);
} }
} }
@ -198,6 +200,8 @@ public class VREQueryRetriever implements Callable<List<Item>> {
String identifier = property.getParent().getIdentifier(); String identifier = property.getParent().getIdentifier();
tempCachedMap.remove(identifier); tempCachedMap.remove(identifier);
Item item = node2Item.getItem(property.getParent(), Excludes.ALL); Item item = node2Item.getItem(property.getParent(), Excludes.ALL);
if (item.isHidden())
break;
insertItemInTheRightPlace(item, tempCachedMap); insertItemInTheRightPlace(item, tempCachedMap);
} }
} }

View File

@ -350,7 +350,7 @@ public class ItemsManager extends Impersonable{
log.debug("search for node {}",name); log.debug("search for node {}",name);
ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context)); ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
authChecker.checkReadAuthorizationControl(ses, currentUser, id); authChecker.checkReadAuthorizationControl(ses, currentUser, id);
toReturn = Utils.serachByNameOnFolder(ses, currentUser, authChecker, ses.getNodeByIdentifier(id), excludes, null, showHidden==null?false:showHidden,excludeTrashed==true?false:excludeTrashed , nodeType!=null ? ClassHandler.instance().get(nodeType) : null, name); toReturn = Utils.searchByNameOnFolder(ses, currentUser, authChecker, ses.getNodeByIdentifier(id), excludes, null, showHidden==null?false:showHidden,excludeTrashed==true?false:excludeTrashed , nodeType!=null ? ClassHandler.instance().get(nodeType) : null, name);
log.debug("search retrieved {} elements",toReturn.size()); log.debug("search retrieved {} elements",toReturn.size());
}catch (ItemNotFoundException e) { }catch (ItemNotFoundException e) {
log.error("id {} not found",id,e); log.error("id {} not found",id,e);