From 2a46ac3aa24c16184a1f59f5fddb2929eaa56aa9 Mon Sep 17 00:00:00 2001 From: "lucio.lelii" Date: Wed, 13 Oct 2021 11:35:19 +0200 Subject: [PATCH] solved error on vre recents --- .../gcube/data/access/storagehub/Utils.java | 10 +++++----- .../handlers/vres/VREQueryRetriever.java | 20 +++++++++++-------- .../storagehub/services/ItemsManager.java | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/gcube/data/access/storagehub/Utils.java b/src/main/java/org/gcube/data/access/storagehub/Utils.java index 546bfb3..5050680 100644 --- a/src/main/java/org/gcube/data/access/storagehub/Utils.java +++ b/src/main/java/org/gcube/data/access/storagehub/Utils.java @@ -101,16 +101,16 @@ public class Utils { } - public static List serachByNameOnFolder(Session ses, String user, AuthorizationChecker authChecker, Node parent, List excludes, Range range, boolean showHidden, boolean excludeTrashed, Class nodeTypeToInclude, String nameParam) throws RepositoryException, BackendGenericError{ + public static List searchByNameOnFolder(Session ses, String user, AuthorizationChecker authChecker, Node parent, List excludes, Range range, boolean showHidden, boolean excludeTrashed, Class 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 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(); @SuppressWarnings("deprecation") Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH); 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 checker = new Predicate() { @Override @@ -152,7 +152,7 @@ public class Utils { while (iterator.hasNext()){ 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 if (duplicateId.contains(current.getIdentifier())) { @@ -168,7 +168,7 @@ public class Utils { if (isToExclude(current, showHidden)) 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()> { private Credentials credentials; private Item vreFolder; Map cachedMap = new HashMap<>(CACHE_DIMENSION); - long higherTimestamp = Long.MAX_VALUE; - + long lastTimestamp =0; long doTime= 0; boolean underRedo = false; 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) { @@ -62,7 +63,7 @@ public class VREQueryRetriever implements Callable> { try { ses = repository.login(credentials); 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) { logger.debug("executing recents task for {} (cahced result)",vreFolder.getTitle()); @@ -86,7 +87,7 @@ public class VREQueryRetriever implements Callable> { public synchronized List redo(Session ses) { underRedo = true; try { - Map tempCachedMap = new HashMap<>(CACHE_DIMENSION); + Map tempCachedMap = new HashMap<>(cachedMap); if (cachedMap.isEmpty()) init(ses, tempCachedMap); else { @@ -131,12 +132,11 @@ public class VREQueryRetriever implements Callable> { } private void insertItemInTheRightPlace(Item item, Map tempCachedMap) { - long lastModifiedTime = item.getLastModificationTime().getTime().getTime(); + long lastModifiedTime = item.getLastModificationTime().getTimeInMillis(); - if (!(lastModifiedTime>higherTimestamp && tempCachedMap.size()>CACHE_DIMENSION)) { + if (tempCachedMap.size()Collections.min(tempCachedMap.values())) tempCachedMap.put(item.getId(), lastModifiedTime); - if (lastModifiedTime>higherTimestamp) higherTimestamp = lastModifiedTime; - } + } @@ -185,6 +185,8 @@ public class VREQueryRetriever implements Callable> { Item item = node2Item.getItem(nodeAdded, Excludes.ALL); if (tempCachedMap.get(event.getIdentifier())!=null) tempCachedMap.remove(event.getIdentifier()); + if (item.isHidden()) + break; insertItemInTheRightPlace(item,tempCachedMap); } } @@ -198,6 +200,8 @@ public class VREQueryRetriever implements Callable> { String identifier = property.getParent().getIdentifier(); tempCachedMap.remove(identifier); Item item = node2Item.getItem(property.getParent(), Excludes.ALL); + if (item.isHidden()) + break; insertItemInTheRightPlace(item, tempCachedMap); } } diff --git a/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java b/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java index 17d7302..aad2502 100644 --- a/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java +++ b/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java @@ -350,7 +350,7 @@ public class ItemsManager extends Impersonable{ log.debug("search for node {}",name); ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context)); 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()); }catch (ItemNotFoundException e) { log.error("id {} not found",id,e);