ambari-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sid Wagle" <swa...@hortonworks.com>
Subject Re: Review Request 41477: Fix stale cluster entity reference which results in merge issues
Date Thu, 07 Jan 2016 22:17:21 GMT


> On Jan. 6, 2016, 5:31 a.m., Ajit Kumar wrote:
> > ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java,
line 838
> > <https://reviews.apache.org/r/41477/diff/3/?file=1183400#file1183400line838>
> >
> >     why clusterId is declared as Long instead of long?
> 
> Sid Wagle wrote:
>     It could technically be null. The clusterId management is pretty much left upto the
calling code, for Cluster object not persisted, the id could be null and thereby a valid value,
IMO.
> 
> Ajit Kumar wrote:
>     If this is null then get method will throw NullPointerException as it is returning
long instead of Long. You will also have to check all methods where you are passing clusterId
 to make sure it doesn't throw NullPointerException while converting from Long to long.
> 
> Sid Wagle wrote:
>     Good point, I getter should return Long instead. Will make that change as a separate
commit.
> 
> Ajit Kumar wrote:
>     Please correct me if wrong. I looked at ClusterEntity and clusterId is non-nullable.
So it should never be null.

That is correct, the NonNullable only applies to the DB column be notnull, JPA makes sure
of that. The value is autogenrated squence value that will become available after the entity
becomes managed. The ClusterImpl.clusterId is a cached value of he id, hence the calling code
need to make sure the ClusterEntity is persisted before creating instance of the Cluster.
Ref: org.apache.ambari.server.state.cluster.ClustersImpl#addCluster

Note: I have reverted the refrence back to primitive typeref.


- Sid


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


On Jan. 6, 2016, 1:43 a.m., Sid Wagle wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/41477/
> -----------------------------------------------------------
> 
> (Updated Jan. 6, 2016, 1:43 a.m.)
> 
> 
> Review request for Ambari, Jonathan Hurley, Myroslav Papirkovskyy, Nate Cole, and Sumit
Mohanty.
> 
> 
> 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
> -----
> 
>   ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
3358e8c 
>   ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
3998f1c 
> 
> Diff: https://reviews.apache.org/r/41477/diff/
> 
> 
> Testing
> -------
> 
> Unit testing in progress.
> 
> 
> Thanks,
> 
> Sid Wagle
> 
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message