• Bug
  • Status: Closed
  • 2 Major
  • Resolution: Fixed
  • DSO:L1
  • cdennis
  • Reporter: wharley
  • May 26, 2009
  • 0
  • Watchers: 1
  • August 20, 2009
  • May 27, 2009

Description

ManagerImpl.isDsoMonitorEntered() logs a problem with an object, but it tries to print the object (implicitly calling toString()). For many objects this will cause an unbounded stack dive, as trying to get the object’s state triggers the same method. Getting the object’s state can also trigger Hibernate to resolve lazy-initialized collections, thus adding to the cluster at an inappropriate time.

It would be better to just print the object’s class and perhaps its identityHashCode().

I don’t see any other examples in ManagerImpl, but it looks like there are some in ClientObjectManagerImpl too.

Comments

Fiona OShea 2009-05-26

See DEV-2840 for an example, but there are many. — moved this as DEV is not externally viewable so referencing it in CDV won’t do anything

Fiona OShea 2009-05-27

Please add fix to trunk, and 3.0 thanks

Chris Dennis 2009-05-27

Changed the method in ManagerImpl to only log the class and identity hashcode of the object to prevent any side-effects of calling toString. Also changed the contents of two assertions in ClientObjectManagerImpl (not so crucial). I’m going to resolve this for now, but if anyone knows of any others we can either reopen this JIRA or file a fresh one.

Kalai Kannaiyan 2009-08-12

Verified the fix made on trunk and 3.0 with svn rev12796 and 12798