The Site Doctor Blog

Footprints in the snow of a warped mind

< Back to Blog

Error running Ucommerce scratch indexer Illegal duplicate key definitions

We hit an interesting issue indexing the Ucommerce data the other day which had us going for a while.

It turns out that when upgrading Ucommerce to 7.0.6, some new payment providers were added to `uCommerce_Definition` with duplicate Guids which then caused an issue. We found it by searching the database for the value `c94644e4-f213-48a6-98eb-741aca16155f`.

In our instance it was

Id Name
4 Adyen
9 eWAY
19 Ideal (Ing Bank)
21 Schibsted

The fix was to remove this duplicate. If you want to _just update_ the data you can run this (assuming the ids are the same!):

UPDATE uCommerce_Definition 
SET Guid=NEWID() 
WHERE DefinitionId IN (4,9,19,21)

It would probably be worth checking your data though as I suspect the Guids will be different so you can find these using this:

SELECT * 
FROM uCommerce_Definition d 
WHERE EXISTS(
    SELECT * 
    FROM uCommerce_Definition id 
    WHERE id.Guid=d.Guid AND id.DefinitionId<>d.DefinitionId
)

The error it threw was when indexing/scratch indexing and it looks like this: the key bit is after the `/` i.e. in `definitions/c94644e4-f213-48a6-98eb-741aca16155f`, `c94644e4-f213-48a6-98eb-741aca16155f` is the Guid you need to look for.

System.AggregateException: One or more errors occurred. ---> Raven.Abstractions.Exceptions.ConcurrencyException: Illegal duplicate key definitions/c94644e4-f213-48a6-98eb-741aca16155f ---> Microsoft.Isam.Esent.Interop.EsentKeyDuplicateException: Illegal duplicate key
   at Microsoft.Isam.Esent.Interop.Api.JetUpdate(JET_SESID sesid, JET_TABLEID tableid, Byte[] bookmark, Int32 bookmarkSize, Int32& actualBookmarkSize)
   at Microsoft.Isam.Esent.Interop.Update.Save(Byte[] bookmark, Int32 bookmarkSize, Int32& actualBookmarkSize)
   at Raven.Storage.Esent.StorageActions.DocumentStorageActions.InsertDocument(String key, RavenJObject data, RavenJObject metadata, Boolean overwriteExisting)
   --- End of inner exception stack trace ---
   at Raven.Storage.Esent.StorageActions.DocumentStorageActions.InsertDocument(String key, RavenJObject data, RavenJObject metadata, Boolean overwriteExisting)
   at Raven.Database.Actions.DocumentActions.<>c__DisplayClass1c.b__17(IStorageActionsAccessor accessor)
   at Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(Action`1 action, EsentTransactionContext transactionContext)
   at Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 action)
   at Raven.Database.Actions.DocumentActions.BulkInsert(BulkInsertOptions options, IEnumerable`1 docBatches, Guid operationId, CancellationToken token)
   at Raven.Database.Server.Controllers.BulkInsertController.<>c__DisplayClass6.b__3()
Author: Tim on

Liked this post? Got a suggestion? Leave a comment