Odds and ends. Another CLT. Renamed an AVM stress test so that it won't run

during builds but is available for periodic checks. A sort-of-experimental
optimization of the AVM lookup cache. Minor config change for remote 
authentication.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4491 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-12-02 06:32:30 +00:00
parent b209f4c073
commit 57424368b7
5 changed files with 186 additions and 119 deletions

View File

@@ -1,116 +0,0 @@
/*
* Copyright (C) 2006 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.repo.avm;
import java.util.ArrayList;
import java.util.List;
import org.alfresco.repo.avm.util.BulkLoader;
/**
* This is a stress test for the AVM repository.
* @author britt
*/
public class AVMStressTest extends AVMServiceTestBase
{
/**
* Test N threads
*/
public void testNThreads()
{
// try
// {
// int nCopies = 1;
// int nThreads = 1;
// BulkLoader loader = new BulkLoader();
// loader.setAvmService(fService);
// long start = System.currentTimeMillis();
// for (int i = 0; i < nCopies; i++)
// {
// fService.createDirectory("main:/", "" + i);
// loader.recursiveLoad("source", "main:/" + i);
// fService.createSnapshot("main", null, null);
// }
// System.out.println("Load time: " + (System.currentTimeMillis() - start));
// List<AVMTester> testers = new ArrayList<AVMTester>();
// List<Thread> threads = new ArrayList<Thread>();
// for (int i = 0; i < nThreads; i++)
// {
// AVMTester tester
// = new AVMTester(800, // create file.
// 20, // create dir,
// 0, // rename
// 2, // create layered dir
// 5, // create layered file
// 10, // remove node
// 20, // modify file.
// 3200, // read file
// 10, // snapshot
// 1000, // # ops
// fService);
// tester.refresh();
// Thread thread = new Thread(tester);
// testers.add(tester);
// threads.add(thread);
// }
// for (Thread thread : threads)
// {
// thread.start();
// }
// int exited = 0;
// // long sampStart = System.currentTimeMillis();
// while (exited != nThreads)
// {
// try
// {
// Thread.sleep(2000);
// for (int i = 0; i < nThreads; i++)
// {
// if (threads.get(i) == null)
// {
// continue;
// }
// threads.get(i).join(1000);
// if (!threads.get(i).isAlive())
// {
// threads.set(i, null);
// if (testers.get(i).getError())
// {
// for (AVMTester tester : testers)
// {
// tester.setExit();
// }
// fail();
// }
// exited++;
// }
// }
// }
// catch (InterruptedException e)
// {
// // Do nothing.
// }
// }
// }
// catch (Exception e)
// {
// e.printStackTrace(System.err);
// fail();
// }
}
}

View File

@@ -0,0 +1,116 @@
/*
* Copyright (C) 2006 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.repo.avm;
import java.util.ArrayList;
import java.util.List;
import org.alfresco.repo.avm.util.BulkLoader;
/**
* This is a stress test for the AVM repository.
* @author britt
*/
public class AVMStressTestP extends AVMServiceTestBase
{
/**
* Test N threads
*/
public void testNThreads()
{
try
{
int nCopies = 4;
int nThreads = 2;
BulkLoader loader = new BulkLoader();
loader.setAvmService(fService);
long start = System.currentTimeMillis();
for (int i = 0; i < nCopies; i++)
{
fService.createDirectory("main:/", "" + i);
loader.recursiveLoad("source", "main:/" + i);
fService.createSnapshot("main", null, null);
}
System.out.println("Load time: " + (System.currentTimeMillis() - start));
List<AVMTester> testers = new ArrayList<AVMTester>();
List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < nThreads; i++)
{
AVMTester tester
= new AVMTester(800, // create file.
20, // create dir,
0, // rename
5, // create layered dir
5, // create layered file
10, // remove node
20, // modify file.
3200, // read file
10, // snapshot
40000, // # ops
fService);
tester.refresh();
Thread thread = new Thread(tester);
testers.add(tester);
threads.add(thread);
}
for (Thread thread : threads)
{
thread.start();
}
int exited = 0;
// long sampStart = System.currentTimeMillis();
while (exited != nThreads)
{
try
{
Thread.sleep(2000);
for (int i = 0; i < nThreads; i++)
{
if (threads.get(i) == null)
{
continue;
}
threads.get(i).join(1000);
if (!threads.get(i).isAlive())
{
threads.set(i, null);
if (testers.get(i).getError())
{
for (AVMTester tester : testers)
{
tester.setExit();
}
fail();
}
exited++;
}
}
}
catch (InterruptedException e)
{
// Do nothing.
}
}
}
catch (Exception e)
{
e.printStackTrace(System.err);
fail();
}
}
}

View File

@@ -115,11 +115,38 @@ class Lookup
fLowestLayerIndex = other.fLowestLayerIndex;
fNeedsCopying = other.fNeedsCopying;
fDirectlyContained = other.fDirectlyContained;
for (LookupComponent comp : other.fComponents)
if (fLayeredYet)
{
for (LookupComponent comp : other.fComponents)
{
LookupComponent newComp = new LookupComponent();
newComp.setName(comp.getName());
newComp.setIndirection(comp.getIndirection());
newComp.setNode(nodeDAO.getByID(comp.getNode().getId()));
if (newComp.getNode() == null)
{
fValid = false;
return;
}
fComponents.add(newComp);
}
}
else
{
// If this is not a layered lookup then we do not
// need to reload any of the actual nodes except for
// the last.
int i = 0;
for (; i < fPosition; ++i)
{
LookupComponent comp = other.fComponents.get(i);
LookupComponent newComp = new LookupComponent();
newComp.setName(comp.getName());
fComponents.add(newComp);
}
LookupComponent comp = other.fComponents.get(i);
LookupComponent newComp = new LookupComponent();
newComp.setName(comp.getName());
newComp.setIndirection(comp.getIndirection());
newComp.setNode(nodeDAO.getByID(comp.getNode().getId()));
if (newComp.getNode() == null)
{

View File

@@ -0,0 +1,40 @@
/**
*
*/
package org.alfresco.repo.avm.clt;
import java.util.List;
import java.util.Map;
/**
* @author britt
*
*/
public class AVMMkLayeredDir extends AVMCltBase
{
private static Object [] flagDefs = { };
private static String USAGE = "usage: AVMMkLayeredDir nodepath targetnodepath";
/* (non-Javadoc)
* @see org.alfresco.repo.avm.clt.AVMCltBase#run(java.util.Map, java.util.List)
*/
@Override
protected void run(Map<String, List<String>> flags, List<String> args)
{
String [] pathBase = splitPath(args.get(0));
if (pathBase.length == 1)
{
System.err.println("Cannot make a layered root directory.");
fContext.close();
System.exit(1);
}
fAVMRemote.createLayeredDirectory(args.get(1), pathBase[0], pathBase[1]);
}
public static void main(String [] args)
{
AVMMkLayeredDir me = new AVMMkLayeredDir();
me.exec(args, flagDefs, 2, USAGE);
}
}