Identity Broker Forum
Welcome to the community forum for Identity Broker.
Browse the knowledge base, ask questions directly to the product group, or leverage the community to get answers. Leave ideas for new features and vote for the features or bug fixes you want most.

Identity Broker dropping connector space
The PS script for importing all users from 0365 sometimes errors with the following:
Import all entities from connector failed.
Import all entities from connector Office 365 Staff Licenses failed with reason An unexpected error occurred.. Duration: 00:00:06.8594919
Error details:
Microsoft.Online.Administration.Automation.MicrosoftOnlineException: An unexpected error occurred.
at Unify.Product.IdentityBroker.PowerShellConnector.<GetEntitiesInScript>d__a.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at Unify.Framework.Collections.ActionOnExceptionEnumerator`1.MoveNext()
at Unify.Framework.Collections.EnumerableExtensions.<ActionOnLast>d__19`1.MoveNext()
at Unify.Framework.Collections.EnumerableExtensions.<ProduceAutoPages>d__a`1.MoveNext()
at Unify.Framework.Visitor.ThreadsafeVisitorEvaluator`1.Visit()
at Unify.Product.IdentityBroker.RepositoryChangeDetectionWorkerBase.PerformChangeDetection(IEnumerable`1 connectorEntities)
at Unify.Product.IdentityBroker.ChangeDetectionImportAllJob.ImportAllChangeProcess()
at Unify.Product.IdentityBroker.ChangeDetectionImportAllJob.RunBase()
at Unify.Framework.DefinedScopeJobAuditTrailJobDecorator.Run()
at Unify.Product.IdentityBroker.ConnectorJobExecutor.<>c_DisplayClass29.<Run>b_27()
at Unify.Framework.AsynchronousJobExecutor.PerformJobCallback(Object state)
Original discussion with product team suggested that since that function returns IEnumerable result that if the connection were to drop part way through the call would not complete. Modified script to define an array for the result and populate that. Sometimes the array populates sometimes it fails. Normally failure stops the script, but sometimes it gets seen as an empty result and the 45000 users are wiped from the IdB connector - which flows deletes to FIM CS. Next successful or partially successful load puts them back and they rejoin, but this should not be happening.
The portion of the PS script that connects and gets users has been run as a standalone from the server and did not drop out or fail, but running from IdB seems to be consistently flakey.
I understand that this is more likely to be an MSOL or PS issue, but would appreciate any assistance around how to troubleshoot the unexpected errors or any suggestions for possible workarounds.
prodo365staff.ps1
staff.ps1
student.ps1
Unify.IdentityBroker.Entity.PowerShell.dll

Clear connector race condition.
There is a race condition in Identity Broker that could cause incorrect deletes on adapter delta imports.
Imagine I have done an Import All on a connector which returned 20 changes.
I immediately follow with a clear all operation, which clears the connector and adapter context, as well as any processed changes.
Imagine that 10 changes have not yet been processed (possible with very large change sets).
These changes will then be picked up by the change processor, and registered as changes.
If I follow up with a Delta import from FIM, IDB will calculate these 10 orphaned changes as deletes.
We can handle the currently unprocessed changes by clearing the remaining untouched changes.
For the changes in memory, either the count of changes processed on each cycle will need to be throttled, or a conditional might be added to wrap each cycle, or this potential race condition might just need to be highlighted on the UI/documentation.

Relational transformations with optional DN generators can break on change detection.
Relational transformations with optional DN generators can break on change detection if the optional DN generator is configured.
The factory being used for this does not add a contribution for the target of the DN Generator attribute mapper on ApplyChainedChangeDetection, which can result in a NullReferenceException during change detection.
This appears in the logs as
Changes register item processing on failed. Changes register item processing on connector CSV Connector failed with reason Object reference not set to an instance of an object.. Duration: 00:01:47.7557745 Error details: System.NullReferenceException: Object reference not set to an instance of an object. at Unify.Product.IdentityBroker.ChainedTransformationChangeProcessor.PublishChange(IEnumerable`1 changedEntities, DateTime changeProcessTime, ICollection`1 changeRecords) in S:\hg\Product\IdentityBroker\Master-Changes\Source\Adapter\Unify.IdentityBroker.Adapter.EntityTransformation\ChainedTransformationChangeProcessor.cs:line 132 at Unify.Product.IdentityBroker.ChainedTransformationChangeProcessor.ProcessChangeReport(IDictionaryTwoPassDifferenceReport`4 changesReport, DateTime changeProcessTime) in S:\hg\Product\IdentityBroker\Master-Changes\Source\Adapter\Unify.IdentityBroker.Adapter.EntityTransformation\ChainedTransformationChangeProcessor.cs:line 109 at Unify.Product.IdentityBroker.ChangeReportProcessor.<>c__DisplayClass12.<ProcessCurrentReport>b__11(ITransformationChangeProcessor processor) in S:\hg\Product\IdentityBroker\Master-Changes\Source\ChangeDetection\Unify.IdentityBroker.ChangeDetection\ChangeReportProcessor.cs:line 159 at Unify.Framework.Visitor.<>c__DisplayClass1`1.<Visit>b__0(T item, Int32 index) in S:\hg\Framework\Core\a\Source\DesignPatterns\Unify.Framework.DesignPatterns\Visitor.cs:line 23 at Unify.Framework.Visitor.Visit[T](IEnumerable`1 visitCollection, Action`2 visitor) in S:\hg\Framework\Core\a\Source\DesignPatterns\Unify.Framework.DesignPatterns\Visitor.cs:line 47 at Unify.Framework.Visitor.Visit[T](IEnumerable`1 visitCollection, Action`1 visitor) in S:\hg\Framework\Core\a\Source\DesignPatterns\Unify.Framework.DesignPatterns\Visitor.cs:line 23 at Unify.Product.IdentityBroker.ChangeReportProcessor.ProcessCurrentReport(IEnumerable`1 adapterTransformationProcessors, IDictionaryTwoPassDifferenceReport`4 differenceReport, DateTime changeTime) in S:\hg\Product\IdentityBroker\Master-Changes\Source\ChangeDetection\Unify.IdentityBroker.ChangeDetection\ChangeReportProcessor.cs:line 158 at Unify.Product.IdentityBroker.ChangeReportProcessor.CreateAndProcessReport[T](IEnumerable`1 adapterTransformationProcessors, IEnumerable`1 sourceEnumerable, DateTime changeTime, Action`2 addAction) in S:\hg\Product\IdentityBroker\Master-Changes\Source\ChangeDetection\Unify.IdentityBroker.ChangeDetection\ChangeReportProcessor.cs:line 147 at Unify.Product.IdentityBroker.ChangeReportProcessor.ProcessReport(IChangeReportProcessingRequest request) in S:\hg\Product\IdentityBroker\Master-Changes\Source\ChangeDetection\Unify.IdentityBroker.ChangeDetection\ChangeReportProcessor.cs:line 118
Additionally the Time Relational transformation adds a contribution for the target twice, resulting in a argument exception.

