Merged V3.3-BUG-FIX to HEAD

23054: Merged BRANCHES/DEV/BELARUS/V3.3-BUG-FIX-2010_10_04 to BRANCHES/DEV/V3.3-BUG-FIX:
      23044: ALF-5112 : Bug fix for ALF-3962 is incomplete (can cause fix-up of version history to be incorrectly ordered - in case where versions have the same frozen modified date)
      - merged with some updates, eg. force unit test to exercise the fix
   23058: ALF-4379: Don't mix up email recipients for different actions


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@23059 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Dave Ward
2010-10-12 17:07:14 +00:00
parent 3c9c19ec74
commit 568086c76c
2 changed files with 55 additions and 6 deletions

View File

@@ -959,7 +959,22 @@ public class Version2ServiceImpl extends VersionServiceImpl implements VersionSe
int result = v1.getFrozenModifiedDate().compareTo(v2.getFrozenModifiedDate()); int result = v1.getFrozenModifiedDate().compareTo(v2.getFrozenModifiedDate());
if (result == 0) if (result == 0)
{ {
result = v1.getFrozenStateNodeRef().getId().compareTo(v2.getFrozenStateNodeRef().getId()); Long dbid1 = (Long)nodeService.getProperty(v1.getFrozenStateNodeRef(), ContentModel.PROP_NODE_DBID);
Long dbid2 = (Long)nodeService.getProperty(v2.getFrozenStateNodeRef(), ContentModel.PROP_NODE_DBID);
if (dbid1 != null && dbid2 != null)
{
result = dbid1.compareTo(dbid2);
}
else
{
result = 0;
if (logger.isWarnEnabled())
{
logger.warn("node-dbid property is missing for versions: " + v1.toString() + " or " + v2.toString());
}
}
} }
return result; return result;
} }

View File

@@ -33,6 +33,7 @@ import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationComponent;
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.repo.version.common.VersionUtil;
import org.alfresco.service.ServiceRegistry; import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
@@ -1167,20 +1168,37 @@ public class VersionServiceImplTest extends BaseVersionStoreTest
public void testALF_3962() public void testALF_3962()
{ {
NodeRef versionableNode = createNode(true, QName.createQName("http://www.alfresco.org/model/action/1.0", "action")); NodeRef versionableNode = createNode(true, QName.createQName("http://www.alfresco.org/model/action/1.0", "action"));
// crete some versions of content without version label policy
// create some versions of content without version label policy
createVersion(versionableNode); createVersion(versionableNode);
createVersion(versionableNode); createVersion(versionableNode);
createVersion(versionableNode); createVersion(versionableNode);
// create some more versions and force them to have same frozen modified date
Version ver = createVersion(versionableNode);
Date frozenModifiedDate = ver.getFrozenModifiedDate();
ver = createVersion(versionableNode);
NodeRef versionNodeRef = VersionUtil.convertNodeRef(ver.getFrozenStateNodeRef());
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_FROZEN_MODIFIED, frozenModifiedDate);
ver = createVersion(versionableNode);
versionNodeRef = VersionUtil.convertNodeRef(ver.getFrozenStateNodeRef());
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_FROZEN_MODIFIED, frozenModifiedDate);
// corrupt versions // corrupt versions
Collection<Version> versions = versionService.getVersionHistory(versionableNode).getAllVersions(); Collection<Version> versions = versionService.getVersionHistory(versionableNode).getAllVersions();
List<Version> oldVersions = new ArrayList<Version>(versions.size());
for (Version version : versions) for (Version version : versions)
{ {
// update version with corrupted label // update version with corrupted label
NodeRef versionNodeRef = new NodeRef(StoreRef.PROTOCOL_WORKSPACE, version.getFrozenStateNodeRef().getStoreRef().getIdentifier(), version.getFrozenStateNodeRef() versionNodeRef = VersionUtil.convertNodeRef(version.getFrozenStateNodeRef());
.getId());
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_VERSION_LABEL, "0"); this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_VERSION_LABEL, "0");
// cache results
oldVersions.add(version);
} }
this.nodeService.setProperty(versionableNode, ContentModel.PROP_VERSION_LABEL, "0"); this.nodeService.setProperty(versionableNode, ContentModel.PROP_VERSION_LABEL, "0");
@@ -1188,15 +1206,31 @@ public class VersionServiceImplTest extends BaseVersionStoreTest
versionService.createVersion(versionableNode, this.versionProperties); versionService.createVersion(versionableNode, this.versionProperties);
versions = versionService.getVersionHistory(versionableNode).getAllVersions(); versions = versionService.getVersionHistory(versionableNode).getAllVersions();
List<Version> newVersions = new ArrayList<Version>(versions.size());
for (Version version : versions) for (Version version : versions)
{ {
assertFalse(version.getVersionLabel().equals("0")); assertFalse(version.getVersionLabel().equals("0"));
newVersions.add(version);
} }
// check live node // check live node
assertFalse(this.nodeService.getProperty(versionableNode, ContentModel.PROP_VERSION_LABEL).toString().equals("0")); assertFalse(this.nodeService.getProperty(versionableNode, ContentModel.PROP_VERSION_LABEL).toString().equals("0"));
//check order
for (int i = 0; i < oldVersions.size(); i++)
{
Version oldVersion = oldVersions.get(i);
Version newVersion = newVersions.get(i + 1);
assertEquals(oldVersion.getFrozenModifiedDate(), newVersion.getFrozenModifiedDate());
assertEquals(oldVersion.getVersionLabel(), newVersion.getVersionLabel());
String nodeDbidKey = ContentModel.PROP_NODE_DBID.getLocalName();
assertEquals(oldVersion.getVersionProperty(nodeDbidKey), newVersion.getVersionProperty(nodeDbidKey));
String nodeUuidKey = ContentModel.PROP_NODE_UUID.getLocalName();
assertEquals(oldVersion.getVersionProperty(nodeUuidKey), newVersion.getVersionProperty(nodeUuidKey));
}
} }
public static void main(String ... args) public static void main(String ... args)