mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-01 14:41:46 +00:00
[feature/MNT-24127-EndpointToCalculateFolderSize] Addressing review comments related to calculate and retrieve folder size details
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
@@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user