You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2014/06/20 22:30:24 UTC
git commit: AMBARI-6230 - Views: updates after POST to create cause
exceptions
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 <tb...@hortonworks.com>
Authored: Fri Jun 20 16:19:12 2014 -0400
Committer: tbeerbower <tb...@hortonworks.com>
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);