From 3e148f0b2990385d9a88d51fc2d4946a80a92ad7 Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Wed, 2 Oct 2013 15:08:35 +0000 Subject: [PATCH] Fix for ALF-20185 - BM-0013: dashboard.xml already exists ERRORS in log file. - ADMRemoteStore now allows a WRITE to be converted to an UPDATE to avoid terrifying FileExistsException exceptions in the log. - Reproduced original issue with a JMeter test that creates a single user, and then that same user performs 10 simultaneous login attempts with 10 threads - Message no longer appears in log running same JMeter test after changes. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@56261 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/web/scripts/bean/ADMRemoteStore.java | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/source/java/org/alfresco/repo/web/scripts/bean/ADMRemoteStore.java b/source/java/org/alfresco/repo/web/scripts/bean/ADMRemoteStore.java index 4de0e9b3ca..78598ad581 100644 --- a/source/java/org/alfresco/repo/web/scripts/bean/ADMRemoteStore.java +++ b/source/java/org/alfresco/repo/web/scripts/bean/ADMRemoteStore.java @@ -467,17 +467,34 @@ public class ADMRemoteStore extends BaseRemoteStore try { - FileInfo fileInfo = fileFolderService.create( - parentFolderRef, encpath.substring(off + 1), ContentModel.TYPE_CONTENT); - Map aspectProperties = new HashMap(1, 1.0f); - aspectProperties.put(ContentModel.PROP_IS_INDEXED, false); - unprotNodeService.addAspect(fileInfo.getNodeRef(), ContentModel.ASPECT_INDEX_CONTROL, aspectProperties); - ContentWriter writer = contentService.getWriter( - fileInfo.getNodeRef(), ContentModel.PROP_CONTENT, true); - writer.guessMimetype(fileInfo.getName()); - writer.putContent(content); - if (logger.isDebugEnabled()) - logger.debug("createDocument: " + fileInfo.toString()); + final String name = encpath.substring(off + 1); + // existence check - convert to an UPDATE - could occur if multiple threads request + // a write to the same document - a valid possibility but rare + if (nodeService.getChildByName(parentFolderRef, ContentModel.ASSOC_CONTAINS, name) == null) + { + FileInfo fileInfo = fileFolderService.create( + parentFolderRef, name, ContentModel.TYPE_CONTENT); + Map aspectProperties = new HashMap(1, 1.0f); + aspectProperties.put(ContentModel.PROP_IS_INDEXED, false); + unprotNodeService.addAspect(fileInfo.getNodeRef(), ContentModel.ASPECT_INDEX_CONTROL, aspectProperties); + ContentWriter writer = contentService.getWriter( + fileInfo.getNodeRef(), ContentModel.PROP_CONTENT, true); + writer.guessMimetype(fileInfo.getName()); + writer.putContent(content); + if (logger.isDebugEnabled()) + logger.debug("createDocument: " + fileInfo.toString()); + } + else + { + ContentWriter writer = contentService.getWriter( + nodeService.getChildByName(parentFolderRef, ContentModel.ASSOC_CONTAINS, name), + ContentModel.PROP_CONTENT, + true); + writer.guessMimetype(name); + writer.putContent(content); + if (logger.isDebugEnabled()) + logger.debug("createDocument (updated): " + name); + } } finally {