Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud)

68535: Merged V4.2-BUG-FIX (4.2.3) to HEAD-BUG-FIX (4.3/Cloud)
      68313: Merged V4.1-BUG-FIX (4.1.9) to V4.2-BUG-FIX (4.2.3)
         68271: MNT-11348: Merged V4.1.1 (4.1.1.28) to V4.1-BUG-FIX (4.1.9)
            67447: MNT-11057: Bug in replication process on Aliens.
            Ignore a node that has no invadedBy property value (has no  alien aspect).
            Implemented unit-test.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@70415 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2014-05-16 16:34:47 +00:00
parent c74100a1fa
commit ca174bab71
2 changed files with 160 additions and 5 deletions

View File

@@ -153,8 +153,9 @@ public class AlienProcessorImpl implements AlienProcessor
public void beforeDeleteAlien(NodeRef deletedNodeRef, ChildAssociationRef oldAssoc)
{
log.debug("before delete node - need to check for alien invaders");
List<String>stuff = (List<String>)nodeService.getProperty(deletedNodeRef, TransferModel.PROP_INVADED_BY);
List<String>stuff = (List<String>)nodeService.getProperty(deletedNodeRef, TransferModel.PROP_INVADED_BY);
if (stuff == null) return;
Vector<String> exInvaders = new Vector<String>(stuff);
/**

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2013 Alfresco Software Limited.
* Copyright (C) 2009-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -1289,6 +1289,150 @@ public class RepoTransferReceiverImplTest extends BaseAlfrescoSpringTest
}
}
/**
* Test for fault raised as MNT-11057
* (https://issues.alfresco.com/jira/browse/MNT-11057) Bug in replication process on Aliens.
*
* @throws Exception
*/
public void testMNT11057() throws Exception
{
String folder1Name = "H1";
String folder2Name = "H2";
String folder3Name = "H3";
//Step 1 transfer from repo A (H1 -> H2)
setDefaultRollback(true);
startNewTransaction();
String transferIdA1 = receiver.start("transferFromRepoA1", true, receiver.getVersion());
TransferManifestNormalNode folder1A1 = createFolderNode(transferIdA1, folder1Name);
TransferManifestNormalNode folder2A1 = createFolderNode(transferIdA1, folder2Name);
TransferManifestNormalNode folder3A1 = createFolderNode(transferIdA1, folder3Name);
moveNode(folder2A1, folder1A1);
List<TransferManifestNode> nodesA1 = new ArrayList<TransferManifestNode>();
nodesA1.add(folder1A1);
nodesA1.add(folder2A1);
endTransaction();
this.setDefaultRollback(false);
startNewTransaction();
try
{
String snapshot = createSnapshot(nodesA1, "repo A");
log.debug(snapshot);
receiver.saveSnapshot(transferIdA1, new StringInputStream(snapshot, "UTF-8"));
for (TransferManifestNode node : nodesA1)
{
receiver.saveContent(transferIdA1, node.getUuid(), new ByteArrayInputStream(dummyContentBytes));
}
receiver.commit(transferIdA1);
for (TransferManifestNode node : nodesA1)
{
assertTrue(nodeService.exists(node.getNodeRef()));
}
}
finally
{
receiver.end(transferIdA1);
endTransaction();
}
//Step 2 trasfer from repo B (H1 -> H3)
setDefaultRollback(true);
startNewTransaction();
String transferIdB1 = receiver.start("transferFromRepoB1", true, receiver.getVersion());
TransferManifestNormalNode folder1B1 = createFolderNode(transferIdB1, folder1Name);
TransferManifestNormalNode folder3B1 = createFolderNode(transferIdB1, folder3Name);
moveNode(folder3B1, folder1B1);
List<TransferManifestNode> nodesB1 = new ArrayList<TransferManifestNode>();
nodesB1.add(folder1B1);
nodesB1.add(folder3B1);
endTransaction();
this.setDefaultRollback(false);
startNewTransaction();
try
{
String snapshot = createSnapshot(nodesB1, "repo B");
log.debug(snapshot);
receiver.saveSnapshot(transferIdB1, new StringInputStream(snapshot, "UTF-8"));
for (TransferManifestNode node : nodesB1)
{
receiver.saveContent(transferIdB1, node.getUuid(), new ByteArrayInputStream(dummyContentBytes));
}
receiver.commit(transferIdB1);
}
finally
{
receiver.end(transferIdB1);
endTransaction();
}
assertTrue(nodeService.exists(folder1A1.getNodeRef()));
log.info("has Alien");
log.info(nodeService.hasAspect(folder1A1.getNodeRef(), TransferModel.ASPECT_ALIEN));
assertTrue(nodeService.exists(folder2A1.getNodeRef()));
log.info("has Alien");
assertFalse(nodeService.hasAspect(folder2A1.getNodeRef(), TransferModel.ASPECT_ALIEN));
assertFalse(nodeService.exists(folder1B1.getNodeRef()));
assertTrue(nodeService.exists(folder3B1.getNodeRef()));
log.info("has Alien");
assertTrue(nodeService.hasAspect(folder3B1.getNodeRef(), TransferModel.ASPECT_ALIEN));
startNewTransaction();
moveNode(folder3A1, folder1A1);
moveNode(folder2A1, folder3A1);
nodesA1 = new ArrayList<TransferManifestNode>();
nodesA1.add(folder1A1);
nodesA1.add(folder3A1);
nodesA1.add(folder2A1);
endTransaction();
//Step 3 transfer from repo A again (H2 is moved to newly created H3 on A: H1 -> H3 -> H2)
startNewTransaction();
try
{
String transferId = receiver.start("transferFromRepoA1Again", true, receiver.getVersion());
String snapshot = createSnapshot(nodesA1, "repo A");
log.debug(snapshot);
receiver.saveSnapshot(transferId, new StringInputStream(snapshot, "UTF-8"));
receiver.commit(transferId);
}
catch(Exception ex)
{
if(ex instanceof NullPointerException)
{
fail("Test of MNT-11057 failed: " + ex.getMessage());
}
}
finally
{
endTransaction();
}
}
public void testAsyncCommit() throws Exception
@@ -1458,6 +1602,11 @@ public class RepoTransferReceiverImplTest extends BaseAlfrescoSpringTest
}
private String createSnapshot(List<TransferManifestNode> nodes) throws Exception
{
return createSnapshot(nodes, "repo 1");
}
private String createSnapshot(List<TransferManifestNode> nodes, String repoID) throws Exception
{
XMLTransferManifestWriter manifestWriter = new XMLTransferManifestWriter();
StringWriter output = new StringWriter();
@@ -1465,7 +1614,7 @@ public class RepoTransferReceiverImplTest extends BaseAlfrescoSpringTest
TransferManifestHeader header = new TransferManifestHeader();
header.setCreatedDate(new Date());
header.setNodeCount(nodes.size());
header.setRepositoryId("repo 1");
header.setRepositoryId(repoID);
manifestWriter.writeTransferManifestHeader(header);
for (TransferManifestNode node : nodes)
{
@@ -1517,6 +1666,11 @@ public class RepoTransferReceiverImplTest extends BaseAlfrescoSpringTest
}
private TransferManifestNormalNode createFolderNode(/*String transferId*/) throws Exception
{
return createFolderNode(transferId, null);
}
private TransferManifestNormalNode createFolderNode(String transferId, String folderName) throws Exception
{
TransferManifestNormalNode node = new TransferManifestNormalNode();
String uuid = GUID.generate();
@@ -1535,7 +1689,7 @@ public class RepoTransferReceiverImplTest extends BaseAlfrescoSpringTest
NodeRef guestHome = guestHomeResult.getNodeRef(0);
NodeRef parentFolder = guestHome;
String nodeName = uuid + ".folder" + getNameSuffix();
String nodeName = folderName == null ? uuid + ".folder" + getNameSuffix() : folderName;
List<ChildAssociationRef> parents = new ArrayList<ChildAssociationRef>();
ChildAssociationRef primaryAssoc = new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, parentFolder, QName