Repository: brooklyn-server
Updated Branches:
  refs/heads/master d73a91d17 -> 2b7a6bcc1


prevent benign error in file deletion shutdown-hook

- ensure required bundle has been loaded before shutdown
- fail gracefully if the deletion hook fails


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6048a5c9
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6048a5c9
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6048a5c9

Branch: refs/heads/master
Commit: 6048a5c968236fa997e9b3cd627402012d6d1736
Parents: 9795c47
Author: Alex Heneveld <[email protected]>
Authored: Sat Jul 22 01:39:28 2017 +0100
Committer: Alex Heneveld <[email protected]>
Committed: Sat Jul 22 01:40:14 2017 +0100

----------------------------------------------------------------------
 .../java/org/apache/brooklyn/util/os/Os.java    | 24 +++++++++++++-------
 1 file changed, 16 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6048a5c9/utils/common/src/main/java/org/apache/brooklyn/util/os/Os.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/os/Os.java 
b/utils/common/src/main/java/org/apache/brooklyn/util/os/Os.java
index f1c35dc..a4eaf6b 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/os/Os.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/os/Os.java
@@ -49,6 +49,7 @@ import com.google.common.base.Splitter;
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Ordering;
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Files;
 
@@ -317,21 +318,28 @@ public class Os {
     private static final Map<String,FileDeletionHook> deletions = new 
LinkedHashMap<String, Os.FileDeletionHook>();
     
     private static void addShutdownFileDeletionHook(String path, 
FileDeletionHook hook) {
+        // ensure Ordering class is loaded (else shutdown hook will fail as it 
can't load that class when shutting down)
+        Ordering.<Integer>natural();
         synchronized (deletions) {
             if (deletions.isEmpty()) {
                 Thread shutdownHook = new Thread() {
                     @Override
                     public void run() {
-                        synchronized (deletions) {
-                            List<String> pathsToDelete = new 
ArrayList<String>(deletions.keySet());
-                            Collections.sort(pathsToDelete, 
Strings.lengthComparator().reverse());
-                            for (String path: pathsToDelete) {
-                                try {
-                                    deletions.remove(path).run();
-                                } catch (Exception e) {
-                                    log.warn("Unable to delete '"+path+"' on 
shutdown: "+e);
+                        log.debug("Shutting down, deleting: "+deletions);
+                        try {
+                            synchronized (deletions) {
+                                List<String> pathsToDelete = new 
ArrayList<String>(deletions.keySet());
+                                Collections.sort(pathsToDelete, 
Strings.lengthComparator().reverse());
+                                for (String path: pathsToDelete) {
+                                    try {
+                                        deletions.remove(path).run();
+                                    } catch (Exception e) {
+                                        log.warn("Unable to delete '"+path+"' 
on shutdown: "+e);
+                                    }
                                 }
                             }
+                        } catch (Exception e) {
+                            log.warn("Unable to delete one or mort paths 
("+deletions+") on shutdown: "+e);
                         }
                     }
                 };

Reply via email to