Thursday, April 30, 2015

How to debug the Exch2010Extension.dll

If you find yourself having to debug the Exch2010Extension.dll in the FIM Sync 'Extensions' folder, then you want to attach to the MMSSCRPT.exe process, and not MIIServer.exe.
2015-04-30 07:21:52,196 --1-- DEBUG [Exch2010Extension.Exch2010ExtensionClass]
Process information
-------------------
ID          3704
Name        mmsscrpt
ToString()  System.Diagnostics.Process (mmsscrpt)
CPU time
 Total      00:00:02.4843750
 User       00:00:02.0156250
 Privileged 00:00:00.4687500
Memory usage
 Current    54,919,168 B
 Peak       54,919,168 B
Active threads      21

Tuesday, March 10, 2015

Management Agent Statistics Enumeration

Following up on my previous post, here's where to find the statistics_type enumeration.
User Profile Synchronization (UPS): Database Data Access Protocol Specification
Copyright © 2012 Microsoft Corporation.
Release: Thursday, July 5, 2012
http://download.microsoft.com/download/5/0/1/501ED102-E53F-4CE0-AA6B-B0F93629DDC6/Windows/%5BMS-UPSDBDAP%5D.pdf
2.2.2.12 Management Agent Statistics Enumeration
The management agent statistics enumeration indicates which statistic type was updated.

This is in the mms_step_object_details table!

Hex Decimal Description
0x00000000
0
No statistics.
0x00000001
1
Staging unchanged.
0x00000002
2
Staging add.
0x00000003
3
Staging update.
0x00000004
4
Staging rename.
0x00000005
5
Staging delete.
0x00000006
6
Staging delete-add.
0x00000007
7
Staging failure.
0x00000008
8
Disconnector filtered.
0x00000009
9
Disconnector joined, no flow.
0x0000000A
10
Disconnector joined with flow.
0x0000000B
11
Disconnector joined, remove metaverse object.
0x0000000C
12
Disconnector projected, no flow.
0x0000000D
13
Disconnector projected with flow.
0x0000000E
14
Disconnector remains a disconnector.
0x0000000F
15
Connector filtered, remove metaverse object.
0x00000010
16
Connector filtered, leave metaverse object.
0x00000011
17
Connector with flow.
0x00000012
18
Connector with flow, remove metaverse object.
0x00000013
19
Connector, no flow.
0x00000014
20
Connector delete, remove metaverse object.
0x00000015
21
Connector delete, leave metaverse object.
0x00000016
22
Connector delete-add processed.
0x00000017
23
Flow failure.
0x00000018
24
Export add.
0x00000019
25
Export update.
0x0000001A
26
Export rename.
0x0000001B
27
Export delete.
0x0000001C
28
Export delete-add.
0x0000001D
29
Export failure.
0x0000001F
31
Provisioned flow.
0x00000020
32
Provisioned, no flow.
0x00000021
33
Provisioned add, no flow.
0x00000022
34
Provisioned add with flow.
0x00000023
35
Provisioned rename, no flow.
0x00000024
36
Provisioned rename with flow.
0x00000025
37
Provisioned delete.
0x00000026
38
Provisioned delete-add, no flow.
0x00000027
39
Provisioned delete-add with flow.
0x00000028
40
Provisioned flow reset.

Monday, March 9, 2015

FIM Sync filtered disconnectors SQL query

In case you were wondering, here's the SQL query that the FIM Sync Service Manager uses to fetch filtered disconnectors.

select cs_object_id, cs_dn from mms_step_object_details with(nolock) where step_history_id='{21D1945A-7E20-47CD-8E47-93762C343BEA}' and ((statistics_type=8))
Update: Here's where to find the statistics_type enumeration:
http://c--shark.blogspot.co.uk/2015/03/management-agent-statistics-enumeration.html

Wednesday, November 12, 2014

Update-recipient: [Object] wasn't found. Please make sure you've typed it correctly.


Got a misleading error message from Exchange Powershell cmdlets.

Problem description
  • FIM 2010
  • AD DS MA
  • Provision for Exchange 2010
  • Export contact
  • No error message
  • Contact object not mail-enabled
  • Try PS command via Exchange Management Shell
  • Object not found (see error below)
Resolution
  • mailNickname was empty!

[PS] C:\>update-recipient -Identity "CN=Whisky Tango (wtango@foxtrot.ca),OU=Contacts,DC=exchange,DC=loc" -DomainController Exchange2010srv.exchange.loc
Creating a new session for implicit remoting of "Update-Recipient" command...
exchange.loc/Contacts/Whisky Tango (wtango@foxtrot.ca) wasn't found. Please make sure you've typed it correctly.
    + CategoryInfo          : ObjectNotFound: (exchange.loc/Co...tango@foxtrot.ca):RecipientIdParameter) [Update-Recipient], ManagementObjectNotFoundException

    + FullyQualifiedErrorId : 4247562D,Microsoft.Exchange.Management.RecipientTasks.UpdateRecipient

