Repository: ambari
Updated Branches:
  refs/heads/trunk d3d583388 -> 0d5cc744a


AMBARI-6230 - Views: updates after POST to create cause exceptions


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

Branch: refs/heads/trunk
Commit: 0d5cc744a4dc3e7de28a4d4ea3b80b76677e7639
Parents: d3d5833
Author: tbeerbower <[email protected]>
Authored: Fri Jun 20 16:19:12 2014 -0400
Committer: tbeerbower <[email protected]>
Committed: Fri Jun 20 16:30:01 2014 -0400

----------------------------------------------------------------------
 .../server/orm/entities/ViewInstanceEntity.java | 18 +++++
 .../apache/ambari/server/view/ViewRegistry.java | 80 ++++++++++++--------
 .../orm/entities/ViewInstanceEntityTest.java    | 23 ++++++
 .../ambari/server/view/ViewRegistryTest.java    |  6 ++
 4 files changed, 97 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5cc744/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
index d7955a3..2c48d9f 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
@@ -282,6 +282,24 @@ public class ViewInstanceEntity implements 
ViewInstanceDefinition {
   // ----- ViewInstanceEntity ------------------------------------------------
 
   /**
+   * Get the view instance id.
+   *
+   * @return the instance id
+   */
+  public Long getViewInstanceId() {
+    return viewInstanceId;
+  }
+
+  /**
+   * Set the given view instance id.
+   *
+   * @param viewInstanceId  the instance id
+   */
+  public void setViewInstanceId(Long viewInstanceId) {
+    this.viewInstanceId = viewInstanceId;
+  }
+
+  /**
    * Set the view name.
    *
    * @param viewName the view name

http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5cc744/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java 
b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
index 068fff8..33485a0 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
@@ -395,6 +395,16 @@ public class ViewRegistry {
         }
         instanceEntity.validate(viewEntity);
         instanceDAO.merge(instanceEntity);
+
+        ViewInstanceEntity persistedInstance = 
instanceDAO.findByName(ViewEntity.getViewName(viewName, version), instanceName);
+        if (persistedInstance == null) {
+          String message = "Instance  " + instanceEntity.getViewName() + " can 
not be found.";
+
+          LOG.error(message);
+          throw new IllegalStateException(message);
+        }
+        
instanceEntity.setViewInstanceId(persistedInstance.getViewInstanceId());
+
         try {
           // bind the view instance to a view
           bindViewInstance(viewEntity, instanceEntity);
@@ -806,43 +816,53 @@ public class ViewRegistry {
       }
       // ... merge it
       viewDAO.merge(view);
-    } else {
-      Map<String, ViewInstanceEntity> instanceEntityMap = new HashMap<String, 
ViewInstanceEntity>();
-      for( ViewInstanceEntity instance : view.getInstances()) {
-        instanceEntityMap.put(instance.getName(), instance);
+
+      persistedView = viewDAO.findByName(viewName);
+      if (persistedView == null) {
+        String message = "View  " + persistedView.getViewName() + " can not be 
found.";
+
+        LOG.error(message);
+        throw new IllegalStateException(message);
       }
+    }
 
-      // make sure that each instance of the view in the db is reflected in 
the given view
-      for (ViewInstanceEntity persistedInstance : 
persistedView.getInstances()){
-        String instanceName = persistedInstance.getName();
+    Map<String, ViewInstanceEntity> instanceEntityMap = new HashMap<String, 
ViewInstanceEntity>();
+    for( ViewInstanceEntity instance : view.getInstances()) {
+      instanceEntityMap.put(instance.getName(), instance);
+    }
 
-        ViewInstanceEntity instance =
-            view.getInstanceDefinition(instanceName);
+    // make sure that each instance of the view in the db is reflected in the 
given view
+    for (ViewInstanceEntity persistedInstance : persistedView.getInstances()){
+      String instanceName = persistedInstance.getName();
 
-        instanceEntityMap.remove(instanceName);
+      ViewInstanceEntity instance =
+          view.getInstanceDefinition(instanceName);
 
-        // if the persisted instance is not in the registry ...
-        if (instance == null) {
-          // ... create and add it
-          instance = new ViewInstanceEntity(view, instanceName);
-          bindViewInstance(view, instance);
-          instanceDefinitions.add(instance);
-        }
-        // apply the persisted overrides to the in-memory instance
-        instance.setLabel(persistedInstance.getLabel());
-        instance.setDescription(persistedInstance.getDescription());
-        instance.setVisible(persistedInstance.isVisible());
-        instance.setData(persistedInstance.getData());
-        instance.setProperties(persistedInstance.getProperties());
-        instance.setEntities(persistedInstance.getEntities());
-      }
+      instanceEntityMap.remove(instanceName);
 
-      // these instances appear in the archive but have been deleted
-      // from the db... remove them from the registry
-      for (ViewInstanceEntity instance : instanceEntityMap.values()) {
-        view.removeInstanceDefinition(instance.getName());
-        instanceDefinitions.remove(instance);
+      // if the persisted instance is not in the registry ...
+      if (instance == null) {
+        // ... create and add it
+        instance = new ViewInstanceEntity(view, instanceName);
+        bindViewInstance(view, instance);
+        instanceDefinitions.add(instance);
       }
+      instance.setViewInstanceId(persistedInstance.getViewInstanceId());
+
+      // apply the persisted overrides to the in-memory instance
+      instance.setLabel(persistedInstance.getLabel());
+      instance.setDescription(persistedInstance.getDescription());
+      instance.setVisible(persistedInstance.isVisible());
+      instance.setData(persistedInstance.getData());
+      instance.setProperties(persistedInstance.getProperties());
+      instance.setEntities(persistedInstance.getEntities());
+    }
+
+    // these instances appear in the archive but have been deleted
+    // from the db... remove them from the registry
+    for (ViewInstanceEntity instance : instanceEntityMap.values()) {
+      view.removeInstanceDefinition(instance.getName());
+      instanceDefinitions.remove(instance);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5cc744/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java
index eeee73e..b7de666 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java
@@ -29,8 +29,10 @@ import org.apache.ambari.view.ResourceProvider;
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
 import static org.easymock.EasyMock.createNiceMock;
 
@@ -136,6 +138,16 @@ public class ViewInstanceEntityTest {
   }
 
   @Test
+  public void testGetId() throws Exception {
+    ViewInstanceEntity viewInstanceDefinition = getViewInstanceEntity();
+
+    Assert.assertNull(viewInstanceDefinition.getViewInstanceId());
+
+    viewInstanceDefinition.setViewInstanceId(99L);
+    Assert.assertEquals(99L, (long) 
viewInstanceDefinition.getViewInstanceId());
+  }
+
+  @Test
   public void testGetName() throws Exception {
     ViewInstanceEntity viewInstanceDefinition = getViewInstanceEntity();
 
@@ -352,6 +364,17 @@ public class ViewInstanceEntityTest {
     return new ViewInstanceEntity(viewDefinition, instanceConfig);
   }
 
+  public static Set<ViewInstanceEntity> getViewInstanceEntities(ViewEntity 
viewDefinition) throws Exception {
+    Set<ViewInstanceEntity> entities = new HashSet<ViewInstanceEntity>();
+
+    InstanceConfig instanceConfig = 
InstanceConfigTest.getInstanceConfigs().get(0);
+    entities.add(new ViewInstanceEntity(viewDefinition, instanceConfig));
+    instanceConfig = InstanceConfigTest.getInstanceConfigs().get(1);
+    entities.add(new ViewInstanceEntity(viewDefinition, instanceConfig));
+
+    return entities;
+  }
+
   @Test
   public void testValidate() throws Exception {
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5cc744/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
index 6927676..eb9c952 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
@@ -161,6 +161,8 @@ public class ViewRegistryTest {
 
     ViewEntity viewDefinition = ViewEntityTest.getViewEntity();
 
+    
viewDefinition.setInstances(ViewInstanceEntityTest.getViewInstanceEntities(viewDefinition));
+
     Map<File, ViewConfig> viewConfigs =
         Collections.singletonMap(viewArchive, 
viewDefinition.getConfiguration());
 
@@ -226,6 +228,7 @@ public class ViewRegistryTest {
 
     expect(vDAO.findByName("MY_VIEW{1.0.0}")).andReturn(null);
     expect(vDAO.merge(capture(captureViewEntity))).andReturn(null);
+    expect(vDAO.findByName("MY_VIEW{1.0.0}")).andReturn(viewDefinition);
 
     expect(vDAO.findAll()).andReturn(Collections.<ViewEntity>emptyList());
 
@@ -471,6 +474,7 @@ public class ViewRegistryTest {
     ViewInstanceEntity viewInstanceEntity = getViewInstanceEntity(viewEntity, 
config.getInstances().get(0));
 
     expect(viewInstanceDAO.merge(viewInstanceEntity)).andReturn(null);
+    expect(viewInstanceDAO.findByName("MY_VIEW{1.0.0}", 
viewInstanceEntity.getInstanceName())).andReturn(viewInstanceEntity);
 
     replay(viewDAO, viewInstanceDAO);
 
@@ -571,6 +575,7 @@ public class ViewRegistryTest {
 
     expect(viewInstanceDAO.merge(viewInstanceEntity)).andReturn(null);
     
expect(viewInstanceDAO.merge(viewInstanceEntity)).andReturn(viewInstanceEntity);
+    expect(viewInstanceDAO.findByName("MY_VIEW{1.0.0}", 
viewInstanceEntity.getInstanceName())).andReturn(viewInstanceEntity);
 
     replay(viewDAO, viewInstanceDAO);
 
@@ -610,6 +615,7 @@ public class ViewRegistryTest {
     ViewInstanceEntity updateInstance = getViewInstanceEntity(viewEntity, 
invalidConfig.getInstances().get(0));
 
     expect(viewInstanceDAO.merge(viewInstanceEntity)).andReturn(null);
+    expect(viewInstanceDAO.findByName("MY_VIEW{1.0.0}", 
viewInstanceEntity.getInstanceName())).andReturn(viewInstanceEntity);
 
     replay(viewDAO, viewInstanceDAO);
 

Reply via email to