You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ambari.apache.org by Jonathan Hurley <jh...@hortonworks.com> on 2016/01/14 21:34:28 UTC

Review Request 42319: Cannot Finalize Downgrade Due To Detached ClusterEntity

-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/42319/
-----------------------------------------------------------

Review request for Ambari, Alejandro Fernandez, Jayush Luniya, and Nate Cole.


Bugs: AMBARI-14674
    https://issues.apache.org/jira/browse/AMBARI-14674


Repository: ambari


Description
-------

RU HDP 2.2 to 2.4 downgrade results in:

{code}
java.lang.IllegalArgumentException: Can not refresh not managed object: org.apache.ambari.server.orm.entities.ClusterEntity@18126.
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:1024)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:929)
	at org.apache.ambari.server.orm.dao.ClusterDAO.refresh(ClusterDAO.java:309)
	at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:68)
	at org.apache.ambari.server.state.cluster.ClusterImpl.removeConfigurations(ClusterImpl.java:3216)
	at org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction.finalizeDowngrade(FinalizeUpgradeAction.java:314)
    ...
{code}

It seems like what's happening is that the ClusterEntity is being retrieved outside of a JPA session. Although the ClusterDAO creates the session, it also ends it, leaving the Entity detached. We should instead be refreshing this Entity within the bounds of the Transaction.


Diffs
-----

  ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 22bd8bb 
  ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java 3938e31 
  ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java 3d00c29 

Diff: https://reviews.apache.org/r/42319/diff/


Testing
-------

I performed several upgrades and downgrades and only saw the problem once. After my changes, I haven't seen it since. I can artificially reproduce it by clearing the EM cache. Working on a test now that tries to capture this scenario since it's the silent-but-deadly type.


Thanks,

Jonathan Hurley


Re: Review Request 42319: Cannot Finalize Downgrade Due To Detached ClusterEntity

Posted by Alejandro Fernandez <af...@hortonworks.com>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/42319/#review114733
-----------------------------------------------------------

Ship it!


Ship It!

- Alejandro Fernandez


On Jan. 15, 2016, 3:30 p.m., Jonathan Hurley wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/42319/
> -----------------------------------------------------------
> 
> (Updated Jan. 15, 2016, 3:30 p.m.)
> 
> 
> Review request for Ambari, Alejandro Fernandez, Jayush Luniya, and Nate Cole.
> 
> 
> Bugs: AMBARI-14674
>     https://issues.apache.org/jira/browse/AMBARI-14674
> 
> 
> Repository: ambari
> 
> 
> Description
> -------
> 
> RU HDP 2.2 to 2.4 downgrade results in:
> 
> {code}
> java.lang.IllegalArgumentException: Can not refresh not managed object: org.apache.ambari.server.orm.entities.ClusterEntity@18126.
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:1024)
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:929)
> 	at org.apache.ambari.server.orm.dao.ClusterDAO.refresh(ClusterDAO.java:309)
> 	at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:68)
> 	at org.apache.ambari.server.state.cluster.ClusterImpl.removeConfigurations(ClusterImpl.java:3216)
> 	at org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction.finalizeDowngrade(FinalizeUpgradeAction.java:314)
>     ...
> {code}
> 
> It seems like what's happening is that the ClusterEntity is being retrieved outside of a JPA session. Although the ClusterDAO creates the session, it also ends it, leaving the Entity detached. We should instead be refreshing this Entity within the bounds of the Transaction.
> 
> 
> Diffs
> -----
> 
>   ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 22bd8bb 
>   ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java 3938e31 
>   ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java 3d00c29 
>   ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java d2ba396 
> 
> Diff: https://reviews.apache.org/r/42319/diff/
> 
> 
> Testing
> -------
> 
> mvn clean test
> 
> Tests run: 3747, Failures: 0, Errors: 0, Skipped: 27
> 
> [INFO] ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO] ------------------------------------------------------------------------
> [INFO] Total time: 32:00 min
> [INFO] Finished at: 2016-01-15T10:21:35-05:00
> [INFO] Final Memory: 36M/1390M
> [INFO] ------------------------------------------------------------------------
> 
> 
> Thanks,
> 
> Jonathan Hurley
> 
>


