Merged BRANCHES/DEV/V4.0-BUG-FIX to HEAD:

36723: Fix for ALF-13885: "Bulk Import Tool silently ignores constraint failures"

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@36727 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Steven Glover
2012-05-22 15:05:36 +00:00
parent 51015d7d4d
commit 6e6cd1e11b
4 changed files with 70 additions and 19 deletions

View File

@@ -29,7 +29,6 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.bulkimport.BulkFSImportEvent;
import org.alfresco.repo.bulkimport.BulkFilesystemImporter;
import org.alfresco.repo.bulkimport.BulkImportParameters;
@@ -406,9 +405,8 @@ public abstract class AbstractBulkFilesystemImporter implements BulkFilesystemIm
}
catch(Throwable e)
{
logger.error("Bulk import from '" + getFileName(sourceFolder) + "' failed.", e);
importStatus.stopImport(e);
throw new AlfrescoRuntimeException("Bulk filesystem import failed", e);
throw e;
}
finally
{

View File

@@ -29,6 +29,9 @@ import java.io.StringWriter;
import java.util.Date;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.bulkimport.BulkImportStatus;
@@ -96,9 +99,16 @@ public class BulkImportStatusImpl implements BulkImportStatus
private AtomicLong numberOfContentVersionBytesWritten = new AtomicLong();
private AtomicLong numberOfContentVersionPropertiesWritten = new AtomicLong();
private ReadLock readLock;
private WriteLock writeLock;
public BulkImportStatusImpl()
{
inProgress.set(false);
ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
this.readLock = lock.readLock();
this.writeLock = lock.writeLock();
}
// General information
@@ -145,27 +155,43 @@ public class BulkImportStatusImpl implements BulkImportStatus
public Throwable getLastException()
{
return(lastException);
readLock.lock();
try
{
return(lastException);
}
finally
{
readLock.unlock();
}
}
public String getLastExceptionAsString()
{
String result = null;
if (lastException != null)
readLock.lock();
try
{
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
lastException.printStackTrace(pw);
pw.flush();
sw.flush();
result = sw.toString();
}
return(result);
if (lastException != null)
{
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
lastException.printStackTrace(pw);
pw.flush();
sw.flush();
result = sw.toString();
}
return(result);
}
finally
{
readLock.unlock();
}
}
public boolean inProgress()
@@ -249,7 +275,22 @@ public class BulkImportStatusImpl implements BulkImportStatus
public void stopImport(final Throwable lastException)
{
stopImport();
this.lastException = lastException;
writeLock.lock();
try
{
this.lastException = lastException;
}
finally
{
writeLock.unlock();
}
}
public synchronized void reportException(final Throwable exception)
{
stopImport();
this.lastException = exception;
}
// Read-side information

View File

@@ -32,6 +32,7 @@ import org.alfresco.repo.bulkimport.BulkImportParameters;
import org.alfresco.repo.bulkimport.FilesystemTracker;
import org.alfresco.repo.bulkimport.ImportableItem;
import org.alfresco.repo.bulkimport.NodeImporter;
import org.alfresco.repo.node.integrity.IntegrityException;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.repository.NodeRef;
import org.apache.commons.logging.Log;
@@ -106,6 +107,12 @@ public abstract class MultiThreadedBulkFilesystemImporter extends AbstractBulkFi
public void process(final ImportableItem importableItem) throws Throwable
{
if(importStatus.getLastException() != null)
{
// bail out early if an exception occurs
return;
}
try
{
behaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE);

View File

@@ -26,6 +26,7 @@ package org.alfresco.repo.bulkimport.impl;
import java.io.File;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.batch.BatchProcessor;
import org.alfresco.repo.bulkimport.BulkImportParameters;
import org.alfresco.repo.bulkimport.ImportableItem;
@@ -61,6 +62,10 @@ public class StripingBulkFilesystemImporter extends MultiThreadedBulkFilesystemI
do
{
batchProcessor.process(worker, true);
if(batchProcessor.getLastError() != null)
{
throw new AlfrescoRuntimeException(batchProcessor.getLastError());
}
}
while(tracker.moreLevels());
}