EWS, CCR Cluster, and appointments duplicated on failover
- Hello,
We are testing our Exchange Web Services (EWS) application using an Exchange 2007 SP1 with Cluster continuous replication (CCR). Our testing environment has two cluster node machines (node1 and node2) and another machine running HUB and Client Access Services (CAS).
When we power off the active node1 machine to force a fail over to node2, all of the appointments created by our application are duplicated on the user's calendar in Outlook. Also, the accept/decline meeting emails that were previously deleted show back up in the user's inbox. The duplicates of the appointments don't have the data we put onto the appointments as extended properties. And also, appointments that were previously deleted show back up on the user's calendar.
Any ideas why this is happening?
Is there any way we can avoid getting these duplicate appointments?
Or, is this just the way CCR clustering works?
Or, could there be a misconfiguration in our testing environment?
Thanks!
Greg
All Replies
- I'm wondering if, because of the transport dumpster queue, the meeting request messages are being resent. Our application automatically accepts the appointments and deletes the meeting request emails. Maybe it doesn't know the meeting request email was deleted, so it thinks it was never delivered, so re-sends the meeting request email. Then for some reason, it doesn't detect that appointment is already on the calendar, thus creates a duplicate appointment. If this is the cause, I'm wondering why it doesn't detect the appointment is already on the calendar?
--Greg - First off, check your clustering (As your symptoms are NOT how clustering works) Which OS is Exchange cluster on? (2008 has more clustering tools than 2003 and may help)
run "test-replicationhealth" and "get-clusteredmailboxserverstatus" on either cluster node to see what errors appear.
I think you might find the cluster nodes are not replicating properly and the passive node retains the information from its last replication until failover and then it imports the data in your clients Cache and any new data created after failover.
If we can't solve the issue then you can always remove and re-add the faulty node.....WORST CASE...Do not do this unless no other options exist. NewbieNik, thanks for the suggestions. I don't see any indication of replication errors, the copy status is healthy.
Our domain controller, CAS/HUB, Node1, and Node2 machines are all on Server 2008 Enterprise.
I've discovered I've got two different kinds of duplicate appointment problems going on:
(1) sometimes shortly after creating an appointment via Exchange Web Services (before I was planning to force a failover), two appointments show up on the calendar. These duplicates do appear to be located in the Exchange store, because I see them in Outlook Web Access also. This is very troubling because it seems like this could happen at anytime, not just when a failover occurs. I'm not able to reproduce this problem in a non-clustered enviornment. I logged all my calls to Exchange Web Services, and it does not appear my application is accidently calling EWS create appointment twice. We are considering maybe making our application search for and delete duplicates shortly after creating an appointment...
(2) sometimes shortly after forcing a failover (by powering off the active node), a duplicate apointment shows up in Outlook. This duplicate does not appear to be located in the Exchange store; it appears to only be located in the Outlook cache. I do not see the duplicate when I use Outlook Web Access. If I delete the Outlook.OST file, and restart Outlook, the duplicate goes away. So it seems that maybe Outlook's cache is getting out of sync.[PS] C:\Windows\System32>get-clusteredmailboxserverstatus Identity : MAIL ClusteredMailboxServerName : MAIL.QA02.local State : Online OperationalMachines : {NODE01 <Active>, NODE02 <Quorum Owner>} FailedResources : {} OperationalReplicationHostNames : {node01, node02} FailedReplicationHostNames : {} InUseReplicationHostNames : {node01, node02} IsValid : True ObjectState : Unchanged [PS] C:\Windows\System32>test-replicationhealth Server Check Result Error ------ ----- ------ ----- NODE01 PassiveNodeUp Passed NODE01 ClusterNetwork Passed NODE01 QuorumGroup Passed NODE01 FileShareQuorum Passed NODE01 CmsGroup Passed NODE01 NodePaused Passed NODE01 DnsRegistrationStatus Passed NODE01 ReplayService Passed NODE01 DBMountedFailover Passed NODE01 SGCopySuspended Passed NODE01 SGCopyFailed Passed NODE01 SGInitializing Passed NODE01 SGCopyQueueLength Passed NODE01 SGReplayQueueLength Passed [PS] C:\Windows\System32>test-replicationhealth Server Check Result Error ------ ----- ------ ----- NODE02 ClusterNetwork Passed NODE02 QuorumGroup Passed NODE02 FileShareQuorum Passed NODE02 CmsGroup Passed NODE02 NodePaused Passed NODE02 DnsRegistrationStatus Passed NODE02 ReplayService Passed NODE02 DBMountedFailover Passed NODE02 SGCopySuspended Passed NODE02 SGCopyFailed Passed NODE02 SGInitializing Passed NODE02 SGCopyQueueLength Passed NODE02 SGReplayQueueLength Passed [PS] C:\Windows\System32>