Error thrown following connector full imports
When a connector full import runs, the following error is thrown when attempting to stop change detection. _RunningChangeDetectionTasks is an empty dictionary:
The given key was not present in the dictionary.
> Unify.Framework.Collections.dll!Unify.Framework.Collections.ThreadsafeDictionaryBase<System.Guid,Unify.Framework.Collections.IThreadsafeCollection<System.Guid>,System.Collections.Generic.IDictionary<System.Guid,Unify.Framework.Collections.IThreadsafeCollection<System.Guid>>>.thisSystem.Guid.get(System.Guid key) Line 184 + 0x89 bytes C#
Unify.IdentityBroker.ChangeDetection.Engine.dll!Unify.Product.IdentityBroker.ConnectorStatisticsEngine.StopChangeDetection(System.Guid connectorId, System.Guid taskId) Line 843 + 0x57 bytes C#
Unify.IdentityBroker.ChangeDetection.Engine.dll!Unify.Product.IdentityBroker.ConnectorStatisticsEngine.SetChangeDetectionValues.AnonymousMethod__21() Line 730 + 0x98 bytes C#
Unify.Framework.Scheduling.Job.dll!Unify.Framework.ExtensionMethods.WaitOnMutex(System.Threading.Mutex mutex, System.Action work) Line 21 + 0xf bytes C#
Unify.IdentityBroker.ChangeDetection.Engine.dll!Unify.Product.IdentityBroker.ConnectorStatisticsEngine.SetChangeDetectionValues(System.Guid taskId, System.Guid connectorId, System.DateTime time, System.TimeSpan duration, Unify.Framework.Collections.IDictionaryTwoPassDifferenceReport<System.Guid,Unify.Product.IdentityBroker.IEntity,Unify.Framework.Collections.GroupedNameValueCollectionKey,Unify.Framework.IValue> differenceReport, bool succeeded, string errorMessage) Line 728 + 0x54 bytes C#
Unify.IdentityBroker.ChangeDetection.Engine.dll!Unify.Product.IdentityBroker.ConnectorStatisticsEngine.Notify(Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent message) Line 355 + 0x1a9 bytes C#
Unify.Framework.Notification.dll!Unify.Framework.Notification.NotificationSinkList<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>.Notify.AnonymousMethod__0(Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent> sink) Line 23 + 0x6f bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>>.AnonymousMethod__0(Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent> item, int index) Line 23 + 0x24 bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>>(System.Collections.Generic.IEnumerable<Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>> visitCollection, System.Action<Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>,int> visitor) Line 48 C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>>(System.Collections.Generic.IEnumerable<Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>> visitCollection, System.Action<Unify.Framework.Notification.INotificationSink<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>> visitor) Line 24 C#
Unify.Framework.Notification.dll!Unify.Framework.Notification.NotificationSinkList<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>.Notify(Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent message) Line 24 C#
Unify.Framework.Notification.dll!Unify.Framework.Notification.NotificationSinkList<Unify.Product.IdentityBroker.IChangeDetectionProcessChangeRegisterItemsCompletedEvent>.NotifyRegisteredSinksOfMessage<Unify.Framework.Notification.INotificationMessage>(Unify.Framework.Notification.INotificationMessage message) Line 38 C#
Unify.Framework.Notification.dll!Unify.Framework.Notification.NotificationMessageService.NotifyRegisteredSinksOfMessage<Unify.Framework.Notification.INotificationMessage>.AnonymousMethod__2(System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList> sinkList) Line 72 + 0xa0 bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList>>.AnonymousMethod__0(System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList> item, int index) Line 23 + 0x3a bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList>>(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList>> visitCollection, System.Action<System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList>,int> visitor) Line 48 C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList>>(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList>> visitCollection, System.Action<System.Collections.Generic.KeyValuePair<System.Type,Unify.Framework.Notification.IRegisteredNotificationSinkList>> visitor) Line 24 C#
Unify.Framework.Notification.dll!Unify.Framework.Notification.NotificationMessageService.NotifyRegisteredSinksOfMessage<Unify.Framework.Notification.INotificationMessage>(Unify.Framework.Notification.INotificationMessage message) Line 73 C#
Unify.Framework.Notification.Async.dll!Unify.Framework.Notification.AsyncRegisteredNotificationSinkListDecoratorBase<Unify.Framework.Notification.INotificationMessageService>.DeliverMessages() Line 49 C#
Unify.Framework.Notification.Async.dll!Unify.Framework.Notification.ScheduledNotificationMessageServiceDecorator.DeliverMessages() Line 44 C#
Unify.Framework.Notification.Async.dll!Unify.Framework.Notification.ScheduledNotificationMessageServiceDecorator.DeliverMessagesJob.RunBase() Line 123 C#
Unify.Framework.Scheduling.Job.dll!Unify.Framework.JobBase.Run() Line 16 C#
Unify.Framework.Scheduling.Job.dll!Unify.Framework.AsynchronousJobExecutor.PerformJobCallback(object state) Line 29 + 0x20 bytes C#

