Every week I am where IT problems occur: sharing my experience with development teams around the world and helping them make better use of the PHP platform. When you spend so much time on the proverbial road, „interesting“ things related to travel are bound to happen. For instance, over the years I have learned more about the IT systems of airlines than I ever wanted to know.
A while back I booked an itinerary with flights from Germany to the United States and back that caused an unusual problem. The purpose of the trip was to visit a customer in Washington, DC and so I booked CGN-MUC-IAD-FRA-QKL. After booking the itinerary on the website of my airline of choice, I called their customer hotline to upgrade one flight segment using so-called eVouchers. These are vouchers for free upgrades that you get when you renew your status with this particular airline. They put me on a waiting list for the upgrade, and less than twenty-four hours later the upgrade was confirmed.
However, the „automated waiting list upgrade system“ used award miles instead of eVouchers. So I called the hotline again and reminded them that I wanted to use eVouchers instead of award miles. They told me that „they do not have a button“ in their application to fix the problem, but there was no need to worry, as they would ask their technical support to „fix it manually“. As it so happened, I had another flight booked for the very same day, so after the phone call I left for the airport.
Having arrived at the airport terminal, I received an email from my customer informing me that there had been a misunderstanding and that they needed me in Atlanta, not Washington, DC. Since I had sometime to kill before boarding my flight, I approached the airline’s ground staff and explained that I would like to cancel the upgrade as well as the whole itinerary and have the miles and the money refunded, respectively. Unfortunately, they told me that they could only cancel the upgrade and refund the award miles used to buy it. To cancel the itinerary itself I would have to either call the hotline or use the website. After cancelling both the upgrade and the itinerary (via the website) the award miles for the upgrade were refunded… and the eVouchers were deducted.
The actions „refund the award miles and use eVouchers instead“, „cancel the upgrade“, and „cancel the whole itinerary“ that I requested were performed asynchronously and out of sequence. This lead to something that in computer science is known as a „race condition“. These race conditions occur when separate processes read and write the same data.