Fix for concurrency bug found last night, as best as I can tell so far.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4558 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-12-08 03:48:08 +00:00
parent 6ecb0c5728
commit df81a1e14a
4 changed files with 12 additions and 19 deletions

View File

@@ -35,9 +35,9 @@ public class AVMCrawlTestP extends AVMServiceTestBase
*/ */
public void testCrawl() public void testCrawl()
{ {
int n = 2; // Number of Threads. int n = 8; // Number of Threads.
int m = 4; // How many multiples of content to start with. int m = 32; // How many multiples of content to start with.
long runTime = 600000; // 5 minutes long runTime = 21600000; // 6 hours.
fService.purgeAVMStore("main"); fService.purgeAVMStore("main");
BulkLoader loader = new BulkLoader(); BulkLoader loader = new BulkLoader();
loader.setAvmService(fService); loader.setAvmService(fService);

View File

@@ -284,16 +284,12 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
ChildEntry existing = AVMDAOs.Instance().fChildEntryDAO.get(key); ChildEntry existing = AVMDAOs.Instance().fChildEntryDAO.get(key);
if (existing != null) if (existing != null)
{ {
existing.setChild(node); AVMDAOs.Instance().fChildEntryDAO.delete(existing);
AVMDAOs.Instance().fChildEntryDAO.update(existing);
} }
else
{
ChildEntry entry = new ChildEntryImpl(key, node); ChildEntry entry = new ChildEntryImpl(key, node);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
AVMDAOs.Instance().fChildEntryDAO.save(entry); AVMDAOs.Instance().fChildEntryDAO.save(entry);
} }
}
/** /**

View File

@@ -257,16 +257,12 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
ChildEntry existing = AVMDAOs.Instance().fChildEntryDAO.get(key); ChildEntry existing = AVMDAOs.Instance().fChildEntryDAO.get(key);
if (existing != null) if (existing != null)
{ {
existing.setChild(node); AVMDAOs.Instance().fChildEntryDAO.delete(existing);
AVMDAOs.Instance().fChildEntryDAO.update(existing);
} }
else
{
ChildEntry entry = new ChildEntryImpl(key, node); ChildEntry entry = new ChildEntryImpl(key, node);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
AVMDAOs.Instance().fChildEntryDAO.save(entry); AVMDAOs.Instance().fChildEntryDAO.save(entry);
} }
}
/** /**
* Copy on write logic. * Copy on write logic.

View File

@@ -136,6 +136,7 @@ public class SimpleAVMSubmitAction extends ActionExecuterAbstractBase
fAVMSyncService.update(diffs, fExcluder, false, false, true, true, fAVMSyncService.update(diffs, fExcluder, false, false, true, true,
"Submit of item: " + AVMNodeConverter.SplitBase(path)[1], null); "Submit of item: " + AVMNodeConverter.SplitBase(path)[1], null);
// Cleanup by flattening the source relative to the destination. // Cleanup by flattening the source relative to the destination.
// This is an ugliness to prevent database write misorderings in flatten.
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
fAVMSyncService.flatten(storePath[0] + ":/appBase", websiteName + "-staging:/appBase"); fAVMSyncService.flatten(storePath[0] + ":/appBase", websiteName + "-staging:/appBase");
} }