Copy connector/adapter should specify a number of times to do it
From IDB-281, the copy functionality should have a text box (that defaults to 1), that allows for multiple copies to be created. It should append the number to the base name.
Ensure that checks for conflicting names occur for each iteration, skipping any conflicts. Please do this with some thought, so that the same checked items are ignored for the next iteration. eg an internal method taking a start seed.
Unit tests as usual.
Thanks.

Exports do not resolve object class and fail
Exports are currently failing with a null reference exception due to the fact the object class is not being properly resolved:
System.Exception: Error occurred when attempting to save entity with distinguished name
CN=100807,DC=CHRIS21-DEMO
Error:
Value cannot be null.
Parameter name: key
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Unify.Product.IdentityBroker.LDIFToAdapterEntitySaveAdapterBase`1.ConvertValues(String objectClass, IEnumerable`1 convertedValues) in S:\Hg\Product\IdentityBroker\IdentityBroker\Source\Adapter\Unify.IdentityBroker.Adapter.LDIF\LDIFToAdapterEntitySaveAdapterBase.cs:line 116
at Unify.Product.IdentityBroker.LDIFToAdapterEntitySaveChangeAdapter.GetConvertedValuesFromSchema(String objectClass, IEnumerable`1 values) in S:\Hg\Product\IdentityBroker\IdentityBroker\Source\Adapter\Unify.IdentityBroker.Adapter.LDIF\LDIFToAdapterEntitySaveChangeAdapter.cs:line 148
at Unify.Product.IdentityBroker.LDIFToAdapterEntitySaveChangeAdapter.<Transform>d__3.MoveNext() in S:\Hg\Product\IdentityBroker\IdentityBroker\Source\Adapter\Unify.IdentityBroker.Adapter.LDIF\LDIFToAdapterEntitySaveChangeAdapter.cs:line 118
at Unify.Product.IdentityBroker.LDIFAdapterBase.ExportChanges(ExportedLDIFForAdapter exportedLdifForAdapter) in S:\Hg\Product\IdentityBroker\IdentityBroker\Source\Adapter\Unify.IdentityBroker.Adapter.Remoting\LDIFAdapterBase.cs:line 244
at Unify.Product.IdentityBroker.LDIFAdapterServiceHostDecoratorBase.ExportChanges(ExportedLDIFForAdapter exportedLdifForAdapter) in S:\Hg\Product\IdentityBroker\IdentityBroker\Source\Service\Unify.IdentityBroker.Connect.Engine\LDIFAdapterServiceHostDecoratorBase.cs:line 57
at SyncInvokeExportChanges(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
at Unify.Product.IdentityBroker.IdentityBrokerManagementAgentProxy.ExportEntry(ModificationType modificationType, String[] changedAttributes, CSEntry csentry)
at Unify.Product.IdentityBroker.IdentityBrokerManagementAgent.ExportEntry(ModificationType modificationType, String[] changedAttributes, CSEntry csentry) in S:\Hg\Adapters\Microsoft.FIM\Master\Source\Unify.IdentityBroker.FIMAdapter\IdentityBrokerManagementAgent.cs:line 105

PartitionId error on adapter import
When attempting an adapter full import, the following error is appearing:
The given ColumnName 'PartitionId' does not match up with any column in data source.
System.Data.dll!System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServer(int columnCount) + 0x3f3 bytes
System.Data.dll!System.Data.SqlClient.SqlBulkCopy.WriteToServer(System.Data.DataTable table, System.Data.DataRowState rowState) + 0x134 bytes
> Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.ContainerContext.InsertItems(System.Collections.Generic.HashSet<Unify.Product.IdentityBroker.IContainer> addedItems, Unify.Product.IdentityBroker.Repository.ContainerDataContext sourceContext, System.Data.SqlClient.SqlConnection connection) Line 257 + 0x3f bytes C#
Unify.Framework.Data.dll!Unify.Framework.Data.LinqContextConversionBase<Unify.Product.IdentityBroker.IContainer,Unify.Product.IdentityBroker.Repository.ContainerDataContext,Unify.Product.IdentityBroker.Repository.Container,Unify.Framework.Data.IItemDeletionInformation>.SubmitChanges() Line 138 C#
Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.AdapterEntityContext.SubmitChangesBase(Unify.Product.IdentityBroker.Repository.EntityDataContext sourceContext, System.Data.SqlClient.SqlConnection connection) Line 94 + 0x20 bytes C#
Unify.Framework.Data.dll!Unify.Framework.Data.LinqContextConversionBase<Unify.Product.IdentityBroker.IAdapterEntity,Unify.Product.IdentityBroker.Repository.EntityDataContext,Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.Repository.IEntityItemDeletionInformation>.SubmitChanges() Line 140 C#
Unify.IdentityBroker.Entity.Repository.dll!Unify.Product.IdentityBroker.AdapterEntityPartitionUpdatableContextAdapter.SubmitChanges() Line 114 + 0x34 bytes C#
Unify.IdentityBroker.Adapter.dll!Unify.Product.IdentityBroker.GetAllEntitiesContainerHandler.UpdateGetAllEntitiesContainers.SubmitContainersTask(System.Collections.Generic.HashSet<Unify.Framework.IO.DistinguishedName> containers, Unify.Product.IdentityBroker.IContainerContext context) Line 109 + 0x34 bytes C#
Unify.IdentityBroker.Adapter.dll!Unify.Product.IdentityBroker.ContainerContextHandlerBase.SubmitContainersJobBase.RunBase() Line 128 + 0x1d bytes C#
Unify.Framework.Scheduling.Job.dll!Unify.Framework.JobBase.Run() Line 16 C#
Unify.Framework.Scheduling.Job.dll!Unify.Framework.AsynchronousJobExecutor.PerformJobCallback(object state) Line 29 + 0x20 bytes C#
The full import file is successfully generated, so I believe this may only be preventing containers being added to the database or something to this effect. Yet to confirm negative impact.

Improve logging info for attributeValue errors
Bubble up the name/id of the transformation that caused the error so that it is easy for the layman to identify the cause of the problem.
20130411,07:34:24,Adapter get all entities for adapter failed.,Adapter,Warning,"Adapter get all entities for adapter 365e6a23-2e27-485f-a6e5-52ccd3347634 failed with reason Specified argument was out of the range of valid values. Parameter name: attributeValue. Duration: 00:00:05.3996214 Error details: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: attributeValue at Unify.Framework.DistinguishedNameComponent..ctor(DNAttributeType attributeType, String attributeValue) at Unify.Framework.EntityFieldValueDistinguishedNameComponentGenerator`2.Transform(TEntity sourceValue) at Unify.Framework.EntityDistinguishedNameGenerator`2.<>c__DisplayClass3.<Transform>b__0(IEntityDistinguishedNameComponentGenerator`2 componentFactory) at System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at Unify.Framework.EntityDistinguishedNameGenerator`2.Transform(TEntity sourceValue) at Unify.Framework.AdapterEntity.Convert(IEntity source, Func`2 dnFactory, Func`2 classFactory) at Unify.Framework.Adapter.<GetTransformedEntities>b__7a(IEntity item) at System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x) at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() at Unify.Framework.EnumerableExtensions.<ActionOnFirst>d__1c`1.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at Unify.Framework.ActionOnExceptionEnumerator`1.MoveNext() at Unify.Framework.EnumerableExtensions.<ActionOnLast>d__16`1.MoveNext() at Unify.Framework.EnumerableStreamWriter`2.OnWriteBodyContents(Stream stream, IEnumerable`1 enumerable) at Unify.Framework.EnumerableStreamWriter`2.<>c__DisplayClass2.<.ctor>b__0(Stream stream) at Unify.Framework.LazyEvaluationStream.Evaluate(Object obj)",Normal

Connector polling imports break after an update export
After an item has been updated in a connector via an adapter, polling imports return errors saying the key has been duplicated:
Connector processing failed.
Connector Processing page 2 for connector chris21 DET failed with reason The key 100001 has been duplicated.. Duration: 00:00:00.3505859.
Error details:
System.ArgumentException: The key 100001 has been duplicated.
at Unify.Product.IdentityBroker.EntityRepositoryExtensions.DuplicateKeyBase(MultiKeyValue arg1)
at Unify.Framework.Collections.EnumerableExtensions.ToDictionaryWithKeyClashErrorTKey,TValue,TOriginal(IEnumerable`1 originalEnumerable, Func`2 keySelector, Func`2 valueSelector, Action`3 duplicateAction)
at Unify.Product.IdentityBroker.EntityRepositoryExtensions.ConvertConnectorEntitiesWithRepositoryEntities(IEnumerable`1 connectorEntities, IMultiKey`1 schemaKey, IQueryable`1 sourceEntities, Guid connectorId, IEnumerable`1 originalEntities)
at Unify.Product.IdentityBroker.RepositoryChangeDetectionWorkerBase.PerformChangeDetectionOnConnectorEntityPage(IEnumerable`1 connectorEntities, Int32 index, Int32 entitiesProcessedSoFar, Int32 totalNumberOfEntities, IEntityChangesReportGenerator`2 reportGenerator)
at Unify.Product.IdentityBroker.RepositoryChangeDetectionWorkerBase.<>c_DisplayClass4.<PerformChangeDetection>b_0(IEnumerable`1 page)
at Unify.Framework.Visitor.ThreadsafeVisitorEvaluator`1.ThreadsafeItemEvaluator.Evaluate()
This was done using a composite adapter.

Confirming delta imports following exports return no changes in some cases
For singular and composite adapters, successful exports do not seem to result in changes being generated, as confirming delta imports return empty in some cases.
An entity that is present in two adapters that share the same base connector - The changes table shows a change for the entity, but the "AdapterId" it is using is only the first adapter in the list.
There also seems to be an issue with items changed in a composite adapter - a successful export does not get added to the changes table for the entity ID.
Customer support service by UserEcho
©2025 UNIFY Solutions Pty. Ltd.