[feature/MNT-24127-EndpointToCalculateFolderSize] Addressing review comments related to calculate and retrieve folder size details

This commit is contained in:
mohit-singh4
2024-09-20 15:45:14 +05:30
parent 1048c431c0
commit 681b0efbcb
8 changed files with 47 additions and 37 deletions

View File

@@ -25,7 +25,7 @@
*/ */
package org.alfresco.rest.api; package org.alfresco.rest.api;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
public interface SizeDetails public interface SizeDetails
{ {

View File

@@ -25,13 +25,10 @@
*/ */
package org.alfresco.rest.api.impl; package org.alfresco.rest.api.impl;
import java.io.Serializable;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.cache.SimpleCache; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsService;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsService; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS;
import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.api.SizeDetails; import org.alfresco.rest.api.SizeDetails;
import org.alfresco.rest.framework.core.exceptions.InvalidNodeTypeException; import org.alfresco.rest.framework.core.exceptions.InvalidNodeTypeException;
@@ -45,7 +42,6 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
{ {
private Nodes nodes; private Nodes nodes;
private NodeRef nodeRef; private NodeRef nodeRef;
private SimpleCache<Serializable, NodeSizeDetails> simpleCache;
private NodeSizeDetailsService nodeSizeDetailsService; private NodeSizeDetailsService nodeSizeDetailsService;
public void setNodes(Nodes nodes) public void setNodes(Nodes nodes)
@@ -67,13 +63,13 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
nodeRef = nodes.validateOrLookupNode(nodeId); nodeRef = nodes.validateOrLookupNode(nodeId);
validateType(nodeRef); validateType(nodeRef);
String actionId; String actionId;
if (!simpleCache.contains(nodeId)) if (!nodeSizeDetailsService.checkSizeDetailsExist(nodeId))
{ {
actionId = executeSizeDetails(); actionId = executeSizeDetails();
} }
else else
{ {
NodeSizeDetails nodeSizeDetails = simpleCache.get(nodeId); NodeSizeDetails nodeSizeDetails = nodeSizeDetailsService.getSizeDetailsFromCache(nodeId);
actionId = nodeSizeDetails.getJobId(); actionId = nodeSizeDetails.getJobId();
} }
return new NodeSizeDetails(null, null, actionId, null); return new NodeSizeDetails(null, null, actionId, null);
@@ -88,14 +84,14 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
NodeRef nodeRef = nodes.validateOrLookupNode(nodeId); NodeRef nodeRef = nodes.validateOrLookupNode(nodeId);
validateType(nodeRef); validateType(nodeRef);
if (!simpleCache.contains(nodeId)) if (!nodeSizeDetailsService.checkSizeDetailsExist(nodeId))
{ {
NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeId, null, null, STATUS.NOT_INITIATED); NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeId, null, null, STATUS.NOT_INITIATED);
return nodeSizeDetails; return nodeSizeDetails;
} }
else else
{ {
NodeSizeDetails nodeSizeDetails = simpleCache.get(nodeId); NodeSizeDetails nodeSizeDetails = nodeSizeDetailsService.getSizeDetailsFromCache(nodeId);
String cachedJobId = nodeSizeDetails.getJobId(); String cachedJobId = nodeSizeDetails.getJobId();
if (cachedJobId != null && !jobId.equalsIgnoreCase(cachedJobId)) if (cachedJobId != null && !jobId.equalsIgnoreCase(cachedJobId))
{ {
@@ -103,7 +99,7 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
} }
} }
return simpleCache.get(nodeId); return nodeSizeDetailsService.getSizeDetailsFromCache(nodeId);
} }
/** /**
@@ -114,7 +110,7 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
String jobId = GUID.generate(); String jobId = GUID.generate();
nodeSizeDetailsService.invokeSizeDetailsExecutor(nodeRef, jobId); nodeSizeDetailsService.invokeSizeDetailsExecutor(nodeRef, jobId);
NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeRef.getId(), null, jobId, STATUS.PENDING); NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeRef.getId(), null, jobId, STATUS.PENDING);
simpleCache.put(nodeRef.getId(), nodeSizeDetails); nodeSizeDetailsService.putSizeDetailsInCache(nodeRef.getId(), nodeSizeDetails);
return jobId; return jobId;
} }
@@ -131,7 +127,6 @@ public class SizeDetailsImpl implements SizeDetails, InitializingBean
{ {
ParameterCheck.mandatory("nodes", this.nodes); ParameterCheck.mandatory("nodes", this.nodes);
ParameterCheck.mandatory("nodeSizeDetailsServiceImpl", this.nodeSizeDetailsService); ParameterCheck.mandatory("nodeSizeDetailsServiceImpl", this.nodeSizeDetailsService);
this.simpleCache = nodeSizeDetailsService.getSimpleCache();
} }
} }

View File

@@ -28,7 +28,7 @@ package org.alfresco.rest.api.nodes;
import java.util.List; import java.util.List;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
import org.alfresco.rest.api.SizeDetails; import org.alfresco.rest.api.SizeDetails;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;

View File

@@ -35,8 +35,8 @@ import java.util.concurrent.ThreadPoolExecutor;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.cache.SimpleCache; import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.api.model.Node; import org.alfresco.rest.api.model.Node;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -54,6 +54,8 @@ public class SizeDetailsImplTest
private static final QName TYPE_FOLDER = QName.createQName(NAMESPACE, "folder"); private static final QName TYPE_FOLDER = QName.createQName(NAMESPACE, "folder");
private SizeDetailsImpl sizeDetailsImpl; private SizeDetailsImpl sizeDetailsImpl;
private Nodes nodes; private Nodes nodes;
private NodeSizeDetailsServiceImpl nodeSizeDetailsServiceImpl;
private NodeSizeDetails nodeSizeDetails;
@Before @Before
public void setUp() throws Exception public void setUp() throws Exception
@@ -61,19 +63,18 @@ public class SizeDetailsImplTest
sizeDetailsImpl = new SizeDetailsImpl(); sizeDetailsImpl = new SizeDetailsImpl();
nodes = mock(Nodes.class); nodes = mock(Nodes.class);
SearchService searchService = mock(SearchService.class); SearchService searchService = mock(SearchService.class);
NodeSizeDetailsServiceImpl nodeSizeDetailsServiceImpl = mock(NodeSizeDetailsServiceImpl.class); nodeSizeDetailsServiceImpl = mock(NodeSizeDetailsServiceImpl.class);
ThreadPoolExecutor threadPoolExecutor = mock(ThreadPoolExecutor.class); ThreadPoolExecutor threadPoolExecutor = mock(ThreadPoolExecutor.class);
SimpleCache<Serializable, NodeSizeDetails> simpleCache = mock(SimpleCache.class); SimpleCache<Serializable, NodeSizeDetails> simpleCache = mock(SimpleCache.class);
nodeSizeDetails = mock(NodeSizeDetails.class);
nodeSizeDetailsServiceImpl.setSearchService(searchService); nodeSizeDetailsServiceImpl.setSearchService(searchService);
nodeSizeDetailsServiceImpl.setDefaultItems(1000); nodeSizeDetailsServiceImpl.setDefaultItems(1000);
nodeSizeDetailsServiceImpl.setSimpleCache(simpleCache); nodeSizeDetailsServiceImpl.setSimpleCache(simpleCache);
verify(nodeSizeDetailsServiceImpl).setSimpleCache(simpleCache);
nodeSizeDetailsServiceImpl.setThreadPoolExecutor(threadPoolExecutor); nodeSizeDetailsServiceImpl.setThreadPoolExecutor(threadPoolExecutor);
sizeDetailsImpl.setNodes(nodes); sizeDetailsImpl.setNodes(nodes);
sizeDetailsImpl.setNodeSizeDetailsService(nodeSizeDetailsServiceImpl); sizeDetailsImpl.setNodeSizeDetailsService(nodeSizeDetailsServiceImpl);
when(nodeSizeDetailsServiceImpl.getSimpleCache()).thenReturn(simpleCache);
sizeDetailsImpl.afterPropertiesSet();
verify(nodeSizeDetailsServiceImpl).setSimpleCache(simpleCache);
} }
@Test @Test
@@ -93,6 +94,7 @@ public class SizeDetailsImplTest
when(nodes.validateOrLookupNode(nodeId)).thenReturn(nodeRef); when(nodes.validateOrLookupNode(nodeId)).thenReturn(nodeRef);
when(nodes.isSubClass(nodeRef, ContentModel.TYPE_FOLDER, false)).thenReturn(true); when(nodes.isSubClass(nodeRef, ContentModel.TYPE_FOLDER, false)).thenReturn(true);
when(nodeSizeDetailsServiceImpl.getSizeDetailsFromCache(nodeId)).thenReturn(nodeSizeDetails);
NodeSizeDetails requestSizeDetails = sizeDetailsImpl.generateNodeSizeDetailsRequest(nodeId); NodeSizeDetails requestSizeDetails = sizeDetailsImpl.generateNodeSizeDetailsRequest(nodeId);
assertNotNull("After executing POST/size-details, it will provide with 202 status code", requestSizeDetails); assertNotNull("After executing POST/size-details, it will provide with 202 status code", requestSizeDetails);

View File

@@ -34,7 +34,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.api.model.Site; import org.alfresco.rest.api.model.Site;
import org.alfresco.rest.api.tests.client.HttpResponse; import org.alfresco.rest.api.tests.client.HttpResponse;

View File

@@ -23,18 +23,19 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L% * #L%
*/ */
package org.alfresco.repo.node.sizeDetails; package org.alfresco.repo.node.sizedetails;
import java.io.Serializable; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
public interface NodeSizeDetailsService public interface NodeSizeDetailsService
{ {
void invokeSizeDetailsExecutor(NodeRef nodeRef, String jobId); void invokeSizeDetailsExecutor(NodeRef nodeRef, String jobId);
SimpleCache<Serializable, NodeSizeDetails> getSimpleCache(); void putSizeDetailsInCache(String id, NodeSizeDetails NodeSizeDetails);
NodeSizeDetails getSizeDetailsFromCache(String id);
boolean checkSizeDetailsExist(String id);
} }

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L% * #L%
*/ */
package org.alfresco.repo.node.sizeDetails; package org.alfresco.repo.node.sizedetails;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -32,7 +32,7 @@ import java.util.Objects;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import org.alfresco.repo.cache.SimpleCache; import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS; import org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl.NodeSizeDetails.STATUS;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -70,9 +70,15 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
} }
@Override @Override
public SimpleCache<Serializable, NodeSizeDetails> getSimpleCache() public NodeSizeDetails getSizeDetailsFromCache(String id)
{ {
return simpleCache; return simpleCache.get(id);
}
@Override
public boolean checkSizeDetailsExist(String id)
{
return simpleCache.contains(id);
} }
public void setSimpleCache(SimpleCache<Serializable, NodeSizeDetails> simpleCache) public void setSimpleCache(SimpleCache<Serializable, NodeSizeDetails> simpleCache)
@@ -109,6 +115,12 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
} }
@Override
public void putSizeDetailsInCache(String id, NodeSizeDetails nodeSizeDetails)
{
simpleCache.put(id, nodeSizeDetails);
}
private void executeSizeCalculation(NodeRef nodeRef, String jobId) private void executeSizeCalculation(NodeRef nodeRef, String jobId)
{ {
RetryingTransactionCallback<NodeSizeDetails> executionCallback = () -> { RetryingTransactionCallback<NodeSizeDetails> executionCallback = () -> {
@@ -126,7 +138,7 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
threadPoolExecutor.execute(() -> { threadPoolExecutor.execute(() -> {
NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeRef.getId(), null, jobId, STATUS.IN_PROGRESS); NodeSizeDetails nodeSizeDetails = new NodeSizeDetails(nodeRef.getId(), null, jobId, STATUS.IN_PROGRESS);
simpleCache.put(nodeRef.getId(), nodeSizeDetails); putSizeDetailsInCache(nodeRef.getId(), nodeSizeDetails);
try try
{ {
@@ -141,7 +153,7 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
} }
finally finally
{ {
simpleCache.put(nodeRef.getId(), nodeSizeDetails); putSizeDetailsInCache(nodeRef.getId(), nodeSizeDetails);
AuthenticationUtil.clearCurrentSecurityContext(); AuthenticationUtil.clearCurrentSecurityContext();
} }
}); });

View File

@@ -344,7 +344,7 @@
</property> </property>
</bean> </bean>
<bean id="NodeSizeDetailsServiceImpl" class="org.alfresco.repo.node.sizeDetails.NodeSizeDetailsServiceImpl"> <bean id="NodeSizeDetailsServiceImpl" class="org.alfresco.repo.node.sizedetails.NodeSizeDetailsServiceImpl">
<property name="searchService" ref="SearchService"/> <property name="searchService" ref="SearchService"/>
<property name="simpleCache" ref="folderSizeSharedCache" /> <property name="simpleCache" ref="folderSizeSharedCache" />
<property name="transactionService" ref="transactionService"/> <property name="transactionService" ref="transactionService"/>
@@ -360,7 +360,7 @@
</property> </property>
<property name="proxyInterfaces"> <property name="proxyInterfaces">
<list> <list>
<value>org.alfresco.repo.node.sizeDetails.NodeSizeDetailsService</value> <value>org.alfresco.repo.node.sizedetails.NodeSizeDetailsService</value>
</list> </list>
</property> </property>
</bean> </bean>