Author: tjwatson
Date: Fri Sep  9 13:37:58 2016
New Revision: 1760021

URL: http://svn.apache.org/viewvc?rev=1760021&view=rev
Log:
Merged latest trunk/subsystem changes to java6support branch.

Modified:
    aries/branches/java6support/subsystem/   (props changed)
    
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
    
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/InstallAction.java
    
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/LockingStrategy.java
    
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java
    
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StopAction.java
    
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/UninstallAction.java

Propchange: aries/branches/java6support/subsystem/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Sep  9 13:37:58 2016
@@ -1,2 +1,2 @@
 /aries/branches/1.0-prototype/subsystem:1306564-1337594
-/aries/trunk/subsystem:1728111-1759621
+/aries/trunk/subsystem:1728111-1760018

Modified: 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java?rev=1760021&r1=1760020&r2=1760021&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Activator.java
 Fri Sep  9 13:37:58 2016
@@ -46,6 +46,7 @@ import org.slf4j.LoggerFactory;
 public class Activator implements BundleActivator, 
ServiceTrackerCustomizer<Object, Object> {
     private static final Logger logger = 
LoggerFactory.getLogger(Activator.class);
     public static final String MODELLED_RESOURCE_MANAGER = 
"org.apache.aries.application.modelling.ModelledResourceManager";
+    private static final String LOCK_TIMEOUT = 
"org.apache.aries.subsystem.lock.timeout";
 
     public static final String LOG_ENTRY = "Method entry: {}, args {}";
     public static final String LOG_EXIT = "Method exit: {}, returning {}";
@@ -59,6 +60,7 @@ public class Activator implements Bundle
        }
        
        private volatile BundleContext bundleContext;
+       private volatile LockingStrategy lockingStrategy;
     private volatile ConfigAdminContentHandler configAdminHandler;
        private volatile Coordinator coordinator;
     private volatile Object modelledResourceManager;
@@ -79,6 +81,10 @@ public class Activator implements Bundle
                return bundleContext;
        }
 
+       public LockingStrategy getLockingStrategy() {
+               return lockingStrategy;
+       }
+
        public Coordinator getCoordinator() {
                return coordinator;
        }