Tuesday, October 7, 2014

Network impact assessment (NIA): FIM 2010 AD MA LDAP traffic throughput

I just performed a Wireshark capture between the FIM and several Active Directory domains to try to validate whether the numbers in the MIIS 2003 Capacity Planning whitepaper are (a) still relevant to FIM 2010 and (b) actually relevant to AD connected data sources.  The whitepaper mentions that the test results show throughput between MIIS and its SQL database.  So, it doesn't specifically say that the numbers are relevant to connected data sources, but it does mention them in the recommended best practices section; and this is confusing.

So, I'm here to clear up the confusion.  And I can summarize by saying, yes, the numbers in the whitepaper are relevant to AD connected data sources.  Here are my findings:

Average LDAP traffic throughput 1.2 Mbps
Peak LDAP traffic throughput 6 Mbps

These findings seem to verify the claim from the MIIS 2003 capacity planning whitepaper that a 5 Mbps bandwidth is the bare minimum (for connected data sources). The sections below show more details about the tests.

CORP_ADMA Full import
object_type count
computer 82
contact 2072
container 208
domainDNS 1
foreignSecurityPrincipal 21
group 1787
NULL 82
organizationalUnit 616
user 10020
TOTAL objects 14889

1.14 Mbps

28287944 total bytes

28287944 / 1024^2 = 26.9775 MB

28287944 * 8 = 226303552 bits

226303552 / 198.559 = 1.1397E6 bps
6e6 bits/tick @ 1 sec/tick

6e6/1e6=6 Mbps peak




EXCH_ADMA Full import
object_type count
contact 3365
container 107
domainDNS 1
group 280
NULL 57
organizationalUnit 163
user 6740
TOTAL objects 10713

1.264 Mbps

19285496 total bytes

19285496 / 1024^2 = 18.3921 MB

5.5e6 bits/tick @ 1 sec/tick
5.5e6/1e6=5.5 Mbps peak



WEB_ADMA Full import
object_type count
container 82
domainDNS 1
group 45
NULL 8
organizationalUnit 3
user 2184
TOTAL objects 2323

1.197 Mbps

2611566 total bytes

2611566 / 1024^2 = 2.4906 MB

5e6 bits/tick @ 1 sec/tick
5e6/1e6=5 Mbps peak


Thursday, August 21, 2014

How to: Create anchor for delta import record in ECMA 2.0 GetImportEntries

#region FAIL http://social.technet.microsoft.com/Forums/en-US/a2bc4a62-a987-444a-9382-7a37ba49fcf8/getting-missingchangetype-error-during-delta-import-on-callbased-ecma2?forum=ilm2
//csentry.DN = row["dn"].ToString().Trim();
#endregion
/// Lesson learned: DO NOT name one of the columns 'DN'.
/// http://c--shark.blogspot.com/2014/08/lesson-learned-ecma2-do-not-name-one-of.html
csentry.AnchorAttributes.Add(
    AnchorAttribute.Create("SQL_DN", row["dn"].ToString().Trim()));

Lesson learned: ECMA2: Do NOT name one of the schema columns 'DN'