Re: Review Request 42319: Cannot Finalize Downgrade Due To Detached ClusterEntity

Posted by Jonathan Hurley <jh...@hortonworks.com>.

> On Jan. 15, 2016, 12:35 p.m., Alejandro Fernandez wrote:
> > ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java, line 1115
> > <https://reviews.apache.org/r/42319/diff/2/?file=1198214#file1198214line1115>
> >
> >     How does this fix it if clusterEntity falls out of scope after this assignment?

This doesn't fix it; it's simply good practice. You can easily not assign the return value and move along happily. Then, in 2 weeks someone adds some new code which references clusterEntity but doesn't reference the updated managed entity.


- Jonathan


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/42319/#review114721
-----------------------------------------------------------


On Jan. 15, 2016, 10:30 a.m., Jonathan Hurley wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/42319/
> -----------------------------------------------------------
> 
> (Updated Jan. 15, 2016, 10:30 a.m.)
> 
> 
> Review request for Ambari, Alejandro Fernandez, Jayush Luniya, and Nate Cole.
> 
> 
> Bugs: AMBARI-14674
>     https://issues.apache.org/jira/browse/AMBARI-14674
> 
> 
> Repository: ambari
> 
> 
> Description
> -------
> 
> RU HDP 2.2 to 2.4 downgrade results in:
> 
> {code}
> java.lang.IllegalArgumentException: Can not refresh not managed object: org.apache.ambari.server.orm.entities.ClusterEntity@18126.
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:1024)
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:929)
> 	at org.apache.ambari.server.orm.dao.ClusterDAO.refresh(ClusterDAO.java:309)
> 	at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:68)
> 	at org.apache.ambari.server.state.cluster.ClusterImpl.removeConfigurations(ClusterImpl.java:3216)
> 	at org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction.finalizeDowngrade(FinalizeUpgradeAction.java:314)
>     ...
> {code}
> 
> It seems like what's happening is that the ClusterEntity is being retrieved outside of a JPA session. Although the ClusterDAO creates the session, it also ends it, leaving the Entity detached. We should instead be refreshing this Entity within the bounds of the Transaction.
> 
> 
> Diffs
> -----
> 
>   ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 22bd8bb 
>   ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java 3938e31 
>   ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java 3d00c29 
>   ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java d2ba396 
> 
> Diff: https://reviews.apache.org/r/42319/diff/
> 
> 
> Testing
> -------
> 
> mvn clean test
> 
> Tests run: 3747, Failures: 0, Errors: 0, Skipped: 27
> 
> [INFO] ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO] ------------------------------------------------------------------------
> [INFO] Total time: 32:00 min
> [INFO] Finished at: 2016-01-15T10:21:35-05:00
> [INFO] Final Memory: 36M/1390M
> [INFO] ------------------------------------------------------------------------
> 
> 
> Thanks,
> 
> Jonathan Hurley
> 
>


Re: Review Request 42319: Cannot Finalize Downgrade Due To Detached ClusterEntity

Posted by Alejandro Fernandez <af...@hortonworks.com>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/42319/#review114721
-----------------------------------------------------------



ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java (line 1115)
<https://reviews.apache.org/r/42319/#comment175583>

    How does this fix it if clusterEntity falls out of scope after this assignment?


- Alejandro Fernandez


