Using the suggestions below, looping through the Config Items doesn't appear to be the issue. I ran into an issue with the UpgradeProduction. In total it took 18 min to shutdown all the Services in just one namespace when I looped through all the Config Items, disabled them, and then Updated the Production with no timeout or force to shut them down. Is there a way to make UpgradeProduction run faster beside setting the timeout or force?

I need to be able to loop through all the Services/Operations to shut them down to ensure that the TCP Disconnect is sent. 

We had a consultant create us a script that uses Regex to loop through and shutdown those Services/Operations, but running the script to bring everything down takes a good 10 min or so to disable all the Service Operation Objects.

In testing the cut over when we did our Test Environment in total it took us 20 min to bring down Ensemble (2018.1.3) and bring up IRIS (2022.1) with the network changes.

But we forgot this step and had to ask different systems to restart their Interfaces because they were still hung on the previous connections and don't have framework to realize the connection was no longer connected.

Is there a way to be able to cutdown the response time of EnableConfig item?

I tried the open also. But I did find a work around by resetting the ##class(%File).SetAttributes which is basically doing a chmod but at the ObjectScript level when creating/appending to the file. 

So what is %Stream really doing, is it just creating a new file based on what is in memory? Is it just reading the entire file into Memory so the IO is cut down and creating a new file from what is in Memory?

We have gone through all the permission settings at the directory and user level. We do not believe it is an unmask issue as the file is ok when it is first created, but the subsequent writes cause the permissions to change. If it was an unmask issue wouldn't the file have the wrong permissions in the first place? And I confirmed its not a user issue as its been duplicated with the owner of the directory and others within the same group.

Instead of MoveToOpen is there a way to use Open the file and go to the end of the file to insert the data? I tried looking at %File but could not figure out now to append data to the end of the file I just kept overwriting data.

Not really... 

I am not sure if this matters, but I deleted and re-created the TESTCLIN namespace while this was still on the scheduler and trying to run. I updated the Report settings to point to the new TESTCLIN namespace but still receiving this error. I have opened a ticket with WRC to see if the Doc DB IRISInteroperabilityPorts just needs deleted from TESTCLIN and we try again.

The documentation mentions the use of ZMIRROR to Monitor the Mirroring....

Does anyone have any code/scripts they would be willing to share that shows me how ZMIRROR works and how it can be used?

Does ZMIRROR have to be scripts that are run on each part of the Mirror to monitor the status or can this be done on the server that is the Arbiter?

How can one detect that a failover is happening and therefore kick of shell level scripts to execute stuff on the OS Level such as moving the VIP and syncing directories?