-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/41477/
-----------------------------------------------------------
(Updated Dec. 18, 2015, 6:25 p.m.)
Review request for Ambari, Jonathan Hurley, Myroslav Papirkovskyy, and Nate
Cole.
Changes
-------
- Made sure that the entity reference does not escape ClusterImpl and added
documentation for the same
- Made sure all mutations that use this reference make sure that it is
refreshed and thereby is attached to current session
- Added missing @Transactional on
org.apache.ambari.server.state.cluster.ClusterImpl#setCurrentStackVersion
- Presently, the clusterEntity reference is used when the cluster is not yet
persisted and this is a valid use case but removing it would be a much larger
refactoring effort and should be done with a two digit version release eg:
2.3.0, in my opinion. Thereby still going with the approach of refactoring all
mutations on the in-memory object to refresh the reference with latest
information and leaving the getter alone.
Bugs: AMBARI-14411
https://issues.apache.org/jira/browse/AMBARI-14411
Repository: ambari
Description
-------
*Preliminary patch*
Symptom:
{code}
Local Exception Stack:
Exception [EclipseLink-6004] (Eclipse Persistence Services -
2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: The object
[org.apache.ambari.server.orm.entities.ClusterConfigEntity@3646b3a8], of class
[class org.apache.ambari.server.orm.entities.ClusterConfigEntity], with
identity hashcode (System.identityHashCode()) [364,075,546],
is not from this UnitOfWork object space, but the parent session's. The object
was never registered in this UnitOfWork,
but read from the parent session and related to an object registered in the
UnitOfWork. Ensure that you are correctly
registering your objects. If you are still having problems, you can use the
UnitOfWork.validateObjectSpace() method to
help debug where the error occurred. For more information, see the manual or
FAQ.
at
org.eclipse.persistence.exceptions.QueryException.backupCloneIsOriginalFromParent(QueryException.java:298)
at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.getBackupClone(UnitOfWorkImpl.java:1995)
at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerExistingObject(UnitOfWorkImpl.java:3976)
at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerExistingObject(UnitOfWorkImpl.java:3894)
at
org.eclipse.persistence.mappings.CollectionMapping.buildElementUnitOfWorkClone(CollectionMapping.java:308)
at
org.eclipse.persistence.mappings.CollectionMapping.buildElementClone(CollectionMapping.java:321)
at
org.eclipse.persistence.internal.queries.ContainerPolicy.addNextValueFromIteratorInto(ContainerPolicy.java:217)
{code}
Likely Cause:
Stale clusterEntity reference points to a detached entity which gets tried to
be merged, the Cascaded relationship throws the error on persist.
Diffs (updated)
-----
ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
a0c6cfc
Diff: https://reviews.apache.org/r/41477/diff/
Testing
-------
Unit testing in progress.
Thanks,
Sid Wagle