mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Merged PATCHES/V3.2.r to HEAD
19546: (RECORD ONLY) Merged V3.2 to PATCHES/V3.2.r 19432: Merged V3.1 to V3.2 19427: Merged V3.0 to V3.1 19423: Merged V2.2 to V3.0 19391: Fix for ALF-2076: AUTO does not work if a document has been added and deleted since the index backup 19419: V2.2 Build Fix 19421: Fix for ALF-2076: AUTO does not work if a document has been added and deleted since the index backup 19463: Merged V3.1 to V3.2 19459: Merged V3.0 to V3.1 19457: Merged V2.2 to V3.0 19449: Addition Fix for ALF-2076: AUTO does not work if a document has been added and deleted since the index backup 19493 Merged V3.1 to V3.2 19471: Build fix after changes for ALF-2076 were merged forward. Index checker correctly understands INDETERMINATE state of indexed transactions 19547: (RECORD ONLY) Incremented version label 19555: (RECORD ONLY) Merged V3.2 to PATCHES/V3.2.r 19552: Merged V3.1 to V3.2 19551: Further fix after changes for ALF-2076 were merged forward. Final fix to check for InIndex.No 19566: (RECORD ONLY) Merged V3.2 to PATCHES/V3.2.r 19539: Merged HEAD to V3.2 19538: ALF-2076: Build fix - fix build speed 19802: (RECORD ONLY) ALF-2382, ALF-2383: Merged V3.2 to PATCHES/V3.2.r 19647: ALF-2231: Merged DEV/BELARUS/V2.2-2009_12_01 to V3.2 17704: ENH-681: alfresco webdav does not respect webdav locks 19624: ALF-2231: Merged DEV/BELARUS/V2.2-2009_12_01 to V3.2 17704: ENH-681: alfresco webdav does not respect webdav locks 19623: ALF-1890: Correction to previous checkin to allow defaulting of request body charset 19617: ALF-1890: Improvements to make ALL WebDAV methods retryable - Solution from PutMethod promoted to request wrapper that will handle ALL calls to getInputStream and getReader 19614: ALF-1890: Merged V2.2 to V3.2 17709: Merged DEV_TEMPORARY to V2.2 17700: ETWOTWO-1393: concurrent writes to webdav lead to data loss (0kb resulting file) 19613: Merged DEV/BELARUS/V2.2-2010_02_03 to V2.2 19157: ALF-1890: concurrent writes to webdav lead to data loss (0kb resulting file) 19803: ALF-558: File servers (CIFS / FTP / NFS) can now handle concurrent write operations on Alfresco repository - ContentDiskDriver / AVMDiskDriver now use retrying transactions for write operations - Disable EagerContentStoreCleaner on ContentDiskDriver / AVMDiskDriver closeFile() operations so that they may be retried after rollback (Sony zero byte problem) - Allow manual association of AVM ContentData with nodes so that closeFile() may be retried - Propagation of new argument through AVM interfaces 19804: (RECORD ONLY) Merged PATCHES/V3.2.0 to PATCHES/V3.2.r Merged HEAD to V3.2.0 19786: Refactor of previous test fix. I have pushed down the OOo-specific parts of the change from AbstractContentTransformerTest to OpenOfficeContentTransformerTest leaving an extension point in the base class should other transformations need to be excluded in the future. 19785: Fix for failing test OpenOfficeContentTransformerTest.testAllConversions. Various OOo-related transformations are returned as available but fail on our test server with OOo on it. Pending further work on these failings, I am disabling those transformations in test code whilst leaving them available in the product code. This is because in the wild a different OOo version may succeed with these transformations. I had previously explicitly disabled 3 transformations in the product and I am moving that restriction from product to test code for the same reason. 19707: Return value from isTransformationBlocked was inverted. Fixed now. 19705: Refinement of previous check-in re OOo transformations. I have pulled up the code that handles blocked transformations into a superclass so that the JodConverter-based transformer worker can inherit the same list of blocked transformations. To reiterate, blocked transformations are those that the OOo integration code believes should work but which are broken in practice. These are blocked by the transformers and will always be unavailable regardless of the OOo connection state. 19702: Fix for HEAD builds running on panda build server. OOo was recently installed on panda which has activated various OOo-related transformations/extractions in the test code. It appears that OOo does not support some transformations from Office 97 to Office 2007. Specifically doc to docx and xls to xlsx. These transformations have now been marked as unavailable. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@20004 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -25,13 +25,23 @@ import java.nio.channels.FileChannel;
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.filesys.alfresco.AlfrescoNetworkFile;
|
||||
import org.alfresco.jlan.server.filesys.AccessDeniedException;
|
||||
import org.alfresco.jlan.server.filesys.DiskFullException;
|
||||
import org.alfresco.jlan.server.filesys.FileAttribute;
|
||||
import org.alfresco.jlan.server.filesys.NetworkFile;
|
||||
import org.alfresco.jlan.smb.SeekType;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||
import org.alfresco.repo.transaction.TransactionListenerAdapter;
|
||||
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.service.cmr.repository.ContentData;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.usage.ContentQuotaException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
@@ -48,6 +58,10 @@ public class AVMNetworkFile extends AlfrescoNetworkFile {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(AVMNetworkFile.class);
|
||||
|
||||
// Node Service
|
||||
|
||||
private NodeService m_nodeService;
|
||||
|
||||
// AVM service
|
||||
|
||||
private AVMService m_avmService;
|
||||
@@ -64,6 +78,8 @@ public class AVMNetworkFile extends AlfrescoNetworkFile {
|
||||
// Access to the file data, flag to indicate if the file channel is writable
|
||||
|
||||
private FileChannel m_channel;
|
||||
private ContentWriter m_content;
|
||||
|
||||
private boolean m_writable;
|
||||
|
||||
// Mime type, if a writer is opened
|
||||
@@ -76,14 +92,16 @@ public class AVMNetworkFile extends AlfrescoNetworkFile {
|
||||
* @param details AVMNodeDescriptor
|
||||
* @param avmPath String
|
||||
* @param avmVersion int
|
||||
* @param nodeService NodeService
|
||||
* @param avmService AVMService
|
||||
*/
|
||||
public AVMNetworkFile( AVMNodeDescriptor details, String avmPath, int avmVersion, AVMService avmService)
|
||||
public AVMNetworkFile( AVMNodeDescriptor details, String avmPath, int avmVersion, NodeService nodeService, AVMService avmService)
|
||||
{
|
||||
super( details.getName());
|
||||
|
||||
// Save the service, apth and version
|
||||
|
||||
m_nodeService = nodeService;
|
||||
m_avmService = avmService;
|
||||
m_avmPath = avmPath;
|
||||
m_avmVersion = avmVersion;
|
||||
@@ -337,20 +355,59 @@ public class AVMNetworkFile extends AlfrescoNetworkFile {
|
||||
{
|
||||
// If the file is a directory or the file channel has not been opened then there is nothing to do
|
||||
|
||||
if ( isDirectory() || m_channel == null)
|
||||
if ( isDirectory() || m_channel == null && m_content == null)
|
||||
return;
|
||||
|
||||
// Close the file channel
|
||||
|
||||
try
|
||||
{
|
||||
m_channel.close();
|
||||
m_channel = null;
|
||||
}
|
||||
catch ( IOException ex)
|
||||
{
|
||||
logger.error("Failed to close file channel for " + getName(), ex);
|
||||
}
|
||||
// We may be in a retry block, in which case this section will already have executed and channel will be null
|
||||
if (m_channel != null)
|
||||
{
|
||||
// Close the file channel
|
||||
|
||||
try
|
||||
{
|
||||
m_channel.close();
|
||||
m_channel = null;
|
||||
}
|
||||
catch ( IOException ex)
|
||||
{
|
||||
if (RetryingTransactionHelper.extractRetryCause(ex) != null)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
logger.error("Failed to close file channel for " + getName(), ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (m_content != null)
|
||||
{
|
||||
// Retrieve the content data and stop the content URL from being 'eagerly deleted', in case we need to
|
||||
// retry the transaction
|
||||
|
||||
final ContentData contentData = m_content.getContentData();
|
||||
contentData.reference();
|
||||
|
||||
try
|
||||
{
|
||||
NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, m_avmPath);
|
||||
m_nodeService.setProperty(nodeRef, ContentModel.PROP_CONTENT, contentData);
|
||||
}
|
||||
catch (ContentQuotaException qe)
|
||||
{
|
||||
throw new DiskFullException(qe.getMessage());
|
||||
}
|
||||
|
||||
// Tidy up after ourselves after a successful commit. Otherwise leave things to allow a
|
||||
AlfrescoTransactionSupport.bindListener(new TransactionListenerAdapter()
|
||||
{
|
||||
@Override
|
||||
public void afterCommit()
|
||||
{
|
||||
m_content = null;
|
||||
contentData.deReference();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -412,21 +469,21 @@ public class AVMNetworkFile extends AlfrescoNetworkFile {
|
||||
|
||||
// Access the content data and get a file channel to the data
|
||||
|
||||
if ( write)
|
||||
if ( write )
|
||||
{
|
||||
// Access the content data for write
|
||||
|
||||
ContentWriter cWriter = null;
|
||||
m_content = null;
|
||||
|
||||
try {
|
||||
|
||||
// Create a writer to access the file data
|
||||
|
||||
cWriter = m_avmService.getContentWriter( m_avmPath);
|
||||
m_content = m_avmService.getContentWriter(m_avmPath, false);
|
||||
|
||||
// Set the mime-type
|
||||
|
||||
cWriter.setMimetype( getMimeType());
|
||||
m_content.setMimetype( getMimeType());
|
||||
}
|
||||
catch (Exception ex) {
|
||||
logger.debug( ex);
|
||||
@@ -439,7 +496,7 @@ public class AVMNetworkFile extends AlfrescoNetworkFile {
|
||||
|
||||
// Get the writable channel, do not copy existing content data if the file is to be truncated
|
||||
|
||||
m_channel = cWriter.getFileChannel( trunc);
|
||||
m_channel = m_content.getFileChannel( trunc);
|
||||
|
||||
// Reset the file position to match the read-only file channel position, unless we truncated the file
|
||||
|
||||
|
Reference in New Issue
Block a user