@@ -118,6 +124,7 @@ public class Activator implements Bundle
        public synchronized void start(BundleContext context) throws Exception {
                logger.debug(LOG_ENTRY, "start", context);
                bundleContext = context;
+               lockingStrategy = new 
LockingStrategy(bundleContext.getProperty(LOCK_TIMEOUT));
                serviceTracker = new ServiceTracker<Object, 
Object>(bundleContext, generateServiceFilter(), this);
                serviceTracker.open();
                logger.debug(LOG_EXIT, "start");

Modified: 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/InstallAction.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/InstallAction.java?rev=1760021&r1=1760020&r2=1760021&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/InstallAction.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/InstallAction.java
 Fri Sep  9 13:37:58 2016
@@ -46,7 +46,7 @@ public class InstallAction implements Pr
                BasicSubsystem result = null;
                // Acquire the global write lock to prevent all other 
operations until
                // the installation is complete. There is no need to hold any 
other locks.
-               LockingStrategy.writeLock();
+               Activator.getInstance().getLockingStrategy().writeLock();
                try {
                        State state = parent.getState();
                        if (State.INSTALLING.equals(state)) {
@@ -101,7 +101,7 @@ public class InstallAction implements Pr
                }
                finally {
                        // Release the global write lock.
-                       LockingStrategy.writeUnlock();
+                       
Activator.getInstance().getLockingStrategy().writeUnlock();
                }
                return result;
        }

Modified: 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/LockingStrategy.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/LockingStrategy.java?rev=1760021&r1=1760020&r2=1760021&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/LockingStrategy.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/LockingStrategy.java
 Fri Sep  9 13:37:58 2016
@@ -15,20 +15,32 @@ import org.osgi.service.subsystem.Subsys
 import org.osgi.service.subsystem.SubsystemException;
 
 public class LockingStrategy {
-       private static final int TRY_LOCK_TIME = 30000;
-       private static final TimeUnit TRY_LOCK_TIME_UNIT = 
TimeUnit.MILLISECONDS;
-       
+       private final int TRY_LOCK_TIME;
+       private final TimeUnit TRY_LOCK_TIME_UNIT = TimeUnit.SECONDS;
+
+       public LockingStrategy(String tryLockTime) {
+               int value = 600; // ten mins by default
+               if (tryLockTime != null) {
+                       try {
+                               value = Integer.parseInt(tryLockTime);
+                       } catch (NumberFormatException e) {
+                               // ignore, the default will be used
+                       }
+               }
+               TRY_LOCK_TIME = value;
+       }
+
        /*
         * A mutual exclusion lock used when acquiring the state change locks of
         * a collection of subsystems in order to prevent cycle deadlocks.
         */
-       private static final ReentrantLock lock = new ReentrantLock();
+       private final ReentrantLock lock = new ReentrantLock();
        /*
         * Used when the state change lock of a subsystem cannot be acquired. 
All
         * other state change locks are released while waiting. The condition 
is met
         * whenever the state change lock of one or more subsystems is released.
         */
-       private static final Condition condition = lock.newCondition();
+       private final Condition condition = lock.newCondition();
        
        /*
         * Allow only one of the following operations to be executing at the 
same 
@@ -45,16 +57,16 @@ public class LockingStrategy {
         * (2) Start
         * (3) Stop
         */
-       private static final ReentrantReadWriteLock rwlock = new 
ReentrantReadWriteLock();
+       private final ReentrantReadWriteLock rwlock = new 
ReentrantReadWriteLock();
        
-       private static final ThreadLocal<Map<Subsystem.State, 
Set<BasicSubsystem>>> local = new ThreadLocal<Map<Subsystem.State, 
Set<BasicSubsystem>>>() {
+       private final ThreadLocal<Map<Subsystem.State, Set<BasicSubsystem>>> 
local = new ThreadLocal<Map<Subsystem.State, Set<BasicSubsystem>>>() {
                @Override
                protected Map<Subsystem.State, Set<BasicSubsystem>> 
initialValue() {
                        return new HashMap<Subsystem.State, 
Set<BasicSubsystem>>();
                }
        };
        
-       public static void lock() {
+       public void lock() {
                try {
                        if (!lock.tryLock(TRY_LOCK_TIME, TRY_LOCK_TIME_UNIT)) {
                                throw new SubsystemException("Unable to acquire 
the global mutual exclusion lock in time.");
@@ -65,11 +77,11 @@ public class LockingStrategy {
                }
        }
        
-       public static void unlock() {
+       public void unlock() {
                lock.unlock();
        }
        
-       public static void lock(Collection<BasicSubsystem> subsystems) {
+       public void lock(Collection<BasicSubsystem> subsystems) {
                Collection<BasicSubsystem> locked = new 
ArrayList<BasicSubsystem>(subsystems.size());
                try {
                        while (locked.size() < subsystems.size()) {
@@ -77,7 +89,7 @@ public class LockingStrategy {
                                        if 
(!subsystem.stateChangeLock().tryLock()) {
                                                unlock(locked);
                                                locked.clear();
-                                               if 
(!LockingStrategy.condition.await(TRY_LOCK_TIME, TimeUnit.SECONDS)) {
+                                               if 
(!condition.await(TRY_LOCK_TIME, TimeUnit.SECONDS)) {
                                                        throw new 
SubsystemException("Unable to acquire the state change lock in time: " + 
subsystem);
                                                }
                                                break;
@@ -92,14 +104,14 @@ public class LockingStrategy {
                }
        }
        
-       public static void unlock(Collection<BasicSubsystem> subsystems) {
+       public void unlock(Collection<BasicSubsystem> subsystems) {
                for (BasicSubsystem subsystem : subsystems) {
                        subsystem.stateChangeLock().unlock();
                }
                signalAll();
        }
        
-       private static void signalAll() {
+       private void signalAll() {
                lock();
                try {
                        condition.signalAll();
@@ -109,7 +121,7 @@ public class LockingStrategy {
                }
        }
        
-       public static boolean set(Subsystem.State state, BasicSubsystem 
subsystem) {
+       public boolean set(Subsystem.State state, BasicSubsystem subsystem) {
                Map<Subsystem.State, Set<BasicSubsystem>> map = local.get();
                Set<BasicSubsystem> subsystems = map.get(state);
                if (subsystems == null) {
@@ -124,7 +136,7 @@ public class LockingStrategy {
                return true;
        }
        
-       public static void unset(Subsystem.State state, BasicSubsystem 
subsystem) {
+       public void unset(Subsystem.State state, BasicSubsystem subsystem) {
                Map<Subsystem.State, Set<BasicSubsystem>> map = local.get();
                Set<BasicSubsystem> subsystems = map.get(state);
                if (subsystems != null) {
@@ -132,7 +144,7 @@ public class LockingStrategy {
                }
        }
        
-       public static void readLock() {
+       public void readLock() {
                try {
                        if (!rwlock.readLock().tryLock(TRY_LOCK_TIME, 
TRY_LOCK_TIME_UNIT)) {
                                throw new SubsystemException("Unable to acquire 
the global read lock in time.");
@@ -143,11 +155,11 @@ public class LockingStrategy {
                }
        }
        
-       public static void readUnlock() {
+       public void readUnlock() {
                rwlock.readLock().unlock();
        }
        
-       public static void writeLock() {
+       public void writeLock() {
                try {
                        if (!rwlock.writeLock().tryLock(TRY_LOCK_TIME, 
TRY_LOCK_TIME_UNIT)) {
                                throw new SubsystemException("Unable to acquire 
the global write lock in time.");
@@ -158,7 +170,7 @@ public class LockingStrategy {
                }
        }
        
-       public static void writeUnlock() {
+       public void writeUnlock() {
                rwlock.writeLock().unlock();
        }
 }

Modified: 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java?rev=1760021&r1=1760020&r2=1760021&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StartAction.java
 Fri Sep  9 13:37:58 2016
@@ -197,7 +197,7 @@ public class StartAction extends Abstrac
        @Override
        public Object run() {
                // Protect against re-entry now that cycles are supported.
-               if (!LockingStrategy.set(State.STARTING, target)) {
+               if 
(!Activator.getInstance().getLockingStrategy().set(State.STARTING, target)) {
                        return null;
                }
                try {
@@ -206,7 +206,7 @@ public class StartAction extends Abstrac
                        // If necessary, install the dependencies.
                if (State.INSTALLING.equals(target.getState()) && 
!Utils.isProvisionDependenciesInstall(target)) {
                        // Acquire the global write lock while installing 
dependencies.
-                               LockingStrategy.writeLock();
+                               
Activator.getInstance().getLockingStrategy().writeLock();
                                try {
                                        // We are now protected against 
installs, starts, stops, and uninstalls.
                                // We need a separate coordination when 
installing 
@@ -228,7 +228,7 @@ public class StartAction extends Abstrac
                                                }
                                                // Downgrade to the read lock 
in order to prevent 
                                        // installs and uninstalls but allow 
starts and stops.
-                                               LockingStrategy.readLock();
+                                               
Activator.getInstance().getLockingStrategy().readLock();
                                }
                                catch (Throwable t) {
                                        c.fail(t);
@@ -241,13 +241,13 @@ public class StartAction extends Abstrac
                                }
                                finally {
                                        // Release the global write lock as 
soon as possible.
-                                       LockingStrategy.writeUnlock();
+                                       
Activator.getInstance().getLockingStrategy().writeUnlock();
                                }
                }
                else {
                        // Acquire the read lock in order to prevent installs 
and
                        // uninstalls but allow starts and stops.
-                       LockingStrategy.readLock();
+                       Activator.getInstance().getLockingStrategy().readLock();
                }
                try {
                        // We now hold the read lock and are protected against 
installs
@@ -263,15 +263,15 @@ public class StartAction extends Abstrac
                        affectedResources = computeAffectedResources(target);
                                // Acquire the global mutual exclusion lock 
while acquiring the
                                // state change locks of affected subsystems.
-                               LockingStrategy.lock();
+                               
Activator.getInstance().getLockingStrategy().lock();
                                try {
                                        // We are now protected against cycles.
                                        // Acquire the state change locks of 
affected subsystems.
-                                       
LockingStrategy.lock(affectedResources.subsystems());
+                                       
Activator.getInstance().getLockingStrategy().lock(affectedResources.subsystems());
                                }
                                finally {
                                        // Release the global mutual exclusion 
lock as soon as possible.
-                                       LockingStrategy.unlock();
+                                       
Activator.getInstance().getLockingStrategy().unlock();
                                }
                                Coordination coordination = this.coordination;
                                try {
@@ -323,13 +323,13 @@ public class StartAction extends Abstrac
                                        }
                                        finally {
                                                // Release the state change 
locks of affected subsystems.
-                                               
LockingStrategy.unlock(affectedResources.subsystems());
+                                               
Activator.getInstance().getLockingStrategy().unlock(affectedResources.subsystems());
                                        }
                                }
                }
                finally {
                                // Release the read lock.
-                               LockingStrategy.readUnlock();
+                               
Activator.getInstance().getLockingStrategy().readUnlock();
                        }
                }
                catch (CoordinationException e) {
@@ -347,7 +347,7 @@ public class StartAction extends Abstrac
                }
                finally {
                        // Protection against re-entry no longer required.
-                       LockingStrategy.unset(State.STARTING, target);
+                       
Activator.getInstance().getLockingStrategy().unset(State.STARTING, target);
                }
                return null;
        }

Modified: 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StopAction.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StopAction.java?rev=1760021&r1=1760020&r2=1760021&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StopAction.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/StopAction.java
 Fri Sep  9 13:37:58 2016
@@ -44,14 +44,14 @@ public class StopAction extends Abstract
        @Override
        public Object run() {
                // Protect against re-entry now that cycles are supported.
-               if (!LockingStrategy.set(State.STOPPING, target)) {
+               if 
(!Activator.getInstance().getLockingStrategy().set(State.STOPPING, target)) {
                        return null;
                }
                try {
                        // We are now protected against re-entry.
                        // Acquire the global read lock to prevent installs and 
uninstalls
                        // but allow starts and stops.
-                       LockingStrategy.readLock();
+                       Activator.getInstance().getLockingStrategy().readLock();
                        try {
                                // We are now protected against installs and 
uninstalls.
                                checkRoot();
@@ -68,15 +68,15 @@ public class StopAction extends Abstract
                                }
                                // Acquire the global mutual exclusion lock 
while acquiring the
                                // state change locks of affected subsystems.
-                               LockingStrategy.lock();
+                               
Activator.getInstance().getLockingStrategy().lock();
                                try {
                                        // We are now protected against cycles.
                                        // Acquire the state change locks of 
affected subsystems.
-                                       LockingStrategy.lock(subsystems);
+                                       
Activator.getInstance().getLockingStrategy().lock(subsystems);
                                }
                                finally {
                                        // Release the global mutual exclusion 
lock as soon as possible.
-                                       LockingStrategy.unlock();
+                                       
Activator.getInstance().getLockingStrategy().unlock();
                                }
                                try {
                                        // We are now protected against other 
starts and stops of the affected subsystems.
@@ -128,17 +128,17 @@ public class StopAction extends Abstract
                                }
                                finally {
                                        // Release the state change locks of 
affected subsystems.
-                                       LockingStrategy.unlock(subsystems);
+                                       
Activator.getInstance().getLockingStrategy().unlock(subsystems);
                                }
                        }
                        finally {
                                // Release the read lock.
-                               LockingStrategy.readUnlock();
+                               
Activator.getInstance().getLockingStrategy().readUnlock();
                        }
                }
                finally {
                        // Protection against re-entry no longer required.
-                       LockingStrategy.unset(State.STOPPING, target);
+                       
Activator.getInstance().getLockingStrategy().unset(State.STOPPING, target);
                }
                return null;
        }

Modified: 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/UninstallAction.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/UninstallAction.java?rev=1760021&r1=1760020&r2=1760021&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/UninstallAction.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/UninstallAction.java
 Fri Sep  9 13:37:58 2016
@@ -25,14 +25,14 @@ public class UninstallAction extends Abs
        @Override
        public Object run() {
                // Protect against re-entry now that cycles are supported.
-               if (!LockingStrategy.set(State.UNINSTALLING, target)) {
+               if 
(!Activator.getInstance().getLockingStrategy().set(State.UNINSTALLING, target)) 
{
                        return null;
                }
                try {
                        // Acquire the global write lock to prevent all other 
operations 
                        // until the uninstall is complete. There is no need to 
hold any 
                        // other locks.
-                       LockingStrategy.writeLock();
+                       
Activator.getInstance().getLockingStrategy().writeLock();
                        try {
                                checkRoot();
                                checkValid();
@@ -47,12 +47,12 @@ public class UninstallAction extends Abs
                        }
                        finally {
                                // Release the global write lock.
-                               LockingStrategy.writeUnlock();
+                               
Activator.getInstance().getLockingStrategy().writeUnlock();
                        }
                }
                finally {
                        // Protection against re-entry no longer required.
-                       LockingStrategy.unset(State.UNINSTALLING, target);
+                       
Activator.getInstance().getLockingStrategy().unset(State.UNINSTALLING, target);
                }
                return null;
        }


Reply via email to