浏览代码

AMBARI-7806 - Views: Instance Data Storage doesn't work

tbeerbower 10 年之前
父节点
当前提交
456dcb246b

+ 2 - 14
ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java

@@ -1092,11 +1092,6 @@ public class ViewRegistry {
       persistedView = viewDAO.merge(view);
       persistedView = viewDAO.merge(view);
     }
     }
 
 
-    Map<String, ViewInstanceEntity> xmlInstanceEntityMap = new HashMap<String, ViewInstanceEntity>();
-    for( ViewInstanceEntity instance : view.getInstances()) {
-      xmlInstanceEntityMap.put(instance.getName(), instance);
-    }
-
     view.setResourceType(persistedView.getResourceType());
     view.setResourceType(persistedView.getResourceType());
     view.setPermissions(persistedView.getPermissions());
     view.setPermissions(persistedView.getPermissions());
 
 
@@ -1106,8 +1101,6 @@ public class ViewRegistry {
       String             instanceName = persistedInstance.getName();
       String             instanceName = persistedInstance.getName();
       ViewInstanceEntity instance     = view.getInstanceDefinition(instanceName);
       ViewInstanceEntity instance     = view.getInstanceDefinition(instanceName);
 
 
-      xmlInstanceEntityMap.remove(instanceName);
-
       // if the persisted instance is not in the view ...
       // if the persisted instance is not in the view ...
       if (instance == null) {
       if (instance == null) {
         if (persistedInstance.isXmlDriven()) {
         if (persistedInstance.isXmlDriven()) {
@@ -1123,15 +1116,10 @@ public class ViewRegistry {
         }
         }
       } else {
       } else {
         instance.setResource(persistedInstance.getResource());
         instance.setResource(persistedInstance.getResource());
+        instance.setViewInstanceId(persistedInstance.getViewInstanceId());
+        instance.setData(persistedInstance.getData());
       }
       }
     }
     }
-
-    // these instances appear in the view.xml but are not present in the db...
-    // add them to db
-    for (ViewInstanceEntity instance : xmlInstanceEntityMap.values()) {
-      instance.setResource(createViewInstanceResource(resourceType));
-      instanceDAO.merge(instance);
-    }
   }
   }
 
 
   // create an admin resource to represent a view instance
   // create an admin resource to represent a view instance

+ 10 - 1
ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java

@@ -204,6 +204,10 @@ public class ViewRegistryTest {
     viewDefinition.setResourceType(resourceTypeEntity);
     viewDefinition.setResourceType(resourceTypeEntity);
 
 
     Set<ViewInstanceEntity> viewInstanceEntities = ViewInstanceEntityTest.getViewInstanceEntities(viewDefinition);
     Set<ViewInstanceEntity> viewInstanceEntities = ViewInstanceEntityTest.getViewInstanceEntities(viewDefinition);
+
+    for (ViewInstanceEntity viewInstanceEntity : viewInstanceEntities) {
+      viewInstanceEntity.putInstanceData("p1", "v1");
+    }
     viewDefinition.setInstances(viewInstanceEntities);
     viewDefinition.setInstances(viewInstanceEntities);
 
 
     Map<File, ViewConfig> viewConfigs =
     Map<File, ViewConfig> viewConfigs =
@@ -307,7 +311,12 @@ public class ViewRegistryTest {
     Assert.assertNotNull(view);
     Assert.assertNotNull(view);
     Assert.assertEquals(ViewDefinition.ViewStatus.DEPLOYED, view.getStatus());
     Assert.assertEquals(ViewDefinition.ViewStatus.DEPLOYED, view.getStatus());
 
 
-    Assert.assertEquals(2, registry.getInstanceDefinitions(view).size());
+    Collection<ViewInstanceEntity> instanceDefinitions = registry.getInstanceDefinitions(view);
+    Assert.assertEquals(2, instanceDefinitions.size());
+
+    for (ViewInstanceEntity viewInstanceEntity : instanceDefinitions) {
+      Assert.assertEquals("v1", viewInstanceEntity.getInstanceData("p1").getValue());
+    }
 
 
     // verify mocks
     // verify mocks
     verify(configuration, viewDir, extractedArchiveDir, viewArchive, archiveDir, entryFile, classesDir,
     verify(configuration, viewDir, extractedArchiveDir, viewArchive, archiveDir, entryFile, classesDir,