You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/03/30 11:27:29 UTC
svn commit: r929053 - in
/incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository:
ObjGenApp.java ObjectGenerator.java TimeLogger.java
Author: jens
Date: Tue Mar 30 09:27:29 2010
New Revision: 929053
URL: http://svn.apache.org/viewvc?rev=929053&view=rev
Log:
CMIS-183
Add option to cleanup after create
Add option to pass a root folder id used for creation
Add delete timings if cleaned up
Improve output report
Modified:
incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjGenApp.java
incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjectGenerator.java
incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/TimeLogger.java
Modified: incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjGenApp.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjGenApp.java?rev=929053&r1=929052&r2=929053&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjGenApp.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjGenApp.java Tue Mar 30 09:27:29 2010
@@ -61,12 +61,16 @@ public class ObjGenApp {
private final static String FILLER_CONTENT_SIZE = "ContentSizeInKB";
private final static String COUNT = "Count";
private final static String BINDING = "Binding";
+ private final static String CLEANUP = "Cleanup";
+ private final static String ROOTFOLDER = "RootFolder";
+
private final static String BINDING_ATOM = "AtomPub";
private final static String BINDING_WS = "WebService";
private CmisProvider fProvider;
private boolean fUsingAtom;
private String fUrlStr;
+ private boolean fDoCleanup;
OptionSpec<String> fCmd;
OptionSpec<Integer> fDepth;
@@ -78,6 +82,9 @@ public class ObjGenApp {
OptionSpec<String> fRepoId;
OptionSpec<Integer> fCount;
OptionSpec<String> fBinding;
+ OptionSpec<Boolean> fCleanup;
+ OptionSpec<String> fRootFolder;
+
public static void main(String[] args) {
@@ -121,7 +128,11 @@ public class ObjGenApp {
.describedAs("Repeat a command n times (not yet implemented)");
fBinding = parser.accepts(BINDING).withOptionalArg().ofType(String.class).defaultsTo(BINDING_ATOM)
.describedAs("Protocol Binding: " + BINDING_ATOM + " or " + BINDING_WS);
-
+ fCleanup = parser.accepts(CLEANUP).withOptionalArg().ofType(Boolean.class).defaultsTo(false)
+ .describedAs("Clean all created objects at the end");
+ fRootFolder = parser.accepts(ROOTFOLDER).withOptionalArg().ofType(String.class)
+ .describedAs("folder id used as root to create objects (default repository root folder)");
+
OptionSet options = parser.parse(args);
if (options.valueOf(fCmd) == null || options.has("?"))
@@ -139,6 +150,8 @@ public class ObjGenApp {
return;
}
+ fDoCleanup = options.valueOf(fCleanup);
+
if (options.valueOf(fCmd).equals("FillRepository")) {
fillRepository(options);
} else if (options.valueOf(fCmd).equals("CreateDocument")) {
@@ -189,34 +202,9 @@ public class ObjGenApp {
}
}
- private void fillRepository(OptionSet options) {
- if (fUsingAtom)
- System.out.println("Connecting to " + getAtomPubUrl());
- else
- System.out.println("Connecting to " + getWsUrl());
-
- System.out.println("Filling repository " + options.valueOf(fRepoId)
- + " with following arguments:");
- System.out.println("Documents per folder: " + options.valueOf(fDocsPerFolder));
- System.out.println("Folder per folder: " + options.valueOf(fFolderPerFolder));
- System.out.println("Depth: " + options.valueOf(fDepth));
- System.out.println("Content size: " + options.valueOf(fContentSize));
- System.out.println("Document Type: " + options.valueOf(fDocType));
- System.out.println("Folder Type: " + options.valueOf(fFolderType));
-
- try {
- fillRepository(options.valueOf(fRepoId), options.valueOf(fDocsPerFolder), options
- .valueOf(fFolderPerFolder), options.valueOf(fDepth), options.valueOf(fDocType), options
- .valueOf(fFolderType), options.valueOf(fContentSize));
- }
- catch (Exception e) {
- System.out.println("Filling repository failed with exception: " + e);
- e.printStackTrace();
- }
- }
private void fillRepository(String repoId, int docsPerFolder, int foldersPerFolders, int depth,
- String documentType, String folderType, int contentSizeInKB) {
+ String documentType, String folderType, int contentSizeInKB, String rootFolderId) {
ProviderObjectFactory objectFactory = getObjectFactory();
NavigationService navSvc = getProvider().getNavigationService();
@@ -232,29 +220,59 @@ public class ObjGenApp {
gen.setFolderTypeId(folderType);
// Set contentSize
gen.setContentSizeInKB(contentSizeInKB);
- // Simulate a runtime context with configuration parameters
- // Attach the CallContext to a thread local context that can be accessed from everywhere
+ gen.setCleanUpAfterCreate(fDoCleanup);
// Build the tree
RepositoryInfoData rep = repSvc.getRepositoryInfo(repoId, null);
- String rootFolderId = rep.getRootFolderId();
+ if (null == rootFolderId || rootFolderId.length() == 0)
+ rootFolderId = rep.getRootFolderId();
gen.resetCounters();
gen.createFolderHierachy(depth, foldersPerFolders, rootFolderId);
+ System.out.println();
+ System.out.println("Result:");
System.out.println("Filling repository succeeded.");
+ System.out.println("Folder used as root for creation (null=rootFolderId): " + rootFolderId);
System.out.println("Number of documents created: " + gen.getDocumentsInTotal());
System.out.println("Number of folders created: " + gen.getFoldersInTotal());
gen.printTimings();
}
+ private void printParameters(OptionSet options) {
+ if (fUsingAtom)
+ System.out.println("Connecting to " + getAtomPubUrl());
+ else
+ System.out.println("Connecting to " + getWsUrl());
+
+ System.out.println("Repository id is: " + options.valueOf(fRepoId));
+ System.out.println("Content size: " + options.valueOf(fContentSize));
+ System.out.println("Document Type: " + options.valueOf(fDocType));
+ System.out.println("Folder used as root: " + options.valueOf(fRootFolder));
+ System.out.println("Delete all objects after creation: " + fDoCleanup);
+ }
+
private void createSingleDocument(OptionSet options) {
- System.out.println("Connecting to " + getAtomPubUrl());
- System.out.println("Creating doc in repository " + options.valueOf(fRepoId));
+ System.out.println();
+ System.out.println("Creating document with parameters:");
+ printParameters(options);
+ createSingleDocument(options.valueOf(fRepoId), options.valueOf(fContentSize), options.valueOf(fRootFolder));
+ }
+
+ private void fillRepository(OptionSet options) {
+ System.out.println();
+ System.out.println("Creating object tree with folowing parameters: ");
+ System.out.println("Documents per folder: " + options.valueOf(fDocsPerFolder));
+ System.out.println("Folder per folder: " + options.valueOf(fFolderPerFolder));
+ System.out.println("Depth: " + options.valueOf(fDepth));
+ System.out.println("Folder Type: " + options.valueOf(fFolderType));
+ printParameters(options);
- createSingleDocument(options.valueOf(fRepoId), options.valueOf(fContentSize));
+ fillRepository(options.valueOf(fRepoId), options.valueOf(fDocsPerFolder), options
+ .valueOf(fFolderPerFolder), options.valueOf(fDepth), options.valueOf(fDocType), options
+ .valueOf(fFolderType), options.valueOf(fContentSize), options.valueOf(fRootFolder));
}
- private void createSingleDocument(String repoId, int contentSizeInKB) {
+ private void createSingleDocument(String repoId, int contentSizeInKB, String rootFolderId) {
ProviderObjectFactory objectFactory = getObjectFactory();
NavigationService navSvc = getProvider().getNavigationService();
@@ -266,31 +284,37 @@ public class ObjGenApp {
RepositoryInfoData rep = repSvc.getRepositoryInfo(repoId, null);
timeLogger.stop();
timeLogger.printTimes();
- String rootFolderId = rep.getRootFolderId();
+ if (null == rootFolderId || rootFolderId.length() == 0)
+ rootFolderId = rep.getRootFolderId();
gen.setContentSizeInKB(contentSizeInKB);
gen.setUseUuidsForNames(true);
- gen.createSingleDocument(rootFolderId);
+ gen.setCleanUpAfterCreate(fDoCleanup);
+ String id = gen.createSingleDocument(rootFolderId);
+ System.out.println();
+ System.out.println("Result:");
System.out.println("Document creation succeeded.");
+ System.out.println("Folder used as root for creation: " + rootFolderId);
+ System.out.println("Id of created document: " + id);
gen.printTimings();
-
gen.resetCounters();
}
- private void callRepoInfo(String repositoryId) {
+ private void callRepoInfo(String repositoryId, int count) {
RepositoryService repSvc = getProvider().getRepositoryService();
TimeLogger timeLogger = new TimeLogger("RepoInfoTest");
- int n = 5;
- for (int i = 0; i < n; i++) {
+ RepositoryInfoData repoInfo = null;
+ for (int i = 0; i < count; i++) {
fProvider.clearRepositoryCache(repositoryId);
timeLogger.start();
- repSvc.getRepositoryInfo(repositoryId, null);
+ repoInfo = repSvc.getRepositoryInfo(repositoryId, null);
timeLogger.stop();
}
+ System.out.println("Root Folder id is: " + (repoInfo==null ? "<unknown>" : repoInfo.getRootFolderId()) );
timeLogger.printTimes();
}
private void repositoryInfo(OptionSet options) {
- callRepoInfo(options.valueOf(fRepoId));
+ callRepoInfo(options.valueOf(fRepoId), options.valueOf(fCount));
}
private ProviderObjectFactory getObjectFactory() {
Modified: incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjectGenerator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjectGenerator.java?rev=929053&r1=929052&r2=929053&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjectGenerator.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/ObjectGenerator.java Tue Mar 30 09:27:29 2010
@@ -35,6 +35,7 @@ import org.apache.opencmis.commons.Prope
import org.apache.opencmis.commons.api.ExtensionsData;
import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.enums.UnfileObjects;
import org.apache.opencmis.commons.enums.VersioningState;
import org.apache.opencmis.commons.impl.dataobjects.ContentStreamDataImpl;
import org.apache.opencmis.commons.provider.AccessControlList;
@@ -64,8 +65,11 @@ public class ObjectGenerator {
private String fRepositoryId;
private TimeLogger fTimeLoggerCreateDoc;
private TimeLogger fTimeLoggerCreateFolder;
+ private TimeLogger fTimeLoggerDelete;
+ private boolean fCleanup;
+ List<String> fTopLevelDocsCreated; // list of ids created on first level
+ List<String> fTopLevelFoldersCreated; // list of ids created on first level
-
/**
* Indicates if / how many documents are created in each folder
*/
@@ -135,6 +139,10 @@ public class ObjectGenerator {
fUseUuids = false;
fTimeLoggerCreateDoc = new TimeLogger("createDocument()");
fTimeLoggerCreateFolder = new TimeLogger("createFolder()");
+ fTimeLoggerDelete = new TimeLogger("Delete");
+ fCleanup = false;
+ fTopLevelDocsCreated = new ArrayList<String>();
+ fTopLevelFoldersCreated = new ArrayList<String>();
}
public void setNumberOfDocumentsToCreatePerFolder(int noDocumentsToCreate) {
@@ -161,11 +169,19 @@ public class ObjectGenerator {
fContentSizeInK = sizeInK;
}
+ public void setCleanUpAfterCreate(boolean doCleanup) {
+ fCleanup = doCleanup;
+ }
+
public void createFolderHierachy(int levels, int childrenPerLevel, String rootFolderId) {
resetCounters();
fTimeLoggerCreateDoc.reset();
fTimeLoggerCreateFolder.reset();
+ fTopLevelFoldersCreated.clear();
+ fTopLevelDocsCreated.clear();
createFolderHierachy(rootFolderId, 0, levels, childrenPerLevel);
+ if (fCleanup)
+ deleteTree();
}
public void setUseUuidsForNames(boolean useUuids) {
@@ -252,9 +268,12 @@ public class ObjectGenerator {
return fDocumentsInTotalCount + fFoldersInTotalCount;
}
- public void createSingleDocument(String folderId) {
+ public String createSingleDocument(String folderId) {
fTimeLoggerCreateDoc.reset();
- createDocument(folderId, 0, 0);
+ String objectId = createDocument(folderId, 0, 0);
+ if (fCleanup)
+ deleteObject(objectId);
+ return objectId;
}
public void resetCounters() {
@@ -263,27 +282,34 @@ public class ObjectGenerator {
public void printTimings() {
fTimeLoggerCreateDoc.printTimes();
- fTimeLoggerCreateFolder.printTimes();
+ fTimeLoggerCreateFolder.printTimes();
+ if (fCleanup)
+ fTimeLoggerDelete.printTimes();
}
public void logTimings() {
fTimeLoggerCreateDoc.logTimes();
fTimeLoggerCreateFolder.logTimes();
+ if (fCleanup)
+ fTimeLoggerDelete.logTimes();
}
private void createFolderHierachy(String parentId, int level, int levels, int childrenPerLevel) {
-
+ String id = null;
+
if (level>=levels)
return;
+
log.debug(" create folder for parent id: " + parentId + ", in level " + level
+ ", max levels " + levels);
for (int i = 0; i < childrenPerLevel; i++) {
PropertiesData props = createFolderProperties(i, level);
- String id = null;
try {
fTimeLoggerCreateFolder.start();
id = fObjSvc.createFolder(fRepositoryId, props, parentId, null, null, null, null);
+ if (level==0)
+ fTopLevelFoldersCreated.add(id);
} finally {
fTimeLoggerCreateFolder.stop();
}
@@ -294,7 +320,9 @@ public class ObjectGenerator {
}
}
for (int j=0; j<fNoDocumentsToCreate; j++) {
- createDocument(parentId, j, level);
+ id = createDocument(parentId, j, level);
+ if (level==0)
+ fTopLevelDocsCreated.add(id);
}
}
@@ -325,6 +353,33 @@ public class ObjectGenerator {
return id;
}
+ private void deleteTree() {
+
+ // delete all documents from first level
+ for (String id : fTopLevelDocsCreated) {
+ deleteObject(id);
+ }
+
+ // delete recursively all folders from first level
+ for (String id : fTopLevelFoldersCreated) {
+ try {
+ fTimeLoggerDelete.start();
+ fObjSvc.deleteTree(fRepositoryId, id, true, UnfileObjects.DELETE, true, null);
+ } finally {
+ fTimeLoggerDelete.stop();
+ }
+ }
+ }
+
+ private void deleteObject(String objectId) {
+ try {
+ fTimeLoggerDelete.start();
+ fObjSvc.deleteObject(fRepositoryId, objectId, true, null);
+ } finally {
+ fTimeLoggerDelete.stop();
+ }
+ }
+
private ContentStreamData createContent() {
ContentStreamDataImpl content = new ContentStreamDataImpl();
content.setFilename("data.txt");
Modified: incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/TimeLogger.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/TimeLogger.java?rev=929053&r1=929052&r2=929053&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/TimeLogger.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-util/src/main/java/org/apache/opencmis/util/repository/TimeLogger.java Tue Mar 30 09:27:29 2010
@@ -72,7 +72,7 @@ public class TimeLogger {
else if (size==1)
LOG.info("Time elapsed for " + fAction + ": " + getLastTime());
else {
- LOG.info("Timings for " + size + " samples: ");
+ LOG.info("Timings for " + size + " samples for action " + fAction + ": ");
LOG.info(" Average: " + getAverageTime() + "ms");
LOG.info(" Min : " + getMinTime() + "ms");
LOG.info(" Max : " + getMaxTime() + "ms");
@@ -87,7 +87,7 @@ public class TimeLogger {
else if (size==1)
System.out.println("Time elapsed for " + fAction + ": " + getLastTime());
else {
- System.out.println("Timings for " + size + " samples: ");
+ System.out.println("Timings for " + size + " samples for action " + fAction + ": ");
System.out.println(" Average: " + getAverageTime() + "ms");
System.out.println(" Min : " + getMinTime() + "ms");
System.out.println(" Max : " + getMaxTime() + "ms");