From 91e39c8fd60c65326bc365fcc09044e00069784a Mon Sep 17 00:00:00 2001 From: Britt Park Date: Thu, 22 Jun 2006 00:49:10 +0000 Subject: [PATCH] Some minor cleanups. Added a few missing operations to console. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3182 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/avm/AVMInteractiveConsole.java | 59 +++++++++++++++++++ .../java/org/alfresco/repo/avm/AVMNode.java | 2 +- .../org/alfresco/repo/avm/AVMStressTest.java | 16 ++--- .../repo/avm/LayeredDirectoryNodeImpl.java | 6 +- .../repo/avm/LayeredFileNodeImpl.java | 2 +- source/java/org/alfresco/repo/avm/Lookup.java | 12 ++-- .../repo/avm/PlainDirectoryNodeImpl.java | 7 +-- .../alfresco/repo/avm/PlainFileNodeImpl.java | 6 +- 8 files changed, 77 insertions(+), 33 deletions(-) diff --git a/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java b/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java index 81ee7a3ff6..9243360721 100644 --- a/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java +++ b/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java @@ -94,6 +94,7 @@ public class AVMInteractiveConsole while (!done) { String command[] = null; + System.out.print("> "); try { String line = fIn.readLine(); @@ -113,6 +114,7 @@ public class AVMInteractiveConsole { continue; } + long start = System.currentTimeMillis(); try { if (command[0].equals("ls")) @@ -131,6 +133,17 @@ public class AVMInteractiveConsole System.out.println(name + " " + listing.get(name)); } } + else if (command[0].equals("lsr")) + { + if (command.length != 3) + { + System.err.println("Syntax error."); + continue; + } + AVMNodeDescriptor desc = fService.lookup(Integer.parseInt(command[2]), + command[1]); + recursiveList(desc, 0); + } else if (command[0].equals("lsrep")) { List repos = fService.getRepositoryNames(); @@ -179,6 +192,15 @@ public class AVMInteractiveConsole } fService.createDirectory(command[1], command[2]); } + else if (command[0].equals("mkbr")) + { + if (command.length != 5) + { + System.err.println("Syntax error."); + continue; + } + fService.createBranch(Integer.parseInt(command[4]), command[1], command[2], command[3]); + } else if (command[0].equals("mkldir")) { if (command.length != 4) @@ -188,6 +210,24 @@ public class AVMInteractiveConsole } fService.createLayeredDirectory(command[1], command[2], command[3]); } + else if (command[0].equals("retarget")) + { + if (command.length != 3) + { + System.err.println("Syntax error."); + continue; + } + fService.retargetLayeredDirectory(command[1], command[2]); + } + else if (command[0].equals("mkprimary")) + { + if (command.length != 2) + { + System.err.println("Syntax error."); + continue; + } + fService.makePrimary(command[1]); + } else if (command[0].equals("mklfile")) { if (command.length != 4) @@ -351,9 +391,28 @@ public class AVMInteractiveConsole { e.printStackTrace(System.err); } + System.out.println("Time: " + (System.currentTimeMillis() - start)); } fReaper.shutDown(); } + + private void recursiveList(AVMNodeDescriptor dir, int indent) + { + Map listing = fService.getDirectoryListing(dir); + for (String name : listing.keySet()) + { + AVMNodeDescriptor child = listing.get(name); + for (int i = 0; i < indent; i++) + { + System.out.print(' '); + } + System.out.println(name + " " + child); + if (child.isDirectory()) + { + recursiveList(child, indent + 2); + } + } + } } diff --git a/source/java/org/alfresco/repo/avm/AVMNode.java b/source/java/org/alfresco/repo/avm/AVMNode.java index a3953dfa97..d1db9d4cf2 100644 --- a/source/java/org/alfresco/repo/avm/AVMNode.java +++ b/source/java/org/alfresco/repo/avm/AVMNode.java @@ -63,7 +63,7 @@ interface AVMNode * @param lPath The Lookup for this node. * @return A copy of ourself or null if no copy was necessary. */ - public AVMNode possiblyCopy(Lookup lPath); + public AVMNode copy(Lookup lPath); /** * Set the repository for a node. diff --git a/source/java/org/alfresco/repo/avm/AVMStressTest.java b/source/java/org/alfresco/repo/avm/AVMStressTest.java index 1e2948681d..074d0a3a35 100644 --- a/source/java/org/alfresco/repo/avm/AVMStressTest.java +++ b/source/java/org/alfresco/repo/avm/AVMStressTest.java @@ -35,9 +35,11 @@ public class AVMStressTest extends AVMServiceTestBase { try { + int nCopies = 1; + int nThreads = 16; BulkLoader loader = new BulkLoader(fService); long start = System.currentTimeMillis(); - for (int i = 0; i < 1; i++) + for (int i = 0; i < nCopies; i++) { fService.createDirectory("main:/", "" + i); loader.recursiveLoad("source", "main:/" + i); @@ -46,17 +48,17 @@ public class AVMStressTest extends AVMServiceTestBase System.out.println("Load time: " + (System.currentTimeMillis() - start)); List testers = new ArrayList(); List threads = new ArrayList(); - for (int i = 0; i < 8; i++) + for (int i = 0; i < nThreads; i++) { AVMTester tester - = new AVMTester(400, // create file. - 10, // create dir, + = new AVMTester(800, // create file. + 20, // create dir, 0, // rename 2, // create layered dir 5, // create layered file 10, // remove node 20, // modify file. - 3600, // read file + 3200, // read file 10, // snapshot 10000, // # ops fService, @@ -74,12 +76,12 @@ public class AVMStressTest extends AVMServiceTestBase thread.start(); } int exited = 0; - while (exited != 8) + while (exited != nThreads) { try { Thread.sleep(2000); - for (int i = 0; i < 8; i++) + for (int i = 0; i < nThreads; i++) { if (threads.get(i) == null) { diff --git a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java index 41336e0280..d5259901cc 100644 --- a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java @@ -226,12 +226,8 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec * @param lPath * @return The copy or null. */ - public AVMNodeImpl possiblyCopy(Lookup lPath) + public AVMNode copy(Lookup lPath) { - if (!lPath.needsCopying()) - { - return null; - } // Capture the repository. Repository repo = lPath.getRepository(); // Otherwise we do an actual copy. diff --git a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java index 9a4a6eeebf..1504b9a012 100644 --- a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java @@ -66,7 +66,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode * Copy on write logic. * @param lPath The path by which this was found. */ - public AVMNode possiblyCopy(Lookup lPath) + public AVMNode copy(Lookup lPath) { // LayeredFileNodes are always copied. Lookup lookup = SuperRepository.GetInstance().lookup(-1, fIndirection); diff --git a/source/java/org/alfresco/repo/avm/Lookup.java b/source/java/org/alfresco/repo/avm/Lookup.java index a1013d17cb..fc5e508a76 100644 --- a/source/java/org/alfresco/repo/avm/Lookup.java +++ b/source/java/org/alfresco/repo/avm/Lookup.java @@ -153,20 +153,15 @@ class Lookup fComponents.add(comp); fPosition++; // If we are in a write context do copy on write. - if (write) + if (write && fNeedsCopying) { - // Possibly copy. - node = node.possiblyCopy(this); - if (node == null) - { - return; - } - // Node was copied. + node = node.copy(this); fComponents.get(fPosition).setNode(node); if (fPosition == 0) { // Inform the repository of a new root. fRepository.setNewRoot((DirectoryNode)node); + SuperRepository.GetInstance().getSession().flush(); return; } // Not the root. Check if we are the top layer and insert this into it's parent. @@ -175,6 +170,7 @@ class Lookup fTopLayer = (LayeredDirectoryNode)node; } ((DirectoryNode)fComponents.get(fPosition - 1).getNode()).putChild(name, node); + SuperRepository.GetInstance().getSession().flush(); } } diff --git a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java index 7b36c1d8e9..b9c1f2fbef 100644 --- a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java @@ -202,13 +202,8 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory * @param lPath The lookup path. * @return */ - public AVMNode possiblyCopy(Lookup lPath) + public AVMNode copy(Lookup lPath) { - if (!lPath.needsCopying()) - { - return null; - } - // Otherwise do an actual copy. DirectoryNode newMe = null; // In a layered context a copy on write creates a new // layered directory. diff --git a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java index 9441b23194..265f18c40e 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java @@ -84,12 +84,8 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode * Copy on write logic. * @param lPath The lookup path. */ - public AVMNodeImpl possiblyCopy(Lookup lPath) + public AVMNode copy(Lookup lPath) { - if (!lPath.needsCopying()) - { - return null; - } PlainFileNodeImpl newMe = new PlainFileNodeImpl(this, lPath.getRepository()); newMe.setAncestor(this); return newMe;