“Booking Modified By Another User” Error

June 14th, 2008

On a recent implementation of NewSkies implementation of SkySales, I would occasionally run into a strange error from the NewSkies application server: “Booking Modified By Another User”. It seemed to occur only after a booking was initially created, then was modified again. On the second attempt at committing the booking, core (the app server) would occasionally throw this error.

This error is triggered when the application server detects that the last updated date/time of the booking in the database doesn’t match what it has in memory. While this is a valid sanity check to prevent the application server blindly overwriting a booking in the database, we had no idea who or what was modifying the booking in between our commits.

After some digging, we discovered that the last user updating the booking was a process account (ProcessMaster). This can be seen when whatever action it took left a trace in the booking history (viewed in SkySpeed).

As Navitaire doesn’t seem to have a solution for the problem, the best recommendation was to re-retrieve the booking when this error was found and try the commit again. This would refresh the application server with the most recent copy of the booking and reset things on the web server as well.

This unfortunately has a side effect of killing any changes the user has just requested to their booking. It’s less painful if they have to repeat just one screen of changes, but it’s worse if they just finished a change process involving a number of steps.

The only good solution I can think of is to create a change playback queue of actions on any controller calls. This is theoretical at this point, but I believe one could create a custom state booking controller that uses the default Navitaire SkySales booking controller and queues calls through it. The only problem with this approach (and it’s a big one) is that Navitaire used a concrete implementation of the booking controller in all of their controls instead of an interface. This means that you cannot step in between those controls and the controllers without messy overrides. This solution would only work on custom code.

We can only hope that SkySales will continue to mature and move more toward interfaces. Unfortunately interfaces are the only Object Oriented way in C# to gain some control over what is going on under the covers.


Trackback URI | Comments RSS

Leave a Reply

Name (required)

Email (required)

Website

Speak your mind

  • Why New Skies?
    • There's a real lack of information on the net about New Skies development.
    • My name is Colt Cooper, and I'm trying to change that.
  • Links