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.
Perform only an incoming OR outgoing baseline synchronization on a Link, not both at once
At the moment it doesn't seem to be possible to perform either an incoming or outgoing baseline sync operation on a Link - only both combined, with the order and/or parallelism of execution unspecified.
It would be tremendously helpful during environment deploy and remedial BAU activities if we had the facility to perform each operation independently, rather than having to go through hoops with prescriptive data load regimes or messing around with filters or editing PowerShell Tasks.
Slow connector/adapter entity searches, neither SQL nor Unify.Service.Connect are consuming excessive CPU or memory
On various connectors and adapters with ~40,000 entities I see slow performance in the Entity Search screen - typically approximately 30 seconds to refresh and display 10 records.
This performance is consistent regardless of whether a filter is set or not - same speed even when showing just one record.
After stopped the Broker service and rebuilding all SQL table indexes there was no change in performance.
The SQL server and Broker service are on the same server, which is a VM with 4 vCPUs and 16GB of memory. SQL is using 8GB of memory and Broker ranges from 200MB to 1GB depending on what it is processing at the time. Entity Search performance is the same regardless of whether or not the Scheduler is enabled or disabled.
While the Entity Search screen is refreshing, SQL uses around 5-10% of CPU, and Unify.Service.Connect similarly uses around 5-10% of CPU, and the system CPU is mostly idle. Disk activity jumps from a background maximum of around 100KB/sec to a consistent 10MB/sec while the Entity Search screen is refreshing, so this would appear to be at the root of the issue.
Do you have any suggestions how the system might be tuned to improve performance?
Pending Incoming Sync Changes for unjoined Adapter entities don't clear when Changes Sync runs
I have a downstream Chris21 system with outgoing provisioning enabled. After an Import All on the corresponding Connector from Chris21, a number of changes were reflected to Chris21 Adapter, for users who were not joined to Lockers. Those changes became Pending Incoming Sync Changes, and now every time Changes Synchronization runs they are marked as Incomplete and they are "stuck" and won't go away. Since Changes Synchronization is configured to run every 30 seconds, this is leading to extra unnecessary processing.
I suspect a Baseline Synchronization will clear the issue, but I am awaiting further instructions and have not run it yet.
Matt suggesting using $denySync as a workaround to stop the system from processing those Pending Incoming Sync Changes, however the task doesn't seem to have visibility of those change objects. Refer https://voice.unifysolutions.net/communities/6/topics/3862-no-entities-available-in-sourceentities-targetentities-or-joinedentities-powershell-incoming for a ticket raised to address that problem.
Hi Adrian,
You can configure links with a filter to remove undesirable entities. This is more efficient than using PowerShell so attempt to use filters first. See the Link Filter documentation for details on how to configure filters.
For more complicated filtering scenarios you can use the $denySync method, however you will need to add it to a pre-provisioning task, as well as the sync task. As I mentioned in a comment on the topic you linked to, changes which result in a provision are not processed by synchronization tasks.
No entities available in $sourceEntities, $targetEntities or $joinedEntities PowerShell incoming synchronization task during Changes Synchronization
I have two Pending Incoming Sync Changes for un-joined Adapter objects (i.e. no corresponding Locker objects), and I added the following logging to an Incoming Synchronisation Task in order to see what data is available for those objects. In the log file it seems the task ran twice but there were *no* entities reported at all either time, for any of the $joinedEntities, $sourceEntities or $targetEntities objects.
$Logger.LogInformation("******** DET INCOMING SYNC ********")
foreach ($source in $sourceEntities)
{
$Logger.LogInformation("Source Entity " + $source["detnumber"].Value)
}
foreach ($target in $targetEntities)
{
$Logger.LogInformation("Target Entity " + $target["EmployeeID"].Value)
}
foreach ($entity in $joinedEntities)
{
$Logger.LogInformation("Joined Entity " + $entity.SourceEntity["detnumber"].Value + "/" + $entity.TargetEntity["EmployeeID"].Value)
}
$Logger.LogInformation("********* DET INCOMING SYNC done *********")
Log file output:
Hi Adrian, those entity collections were empty in a sync task because there were no changes to be synchronized at that point. The new target entities were provisioned first since they did not exist. When normal synchronization ran after the provisioning stage, there were no remaining changes requiring action, so the entity collections provided to the sync task PS script were empty.
Request Identifier on log entries
When looking through the logs in UNIFYBroker, I find it difficult to associate all log messages that relate to one request that has been executed. This is particularly difficult on a busy live system where multiple operations are happening in parallel and log entries are interleaved.
It would be very beneficial to include a request identifier on every log entry, to indicate which request the log entry relates to. That way all the log entries for one request could be extracted and viewed separately, to give a convenient and complete picture of all of the logged outcomes of that request. It would also make it possible to generate a high level request list summary, by extracting just the first log entry for each request. This would be incredibly useful when investigating problems and logging voice tickets.
e.g.
Timestamp | Request Description | Request ID |
2019-07-20 01:39:49 | Request to manually queue a baseline synchronization job on link started. Request to manually queue a baseline synchronization job on link Chris21 DET started. | ae4dffd3-f857-4074-957b-5be0a10b201b |
2019-07-20 01:47:40 | Request to sync adapter to locker started. Synchronization job started syncing 42942 changes on the 'Chris21 DET' link from the adapter to locker. | 017f4072-470e-47fd-83cb-13b9c9d03c90 |
There is a Job ID on some types of log entries, but most don't have it, which means it isn't really suitable for this purpose.
"Attempting to retrieve the CollectionKeyId for caption <x> failed" after adding a new field when Locker objects already exist
On a system with existing Locker records I added a new field to an Adapter, Locker and Link mapping, and then ran Changes Synchronization, which logged an error. I then ran a Clear Sync Changes, followed by a Baseline Synchronization, but the same error still occurred.
I managed to get rid of the error by running Clear Entities on the Locker, which isn't ideal since I lost all my joins and had to careful resync my Links in the right order to avoid any undesirable provisioning attempts :-(
Synchronization job started syncing 42941 changes on the 'Chris21 DET' link from the adapter to locker. Job ID: b7478421-d9c7-405d-a286-290d823cd3eb",Normal
20190719,13:33:25,UNIFYBroker,Link,Error,"Request to sync changes on link failed.
Request to sync changes on link Chris21 DET (32a760fb-9e58-4761-ab12-9f57f10e79de) in direction outgoing failed with message Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption. [Count:42941]. Duration: 00:00:21.9409080
Error details:
System.ArgumentException: Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption.
at Unify.Product.Plus.LockerEntityValueOriginContext.LookupCollectionKeyId(String key)
at Unify.Product.Plus.LockerEntityValueOriginLinqQueryExecutorInformation.AddValueKeyFieldSearchValue(Guid searchID, String field)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.<>c__DisplayClass4_0.b__0(String item)
at Unify.Framework.Visitor.Visit[T](IEnumerable`1 visitCollection, Action`2 visitor)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.Transform(MethodCallExpression expression)
at Unify.Product.Plus.LockerEntityValueOriginExpressionQueryVisitor.VisitMethodCall(MethodCallExpression m)
at Unify.Framework.ExpressionVisitorBase`11.Visit(Expression exp)
at Unify.Framework.Data.LinqContextConversionExpressionVisitorBase`5.ConvertExpression(Expression partitionExpression)
at Unify.Framework.Data.LinqQueryConversionProvider`5.GetOrderedQuery(Expression businessExpression, IQueryable`1 sourceQueryable, TContext sourceContext)
at Unify.Framework.Data.LinqWhereQuery`5.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Unify.Product.Plus.PriorityRepository.<>c__DisplayClass14_0.b__3(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.Prioritizer.ShouldPrioritize(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.MappingApplicator.InnerApply[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean forUpdate, Boolean priorityLookupRequired)
at Unify.Product.Plus.MappingApplicator.ApplyForUpdate[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean priorityLookupRequired)
at Unify.Product.Plus.LinkSynchronizer`2.JoinAndMap(IEnumerable`1 filterResult, IDictionary`2 changesDict)
at Unify.Product.Plus.Link.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.LinkNotifierDecorator.<>c__DisplayClass42_0.b__0()
at Unify.Framework.Notification.NotifierDecoratorBase.Notify[TResult](ITaskNotificationFactory notificationFactory, Func`1 function)
at Unify.Product.Plus.LinkAuditingDecorator.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.AdapterToLockerSynchronizationJob.RunBase()
at Unify.Product.Plus.SynchronizationJobExecutor.d__8.MoveNext()",Normal
20190719,13:33:25,UNIFYBroker,SyncEngine,Information,"Request to sync adapter to locker errored.
Synchronization job failed syncing 42941 changes on the 'Chris21 DET' link from the adapter to locker with the reason Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption.. Job ID: b7478421-d9c7-405d-a286-290d823cd3eb Duration: 00:00:21.9409080
Error details:
System.ArgumentException: Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption.
at Unify.Product.Plus.LockerEntityValueOriginContext.LookupCollectionKeyId(String key)
at Unify.Product.Plus.LockerEntityValueOriginLinqQueryExecutorInformation.AddValueKeyFieldSearchValue(Guid searchID, String field)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.<>c__DisplayClass4_0.b__0(String item)
at Unify.Framework.Visitor.Visit[T](IEnumerable`1 visitCollection, Action`2 visitor)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.Transform(MethodCallExpression expression)
at Unify.Product.Plus.LockerEntityValueOriginExpressionQueryVisitor.VisitMethodCall(MethodCallExpression m)
at Unify.Framework.ExpressionVisitorBase`11.Visit(Expression exp)
at Unify.Framework.Data.LinqContextConversionExpressionVisitorBase`5.ConvertExpression(Expression partitionExpression)
at Unify.Framework.Data.LinqQueryConversionProvider`5.GetOrderedQuery(Expression businessExpression, IQueryable`1 sourceQueryable, TContext sourceContext)
at Unify.Framework.Data.LinqWhereQuery`5.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Unify.Product.Plus.PriorityRepository.<>c__DisplayClass14_0.b__3(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.Prioritizer.ShouldPrioritize(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.MappingApplicator.InnerApply[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean forUpdate, Boolean priorityLookupRequired)
at Unify.Product.Plus.MappingApplicator.ApplyForUpdate[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean priorityLookupRequired)
at Unify.Product.Plus.LinkSynchronizer`2.JoinAndMap(IEnumerable`1 filterResult, IDictionary`2 changesDict)
at Unify.Product.Plus.Link.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.LinkNotifierDecorator.<>c__DisplayClass42_0.b__0()
at Unify.Framework.Notification.NotifierDecoratorBase.Notify[TResult](ITaskNotificationFactory notificationFactory, Func`1 function)
at Unify.Product.Plus.LinkAuditingDecorator.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.AdapterToLockerSynchronizationJob.RunBase()
at Unify.Product.Plus.SynchronizationJobExecutor.d__8.MoveNext()",Normal
20190719,13:33:25,UNIFYBroker,Int32 LookupCollectionKeyId(System.String),Error,"Unify.Plus.ChangeTracking.Repository.Sql:
System.ArgumentException: Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption.
at Unify.Product.Plus.LockerEntityValueOriginContext.LookupCollectionKeyId(String key)
at Unify.Product.Plus.LockerEntityValueOriginLinqQueryExecutorInformation.AddValueKeyFieldSearchValue(Guid searchID, String field)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.<>c__DisplayClass4_0.b__0(String item)
at Unify.Framework.Visitor.Visit[T](IEnumerable`1 visitCollection, Action`2 visitor)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.Transform(MethodCallExpression expression)
at Unify.Product.Plus.LockerEntityValueOriginExpressionQueryVisitor.VisitMethodCall(MethodCallExpression m)
at Unify.Framework.ExpressionVisitorBase`11.Visit(Expression exp)
at Unify.Framework.Data.LinqContextConversionExpressionVisitorBase`5.ConvertExpression(Expression partitionExpression)
at Unify.Framework.Data.LinqQueryConversionProvider`5.GetOrderedQuery(Expression businessExpression, IQueryable`1 sourceQueryable, TContext sourceContext)
at Unify.Framework.Data.LinqWhereQuery`5.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Unify.Product.Plus.PriorityRepository.<>c__DisplayClass14_0.b__3(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.Prioritizer.ShouldPrioritize(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.MappingApplicator.InnerApply[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean forUpdate, Boolean priorityLookupRequired)
at Unify.Product.Plus.MappingApplicator.ApplyForUpdate[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean priorityLookupRequired)
at Unify.Product.Plus.LinkSynchronizer`2.JoinAndMap(IEnumerable`1 filterResult, IDictionary`2 changesDict)
at Unify.Product.Plus.Link.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.LinkNotifierDecorator.<>c__DisplayClass42_0.b__0()
at Unify.Framework.Notification.NotifierDecoratorBase.Notify[TResult](ITaskNotificationFactory notificationFactory, Func`1 function)
at Unify.Product.Plus.LinkAuditingDecorator.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.AdapterToLockerSynchronizationJob.RunBase()
at Unify.Product.Plus.SynchronizationJobExecutor.d__8.MoveNext()",Normal
20190719,13:34:37,UNIFYBroker,Link,Information,"Request to manually queue a baseline synchronization job on link started.
Request to manually queue a baseline synchronization job on link Chris21 DET started.",Normal
20190719,13:41:58,UNIFYBroker,Link,Information,"Request to manually queue a baseline synchronization job on link completed.
Request to manually queue a baseline synchronization job on link 'Chris21 DET' completed. Duration: 00:07:21.4025706",Normal
20190719,13:42:06,UNIFYBroker,SyncEngine,Information,"Request to sync adapter to locker started.
Synchronization job started syncing 42942 changes on the 'Chris21 DET' link from the adapter to locker. Job ID: a68bff33-8555-43e4-ac9b-222f014f1053",Normal
20190719,13:42:28,UNIFYBroker,Link,Error,"Request to sync changes on link failed.
Request to sync changes on link Chris21 DET (32a760fb-9e58-4761-ab12-9f57f10e79de) in direction outgoing failed with message Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption. [Count:42942]. Duration: 00:00:21.9446416
Error details:
System.ArgumentException: Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption.
at Unify.Product.Plus.LockerEntityValueOriginContext.LookupCollectionKeyId(String key)
at Unify.Product.Plus.LockerEntityValueOriginLinqQueryExecutorInformation.AddValueKeyFieldSearchValue(Guid searchID, String field)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.<>c__DisplayClass4_0.b__0(String item)
at Unify.Framework.Visitor.Visit[T](IEnumerable`1 visitCollection, Action`2 visitor)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.Transform(MethodCallExpression expression)
at Unify.Product.Plus.LockerEntityValueOriginExpressionQueryVisitor.VisitMethodCall(MethodCallExpression m)
at Unify.Framework.ExpressionVisitorBase`11.Visit(Expression exp)
at Unify.Framework.Data.LinqContextConversionExpressionVisitorBase`5.ConvertExpression(Expression partitionExpression)
at Unify.Framework.Data.LinqQueryConversionProvider`5.GetOrderedQuery(Expression businessExpression, IQueryable`1 sourceQueryable, TContext sourceContext)
at Unify.Framework.Data.LinqWhereQuery`5.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Unify.Product.Plus.PriorityRepository.<>c__DisplayClass14_0.b__3(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.Prioritizer.ShouldPrioritize(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.MappingApplicator.InnerApply[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean forUpdate, Boolean priorityLookupRequired)
at Unify.Product.Plus.MappingApplicator.ApplyForUpdate[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean priorityLookupRequired)
at Unify.Product.Plus.LinkSynchronizer`2.JoinAndMap(IEnumerable`1 filterResult, IDictionary`2 changesDict)
at Unify.Product.Plus.Link.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.LinkNotifierDecorator.<>c__DisplayClass42_0.b__0()
at Unify.Framework.Notification.NotifierDecoratorBase.Notify[TResult](ITaskNotificationFactory notificationFactory, Func`1 function)
at Unify.Product.Plus.LinkAuditingDecorator.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.AdapterToLockerSynchronizationJob.RunBase()
at Unify.Product.Plus.SynchronizationJobExecutor.d__8.MoveNext()",Normal
20190719,13:42:28,UNIFYBroker,SyncEngine,Information,"Request to sync adapter to locker errored.
Synchronization job failed syncing 42942 changes on the 'Chris21 DET' link from the adapter to locker with the reason Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption.. Job ID: a68bff33-8555-43e4-ac9b-222f014f1053 Duration: 00:00:21.9446416
Error details:
System.ArgumentException: Attempting to retrieve the CollectionKeyId for caption DETProvisioned failed. No collection key record found for that caption.
at Unify.Product.Plus.LockerEntityValueOriginContext.LookupCollectionKeyId(String key)
at Unify.Product.Plus.LockerEntityValueOriginLinqQueryExecutorInformation.AddValueKeyFieldSearchValue(Guid searchID, String field)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.<>c__DisplayClass4_0.b__0(String item)
at Unify.Framework.Visitor.Visit[T](IEnumerable`1 visitCollection, Action`2 visitor)
at Unify.Product.Plus.VisitMethodWhereWithContainsValueKeyField.Transform(MethodCallExpression expression)
at Unify.Product.Plus.LockerEntityValueOriginExpressionQueryVisitor.VisitMethodCall(MethodCallExpression m)
at Unify.Framework.ExpressionVisitorBase`11.Visit(Expression exp)
at Unify.Framework.Data.LinqContextConversionExpressionVisitorBase`5.ConvertExpression(Expression partitionExpression)
at Unify.Framework.Data.LinqQueryConversionProvider`5.GetOrderedQuery(Expression businessExpression, IQueryable`1 sourceQueryable, TContext sourceContext)
at Unify.Framework.Data.LinqWhereQuery`5.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Unify.Product.Plus.PriorityRepository.<>c__DisplayClass14_0.b__3(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.Prioritizer.ShouldPrioritize(Guid targetEntityId, AdapterEntityValueCollectionKey field)
at Unify.Product.Plus.MappingApplicator.InnerApply[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean forUpdate, Boolean priorityLookupRequired)
at Unify.Product.Plus.MappingApplicator.ApplyForUpdate[TSourceEntity,TTargetEntity](IJoinedEntityPair`2 joinedPair, ISyncChange syncChange, Boolean priorityLookupRequired)
at Unify.Product.Plus.LinkSynchronizer`2.JoinAndMap(IEnumerable`1 filterResult, IDictionary`2 changesDict)
at Unify.Product.Plus.Link.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.LinkNotifierDecorator.<>c__DisplayClass42_0.b__0()
at Unify.Framework.Notification.NotifierDecoratorBase.Notify[TResult](ITaskNotificationFactory notificationFactory, Func`1 function)
at Unify.Product.Plus.LinkAuditingDecorator.SynchronizeAdapterChanges(IEnumerable`1 changes)
at Unify.Product.Plus.AdapterToLockerSynchronizationJob.RunBase()
at Unify.Product.Plus.SynchronizationJobExecutor.d__8.MoveNext()",Normal
201
New deployment reporting "Request to retrieve adapter schema for adapter with id <x> failed with message A partition could not be found with id <x>"
During initial data load of a new environment I noticed one of my Adapters (for a Connector with 9,761 objects, with only one Transformation, a Time Offset Flag) had pending changes that were not processing. There were no corresponding errors in the log for it, so I ran Clear Entities, watched the Pending Changes clear to 0, then ran Generate Changes. At this time nothing was written to the log to indicate processing was under way, but the SQL Server was using 100% of one CPU. After some time with no evident progress I stopped the UNIFYBroker service, and the SQL Server stopped using CPU. I restarted the UNIFYBroker service, and the CPU usage returned to 100% of one CPU and this error was written in the log several times. Since then, nothing has been written to the log and the Pending Changes counter has remained unchanged at 9,761.
Unify.Framework.UnifyEngineException: A partition could not be found with id ae6aa686-33ae-41ba-9462-5f26793f5216.
at Unify.Product.IdentityBroker.AdapterEngine.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterEngineAuditingDecorator.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterEngineNotifierDecorator.<>c__DisplayClass6_0.b__0()
at Unify.Framework.Notification.NotifierDecoratorBase.Notify[TResult,TFactory](TFactory notificationFactory, Func`1 action, Action`2 modifyFactory)
at Unify.Product.IdentityBroker.AdapterEngineNotifierDecorator.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterEngineAccessor.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterStatisticsEngine.GetEntityCount(Guid adapterId)",Normal
20190719,10:51:30,UNIFYBroker,Unify.Product.IdentityBroker.IEntitySchema GetPartitionSchema(System.Guid),Warning,"Unify.IdentityBroker.Adapter.Engine:
Unify.Framework.UnifyEngineException: A partition could not be found with id ae6aa686-33ae-41ba-9462-5f26793f5216.
at Unify.Product.IdentityBroker.AdapterEngine.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterEngineAuditingDecorator.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterEngineNotifierDecorator.<>c__DisplayClass6_0.b__0()
at Unify.Framework.Notification.NotifierDecoratorBase.Notify[TResult,TFactory](TFactory notificationFactory, Func`1 action, Action`2 modifyFactory)
at Unify.Product.IdentityBroker.AdapterEngineNotifierDecorator.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterEngineAccessor.GetPartitionSchema(Guid partitionId)
at Unify.Product.IdentityBroker.AdapterStatisticsEngine.GetEntityCount(Guid adapterId)",Normal
Could you please suggest what the cause of the error might be, and tell me how to get UNIFYBroker to commence processing the pending changes?
UNIFYBroker v5.3.2 Revision #0
Microsoft Active Directory 5.3.0.0
Chris21 Connector 5.3.0.0
Sync Changes 5.3.0.2
Plus Change Tracking 5.3.0.2
Connections 5.3.0.2
Links 5.3.0.2
Link Statistics 5.3.0.2
Lockers 5.3.0.2
Locker Statistics 5.3.0.2
Provisioning 5.3.0.2
Plus 5.3.0.2
Windows Server 2016 Datacenter + SQL Server 2012 (both UNIFYBroker + SQL running on the same server)
Resolution courtesy of Matt: stop the UNIFYBroker service and rebuild the highly fragmented UNIFYBroker database table indexes.
UNIFYBroker/AD & dn field type
I have configured my UNIFYBroker/AD connector to use objectGUID as the key, so I can modify the "dn" attribute to move users between AD OUs. I configured my "dn" attribute as a "Distinguished Name (DN)" type in the AD connector and I generate an appropriate value for the field in a PowerShell Link Task. But when I attempt to sync to the AD adapter I see this error:
It looks to me like the UNIFYBroker/AD connector code needs me to configure the "dn" attribute as a String type. Is that correct? I'd prefer to have it configured as a Distinguished Name (DN), because that is what it is in AD and I want to use it elsewhere as a Distinguished Name (DN) data type (e.g. when I join to it for use on another user's "manager" attribute).
Hey Adrian,
Unfortunately that's correct - the AD connector expects the DN field to be a string value type.
This is because the underlying Microsoft library used for integration requires the DN to be a string value, so we enforce that value type further up the chain to ensure we don't cause any strange behaviour doing the conversion ourselves.
When performing a move DN operation in the AD connector, check that the target OU is present first
When the target OU is missing, the error that is currently logged is quite difficult to relate back to the root cause. If a test of the target OU were made before the move and a specific error logged in this case then it would go a long way to improving the usability of the product.
See https://voice.unifysolutions.net/communities/6/topics/3850-baseline-sync-reports-received-error-code-other-an-unknown-error-occurred for an example of the error that currently occurs.
Baseline sync reports: Received error code Other An Unknown error occurred
My AD service account has permission to update users in AD. How can I get more information about why this is happening?
New install, Broker/Plus 5.3.0.2
Matt & Adam investigated - the issue was that the OU to which Broker was attempting to move a user object was not present in AD. I have noticed that "5012" errors like this one have been associated with AD OU issues before.
The screen shot above includes the text "MoveEntryAsync" in the middle of the stack trace, which alerted Adam to the fact that the issue was related to a DN move operation.
Customer support service by UserEcho