From: Olivier Lamy Date: Fri, 13 Dec 2013 04:47:10 +0000 (+0000) Subject: file lock manager must be configurable X-Git-Tag: archiva-2.0.0-RC1~125 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=679725dd5dad5315384fde790cee38676f5a17e5;p=archiva.git file lock manager must be configurable git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1550639 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo index 209e62b58..c64f8f8e6 100644 --- a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo +++ b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo @@ -1485,6 +1485,14 @@ CacheConfiguration + + fileLockConfiguration + the FileLocking configuration + 1.4.0+ + + FileLockConfiguration + + @@ -1661,6 +1669,27 @@ + + FileLockConfiguration + 1.4.0+ + File Locking configuration. + + + skipLocking + skipping the locking mechanism + 1.4.0+ + boolean + true + + + lockingTimeout + maximum time to wait to get the file lock (0 infinite) + 1.4.0+ + int + 0 + + + CacheConfiguration diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ArchivaRuntimeConfiguration.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ArchivaRuntimeConfiguration.java index fb347c799..91b0779bc 100644 --- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ArchivaRuntimeConfiguration.java +++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ArchivaRuntimeConfiguration.java @@ -24,11 +24,16 @@ import javax.xml.bind.annotation.XmlRootElement; * @author Olivier Lamy * @since 1.4-M4 */ -@XmlRootElement( name = "archivaRuntimeConfiguration" ) +@XmlRootElement(name = "archivaRuntimeConfiguration") public class ArchivaRuntimeConfiguration { private CacheConfiguration urlFailureCacheConfiguration; + /** + * @since 2.0.0 + */ + private FileLockConfiguration fileLockConfiguration; + public ArchivaRuntimeConfiguration() { // no op @@ -44,13 +49,24 @@ public class ArchivaRuntimeConfiguration this.urlFailureCacheConfiguration = urlFailureCacheConfiguration; } + public FileLockConfiguration getFileLockConfiguration() + { + return fileLockConfiguration; + } + + public void setFileLockConfiguration( FileLockConfiguration fileLockConfiguration ) + { + this.fileLockConfiguration = fileLockConfiguration; + } + @Override public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append( "ArchivaRuntimeConfiguration" ); - sb.append( "{urlFailureCacheConfiguration=" ).append( urlFailureCacheConfiguration ); + final StringBuilder sb = new StringBuilder( "ArchivaRuntimeConfiguration{" ); + sb.append( "urlFailureCacheConfiguration=" ).append( urlFailureCacheConfiguration ); + sb.append( ", fileLockConfiguration=" ).append( fileLockConfiguration ); sb.append( '}' ); return sb.toString(); } + } diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/FileLockConfiguration.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/FileLockConfiguration.java new file mode 100644 index 000000000..05faee946 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/FileLockConfiguration.java @@ -0,0 +1,72 @@ +// =================== DO NOT EDIT THIS FILE ==================== +// Generated by Modello 1.7, +// any modifications will be overwritten. +// ============================================================== + +package org.apache.archiva.admin.model.beans; + +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +/** + * File Locking configuration. + * + * @since 2.0.0 + */ +@XmlRootElement( name = "fileLockConfiguration" ) +public class FileLockConfiguration + implements Serializable +{ + + /** + * skipping the locking mechanism. + */ + private boolean skipLocking = true; + + /** + * maximum time to wait to get the file lock (0 infinite). + */ + private int lockingTimeout = 0; + + + /** + * Get maximum time to wait to get the file lock (0 infinite). + * + * @return int + */ + public int getLockingTimeout() + { + return this.lockingTimeout; + } + + /** + * Get skipping the locking mechanism. + * + * @return boolean + */ + public boolean isSkipLocking() + { + return this.skipLocking; + } + + /** + * Set maximum time to wait to get the file lock (0 infinite). + * + * @param lockingTimeout + */ + public void setLockingTimeout( int lockingTimeout ) + { + this.lockingTimeout = lockingTimeout; + } + + /** + * Set skipping the locking mechanism. + * + * @param skipLocking + */ + public void setSkipLocking( boolean skipLocking ) + { + this.skipLocking = skipLocking; + } + +} diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultArchivaRuntimeConfigurationAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultArchivaRuntimeConfigurationAdmin.java index a5ea1fbe1..3c6704d8b 100644 --- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultArchivaRuntimeConfigurationAdmin.java +++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultArchivaRuntimeConfigurationAdmin.java @@ -22,6 +22,7 @@ import net.sf.beanlib.provider.replicator.BeanReplicator; import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.beans.ArchivaRuntimeConfiguration; import org.apache.archiva.admin.model.beans.CacheConfiguration; +import org.apache.archiva.admin.model.beans.FileLockConfiguration; import org.apache.archiva.admin.model.runtime.ArchivaRuntimeConfigurationAdmin; import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.Configuration; @@ -38,7 +39,7 @@ import javax.inject.Named; * @author Olivier Lamy * @since 1.4-M4 */ -@Service("archivaRuntimeConfigurationAdmin#default") +@Service( "archivaRuntimeConfigurationAdmin#default" ) public class DefaultArchivaRuntimeConfigurationAdmin implements ArchivaRuntimeConfigurationAdmin { @@ -58,6 +59,12 @@ public class DefaultArchivaRuntimeConfigurationAdmin boolean save = false; + // NPE free + if ( archivaRuntimeConfiguration.getFileLockConfiguration() == null ) + { + archivaRuntimeConfiguration.setFileLockConfiguration( new FileLockConfiguration() ); + } + // NPE free if ( archivaRuntimeConfiguration.getUrlFailureCacheConfiguration() == null ) { @@ -179,6 +186,13 @@ public class DefaultArchivaRuntimeConfigurationAdmin } + if ( archivaRuntimeConfiguration.getFileLockConfiguration() != null ) + { + res.setFileLockConfiguration( + new BeanReplicator().replicateBean( archivaRuntimeConfiguration.getFileLockConfiguration(), + org.apache.archiva.configuration.FileLockConfiguration.class ) ); + } + return res; } } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java index e39af9ba7..c83feb2b3 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java @@ -21,7 +21,9 @@ package org.apache.archiva.rest.services; import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.beans.ArchivaRuntimeConfiguration; import org.apache.archiva.admin.model.beans.CacheConfiguration; +import org.apache.archiva.admin.model.beans.FileLockConfiguration; import org.apache.archiva.admin.model.runtime.ArchivaRuntimeConfigurationAdmin; +import org.apache.archiva.common.filelock.FileLockManager; import org.apache.archiva.redback.components.cache.Cache; import org.apache.archiva.rest.api.services.ArchivaRestServiceException; import org.apache.archiva.rest.api.services.ArchivaRuntimeConfigurationService; @@ -46,6 +48,10 @@ public class DefaultArchivaRuntimeConfigurationService @Named( value = "cache#url-failures-cache" ) private Cache usersCache; + @Inject + @Named( value = "fileLockManager#default" ) + private FileLockManager fileLockManager; + public ArchivaRuntimeConfiguration getArchivaRuntimeConfiguration() throws ArchivaRestServiceException { @@ -73,6 +79,15 @@ public class DefaultArchivaRuntimeConfigurationService usersCache.setMaxElementsOnDisk( cacheConfiguration.getMaxElementsOnDisk() ); usersCache.setMaxElementsInMemory( cacheConfiguration.getMaxElementsInMemory() ); } + + FileLockConfiguration fileLockConfiguration = archivaRuntimeConfiguration.getFileLockConfiguration(); + if ( fileLockConfiguration != null ) + { + fileLockManager.setTimeout( fileLockConfiguration.getLockingTimeout() ); + fileLockConfiguration.setSkipLocking( fileLockConfiguration.isSkipLocking() ); + } + + } catch ( RepositoryAdminException e ) {