Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ErrorIrresolvableConflict while creating an event

I am getting a lot of errors related to ErrorIrresolvableConflict response code when trying to create an event

Stack Trace -    at Microsoft.OData.ProxyExtensions.DataServiceContextWrapper.<SaveChangesAsync>d__5e.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Office365CalendarProviderBL.<>c__DisplayClass7_0.<<CreateCalendarEvent>b__0>d.MoveNext() - Inner Exception - Microsoft.OData.Client.DataServiceRequestException: An error occurred while processing this request. ---> Microsoft.OData.Client.DataServiceClientException: {"error":{"code":"ErrorIrresolvableConflict","message":"The send or update operation could not be performed because the change key passed in the request does not match the current change key for the item."}}
   --- End of inner exception stack trace ---
   at Microsoft.OData.Client.SaveResult.HandleResponse()
   at Microsoft.OData.Client.BaseSaveResult.EndRequest()
   at Microsoft.OData.Client.DataServiceContext.EndSaveChanges(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.OData.ProxyExtensions.DataServiceContextWrapper.<SaveChangesAsync>d__5e.MoveNext()

I am getting this message with this exception - The send or update operation could not be performed because the change key passed in the request does not match the current change key for the item.

  1. Please explain what is a change key and how it works ?
  2. I am getting these exceptions only from yesterday and hasn't changed any code. Do I need to update anything at my end or am I missing anything ?

I am using V1 DLL - https://api.office.com/discovery/v1.0/me/ ProxyExtension Version - 23

Code:-

// In this method, we are populating event properties later used to create event on calendar. Please verify if I am missing any important property here
private Event CreateCalEventObj(CalendarMeetingBL meeting, string location, meetingAdditionalDataBL data)
{
    Event calEvent = new Event();
    try
    {
        calEvent.Subject = WEB.HttpUtility.HtmlDecode(meeting.MeetingName);
        calEvent.ShowAs = FreeBusyStatus.Busy;
        if (meeting.EventAlarmInMinutes == -1)
            meeting.EventAlarmInMinutes = null;
        calEvent.Reminder = meeting.EventAlarmInMinutes;
        calEvent.Start = meeting.StartTime;
        calEvent.End = meeting.EndTime;
        calEvent.StartTimeZone = meeting.TimeZoneString;
        calEvent.EndTimeZone = meeting.TimeZoneString;

        if (!string.IsNullOrEmpty(location) && location.Length <= 500)
        {
            calEvent.Location = new Microsoft.Office365.OutlookServices.Location()
            {
                DisplayName = CommonBL.FixLineBreakForGooglelocation(WEB.HttpUtility.HtmlDecode(location.Replace("\n", " ")))
            };
        }
        else if (!string.IsNullOrEmpty(data.Phone))
        {
            calEvent.Location = new Microsoft.Office365.OutlookServices.Location()
            {
                DisplayName = "Phone: " + CommonBL.FixLineBreakForGooglelocation(WEB.HttpUtility.HtmlDecode(data.Phone))
            };
        }
        else if (!string.IsNullOrEmpty(data.MobileNumber))
        {
            calEvent.Location = new Microsoft.Office365.OutlookServices.Location()
            {
                DisplayName = "Mobile: " + CommonBL.FixLineBreakForGooglelocation(WEB.HttpUtility.HtmlDecode(data.MobileNumber))
            };
        }
        calEvent.Body = new ItemBody()
        {
            Content = CommonBL.RevertLineBreakPlaceHolder((WEB.HttpUtility.HtmlDecode(meeting.MeetingDetails.Replace(@"\\\", "\\"))))
        };
    }
    catch (Exception ex)
    {
        BLFactory.CurrentInstance.LoggingBLObj.InsertLog("Insert logging here");
        calEvent = null;
    }
    return calEvent;
}

// In this method we are creating event on calendar.
private string CreateCalendarEvent(CalendarMeetingBL meeting, List<ParticipantBL> invitees, string username, string calendarId, OutlookServicesClient service, string location, meetingAdditionalDataBL data, string meetingId = "-1")
{
    var taskCreateMeeting = Task<string>.Run(
            async () =>
            {
                Event calEvent = CreateCalEventObj(meeting, location, data);
                if (calEvent != null)
                {
                    try
                    {
                        //Add invitees to the event
                        foreach (ParticipantBL inviteeItem in invitees)
                        {
                            if (!inviteeItem.IsAdditional)
                            {
                                calEvent.Attendees.Add(new Attendee()
                                {
                                    EmailAddress = new EmailAddress()
                                    {
                                        Address = inviteeItem.Email.Replace("&#39;", "'"),
                                        Name = inviteeItem.Name
                                    },
                                    Type = AttendeeType.Required,
                                    Status = new ResponseStatus()
                                    {
                                        Response = ResponseType.Accepted,
                                        Time = DateTime.Now
                                    }
                                });
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        BLFactory.CurrentInstance.LoggingBLObj.InsertLog(meeting.MeetingId, username, "Locally User ID is Meeting id AND email is username - Scheduling Logging Exception 3 - Stack Trace - " + ex.StackTrace + " - Inner Exception - " + ex.InnerException + " - meetingObjValues - " + meetingObjValues + " - meetingAdditionalDataObjValues - " + meetingAdditionalDataObjValues + " -  username - " + username + " - calendarId - " + calendarId + " - location - " + location + " - meetingId - " + meetingId, meeting.MeetingId);
                        return "-1";
                    }

                    try
                    {

                        var providerDefault = (String.IsNullOrEmpty(calendarId) ? service.Me.Events : service.Me.Calendars[calendarId].Events);
                        await providerDefault.AddEventAsync(calEvent);          // We are getting Exception here but Event is created in calendar                     
                        return calEvent.Id;                                     // Event object is not updated after exception
                    }
                    catch (Exception ex)
                    {
                        BLFactory.CurrentInstance.LoggingBLObj.InsertLog("Insert exception logging here");
                        return "-1";
                    }
                }
                else
                    return "-1";
            }
        );
    Task.WaitAll(taskCreateMeeting);
    string id = taskCreateMeeting.Result;
    return id;
}

The exception we are getting is of type Microsoft.OData.Client.DataServiceRequestException but it is not caught under the dedicated catch block

                catch (Microsoft.OData.Client.DataServiceRequestException ex)
                {
                    BLFactory.CurrentInstance.LoggingBLObj.InsertLog("Insert logging here");
                    return "-1";
                }

Let me know if anything else is required Thanks in Advance.

like image 348
Harsh Vats Avatar asked May 21 '26 19:05

Harsh Vats


1 Answers

This is not directly related to OData - we have seen the same thing with EWS. We just found the underlying race condition inside of Exchange code that was causing this and one of our devs just checked in a fix for this. As such, it should start rolling out in production soon.

There is nothing wrong with your code that would be causing this for a new item.

like image 103
David Sterling - MSFT Avatar answered May 25 '26 01:05

David Sterling - MSFT



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!