Symptoms

You can see the errors like the following in EventLog on MPS node:

Event Source: Provisioning Engine
Event Category: None
Event ID: 4108 or 4109
Date: X/XX/XXXX
Time: XX:XX:XX
User: N/A
Computer: XXXX
Description:
The provisioning engine failed while aborting the transaction picked by the background thread for cleanup. Transaction ID = 'XXXXX', client transaction ID = '{unknown}',
Transaction Log server = 'XXX-XXX' Database = 'MPFTranLogData'.
The transaction might be in an inconsistent state.
Check the transaction log database to determine the exact state of the transaction. For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Cause

The following issues could be the reason of such errors:

  • Some MPS Provider throws exception on transaction rollback, e.g. SetUserPassword procedure in standard Active Directory provider. this is an issue of Microsoft's providers implementation, because by design MPS Engine requires no-error policy in transaction rollback method.

  • This may be a result of incorrect MPS Engine restart (dllhost.exe process killing).

The standard behaviour of MPS Engine is to remove failed transactions to the MPFAuditLog database, but sometimes it does not happen. Possibly it is a Microsoft issue.

Resolution

  1. Log on on to the Microsoft Provisioing System host (POAMPS01) using an account that is a member of the Domain Administators group.
  2. Run Administrative Tools > Event Viewer.
  3. Right-click Application and select View > Filter.
  4. In Event Types box check Error and uncheck Information and Warning check boxes.
  5. Select Provisioning Engine in Event Source combo box.
  6. In Event ID type 4109. Click OK.
  7. On the right pane double-click on every event and copy Transaction ID to textual file (comma separated list of failed transaction ids).
  8. Repeat steps 2-6 but enter 4108 for Event ID field.
  9. Run Microsoft SQL Server > SQL Query Analizer tool.
  10. Select MPFTranLogData database in databases combo box.
  11. Enter the following SQL script:

    DELETE FROM Request WHERE TranIdx IN (<comma separated list of failed transaction ids>)
    DELETE FROM TransIDs WHERE TranIdx IN (<comma separated list of failed transaction ids>)
    
  12. Click Execute Query button. Example:

    DELETE FROM Request WHERE TranIdx in (32256, 34175, 34178)
    DELETE FROM TransIDs WHERE TranIdx in (32256, 34175, 34178)
    

Important!

TransIDs table may exist under two owners: dbo and POADOMAIN\MPFServiceAcct. Execute query for table with POADOMAIN\MPFServiceAcct owner, i.e.:

DELETE FROM "POADOMAIN\MPFServiceAcct".TransIDs WHERE TranIdx in (32256, 34175, 34178)

Internal content