]> source.dussan.org Git - archiva.git/commitdiff
file lock manager must be configurable
authorOlivier Lamy <olamy@apache.org>
Fri, 13 Dec 2013 04:47:10 +0000 (04:47 +0000)
committerOlivier Lamy <olamy@apache.org>
Fri, 13 Dec 2013 04:47:10 +0000 (04:47 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1550639 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ArchivaRuntimeConfiguration.java
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/FileLockConfiguration.java [new file with mode: 0644]
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultArchivaRuntimeConfigurationAdmin.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java

index 209e62b58a9c4f0b13548b3f4b664d4c26b2490c..c64f8f8e6e759bf49115a7d76d454050553d8cd6 100644 (file)
             <type>CacheConfiguration</type>
           </association>
         </field>
+        <field>
+          <name>fileLockConfiguration</name>
+          <description>the FileLocking configuration</description>
+          <version>1.4.0+</version>
+          <association>
+            <type>FileLockConfiguration</type>
+          </association>
+        </field>
       </fields>
     </class>
 
       </fields>
     </class>
 
+    <class>
+      <name>FileLockConfiguration</name>
+      <version>1.4.0+</version>
+      <description>File Locking configuration.</description>
+      <fields>
+        <field>
+          <name>skipLocking</name>
+          <description>skipping the locking mechanism</description>
+          <version>1.4.0+</version>
+          <type>boolean</type>
+          <defaultValue>true</defaultValue>
+        </field>
+        <field>
+          <name>lockingTimeout</name>
+          <description>maximum time to wait to get the file lock (0 infinite)</description>
+          <version>1.4.0+</version>
+          <type>int</type>
+          <defaultValue>0</defaultValue>
+        </field>
+      </fields>
+    </class>
 
     <class>
       <name>CacheConfiguration</name>
index fb347c7995576155760b639f9c1622e1e54b3b24..91b0779bc240223cf1d4e2971237f4821d2d944d 100644 (file)
@@ -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 (file)
index 0000000..05faee9
--- /dev/null
@@ -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;
+    }
+
+}
index a5ea1fbe1bac620acb5729e5d541c25ccbb081ed..3c6704d8b794c7de8e9663340151016a94684e82 100644 (file)
@@ -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;
     }
 }
index e39af9ba7972b0440f1e916379aa1042325c067b..c83feb2b3aa8243db5d93a0df60e831347dee79c 100644 (file)
@@ -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 )
         {