You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@toree.apache.org by jo...@apache.org on 2017/04/10 21:07:54 UTC

incubator-toree git commit: TOREE-403 : delete temporary directories after kernel shutdown

Repository: incubator-toree
Updated Branches:
  refs/heads/master 14c80857a -> 6997e4d4e


TOREE-403 : delete temporary directories after kernel shutdown

Closes #119


Project: http://git-wip-us.apache.org/repos/asf/incubator-toree/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-toree/commit/6997e4d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-toree/tree/6997e4d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-toree/diff/6997e4d4

Branch: refs/heads/master
Commit: 6997e4d4e622e0af39e60f69417a4fe512b1b10c
Parents: 14c8085
Author: kun liu <ku...@kuns-MacBook-Pro.local>
Authored: Fri Apr 7 13:52:00 2017 -0700
Committer: Jakob Odersky <ja...@odersky.com>
Committed: Mon Apr 10 13:55:26 2017 -0700

----------------------------------------------------------------------
 .../dependencies/DependencyDownloader.scala     |  3 +-
 .../org/apache/toree/utils/FileUtils.scala      | 61 ++++++++++++++++++++
 .../boot/layer/ComponentInitialization.scala    |  4 +-
 .../org/apache/toree/magic/builtin/AddJar.scala |  5 +-
 4 files changed, 68 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-toree/blob/6997e4d4/kernel-api/src/main/scala/org/apache/toree/dependencies/DependencyDownloader.scala
----------------------------------------------------------------------
diff --git a/kernel-api/src/main/scala/org/apache/toree/dependencies/DependencyDownloader.scala b/kernel-api/src/main/scala/org/apache/toree/dependencies/DependencyDownloader.scala
index 1859776..e2ffe61 100644
--- a/kernel-api/src/main/scala/org/apache/toree/dependencies/DependencyDownloader.scala
+++ b/kernel-api/src/main/scala/org/apache/toree/dependencies/DependencyDownloader.scala
@@ -21,6 +21,7 @@ import java.io.{File, PrintStream}
 import java.net.{URI, URL}
 import java.nio.file.Files
 import scala.util.Try
+import org.apache.toree.utils.FileUtils
 
 abstract class DependencyDownloader {
   /**
@@ -134,5 +135,5 @@ object DependencyDownloader {
 
   /** Default download directory for dependencies. */
   val DefaultDownloadDirectory =
-    Files.createTempDirectory("toree-dependency-downloads-").toFile
+    FileUtils.createManagedTempDirectory("toree-dependency-downloads")
 }

http://git-wip-us.apache.org/repos/asf/incubator-toree/blob/6997e4d4/kernel-api/src/main/scala/org/apache/toree/utils/FileUtils.scala
----------------------------------------------------------------------
diff --git a/kernel-api/src/main/scala/org/apache/toree/utils/FileUtils.scala b/kernel-api/src/main/scala/org/apache/toree/utils/FileUtils.scala
new file mode 100644
index 0000000..ebfdff3
--- /dev/null
+++ b/kernel-api/src/main/scala/org/apache/toree/utils/FileUtils.scala
@@ -0,0 +1,61 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+
+package org.apache.toree.utils
+
+import java.io.File
+import java.nio.file.Files
+
+
+object FileUtils {
+
+  val parentTempDir: String = "toree-tmp-dir"
+
+  private def deleteDirRecur(file: File): Unit = {
+    // delete directory recursively
+    if(file.isDirectory){
+      file.listFiles.foreach(deleteDirRecur)
+    }
+    if(file.exists){
+      file.delete
+    }
+  }
+
+  private def createParentTemp() = {
+    val dir = Files.createTempDirectory(parentTempDir).toFile
+    sys.addShutdownHook{
+      // addShutdownHook will ensure when JVM exits, the temporary directory
+      // assoicated with a given kernel would be deleted
+      deleteDirRecur(dir)
+    }
+    dir
+  }
+
+  private lazy val parent: File = createParentTemp()
+
+  /**
+    * Create a directory with name specified under the "toree-tmp-dir"
+    * that created by Files.createTempDirectory
+    *
+    * @param name The name of the directory to be created
+    */
+  def createManagedTempDirectory(name: String): File = {
+    val dir = new File(parent, name)
+    dir.mkdir()
+    dir
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-toree/blob/6997e4d4/kernel/src/main/scala/org/apache/toree/boot/layer/ComponentInitialization.scala
----------------------------------------------------------------------
diff --git a/kernel/src/main/scala/org/apache/toree/boot/layer/ComponentInitialization.scala b/kernel/src/main/scala/org/apache/toree/boot/layer/ComponentInitialization.scala
index 07848ec..63a358d 100644
--- a/kernel/src/main/scala/org/apache/toree/boot/layer/ComponentInitialization.scala
+++ b/kernel/src/main/scala/org/apache/toree/boot/layer/ComponentInitialization.scala
@@ -32,7 +32,7 @@ import org.apache.toree.kernel.protocol.v5.KMBuilder
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.apache.toree.magic.MagicManager
 import org.apache.toree.plugins.PluginManager
-import org.apache.toree.utils.LogLike
+import org.apache.toree.utils.{LogLike, FileUtils}
 import scala.collection.JavaConverters._
 import org.apache.toree.plugins.AllInterpretersReady
 
@@ -123,7 +123,7 @@ trait StandardComponentInitialization extends ComponentInitialization {
       if(config.hasPath("deps_dir") && Files.exists(Paths.get(config.getString("deps_dir")))) {
         config.getString("deps_dir")
       } else {
-        Files.createTempDirectory("toree_add_deps").toFile.getAbsolutePath
+        FileUtils.createManagedTempDirectory("toree_add_deps").getAbsolutePath
       }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-toree/blob/6997e4d4/kernel/src/main/scala/org/apache/toree/magic/builtin/AddJar.scala
----------------------------------------------------------------------
diff --git a/kernel/src/main/scala/org/apache/toree/magic/builtin/AddJar.scala b/kernel/src/main/scala/org/apache/toree/magic/builtin/AddJar.scala
index a8bf14b..4893077 100644
--- a/kernel/src/main/scala/org/apache/toree/magic/builtin/AddJar.scala
+++ b/kernel/src/main/scala/org/apache/toree/magic/builtin/AddJar.scala
@@ -24,20 +24,21 @@ import java.nio.file.{Files, Paths}
 import org.apache.toree.magic._
 import org.apache.toree.magic.builtin.AddJar._
 import org.apache.toree.magic.dependencies._
-import org.apache.toree.utils.{ArgumentParsingSupport, DownloadSupport, LogLike}
+import org.apache.toree.utils.{ArgumentParsingSupport, DownloadSupport, LogLike, FileUtils}
 import com.typesafe.config.Config
 import org.apache.toree.plugins.annotations.Event
 
 object AddJar {
 
   private var jarDir:Option[String] = None
+
   def getJarDir(config: Config): String = {
     jarDir.getOrElse({
       jarDir = Some(
         if(config.hasPath("jar_dir") && Files.exists(Paths.get(config.getString("jar_dir")))) {
           config.getString("jar_dir")
         } else {
-          Files.createTempDirectory("toree_add_jars").toFile.getAbsolutePath
+          FileUtils.createManagedTempDirectory("toree_add_jars").getAbsolutePath
         }
       )
       jarDir.get