It seems that UDT instance members that are memory tags are reinitialised after this change if overwrite is selected.
In the past, the UDT would overwritten with memory tag value overrrides in instances intact. If members were deleted in the UDT definition, they would remain (not ideal).
Right now, after the UDT definition is updated, all memory tags are overwritten.
How can I go about distributing standards UDT definitions across multiple gateways and tag providers without destroying memory tag values in the member of the instances?
No, the UDT definition only contains folder and atomic members.
What I’m seeing is that after 8.1.6 all memory tags lose their value override when the definition is updated with overwrite option. No members were renamed.
Merge can work for most applications, but it does not remove the occasional deleted member.
This would suggest that all property overrides are removed which is extremely concerning!! Some UDT instances will not perform correctly without overridden properties and contain key configuration. What about things like dataset tag values?. Can you check if this is also the case for other types of property overrides, not just the value?
I have noticed that even in earlier versions, that deleting a UDT definition that has instances and then adding it back in will remove all property overrides on the instances, which is super dangerous. This is happening in v8.1.5. Actually I might create my own topic for this one
You are correct. All properties overrides are gone. Only parameters survive.
What is also new, is that my UDT distribution script between tag providers is locking up the internal DB. This happened without any real changes, just a redistribution:
Error saving node configuration
simpleorm.utils.SException$Jdbc: Opening com.inductiveautomation.ignition.gateway.localdb.sqlite.SingleConnectionDatasource@5bcf3bfa
at simpleorm.sessionjdbc.SSessionJdbc.innerOpen(SSessionJdbc.java:113)
at com.inductiveautomation.ignition.gateway.localdb.persistence.PersistenceSession.initialize(PersistenceSession.java:31)
at com.inductiveautomation.ignition.gateway.localdb.PersistenceInterfaceImpl.getSession(PersistenceInterfaceImpl.java:64)
at com.inductiveautomation.ignition.gateway.localdb.PersistenceInterfaceImpl.save(PersistenceInterfaceImpl.java:105)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager.saveVersion(InternalJsonStorageManager.java:91)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager$RedundantTagSynchronizationProvider.setVersion(InternalJsonStorageManager.java:592)
at com.inductiveautomation.ignition.gateway.redundancy.types.AbstractSynchronizedStateProvider.incrementVersion(AbstractSynchronizedStateProvider.java:93)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager$RedundantTagSynchronizationProvider.processChanges(InternalJsonStorageManager.java:640)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager.save(InternalJsonStorageManager.java:181)
at com.inductiveautomation.ignition.gateway.tags.config.BatchConfigOperation.save(BatchConfigOperation.java:120)
at com.inductiveautomation.ignition.gateway.tags.config.BatchConfigOperation.execute(BatchConfigOperation.java:105)
at com.inductiveautomation.ignition.gateway.tags.evaluation.BatchContextImpl$OpController.run(BatchContextImpl.java:240)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Connection is locked. Datasource only allows one connection at a time. More information was logged to the gateway console.
at com.inductiveautomation.ignition.gateway.localdb.sqlite.SingleConnectionDatasource.getConnection(SingleConnectionDatasource.java:75)
at simpleorm.sessionjdbc.SSessionJdbc.innerOpen(SSessionJdbc.java:111)
... 14 common frames omitted
Error saving record: "[InternalJsonStorageInfoRecord 3 Dirty0]"
simpleorm.utils.SException$Jdbc: Opening com.inductiveautomation.ignition.gateway.localdb.sqlite.SingleConnectionDatasource@5bcf3bfa
at simpleorm.sessionjdbc.SSessionJdbc.innerOpen(SSessionJdbc.java:113)
at com.inductiveautomation.ignition.gateway.localdb.persistence.PersistenceSession.initialize(PersistenceSession.java:31)
at com.inductiveautomation.ignition.gateway.localdb.PersistenceInterfaceImpl.getSession(PersistenceInterfaceImpl.java:64)
at com.inductiveautomation.ignition.gateway.localdb.PersistenceInterfaceImpl.save(PersistenceInterfaceImpl.java:105)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager.saveVersion(InternalJsonStorageManager.java:91)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager$RedundantTagSynchronizationProvider.setVersion(InternalJsonStorageManager.java:592)
at com.inductiveautomation.ignition.gateway.redundancy.types.AbstractSynchronizedStateProvider.incrementVersion(AbstractSynchronizedStateProvider.java:93)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager$RedundantTagSynchronizationProvider.processChanges(InternalJsonStorageManager.java:640)
at com.inductiveautomation.ignition.gateway.tags.config.storage.internaljson.InternalJsonStorageManager.save(InternalJsonStorageManager.java:181)
at com.inductiveautomation.ignition.gateway.tags.config.BatchConfigOperation.save(BatchConfigOperation.java:120)
at com.inductiveautomation.ignition.gateway.tags.config.BatchConfigOperation.execute(BatchConfigOperation.java:105)
at com.inductiveautomation.ignition.gateway.tags.evaluation.BatchContextImpl$OpController.run(BatchContextImpl.java:240)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Connection is locked. Datasource only allows one connection at a time. More information was logged to the gateway console.
at com.inductiveautomation.ignition.gateway.localdb.sqlite.SingleConnectionDatasource.getConnection(SingleConnectionDatasource.java:75)
at simpleorm.sessionjdbc.SSessionJdbc.innerOpen(SSessionJdbc.java:111)
... 14 common frames omitted