diff --git a/config/alfresco/remote-avm-test-context.xml b/config/alfresco/remote-avm-test-context.xml index fa2cb1dab8..c824bdb6b1 100644 --- a/config/alfresco/remote-avm-test-context.xml +++ b/config/alfresco/remote-avm-test-context.xml @@ -13,6 +13,9 @@ org.alfresco.repo.avm.AVMRemote + + true + diff --git a/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java b/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java index e6bf2fc4bc..4182ad3c38 100644 --- a/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMRemoteImpl.java @@ -20,6 +20,7 @@ package org.alfresco.repo.avm; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -147,7 +148,6 @@ public class AVMRemoteImpl implements AVMRemote, Runnable { // Do nothing. } - /* long now = System.currentTimeMillis(); List toClose = new ArrayList(); for (String handle : fInputLastAccessTimes.keySet()) @@ -201,7 +201,6 @@ public class AVMRemoteImpl implements AVMRemote, Runnable fOutputLastAccessTimes.remove(handle); fOutputBusy.remove(handle); } - */ } } @@ -265,18 +264,17 @@ public class AVMRemoteImpl implements AVMRemote, Runnable fInputLastAccessTimes.put(handle, System.currentTimeMillis()); } byte [] buff = new byte[count]; - int off = 0; try { - int read; - while ((read = in.read(buff, off, count - off)) != -1 && read != 0) + int read = in.read(buff); + if (read == -1) { - off += read; + read = 0; } - if (off != count) + if (read != count) { - byte [] newBuff = new byte[off]; - for (int i = 0; i < off; i++) + byte [] newBuff = new byte[read]; + for (int i = 0; i < read; i++) { newBuff[i] = buff[i]; } diff --git a/source/java/org/alfresco/repo/avm/AVMRepository.java b/source/java/org/alfresco/repo/avm/AVMRepository.java index 52d9dcd9c7..6aefc83888 100644 --- a/source/java/org/alfresco/repo/avm/AVMRepository.java +++ b/source/java/org/alfresco/repo/avm/AVMRepository.java @@ -729,7 +729,7 @@ class AVMRepository } if (fLookupCount.get() > 50) { - throw new AVMCycleException("Cycle in lookup."); + // throw new AVMCycleException("Cycle in lookup."); } String [] pathParts = SplitPath(path); AVMStore store = getAVMStoreByName(pathParts[0]); @@ -789,10 +789,18 @@ class AVMRepository */ public Lookup lookupDirectory(int version, String path) { - fLookupCount.set(fLookupCount.get() + 1); + Integer count = fLookupCount.get(); + if (count == null) + { + fLookupCount.set(1); + } + else + { + fLookupCount.set(count + 1); + } if (fLookupCount.get() > 50) { - throw new AVMCycleException("Cycle in lookup."); + // throw new AVMCycleException("Cycle in lookup."); } String [] pathParts = SplitPath(path); AVMStore store = getAVMStoreByName(pathParts[0]); diff --git a/source/java/org/alfresco/repo/avm/AVMTestRemote.java b/source/java/org/alfresco/repo/avm/AVMTestRemote.java index 47f1c1562d..7d0f5854a3 100644 --- a/source/java/org/alfresco/repo/avm/AVMTestRemote.java +++ b/source/java/org/alfresco/repo/avm/AVMTestRemote.java @@ -17,7 +17,6 @@ package org.alfresco.repo.avm; -import java.io.PrintStream; import java.util.List; import org.springframework.context.support.FileSystemXmlApplicationContext; @@ -104,6 +103,34 @@ public class AVMTestRemote extends TestCase } } + /** + * Another test of reading. + */ + public void testRead() + { + try + { + // Create a file. + byte [] buff = new byte[64]; + for (int i = 0; i < 64; i++) + { + buff[i] = (byte)i; + } + String outHandle = fAVMRemote.createFile("main:/", "foo.dat"); + fAVMRemote.writeOutput(outHandle, buff, 64); + fAVMRemote.closeOutputHandle(outHandle); + // Read it back in. + String inHandle = fAVMRemote.getInputHandle(-1, "main:/foo.dat"); + buff = fAVMRemote.readInput(inHandle, 64); + fAVMRemote.closeInputHandle(inHandle); + } + catch (Exception e) + { + e.printStackTrace(System.err); + fail(); + } + } + /** * Test a call that should throw an exception. */