Переглянути джерело

AMBARI-5767. Blueprint delete throws exception. (swagle)

Siddharth Wagle 11 роки тому
батько
коміт
6ab57b722a

+ 7 - 6
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java

@@ -212,15 +212,16 @@ public class BlueprintResourceProvider extends AbstractResourceProvider {
         new RequestImpl(null, null, null, null), predicate);
         new RequestImpl(null, null, null, null), predicate);
 
 
     for (final Resource resource : setResources) {
     for (final Resource resource : setResources) {
-      if (LOG.isDebugEnabled()) {
-        LOG.debug("Deleting Blueprint, name=" +
-            resource.getPropertyValue(BLUEPRINT_NAME_PROPERTY_ID));
-      }
+      final String blueprintName =
+        (String) resource.getPropertyValue(BLUEPRINT_NAME_PROPERTY_ID);
+
+      LOG.info("Deleting Blueprint, name = " + blueprintName);
+
       modifyResources(new Command<Void>() {
       modifyResources(new Command<Void>() {
         @Override
         @Override
         public Void invoke() throws AmbariException {
         public Void invoke() throws AmbariException {
-          dao.remove(toEntity(resource));
-          return null;
+        dao.removeByName(blueprintName);
+        return null;
         }
         }
       });
       });
     }
     }

+ 9 - 0
ambari-server/src/main/java/org/apache/ambari/server/orm/dao/BlueprintDAO.java

@@ -109,4 +109,13 @@ public class BlueprintDAO {
   public void remove(BlueprintEntity blueprintEntity) {
   public void remove(BlueprintEntity blueprintEntity) {
     entityManagerProvider.get().remove(merge(blueprintEntity));
     entityManagerProvider.get().remove(merge(blueprintEntity));
   }
   }
+
+  /**
+   * Remove entity instance by primary key
+   * @param blueprint_name Primary key: blueprint name
+   */
+  @Transactional
+  public void removeByName(String blueprint_name) {
+    entityManagerProvider.get().remove(findByName(blueprint_name));
+  }
 }
 }

+ 3 - 5
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BlueprintResourceProviderTest.java

@@ -42,6 +42,7 @@ import org.apache.ambari.server.state.ComponentInfo;
 import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.ServiceInfo;
 import org.easymock.Capture;
 import org.easymock.Capture;
 
 
+import static org.easymock.EasyMock.expectLastCall;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertTrue;
@@ -262,14 +263,13 @@ public class BlueprintResourceProviderTest {
   public void testDeleteResources() throws SystemException, UnsupportedPropertyException,
   public void testDeleteResources() throws SystemException, UnsupportedPropertyException,
                                            NoSuchParentResourceException, NoSuchResourceException {
                                            NoSuchParentResourceException, NoSuchResourceException {
 
 
-    Capture<BlueprintEntity> entityCapture = new Capture<BlueprintEntity>();
-
     ResourceProvider provider = createProvider();
     ResourceProvider provider = createProvider();
     BlueprintEntity blueprintEntity = createEntity(getTestProperties().iterator().next());
     BlueprintEntity blueprintEntity = createEntity(getTestProperties().iterator().next());
 
 
     // set expectations
     // set expectations
     expect(dao.findByName(BLUEPRINT_NAME)).andReturn(blueprintEntity);
     expect(dao.findByName(BLUEPRINT_NAME)).andReturn(blueprintEntity);
-    dao.remove(capture(entityCapture));
+    dao.removeByName(blueprintEntity.getBlueprintName());
+    expectLastCall();
     replay(dao);
     replay(dao);
 
 
     Predicate predicate = new EqualsPredicate<String>(
     Predicate predicate = new EqualsPredicate<String>(
@@ -287,8 +287,6 @@ public class BlueprintResourceProviderTest {
     assertNotNull(lastEvent.getPredicate());
     assertNotNull(lastEvent.getPredicate());
 
 
     verify(dao);
     verify(dao);
-
-    validateEntity(entityCapture.getValue(), false);
   }
   }
 
 
   @Test
   @Test

+ 20 - 0
ambari-server/src/test/java/org/apache/ambari/server/orm/dao/BlueprintDAOTest.java

@@ -22,9 +22,12 @@ import com.google.inject.Provider;
 import org.apache.ambari.server.orm.entities.BlueprintEntity;
 import org.apache.ambari.server.orm.entities.BlueprintEntity;
 import org.junit.Before;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.Test;
+
+import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.createStrictMock;
 import static org.easymock.EasyMock.createStrictMock;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.reset;
 import static org.easymock.EasyMock.reset;
 import static org.easymock.EasyMock.verify;
 import static org.easymock.EasyMock.verify;
@@ -149,4 +152,21 @@ public class BlueprintDAOTest {
 
 
     verify(entityManagerProvider, entityManager);
     verify(entityManagerProvider, entityManager);
   }
   }
+
+  @Test
+  public void testRemoveByName() {
+    BlueprintEntity entity = new BlueprintEntity();
+    BlueprintDAO dao = new BlueprintDAO();
+    dao.entityManagerProvider = entityManagerProvider;
+
+    expect(entityManager.find(eq(BlueprintEntity.class), eq("test"))).andReturn(entity);
+    entityManager.remove(entity);
+    expectLastCall();
+
+    replay(entityManager);
+
+    dao.removeByName("test");
+
+    verify(entityManager);
+  }
 }
 }