Fix intermittent HEAD test failure (AVMCrawler -> NPE)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@17175 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2009-10-27 11:13:25 +00:00
parent f360f5fe3c
commit 1362d02f8e
3 changed files with 250 additions and 220 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2008 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -55,6 +55,16 @@ public class AVMCrawlTestP extends AVMServiceTestBase
30000); // 30 secs
}
/*
public void xtestCrawlC()
{
testCrawl(10,
"source/java/org/alfresco/repo/avm", // relative from .../repository
2,
60000); // 1 min
}
*/
/*
public void xtestCrawlZ()
{

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2008 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -39,9 +39,12 @@ import net.sf.acegisecurity.Authentication;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.avm.AVMException;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMNotFoundException;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.avm.AVMStoreDescriptor;
import org.alfresco.service.cmr.repository.ContentIOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
@@ -50,6 +53,8 @@ import org.alfresco.service.cmr.repository.ContentIOException;
*/
class AVMCrawler implements Runnable
{
private static Log logger = LogFactory.getLog(AVMCrawler.class);
/**
* The AVMService to use.
*/
@@ -158,7 +163,7 @@ class AVMCrawler implements Runnable
if (reps.size() == 0)
{
System.out.println("No AVM stores");
logger.warn("No AVM stores");
return;
}
@@ -177,7 +182,7 @@ class AVMCrawler implements Runnable
if (dirs.size() == 0)
{
System.out.println("No dirs in root: "+repDesc.getName() + ":/");
logger.warn("No dirs in root: "+repDesc.getName() + ":/");
}
else
{
@@ -205,20 +210,25 @@ class AVMCrawler implements Runnable
{
for (int i = 0; i < 6; i++)
{
String path = files.get(fRandom.nextInt(files.size())).getPath();
logger.info("Reading: " + path);
BufferedReader
reader = new BufferedReader
(new InputStreamReader
(fService.getFileInputStream(-1, files.get(fRandom.nextInt(files.size())).getPath())));
(fService.getFileInputStream(-1, path)));
fOpCount++;
String line = reader.readLine();
System.out.println(line);
if (logger.isDebugEnabled())
{
logger.debug(line);
}
reader.close();
}
// Modify some files.
for (int i = 0; i < 2; i++)
{
String path = files.get(fRandom.nextInt(files.size())).getPath();
System.out.println("Modifying: " + path);
logger.info("Modifying: " + path);
PrintStream out = new PrintStream(fService.getFileOutputStream(path));
out.println("I am " + path);
out.close();
@@ -235,7 +245,7 @@ class AVMCrawler implements Runnable
{
break;
}
System.out.println("Creating File: " + name);
logger.info("Creating File: " + name);
fService.createFile(dir.getPath(), name,
new ByteArrayInputStream(("I am " + name).getBytes()));
fOpCount++;
@@ -249,7 +259,7 @@ class AVMCrawler implements Runnable
{
break;
}
System.out.println("Creating Directory: " + name);
logger.info("Creating Directory: " + name);
fService.createDirectory(dir.getPath(), name);
fOpCount++;
}
@@ -260,7 +270,7 @@ class AVMCrawler implements Runnable
{
List<String> names = new ArrayList<String>(listing.keySet());
String name = names.get(fRandom.nextInt(names.size()));
System.out.println("Removing: " + name);
logger.info("Removing: " + name);
fService.removeNode(dir.getPath(),
name);
fOpCount++;
@@ -280,13 +290,18 @@ class AVMCrawler implements Runnable
if (fRandom.nextInt(16) == 0)
{
System.out.println("Snapshotting: " + repDesc.getName());
logger.info("Snapshotting: " + repDesc.getName());
fService.createSnapshot(repDesc.getName(), null, null);
fOpCount++;
}
}
catch (Exception e)
{
if (e instanceof AVMNotFoundException)
{
logger.info(e.getMessage());
return;
}
e.printStackTrace(System.err);
if (e instanceof AVMException)
{
@@ -320,5 +335,3 @@ class AVMCrawler implements Runnable
return fOpCount;
}
}

View File

@@ -34,6 +34,7 @@ import org.alfresco.repo.avm.ChildEntryImpl;
import org.alfresco.repo.avm.ChildKey;
import org.alfresco.repo.avm.DirectoryNode;
import org.alfresco.repo.domain.avm.AVMChildEntryEntity;
import org.springframework.dao.ConcurrencyFailureException;
/**
* iBATIS DAO wrapper for ChildEntry
@@ -147,9 +148,12 @@ class ChildEntryDAOIbatis implements ChildEntryDAO
AVMNode childNode = AVMDAOs.Instance().fAVMNodeDAO.getByID(childEntryEntity.getChildId());
if (childNode == null)
{
throw new ConcurrencyFailureException("Child node (" + childEntryEntity.getParentNodeId() + ", " + childEntryEntity.getChildId() + ") no longer exists");
}
ChildEntry ce = new ChildEntryImpl(new ChildKey(parentNode, childEntryEntity.getName()), childNode);
ce.setKey(new ChildKey(parentNode, childEntryEntity.getName()));
ce.setChild(childNode);
return ce;
}
@@ -162,9 +166,12 @@ class ChildEntryDAOIbatis implements ChildEntryDAO
DirectoryNode parentNode = (DirectoryNode)AVMDAOs.Instance().fAVMNodeDAO.getByID(childEntryEntity.getParentNodeId());
if (parentNode == null)
{
throw new ConcurrencyFailureException("Parent node (" + childEntryEntity.getParentNodeId() + ", " + childEntryEntity.getChildId() + ") no longer exists");
}
ChildEntry ce = new ChildEntryImpl(new ChildKey(parentNode, childEntryEntity.getName()), childNode);
ce.setKey(new ChildKey(parentNode, childEntryEntity.getName()));
ce.setChild(childNode);
return ce;
}
}