MNT-9050 - When Alfresco is taken out of read-only mode CIFS writes no longer work without restarting fileservers

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55395 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2013-09-17 11:03:00 +00:00
parent b462722b88
commit 500f6487d3
2 changed files with 173 additions and 108 deletions

View File

@@ -188,7 +188,26 @@ public class LegacyFileStateDriver implements ExtendedDiskInterface
} }
throw ie; throw ie;
} }
// TODO what about other throwables ? catch (RuntimeException re)
{
// we could be out of memory or a NPE or some other unforseen situation. JLAN will complain loudly ... as it should.
if(logger.isDebugEnabled())
{
logger.debug("create file exception caught", re);
}
if(tctx.hasStateCache() && token != null)
{
if(cache != null && fstate != null && token != null)
{
if(logger.isDebugEnabled())
{
logger.debug("create file release lock token:" + token);
}
cache.releaseFileAccess(fstate, token);
}
}
throw re;
}
} }
@Override @Override

View File

@@ -40,6 +40,7 @@ import org.alfresco.filesys.repo.rules.operations.RenameFileOperation;
import org.alfresco.jlan.server.SrvSession; import org.alfresco.jlan.server.SrvSession;
import org.alfresco.jlan.server.core.DeviceContext; import org.alfresco.jlan.server.core.DeviceContext;
import org.alfresco.jlan.server.core.DeviceContextException; import org.alfresco.jlan.server.core.DeviceContextException;
import org.alfresco.jlan.server.filesys.AccessDeniedException;
import org.alfresco.jlan.server.filesys.FileAction; import org.alfresco.jlan.server.filesys.FileAction;
import org.alfresco.jlan.server.filesys.FileAttribute; import org.alfresco.jlan.server.filesys.FileAttribute;
import org.alfresco.jlan.server.filesys.FileInfo; import org.alfresco.jlan.server.filesys.FileInfo;
@@ -156,6 +157,8 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
String folder = paths[0]; String folder = paths[0];
String file = paths[1]; String file = paths[1];
try
{
EvaluatorContext ctx = getEvaluatorContext(driverState, folder); EvaluatorContext ctx = getEvaluatorContext(driverState, folder);
Operation o = new CloseFileOperation(file, param, rootNode, param.getFullName(), param.hasDeleteOnClose(), param.isForce()); Operation o = new CloseFileOperation(file, param, rootNode, param.getFullName(), param.hasDeleteOnClose(), param.isForce());
@@ -164,12 +167,19 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
commandExecutor.execute(sess, tree, c); commandExecutor.execute(sess, tree, c);
releaseEvaluatorContextIfEmpty(driverState, ctx, folder); releaseEvaluatorContextIfEmpty(driverState, ctx, folder);
}
catch(org.alfresco.repo.security.permissions.AccessDeniedException ade)
{
throw new AccessDeniedException("Unable to close file " + param.getFullName(), ade);
}
} }
@Override @Override
public void createDirectory(SrvSession sess, TreeConnection tree, public void createDirectory(SrvSession sess, TreeConnection tree,
FileOpenParams params) throws IOException FileOpenParams params) throws IOException
{
try
{ {
FileFilterMode.setClient(ClientHelper.getClient(sess)); FileFilterMode.setClient(ClientHelper.getClient(sess));
try try
@@ -181,10 +191,17 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
FileFilterMode.clearClient(); FileFilterMode.clearClient();
} }
} }
catch(org.alfresco.repo.security.permissions.AccessDeniedException ade)
{
throw new AccessDeniedException("Unable to create directory " + params.getPath(), ade);
}
}
@Override @Override
public NetworkFile createFile(SrvSession sess, TreeConnection tree, public NetworkFile createFile(SrvSession sess, TreeConnection tree,
FileOpenParams params) throws IOException FileOpenParams params) throws IOException
{
try
{ {
int attr = params.getAttributes(); int attr = params.getAttributes();
if(logger.isDebugEnabled()) if(logger.isDebugEnabled())
@@ -241,15 +258,24 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
return null; return null;
} }
} }
catch(org.alfresco.repo.security.permissions.AccessDeniedException ade)
{
throw new AccessDeniedException("Unable to create file " + params.getPath(), ade);
}
}
@Override @Override
public void deleteDirectory(SrvSession sess, TreeConnection tree, String dir) public void deleteDirectory(SrvSession sess, TreeConnection tree, String dir)
throws IOException throws IOException
{ {
try
{
diskInterface.deleteDirectory(sess, tree, dir); diskInterface.deleteDirectory(sess, tree, dir);
}
catch(org.alfresco.repo.security.permissions.AccessDeniedException ade)
{
throw new AccessDeniedException("Unable to delete directory " + dir, ade);
}
} }
@Override @Override
@@ -260,7 +286,8 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
{ {
logger.debug("deleteFile name:" + name); logger.debug("deleteFile name:" + name);
} }
try
{
ContentContext tctx = (ContentContext) tree.getContext(); ContentContext tctx = (ContentContext) tree.getContext();
NodeRef rootNode = tctx.getRootNode(); NodeRef rootNode = tctx.getRootNode();
@@ -277,6 +304,11 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
commandExecutor.execute(sess, tree, c); commandExecutor.execute(sess, tree, c);
releaseEvaluatorContextIfEmpty(driverState, ctx, folder); releaseEvaluatorContextIfEmpty(driverState, ctx, folder);
}
catch(org.alfresco.repo.security.permissions.AccessDeniedException ade)
{
throw new AccessDeniedException("Unable to delete file " + name, ade);
}
} // End of deleteFile } // End of deleteFile
@@ -371,6 +403,8 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
openMode = OpenFileMode.DELETE; openMode = OpenFileMode.DELETE;
} }
try
{
Operation o = new OpenFileOperation(file, openMode, truncate, rootNode, path); Operation o = new OpenFileOperation(file, openMode, truncate, rootNode, path);
Command c = ruleEvaluator.evaluate(ctx, o); Command c = ruleEvaluator.evaluate(ctx, o);
Object ret = commandExecutor.execute(sess, tree, c); Object ret = commandExecutor.execute(sess, tree, c);
@@ -391,6 +425,11 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
logger.error("contract broken - NetworkFile not returned. " + ret == null ? "Return value is null" : ret); logger.error("contract broken - NetworkFile not returned. " + ret == null ? "Return value is null" : ret);
return null; return null;
} }
}
catch(org.alfresco.repo.security.permissions.AccessDeniedException ade)
{
throw new AccessDeniedException("Unable to open file " + param.getPath(), ade);
}
//return diskInterface.openFile(sess, tree, params); //return diskInterface.openFile(sess, tree, params);
} // End of OpenFile } // End of OpenFile
@@ -427,6 +466,8 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
String newFolder = paths[0]; String newFolder = paths[0];
String newFile = paths[1]; String newFile = paths[1];
try
{
if(oldFolder.equalsIgnoreCase(newFolder)) if(oldFolder.equalsIgnoreCase(newFolder))
{ {
logger.debug("renameFileCommand - is a rename within the same folder"); logger.debug("renameFileCommand - is a rename within the same folder");
@@ -466,6 +507,11 @@ public class NonTransactionalRuleContentDiskDriver implements ExtendedDiskInterf
// diskInterface.renameFile(sess, tree, oldPath, newPath); // diskInterface.renameFile(sess, tree, oldPath, newPath);
} }
}
catch(org.alfresco.repo.security.permissions.AccessDeniedException ade)
{
throw new AccessDeniedException("Unable to rename file file " + oldPath, ade);
}
} }