On Tuesday, August 12th at 15:10 UTC, the cookbook dependency API provided by Supermarket became unusable. We are very sorry for this outage and interruption to workflow. In this post, I will explain what happened and the mitigation steps we are taking to prevent this from happening in the future.
At Chef, we perform a postmortem for any significant production environment outage or incident that results in paging an engineer. We have a postmortem writeup with the timeline, root cause, and corrective actions published in a private repository. Then, we schedule an internal postmortem meeting, where the incident leader for the problem discusses with others who were involved what happened, why, and how to prevent the same thing from happening. This is a learning experience for everyone, and these meetings are conducted in a blameless manner. We also often make a public blog post when the outage had external customer impact.
This writeup and meeting are normally completed internally. However, because Supermarket is the community tool, we wanted this process to be public. The application repository and supporting cookbook are open source, and issues that affect “supermarket.getchef.com” may affect anyone who also runs the application on their internal infrastructure. So for this incident, we conducted the postmortem meeting in the open so the community has a chance to participate as equally as anyone else at Chef.
Postmortem write-up – Contents from our internal repository where we store postmortem write-ups.
Postmortem meeting – Video of the postmortem meeting
The 2.7.1 version of the supermarket cookbook broke the symlinking of .env
. This was not initially discovered at the time of the deploy because:
deploy_revision
and this was the first time the revision was deployed to production since the cookbook update.The Chef Operations team manually added an additional symlink for the .env.production
and restarted the web server so that the Supermarket application would know where to find the Redis instance.
There were a number of corrective actions agreed upon in the meeting. Below is a list of actions, who was assigned and notes if they have already been completed.
.env.production
symlink. (Released as part of version 2.7.2 of the supermarket cookbook)/status
return a “not ok” status if a service is unreachable. (FullStack – https://trello.com/c/Ho4fHdXy)We are sorry that the cookbook dependency API was unavailable. We know that you depend on us to keep this service up and running. We will work hard to prevent this sort of issue in the future.
Thank you!