Don't duplicate plug-in step registration
Category: Performance
Impact potential: High
Symptoms
Duplicate plug-in step registration causes the plug-in to fire multiple times on the same message/event. Duplicate plug-in step registration could lead to:
Delayed processing of asynchronous jobs when registered as an asynchronous execution mode.
Degraded user performance experience when registered as a synchronous execution mode. Experiences include:
- Unresponsive model-driven apps
- Slow client interactions
- The browser stops responding
Guidance
Ensure you're updating existing plug-in registration steps rather than deleting and re-creating them. Additionally, only create and update plug-in registration steps in a supported manner.
Problematic patterns
Warning
These patterns should be avoided.
Deleting and recreating a step in the source instance (test, dev, preprod) creates a duplicate step being registered in the target environment if that step was registered before.
Manually creating the SDKMessageProcessingSteps
with a new GUID or updating the existing GUID within the customizations.xml
file results in a duplicate step being registered. These types of tasks are unsupported as outlined in When to edit the customizations file.
Additional information
Duplicate plug-in step registration could cause SQL deadlocking when the events are registered on an update message. When issuing an update on a record, SQL creates a row lock on that record. If another transaction tries to update that same record, it has to wait until the lock is released before it's able to make the update. If a timeout occurs, the transaction is rolled back and the update isn't committed to the SQL database.