Address Book changes for Lync 2013

For those of you familiar with the address book from previous versions of Lync, you will find the address book feature in Lync 2013 very familiar.  On the outside we have made very few changes.  The Powershell cmdlets used to manage the address book are essentially the same (with one change that I will mention soon) and the Soap interfaces to call it remain unchanged.  Nevertheless address book has undergone dramatic changes in this wave.  Before I began discussing the changes, let's rehash how ABS worked in Lync 2010.

In Lync 2010, address book required two databases - named rtcab and rtcab1.  At any time one of these databases is active and one is being rebuilt.  The active database is used to satisfy queries.  Every day (usually at night) a sync process makes the inactive partition active and rebuilds the now inactive partition.  This may lead to delays from the time a user is present in Active Directory and can sign in to when the user is searchable in the address book.

Let us now turn our attention to where this sync process (running as ABServer.exe on one of the front ends) obtains its data.  It reads its data from the rtc database, which is populated by user replicator (running within RtcSrv.exe).  Whenever a change is detected in Active Directory, user replicator writes the change to the AbUserEntry table in the rtc database and once a day ABServer.exe reads the entire contents of this table and rebuilds one of the rtcab databases.

As you can see, this process is not overly efficient.  From the time a user is replicated to Active Directory to when the user is searchable could be as long as two days (if the user is entered right after a sync process begins).  Therefore our primary goal for this release was to fix this.

The improvement is quite simple in description but far more complicated in implementation.  User replicator now writes the data directly to rtcab.  Address book data is no longer stored in rtc in the interim and rtcab1 is no longer used.  Instead rtcab is updated with changes from Active Directory at the same time it responds to queries.  This required rewriting most of address book to fit into user replicator, which is native code as compared to ABServer.exe which is managed.

From an administration perspective there is little change.  We still handle normalization files exactly the same and the Powershell cmdlets work very similarly.  The only change lies in the cmdlets Update-CsUserDatabase and Update-CsAddressBook.

In Lync 2010, it was necessary to first run Update-CsUserDatabase to force user replicator to completely populated the rtc database and then run Update-CsAddressBook to trigger a sync run.  In Lync 2013 it is no longer necessary to call Update-CsUserDatabase for this purpose.  In fact for address book this cmdlet will be a noop.  We have subtly changed Update-CsAddressBook to trigger user replicator to update address book data.

Although feature wise we have not improved address book, this is really a major update.