This message is logged in cconsole.log (and alerts.log) when, during a transaction rollback, Cache finds a global node with an unexpected value, different from the value it had when the transaction started. The process keeps the unexpected value and logs the message. And your system won't hang because of that.
The following commands can be used to produce the case:
USER>s ^mytest = "before transaction" USER>tstart TL1:USER>k ^mytest TL1:USER>s ^mytest = "inside transaction"
In a separate terminal session, run set ^mytest = "separate terminal"
TL1:USER>trollback USER>w ^mytest separate terminal
cconsole.log
02/22/11-13:09:09:250 (4832) 2 Skipping SET (kill) due to compare and swap failed on ^["^^d:\isc\c2010_2_0_454_0\mgr\user\"]mytest for records in d:\isc\c2010_2_0_454_0\mgr\user\ addr=158748 02/22/11-13:09:09:250 (4832) 2 Skipping KILL due to global ^["^^d:\isc\c2010_2_0_454_0\mgr\user\"]mytest already exist for records in d:\isc\c2010_2_0_454_0\mgr\user\ addr=158352
Glad to hear that! I have met John more than 15 years ago in Cambridge when he kindly helped me with MSM-Workstation issues... Yes, he was a MSM authority too :) Congratulations, John!
It is not possible for a component within a production to update the production, which is what you are trying to do using the third parameter of EnableConfigItem equal to 1. That is why you are receiving ERROR <Ens>ErrJobRegistryNotClean (the process trying to update the production is trying to update itself).
You should update the production by running UpdateProduction via Job command, as follows:
Set tSC = ##class(Ens.Director).EnableConfigItem(pConfigItemName,0,0)
Set tSC = ##class(Ens.Director).EnableConfigItem(pConfigItemName,1,0)
job ##class(Ens.Director).UpdateProduction()
Hope this helps.