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 2011/04/04 22:13:53 UTC
svn commit: r1088771 - in
/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main:
java/org/apache/chemistry/opencmis/inmemory/server/
java/org/apache/chemistry/opencmis/inmemory/storedobj/api/
java/org/apache/ch...
Author: jens
Date: Mon Apr 4 20:13:53 2011
New Revision: 1088771
URL: http://svn.apache.org/viewvc?rev=1088771&view=rev
Log:
Create a config property for inmemory server that performs a regular clean of the repository. CMIS-350
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java?rev=1088771&r1=1088770&r2=1088771&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java Mon Apr 4 20:13:53 2011
@@ -19,9 +19,16 @@
package org.apache.chemistry.opencmis.inmemory.server;
import java.math.BigInteger;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -31,6 +38,8 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.server.CmisService;
import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
import org.apache.chemistry.opencmis.inmemory.ConfigConstants;
+import org.apache.chemistry.opencmis.inmemory.ConfigurationSettings;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
import org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerFactory;
import org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerImpl;
@@ -52,7 +61,8 @@ public class InMemoryServiceFactoryImpl
private ThreadLocal<CmisServiceWrapper<InMemoryService>> threadLocalService = new ThreadLocal<CmisServiceWrapper<InMemoryService>>();
private boolean fUseOverrideCtx = false;
private StoreManager storeManager; // singleton root of everything
-
+ private CleanManager cleanManager = null;
+
@Override
public void init(Map<String, String> parameters) {
LOG.info("Initializing in-memory repository...");
@@ -62,20 +72,31 @@ public class InMemoryServiceFactoryImpl
if (null != overrideCtx)
fUseOverrideCtx = true;
+ ConfigurationSettings.init(parameters);
+
String repositoryClassName = (String) parameters.get(ConfigConstants.REPOSITORY_CLASS);
if (null == repositoryClassName)
repositoryClassName = StoreManagerImpl.class.getName();
if (null == storeManager)
storeManager = StoreManagerFactory.createInstance(repositoryClassName);
+
+ Date deploymentTime = new Date();
+ String strDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US).format(deploymentTime);
+ parameters.put(ConfigConstants.DEPLOYMENT_TIME, strDate);
+
initStorageManager(parameters);
- fillRepositoryIfConfigured(parameters);
+ fillRepositoryIfConfigured(parameters);
+
+ Long cleanInterval = ConfigurationSettings.getConfigurationValueAsLong(ConfigConstants.CLEAN_REPOSITORY_INTERVAL);
+ if (null != cleanInterval && cleanInterval > 0)
+ scheduleCleanRepositoryJob(cleanInterval);
LOG.info("...initialized in-memory repository.");
}
-
+
public static void setOverrideCallContext(CallContext ctx) {
OVERRIDE_CTX = ctx;
}
@@ -109,6 +130,8 @@ public class InMemoryServiceFactoryImpl
@Override
public void destroy() {
+ if (null != cleanManager)
+ cleanManager.stopCleanRepositoryJob();
threadLocalService = null;
}
@@ -286,4 +309,42 @@ public class InMemoryServiceFactoryImpl
} // fillRepositoryIfConfigured
+ class CleanManager {
+
+ private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+ ScheduledFuture<?> cleanerHandle = null;
+
+ public void startCleanRepositoryJob (long intervalInMinutes) {
+
+ final Runnable cleaner = new Runnable() {
+ public void run() {
+ LOG.info("Cleaning repository as part of a scheduled maintenance job.");
+ for(String repositoryId: storeManager.getAllRepositoryIds()) {
+ ObjectStore store = storeManager.getObjectStore(repositoryId);
+ store.clear();
+ fillRepositoryIfConfigured(ConfigurationSettings.getParameters());
+ }
+ LOG.info("Repository cleaned. Freeing memory.");
+ System.gc();
+ }
+ };
+
+ LOG.info("Repository Clean Job starting clean job, interval " + intervalInMinutes + " min");
+ cleanerHandle =
+ scheduler.scheduleAtFixedRate(cleaner, intervalInMinutes, intervalInMinutes, TimeUnit.MINUTES);
+ }
+
+ public void stopCleanRepositoryJob() {
+ LOG.info("Repository Clean Job cancelling clean job.");
+ boolean ok = cleanerHandle.cancel(true);
+ LOG.info("Repository Clean Job cancelled with result: " + ok);
+ scheduler.shutdownNow();
+ }
+ }
+
+ private void scheduleCleanRepositoryJob(long minutes) {
+ cleanManager = new CleanManager();
+ cleanManager.startCleanRepositoryJob(minutes);
+ }
+
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java?rev=1088771&r1=1088770&r2=1088771&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java Mon Apr 4 20:13:53 2011
@@ -109,4 +109,16 @@ public interface ObjectStore {
* @return list of checked out documents in the repository
*/
List<VersionedDocument> getCheckedOutDocuments(String orderBy);
+
+ /**
+ * Clear repository and remove all data.
+ */
+ public void clear();
+
+ /**
+ * For statistics: return the number of objects contained in the system
+ * @return
+ * number of stored objects
+ */
+ public long getObjectCount();
}
\ No newline at end of file
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java?rev=1088771&r1=1088770&r2=1088771&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java Mon Apr 4 20:13:53 2011
@@ -219,30 +219,21 @@ public class ObjectStoreImpl implements
Set<String> entries = fStoredObjectMap.keySet();
return entries;
}
+
+ /**
+ * Clear repository and remove all data.
+ */
+ public void clear() {
+ lock();
+ fStoredObjectMap.clear();
+ storeObject(fRootFolder);
+ unlock();
+ }
- // void renameAllIdsWithPrefix(String oldPath, String newPath) {
- // Iterator<Entry<String, StoredObject>> it =
- // fStoredObjectMap.entrySet().iterator();
- // Map<String, StoredObject> newMap = new HashMap<String, StoredObject>();
- // while (it.hasNext()) {
- // Map.Entry<String, StoredObject> entry = (Map.Entry<String, StoredObject>)
- // it
- // .next();
- //
- // if (entry.getKey().startsWith(oldPath)) {
- // if (entry.getValue() instanceof Path) {
- // newPath = ((Path)entry.getValue()).getPath();
- // it.remove(); // the only safe way to modify while iteration
- // newMap.put(newPath, entry.getValue()); // we can't add to the current
- // collection while
- // // iterating
- // }
- // }
- // }
- // fStoredObjectMap.putAll(newMap); // add all at once when iteration is
- // complete
- // }
-
+ public long getObjectCount() {
+ return fStoredObjectMap.size();
+ }
+
// /////////////////////////////////////////
// private helper methods
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties?rev=1088771&r1=1088770&r2=1088771&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties Mon Apr 4 20:13:53 2011
@@ -45,4 +45,6 @@ RepositoryFiller.DocumentProperty.0=Stri
#RepositoryFiller.DocumentProperty.1=StringPropMV
# properties to set for a folder
#RepositoryFiller.FolderProperty.0=StringFolderProp
-
+InMemoryServer.MaxContentSizeKB=4096
+InMemoryServer.CleanIntervalMinutes=2
+