Here are my notes on troubleshooting errors with an ECMA 2.0. Turns out, the errors were due to the fact that one of the columns was named 'DN'. As you can imagine, troubleshooting this was maddening...
·        ECMA2 connector to SQL Server
·        One of the column names was 'DN'
·        In GetSchema:
if (string.Equals(key, "dn"StringComparison.CurrentCultureIgnoreCase))
{
    personType.Attributes.Add(SchemaAttribute.CreateAnchorAttribute(key, AttributeType.String));
}
·        Upon full import (see event log below):
o   missing-anchor-component
o   invalid-attribute-value
o   staging-error
·        GetImportEntries taken from MSFT example:
public GetImportEntriesResults GetImportEntries(GetImportEntriesRunStep importRunStep)
{
    //
    // In our sample below, we create objects using a fixed format.
    //
    GetImportEntriesResults importReturnInfo;
    List<CSEntryChange> csentries = new List<CSEntryChange>();
    // Full Import.
    if (OperationType.Full == m_ImportType)
    {
        // Object 1
        CSEntryChange csentry1 = CSEntryChange.Create();
        csentry1.ObjectModificationType = ObjectModificationType.Add;
        csentry1.ObjectType = "person";
        //csentry1.DN = "CN=Object1,CN=Users,DC=contoso,DC=com";
        csentry1.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("DN""1"));
        //csentry1.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("USERNAME", "Object1"));
        //csentry1.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("email", "Object1@contoso.com"));
        //csentry1.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("multiAttr", new List<object>() { "value1", "value1", "value3" }));
        csentries.Add(csentry1);
        // Object 2
        CSEntryChange csentry2 = CSEntryChange.Create();
        csentry2.ObjectModificationType = ObjectModificationType.Add;
        csentry2.ObjectType = "person";
        //csentry2.DN = "CN=Object2,CN=Users,DC=contoso,DC=com";
        csentry2.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("DN""2"));
        //csentry2.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("USERNAME", "Object2"));
        //csentry2.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("email", "Object2@contoso.com"));
        //csentry2.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("multiAttr", new List<object>() { "value4", "value5", "value6" }));
        csentries.Add(csentry2);
    }
    // Create the result
    importReturnInfo = new GetImportEntriesResults();
    importReturnInfo.MoreToImport = false;
    importReturnInfo.CSEntries = csentries;
    // Also, GetImportEntriesResults.CustomData can be used for retaining necessary data
    // for performing a subsequent import.
    // A typical case of this might be the watermark used
    // for delta import.
    //
    return importReturnInfo;
}
·        Event log:
FIMSynchronizationService
The server encountered an unexpected error while performing an operation for a management agent.
 "Microsoft.MetadirectoryServices.Impl.InternalError: 0x80230301
   at Microsoft.MetadirectoryServices.Impl.ScriptHost.ThrowExceptionFromHRESULT(Int32 hr)
   at Microsoft.MetadirectoryServices.Impl.Ecma2ConversionServices.AddAttributeToDImage(CDImage* pdimage, String attributeName, AttributeModificationType attributeModificationType, IList`1 attributeValueChanges, Int32 escapeReferenceDNValues)
   at Microsoft.MetadirectoryServices.Impl.Ecma2ConversionServices.ConvertToDImage(CSEntryChange csEntryChange, CDImage** ppDImage, Int32 escapeReferenceDNValues)
   at Microsoft.MetadirectoryServices.Impl.ScriptHost.InvokeExtMA_ImportEntry(UInt32 cBatchSize, UInt16* pcszCustomData, UInt32 cFullObject, _OCTET* rgoctFullObject, UInt32* rgomodt, UInt32* pcpcszChangedAttributes, UInt16*** prgpcszChangedAttributes, Int32 fIsDNStyleNone, UInt16** ppszUpdatedCustomData, _OCTET* rgoctCSImage, Int32* rgextec, UInt16** rgpszErrorName, UInt16** rgpszErrorDetail, Int32* pfMoreToImport)"
FIMSynchronizationService
The server encountered an unexpected error in the synchronization engine:
 "BAIL: MMS(8916): d:\bt\32669\private\source\miis\server\sync\syncstage.cpp(595): 0x80230302 (The image or delta doesn't have an anchor.)
Forefront Identity Manager 4.1.3559.0"
FIMSynchronizationService
The server encountered an unexpected error in the synchronization engine:
 "BAIL: MMS(6992): d:\bt\32669\private\source\miis\ma\xml\ma.cpp(5012): 0x80230005 (Management agent encountered an error while processing an object.)
BAIL: MMS(6992): d:\bt\32669\private\source\miis\server\sync\syncstage.cpp(595): 0x80230302 (The image or delta doesn't have an anchor.)
Forefront Identity Manager 4.1.3559.0"
FIMSynchronizationService
The server encountered an unexpected error in the synchronization engine:
 "BAIL: MMS(13268): d:\bt\32669\private\source\miis\ma\xml\ma.cpp(5078): 0x80230005 (Management agent encountered an error while processing an object.)
BAIL: MMS(13268): d:\bt\32669\private\source\miis\shared\ldaputils\dnutils.cpp(580): 0x80070057 (The parameter is incorrect.): Error parsing DN 99999: DN terminates in attribute name
BAIL: MMS(13268): d:\bt\32669\private\source\miis\ma\extensible\extensible.cpp(2057): 0x80070057 (The parameter is incorrect.)
BAIL: MMS(13268): d:\bt\32669\private\source\miis\server\sync\syncstage.cpp(595): 0x80230302 (The image or delta doesn't have an anchor.)
Forefront Identity Manager 4.1.3559.0"
FIMSynchronizationService
The server encountered an unexpected error in the synchronization engine:
 "BAIL: MMS(8916): d:\bt\32669\private\source\miis\ma\xml\ma.h(734): 0x80230005 (Management agent encountered an error while processing an object.)
BAIL: MMS(8916): d:\bt\32669\private\source\miis\ma\xml\ma.cpp(4358): 0x80230005 (Management agent encountered an error while processing an object.)
BAIL: MMS(8916): d:\bt\32669\private\source\miis\ma\xml\ma.cpp(5240): 0x80230005 (Management agent encountered an error while processing an object.)
BAIL: MMS(8916): d:\bt\32669\private\source\miis\server\sync\syncstage.cpp(595): 0x80230302 (The image or delta doesn't have an anchor.)
Forefront Identity Manager 4.1.3559.0"