Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-14714 67cacc8ab -> 24f40aa1e


AMBARI-21752 : Use Mpack metadata for iterating over list of packlets to expand 
(mradhakrishnan)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/24f40aa1
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/24f40aa1
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/24f40aa1

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 24f40aa1e815a0deedc709a732cef075bef59521
Parents: 67cacc8
Author: Madhuvanthi Radhakrishnan <mradhakrish...@hortonworks.com>
Authored: Tue Aug 22 11:07:06 2017 -0700
Committer: Madhuvanthi Radhakrishnan <mradhakrish...@hortonworks.com>
Committed: Tue Aug 22 11:07:06 2017 -0700

----------------------------------------------------------------------
 .../ambari/server/mpack/MpackManager.java       | 40 +++++++++-----------
 .../org/apache/ambari/server/state/Packlet.java | 33 +++++++++-------
 .../AmbariManagementControllerImplTest.java     |  4 +-
 .../internal/MpackResourceProviderTest.java     |  4 +-
 .../apache/ambari/server/state/MpackTest.java   |  8 ++--
 5 files changed, 45 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/24f40aa1/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java 
b/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java
index a8a227b..e475e96 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/mpack/MpackManager.java
@@ -184,7 +184,7 @@ public class MpackManager {
    * @param tarPath
    * @throws IOException
    */
-  private void extractTar(Path tarPath, File tempOutputDirectory) throws 
IOException{
+  private void extractTar(Path tarPath, File tempOutputDirectory) throws 
IOException {
     TarArchiveInputStream tarFile = new TarArchiveInputStream(new 
GzipCompressorInputStream(new BufferedInputStream(new FileInputStream(new 
File(String.valueOf(tarPath))))));
     TarArchiveEntry entry = null;
     File outputFile = null;
@@ -228,35 +228,32 @@ public class MpackManager {
             (Paths.get(mpacksStaging + File.separator + 
mpackTarDirectory.substring(mpackTarDirectory.lastIndexOf('/') + 1, 
mpackTarDirectory.indexOf(".tar")) + File.separator),
                     Paths.get(mpackDirectory), 
StandardCopyOption.REPLACE_EXISTING);
 
-    createServicesDirectory(extractedMpackDirectory);
+    createServicesDirectory(extractedMpackDirectory, mpack);
     createSymLinks(mpack);
   }
 
   /***
    * Create a services directory and extract all the services tar file inside 
it. This readies it for cluster deployment
    * @param extractedMpackDirectory
+   * @param mpack
    * @throws IOException
    */
-  private void createServicesDirectory(Path extractedMpackDirectory) throws 
IOException {
+  private void createServicesDirectory(Path extractedMpackDirectory, Mpack 
mpack) throws IOException {
     File servicesDir = new File(extractedMpackDirectory.toAbsolutePath() + 
File.separator + SERVICES_DIRECTORY);
     if (!servicesDir.exists()) {
       servicesDir.mkdir();
     }
-    File packletDir = new File(extractedMpackDirectory.toAbsolutePath() + 
File.separator + PACKLETS_DIRECTORY);
-    for (final File serviceTar : packletDir.listFiles()) {
-      String serviceName = serviceTar.getName();
-      if (serviceName.contains("tar.gz")) {
-        extractTar(serviceTar.toPath(), packletDir);
-        String serviceTarDirectory = serviceTar.toString();
-        String serviceNameVersion = 
serviceTarDirectory.substring(serviceTarDirectory.lastIndexOf('/') + 1, 
serviceTarDirectory.indexOf(".tar"));
-        String serviceFolderName = 
serviceNameVersion.substring(0,serviceNameVersion.indexOf("-packlet")); //Can 
we assume the names of the tar files?
-        Path extractedServiceDirectory = Files.move
-                (Paths.get(packletDir + File.separator + serviceNameVersion),
-                        Paths.get(servicesDir.toPath() + File.separator + 
serviceFolderName ), StandardCopyOption.REPLACE_EXISTING);
+    ArrayList<Packlet> packletArrayList = mpack.getPacklets();
+
+    for (Packlet packlet : packletArrayList) {
+      if (packlet.getType() == Packlet.PackletType.SERVICE_PACKLET) {
+        String packletSourceLocation = packlet.getSourceLocation();
+        File serviceTargetDir = new File(servicesDir + File.separator + 
packlet.getName());
+        extractTar(Paths.get(extractedMpackDirectory + File.separator + 
packlet.getSourceLocation()) , servicesDir );
+        Path extractedServiceDirectory = Files.move(Paths.get(servicesDir + 
File.separator + 
packletSourceLocation.substring(packletSourceLocation.indexOf("/")+1,packletSourceLocation.indexOf(".tar.gz"))),serviceTargetDir.toPath(),
 StandardCopyOption.REPLACE_EXISTING);
+        }
       }
     }
-  }
-
 
   /**
    * Reads the mpack.json file within the {mpack-name}.tar.gz file and 
populates Mpack object.
@@ -302,12 +299,11 @@ public class MpackManager {
           File mpackDirectory = new File(mpacksStaging + File.separator + 
mpack.getName());
 
           if (!mpackDirectory.exists()) {
-            return mpackDirectory.mkdir();
-          } else {
-            return true;
+            mpackDirectory.mkdir();
           }
+          return true;
         } else {
-          String message = "Mpack :" + mpack.getName() + " version: " + 
mpack.getVersion() + " already exists in server";
+          String message = "Mpack: " + mpack.getName() + " version: " + 
mpack.getVersion() + " already exists in server";
           throw new ResourceAlreadyExistsException(message);
         }
       }
@@ -465,7 +461,7 @@ public class MpackManager {
     File mpackDirToDelete = new File(mpacksStaging + File.separator + 
mpackEntity.getMpackName() + File.separator + mpackEntity.getMpackVersion());
     File mpackDirectory = new File(mpacksStaging + "/" + 
mpackEntity.getMpackName());
     String mpackName = mpackEntity.getMpackName() + "-" + 
mpackEntity.getMpackVersion() + ".tar.gz";
-    Path mpackTarFile = Paths.get(mpacksStaging + File.separator + 
MPACK_TAR_LOCATION +File.separator + mpackName);
+    Path mpackTarFile = Paths.get(mpacksStaging + File.separator + 
MPACK_TAR_LOCATION + File.separator + mpackName);
 
     mpackMap.remove(mpackEntity.getMpackId());
     FileUtils.deleteDirectory(mpackDirToDelete);
@@ -488,7 +484,7 @@ public class MpackManager {
       stackDelete = true;
     }
 
-    if (Files.exists(mpackTarFile)){
+    if (Files.exists(mpackTarFile)) {
       Files.delete(mpackTarFile);
     }
     return stackDelete;

http://git-wip-us.apache.org/repos/asf/ambari/blob/24f40aa1/ambari-server/src/main/java/org/apache/ambari/server/state/Packlet.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/Packlet.java 
b/ambari-server/src/main/java/org/apache/ambari/server/state/Packlet.java
index 1fa8dee..9f884d3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Packlet.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Packlet.java
@@ -21,22 +21,27 @@ import com.google.gson.annotations.SerializedName;
 
 
 public class Packlet {
+  public enum PackletType {
+    @SerializedName("service-packlet")
+    SERVICE_PACKLET
+  }
+
   @SerializedName("type")
-  private String type;
+  private PackletType type;
   @SerializedName("name")
   private String name;
   @SerializedName("version")
   private String version;
   @SerializedName("service-id")
   private String serviceId;
-  @SerializedName("source_dir")
-  private String sourceDir;
+  @SerializedName("source_location")
+  private String srcLocation;
 
-  public String getType() {
+  public PackletType getType() {
     return type;
   }
 
-  public void setType(String type) {
+  public void setType(PackletType type) {
     this.type = type;
   }
 
@@ -56,12 +61,12 @@ public class Packlet {
     this.version = version;
   }
 
-  public String getSourceDir() {
-    return sourceDir;
+  public String getSourceLocation() {
+    return srcLocation;
   }
 
-  public void setSourceDir(String sourceDir) {
-    this.sourceDir = sourceDir;
+  public void setSourceLocation(String srcLocation) {
+    this.srcLocation = srcLocation;
   }
 
 
@@ -85,7 +90,7 @@ public class Packlet {
     result = prime * result + ((name == null) ? 0 : name.hashCode());
     result = prime * result + ((version == null) ? 0 : version.hashCode());
     result = prime * result + ((serviceId == null) ? 0 : serviceId.hashCode());
-    result = prime * result + ((sourceDir == null) ? 0 : sourceDir.hashCode());
+    result = prime * result + ((srcLocation == null) ? 0 : 
srcLocation.hashCode());
     return result;
   }
 
@@ -136,11 +141,11 @@ public class Packlet {
       return false;
     }
 
-    if (sourceDir == null) {
-      if (other.sourceDir != null) {
+    if (srcLocation == null) {
+      if (other.srcLocation != null) {
         return false;
       }
-    } else if (!sourceDir.equals(other.sourceDir)) {
+    } else if (!srcLocation.equals(other.srcLocation)) {
       return false;
     }
     return true;
@@ -154,7 +159,7 @@ public class Packlet {
     sb.append("name=").append(name).append(", ");
     sb.append("version=").append(version).append(", ");
     sb.append("service id=").append(serviceId).append(", ");
-    sb.append("source directory=").append(sourceDir).append(", ");
+    sb.append("source location=").append(srcLocation).append(", ");
     sb.append('}');
     return sb.toString();
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/24f40aa1/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
index e7cc29e..c0254b6 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
@@ -2448,10 +2448,10 @@ public class AmbariManagementControllerImplTest {
     ArrayList<Packlet> packletArrayList = new ArrayList<>();
     Packlet samplePacklet = new Packlet();
     Injector injector = createNiceMock(Injector.class);
-    samplePacklet.setType("service");
+    samplePacklet.setType(Packlet.PackletType.SERVICE_PACKLET);
     samplePacklet.setVersion("3.0.0");
     samplePacklet.setName("NIFI");
-    samplePacklet.setSourceDir("/abc/nifi.tar.gz");
+    samplePacklet.setSourceLocation("/abc/nifi.tar.gz");
     packletArrayList.add(samplePacklet);
     
expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null).atLeastOnce();
     
expect(ambariMetaInfo.getPacklets(mpackId)).andReturn(packletArrayList).atLeastOnce();

http://git-wip-us.apache.org/repos/asf/ambari/blob/24f40aa1/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java
index f0b81cb..97b2d98 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/MpackResourceProviderTest.java
@@ -164,8 +164,8 @@ public class MpackResourceProviderTest {
     ArrayList<Packlet> packletArrayList = new ArrayList<>();
     Packlet packlet = new Packlet();
     packlet.setName("testService");
-    packlet.setType("service");
-    packlet.setSourceDir("testDir/testDir");
+    packlet.setType(Packlet.PackletType.SERVICE_PACKLET);
+    packlet.setSourceLocation("testDir/testDir");
     packlet.setVersion("3.0");
     packletArrayList.add(packlet);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/24f40aa1/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java 
b/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java
index 266dff5..3b96182 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/MpackTest.java
@@ -72,14 +72,14 @@ public class MpackTest {
     expectedPrereq.put("min-ambari-version","3.0.0.0");
     ArrayList<Packlet> expectedPacklets = new ArrayList<>();
     Packlet nifi = new Packlet();
-    nifi.setType("service-packlet");
+    nifi.setType(Packlet.PackletType.SERVICE_PACKLET);
     nifi.setVersion("1.2.0.0-123");
-    nifi.setSourceDir("packlets/NIFI-1.2.0.0-123.tar.gz");
+    nifi.setSourceLocation("packlets/NIFI-1.2.0.0-123.tar.gz");
     nifi.setName("NIFI");
     Packlet streamline = new Packlet();
     streamline.setName("STREAMLINE");
-    streamline.setType("service-packlet");
-    streamline.setSourceDir("packlets/STREAMLINE-1.0.0.0-100.tar.gz");
+    streamline.setType(Packlet.PackletType.SERVICE_PACKLET);
+    streamline.setSourceLocation("packlets/STREAMLINE-1.0.0.0-100.tar.gz");
     streamline.setVersion("1.0.0.0-100");
     expectedPacklets.add(nifi);
     expectedPacklets.add(streamline);

Reply via email to