How public folder referrals have changed in Exchange 2007

EDIT: This post has been edited on 5/19/2008 to add a note about pointing Exchange 2003 mailbox stores to Exchange 2007.

Exchange 2007 saw a fundamental change in the elimination of a couple of well-known key concepts in prior versions: Administrative Groups and Routing Groups. The elimination of the routing group, and consequently the routing group connector, changes the way that public folder referrals are handled in Exchange 2007.

Previously, the public folder server would call into the routing engine to gather routing cost information, and use this information to control content referrals and pick servers for backfill requests. Now, the server connects directly to Active Directory to get the inter-site costs among all the public folder servers.

However, there’s a new problem: There’s no way to indicate on an AD site connector that you don’t want public folder referrals to happen. No longer can you check a checkbox and stop PF referrals from happening from one corner of your company to another. But don’t panic! The server still implements a method to ensure client referrals don’t end up going to the wrong end of the planet. The server has the notion of other servers which are "too expensive" to accept referrals. As of this writing, that "too expensive" threshold is 500. Yes, that really needs to be configurable, and we will examine doing that in a future release.

We still have the feature where you can specify a specific cost list for a single server. Instead of calling into AD, we’ll simply read this cost list and use whatever data it provides. Unlisted servers implicitly have an "infinite" cost, so this provides a simple method for disallowing referrals from a specific server to a set of other servers.

This new source of cost information also controls the backfill picker. Previously, the code always queried for cost information once (an hour) and cached it. This cached info was used to prepare client referrals and to pick servers to ask for backfill. Now that we’re querying AD instead of the routing engine, all users of that cost information benefit from the new source and all can see the same information.

It’s important to note that Exchange 2007 exclusively uses the AD site connector cost information, while pre-Exchange 2007 exclusively uses the data from the routing group connectors. Since all Exchange 2007 servers appear to be in a single routing group from pre-Exchange 2007’s point of view, without some additional configuration you may experience truly bizarre referrals for users whose default public folder database is on a pre-Exchange 2007 server, but all the replicas live solely on Exchange 2007 servers. In this specific case, the pre-Exchange 2007 server will perceive all the Exchange 2007 servers as having the same cost (because they’re all in the same routing group). Clients will get referrals all over the place. To prevent this from happening, you should set all default PFDBs for all mailbox DBs to point to Exchange 2007 as soon as you’ve replicated content to any Exchange 2007 servers. This will put all clients on the same referral page and you won’t end up with clients in Brazil being referred to servers in Belarus. NOTE: If you have Exchange 2003 users that use OWA, you should not point the Exchange 2003 mailbox database to an Exchange 2007 public folder database, until you move all users that need OWA public folder access to Exchange 2007. To read more about this scenario, please see this blog post.

Dave Whitney

Comments (6)
  1. Colin Bowern says:

    On a related note how do you determine the status of Public Folder replication between two Exchange 2007 servers?  I’m looking for that In Sync or Local Modified flag.  ESM 2003 had it in the GUI and the PS get commands don’t seem to show it (or maybe I missed it?).

  2. Exchange says:

    Eh… Colin… please take a look at this:

  3. Heidi says:

    So basically during the co-existence phase once I start to migrate public folders to Exchange 2007 servers, I should plan to configure all my user databases to use Exchange 2007 Public Folder stores so AD site info will be used and this will not happen until all Exchange 2003 public folder stores have been removed?

  4. Dave Whitney says:


    It depends wholly on the physical layout of the boxes. By using an Ex2003 server as the “default” PFDB for user mailboxes, that specific Ex2003 server will perform the cost analysis for performing referrals. Note that a referral won’t happen if that same server also has a replica. Otherwise, that specific server perceives all the Ex2007 servers to be the same cost because they’re all in the same routing group. If indeed all the Ex2007 servers have the same cost then there’s nothing special you need to do. The trick here is to avoid a client referral off to never-never land when it can otherwise be prevented.

    One technique would be to deploy (at least) a single Ex2007 PFDB server into each physical AD site. Then, after the hierarchy has replicated onto these new servers, adjust all the default PFDB settings for all mailbox DBs to point to one of the proximate Ex2007 PFDBs. Users shouldn’t notice much of any behavioral change as the Ex2007 server they’re now querying will a) always refer them somewhere else (as this is a hierarchy-only server) and the choice it makes for which server to send to will be consistently based on the AD site cost info, and not the legacy routing group cost info (which is how the Ex2003 server would behave).

    The presence of Ex2003 servers in the org, or whether or not they contain replicas is essentially irrelevant. The only issue is which server the client asks for a referral, and then how that server computes referral costs. Since the Ex2003 servers are nearly guaranteed to produce wildly unusable referrals (given that all the Ex2007 servers appear to have the same cost), you’re better off upgrading, at the very least the PF hierarchy, to Ex2007.

    You can then deploy further Ex2007 PF servers for content, and begin moving content from the Ex2003 servers at your leisure.

  5. Colin Bowern says:

    Thanks for the link.  It was great for concepts but fell short of an actual command line I was looking for.  I think I might have stumbled over a process here:

    1. Run MoveAllReplicas PS script to set the replicas from EX2K7-1 to EX2K7-2.

    2. Turn up repilcation logging and/or wait minutes, hours, days (we waited at least a week to be extra safe)

    3. Run the following command on the destination server to check out the origin server:

    Get-PublicFolder -Recurse | Format-Table Name, OriginatingServer

    4. Run the following command on the destination server to check out the item count:

    Get-PublicFolder -Recurse | Get-PublicFolderStatistics

    5. Run the previous command on the source server to see that folders don’t exist on that server.

    And I believe that is all based on the advice in the link that we should watch item counts.  I would appreciate any pointers if there is anything else that we may have missed.

  6. Anonymous says:

    Disk Performance Testing with Jetstress 2007 Installing Exchange 2007 into a Small Business Server 2003

Comments are closed.