mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Merged V2.1 to HEAD
6609: Portlet UI (doclist, myspaces, mytasks) updates following design review 6610: AR-1270 6611: debugging WCM-778. 6612: Improved API documentation. 6613: Added store lookup cache to EHCache config for default and extended cluster sample 6614: AWC-1531 and AWC-1146. Link objects that have targets which the user does not have access to are now filtered from the view. 6615: AR-1664: Bootstraping from full export fails if file names differs only with a space: my file, my file 6616: Fixed AR-1519: Possible duplicate entries when moving nodes between stores 6617: Removed deprecated aspects; Added emailed aspect to messages; Added OOo command line options 6618: Fix for AWC-1350 6619: Fix for AWC-1509 6620: AWC-1179: Searching for users in Invite User Wizard is slow with large number of users 6621: Changed shutdown logic to avoid classloader cleanup race. 6622: Fix for AWC-1533 (can't save office docs to Company Home) 6623: Fix for AR-1705 6624: Better fix for AWC-1256 (links generated by tinyMCE editor) 6625: Fixed AR-1713: Transformers that do nothing don't break full text indexing 6626: Fixed AWC-1438: Added explcit TXT to PDF converter that wraps the PDFBox TextToPDF class 6627: Portlet templates now handle missing description property on web form 6628: Fix WCM-788 6635: Make workflow available for users who cannot see company home Resolved conflicted state of 'root\projects\repository\source\java\org\alfresco\repo\workflow\jbpm\JBPMEngine.java' git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6748 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -39,7 +39,6 @@ import org.alfresco.repo.node.StoreArchiveMap;
|
||||
import org.alfresco.repo.node.archive.RestoreNodeReport.RestoreStatus;
|
||||
import org.alfresco.repo.node.integrity.IntegrityChecker;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
@@ -622,8 +621,6 @@ public class ArchiveAndRestoreTest extends TestCase
|
||||
*/
|
||||
public void testPermissionsForRestore() throws Exception
|
||||
{
|
||||
|
||||
|
||||
// user A deletes 'a'
|
||||
authenticationService.authenticate(USER_A, USER_A.toCharArray());
|
||||
nodeService.deleteNode(a);
|
||||
@@ -653,4 +650,53 @@ public class ArchiveAndRestoreTest extends TestCase
|
||||
RestoreNodeReport report = nodeArchiveService.restoreArchivedNode(b_);
|
||||
assertEquals("Expected permission denied status", RestoreStatus.FAILURE_PERMISSION, report.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that the existence of the node in the archive store doesn't prevent archival.
|
||||
* It is possible to restore a node to the SpacesStore from some other source. When
|
||||
* that node is archived, the currently archived node must be overwritten.
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testAR1519ArchiveCleansDuplicateUuid() throws Exception
|
||||
{
|
||||
// Delete the child node
|
||||
nodeService.deleteNode(b);
|
||||
verifyNodeExistence(b_, true);
|
||||
// Delete the original parent node
|
||||
nodeService.deleteNode(a);
|
||||
verifyNodeExistence(a_, true);
|
||||
// Now recreate a and b (they have been separated in the archive store)
|
||||
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
|
||||
props.put(ContentModel.PROP_NODE_UUID, a.getId());
|
||||
NodeRef aRecreated = nodeService.createNode(
|
||||
workStoreRootNodeRef,
|
||||
ContentModel.ASSOC_CHILDREN,
|
||||
ContentModel.ASSOC_CHILDREN,
|
||||
ContentModel.TYPE_CONTENT,
|
||||
props).getChildRef();
|
||||
assertEquals("NodeRef for recreated node should be the same as the original", a, aRecreated);
|
||||
props.put(ContentModel.PROP_NODE_UUID, b.getId());
|
||||
NodeRef bRecreated = nodeService.createNode(
|
||||
a,
|
||||
ContentModel.ASSOC_CHILDREN,
|
||||
ContentModel.ASSOC_CHILDREN,
|
||||
ContentModel.TYPE_CONTENT,
|
||||
props).getChildRef();
|
||||
assertEquals("NodeRef for recreated node should be the same as the original", b, bRecreated);
|
||||
|
||||
// Check existence
|
||||
verifyNodeExistence(a, true);
|
||||
verifyNodeExistence(b, true);
|
||||
verifyNodeExistence(a_, true);
|
||||
verifyNodeExistence(b_, true);
|
||||
|
||||
// Now check that the parent a can be deleted and the conflict is handled
|
||||
nodeService.deleteNode(a);
|
||||
|
||||
// Check existence
|
||||
verifyNodeExistence(a, false);
|
||||
verifyNodeExistence(b, false);
|
||||
verifyNodeExistence(a_, true);
|
||||
verifyNodeExistence(b_, true);
|
||||
}
|
||||
}
|
||||
|
@@ -1713,6 +1713,19 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
||||
// move each node into the archive store
|
||||
for (NodeStatus oldNodeStatus : nodeStatusesById.values())
|
||||
{
|
||||
// Check if the target node (node in the store) is already there
|
||||
NodeRef targetStoreNodeRef = new NodeRef(store.getStoreRef(), oldNodeStatus.getKey().getGuid());
|
||||
if (exists(targetStoreNodeRef))
|
||||
{
|
||||
// It is there already. It must be an archive of an earlier version, so just wipe it out
|
||||
Node archivedNode = getNodeNotNull(targetStoreNodeRef);
|
||||
nodeDaoService.deleteNode(archivedNode, true);
|
||||
// We need to flush here as the node deletion may not take effect before the node creation
|
||||
// is done. As this will only occur during a clash, it is not going to add extra overhead
|
||||
// to the general system performance.
|
||||
nodeDaoService.flush();
|
||||
}
|
||||
|
||||
Node nodeToMove = oldNodeStatus.getNode();
|
||||
NodeRef oldNodeRef = nodeToMove.getNodeRef();
|
||||
nodeToMove.setStore(store);
|
||||
|
@@ -27,6 +27,7 @@ package org.alfresco.repo.node.index;
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.repo.search.AVMSnapShotTriggeredIndexingMethodInterceptor;
|
||||
import org.alfresco.repo.search.IndexMode;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.service.cmr.avm.AVMStoreDescriptor;
|
||||
@@ -64,9 +65,8 @@ public class AVMRemoteSnapshotTracker extends AbstractReindexComponent
|
||||
}
|
||||
|
||||
/**
|
||||
* Loop throught the avm stores and compare the latest snapshot to that in the index.
|
||||
* Update the index if it has fallen behind.
|
||||
*
|
||||
* Loop throught the avm stores and compare the latest snapshot to that in the index. Update the index if it has
|
||||
* fallen behind.
|
||||
*/
|
||||
private void processStores()
|
||||
{
|
||||
@@ -86,21 +86,25 @@ public class AVMRemoteSnapshotTracker extends AbstractReindexComponent
|
||||
{
|
||||
break;
|
||||
}
|
||||
int current = avmService.getLatestSnapshotID(store.getName());
|
||||
int lastIndexed = avmSnapShotTriggeredIndexingMethodInterceptor.getLastIndexedSnapshot(store.getName());
|
||||
|
||||
if (lastIndexed < current)
|
||||
if (avmSnapShotTriggeredIndexingMethodInterceptor.getIndexMode(store.getName()) != IndexMode.UNINDEXED)
|
||||
{
|
||||
if(logger.isDebugEnabled())
|
||||
int current = avmService.getLatestSnapshotID(store.getName());
|
||||
int lastIndexed = avmSnapShotTriggeredIndexingMethodInterceptor.getLastIndexedSnapshot(store.getName());
|
||||
|
||||
if (lastIndexed < current)
|
||||
{
|
||||
logger.debug("Updating index for store "+store.getName()+" from snapshot "+lastIndexed+ " to "+current);
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Updating index for store " + store.getName() + " from snapshot " + lastIndexed + " to " + current);
|
||||
}
|
||||
recoverSnapShot(store.getName(), lastIndexed, current);
|
||||
upToDate = false;
|
||||
}
|
||||
recoverSnapShot(store.getName(), lastIndexed, current);
|
||||
upToDate = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
while(!upToDate);
|
||||
while (!upToDate);
|
||||
|
||||
}
|
||||
|
||||
@@ -118,7 +122,7 @@ public class AVMRemoteSnapshotTracker extends AbstractReindexComponent
|
||||
{
|
||||
public Object execute() throws Exception
|
||||
{
|
||||
if(lastIndexed == -1)
|
||||
if (lastIndexed == -1)
|
||||
{
|
||||
avmSnapShotTriggeredIndexingMethodInterceptor.createIndex(store);
|
||||
}
|
||||
|
Reference in New Issue
Block a user