On Jan. 15, 2016, 3:30 p.m., Jonathan Hurley wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/42319/
> -----------------------------------------------------------
> 
> (Updated Jan. 15, 2016, 3:30 p.m.)
> 
> 
> Review request for Ambari, Alejandro Fernandez, Jayush Luniya, and Nate Cole.
> 
> 
> Bugs: AMBARI-14674
>     https://issues.apache.org/jira/browse/AMBARI-14674
> 
> 
> Repository: ambari
> 
> 
> Description
> -------
> 
> RU HDP 2.2 to 2.4 downgrade results in:
> 
> {code}
> java.lang.IllegalArgumentException: Can not refresh not managed object: org.apache.ambari.server.orm.entities.ClusterEntity@18126.
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:1024)
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:929)
> 	at org.apache.ambari.server.orm.dao.ClusterDAO.refresh(ClusterDAO.java:309)
> 	at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:68)
> 	at org.apache.ambari.server.state.cluster.ClusterImpl.removeConfigurations(ClusterImpl.java:3216)
> 	at org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction.finalizeDowngrade(FinalizeUpgradeAction.java:314)
>     ...
> {code}
> 
> It seems like what's happening is that the ClusterEntity is being retrieved outside of a JPA session. Although the ClusterDAO creates the session, it also ends it, leaving the Entity detached. We should instead be refreshing this Entity within the bounds of the Transaction.
> 
> 
> Diffs
> -----
> 
>   ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 22bd8bb 
>   ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java 3938e31 
>   ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java 3d00c29 
>   ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java d2ba396 
> 
> Diff: https://reviews.apache.org/r/42319/diff/
> 
> 
> Testing
> -------
> 
> mvn clean test
> 
> Tests run: 3747, Failures: 0, Errors: 0, Skipped: 27
> 
> [INFO] ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO] ------------------------------------------------------------------------
> [INFO] Total time: 32:00 min
> [INFO] Finished at: 2016-01-15T10:21:35-05:00
> [INFO] Final Memory: 36M/1390M
> [INFO] ------------------------------------------------------------------------
> 
> 
> Thanks,
> 
> Jonathan Hurley
> 
>


Re: Review Request 42319: Cannot Finalize Downgrade Due To Detached ClusterEntity

Posted by Nate Cole <nc...@hortonworks.com>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/42319/#review114745
-----------------------------------------------------------

Ship it!


Ship It!

- Nate Cole


On Jan. 15, 2016, 10:30 a.m., Jonathan Hurley wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/42319/
> -----------------------------------------------------------
> 
> (Updated Jan. 15, 2016, 10:30 a.m.)
> 
> 
> Review request for Ambari, Alejandro Fernandez, Jayush Luniya, and Nate Cole.
> 
> 
> Bugs: AMBARI-14674
>     https://issues.apache.org/jira/browse/AMBARI-14674
> 
> 
> Repository: ambari
> 
> 
> Description
> -------
> 
> RU HDP 2.2 to 2.4 downgrade results in:
> 
> {code}
> java.lang.IllegalArgumentException: Can not refresh not managed object: org.apache.ambari.server.orm.entities.ClusterEntity@18126.
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:1024)
> 	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:929)
> 	at org.apache.ambari.server.orm.dao.ClusterDAO.refresh(ClusterDAO.java:309)
> 	at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:68)
> 	at org.apache.ambari.server.state.cluster.ClusterImpl.removeConfigurations(ClusterImpl.java:3216)
> 	at org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction.finalizeDowngrade(FinalizeUpgradeAction.java:314)
>     ...
> {code}
> 
> It seems like what's happening is that the ClusterEntity is being retrieved outside of a JPA session. Although the ClusterDAO creates the session, it also ends it, leaving the Entity detached. We should instead be refreshing this Entity within the bounds of the Transaction.
> 
> 
> Diffs
> -----
> 
>   ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 22bd8bb 
>   ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java 3938e31 
>   ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java 3d00c29 
>   ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java d2ba396 
> 
> Diff: https://reviews.apache.org/r/42319/diff/
> 
> 
> Testing
> -------
> 
> mvn clean test
> 
> Tests run: 3747, Failures: 0, Errors: 0, Skipped: 27
> 
> [INFO] ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO] ------------------------------------------------------------------------
> [INFO] Total time: 32:00 min
> [INFO] Finished at: 2016-01-15T10:21:35-05:00
> [INFO] Final Memory: 36M/1390M
> [INFO] ------------------------------------------------------------------------
> 
> 
> Thanks,
> 
> Jonathan Hurley
> 
>


Re: Review Request 42319: Cannot Finalize Downgrade Due To Detached ClusterEntity

Posted by Jonathan Hurley <jh...@hortonworks.com>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/42319/
-----------------------------------------------------------

(Updated Jan. 15, 2016, 10:30 a.m.)


Review request for Ambari, Alejandro Fernandez, Jayush Luniya, and Nate Cole.


Bugs: AMBARI-14674
    https://issues.apache.org/jira/browse/AMBARI-14674


Repository: ambari


Description
-------

RU HDP 2.2 to 2.4 downgrade results in:

{code}
java.lang.IllegalArgumentException: Can not refresh not managed object: org.apache.ambari.server.orm.entities.ClusterEntity@18126.
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:1024)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:929)
	at org.apache.ambari.server.orm.dao.ClusterDAO.refresh(ClusterDAO.java:309)
	at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:68)
	at org.apache.ambari.server.state.cluster.ClusterImpl.removeConfigurations(ClusterImpl.java:3216)
	at org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction.finalizeDowngrade(FinalizeUpgradeAction.java:314)
    ...
{code}

It seems like what's happening is that the ClusterEntity is being retrieved outside of a JPA session. Although the ClusterDAO creates the session, it also ends it, leaving the Entity detached. We should instead be refreshing this Entity within the bounds of the Transaction.


Diffs
-----

  ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 22bd8bb 
  ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java 3938e31 
  ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java 3d00c29 
  ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java d2ba396 

Diff: https://reviews.apache.org/r/42319/diff/


Testing (updated)
-------

mvn clean test

Tests run: 3747, Failures: 0, Errors: 0, Skipped: 27

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 32:00 min
[INFO] Finished at: 2016-01-15T10:21:35-05:00
[INFO] Final Memory: 36M/1390M
[INFO] ------------------------------------------------------------------------


Thanks,

Jonathan Hurley


Re: Review Request 42319: Cannot Finalize Downgrade Due To Detached ClusterEntity

Posted by Jonathan Hurley <jh...@hortonworks.com>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/42319/
-----------------------------------------------------------

(Updated Jan. 15, 2016, 8:38 a.m.)


Review request for Ambari, Alejandro Fernandez, Jayush Luniya, and Nate Cole.


Changes
-------

Found under certain circumstances removing entities from lists doesn't actually instruct JPA to remove that element from the EntityManager, resulting in a detached entity merge. Was able to reproduce in a test case (yay!)


Bugs: AMBARI-14674
    https://issues.apache.org/jira/browse/AMBARI-14674


Repository: ambari


Description
-------

RU HDP 2.2 to 2.4 downgrade results in:

{code}
java.lang.IllegalArgumentException: Can not refresh not managed object: org.apache.ambari.server.orm.entities.ClusterEntity@18126.
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:1024)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:929)
	at org.apache.ambari.server.orm.dao.ClusterDAO.refresh(ClusterDAO.java:309)
	at org.apache.ambari.server.orm.AmbariJpaLocalTxnInterceptor.invoke(AmbariJpaLocalTxnInterceptor.java:68)
	at org.apache.ambari.server.state.cluster.ClusterImpl.removeConfigurations(ClusterImpl.java:3216)
	at org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction.finalizeDowngrade(FinalizeUpgradeAction.java:314)
    ...
{code}

It seems like what's happening is that the ClusterEntity is being retrieved outside of a JPA session. Although the ClusterDAO creates the session, it also ends it, leaving the Entity detached. We should instead be refreshing this Entity within the bounds of the Transaction.


Diffs (updated)
-----

  ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 22bd8bb 
  ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java 3938e31 
  ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java 3d00c29 
  ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java d2ba396 

Diff: https://reviews.apache.org/r/42319/diff/


Testing (updated)
-------

mvn clean test


Thanks,

Jonathan Hurley