# Supermarket Berkshelf Incident Post Mortem - **期号**: SRE Weekly Issue #25(2016-05-29) - **作者**: — - **链接**: https://www.chef.io/blog/2016/05/26/supermarket-berkshelf-incident-post-mortem/ ## 简介 This blows my mind. Chef held a live, public retrospective meeting for a recent production incident. I love this idea and I can only hope that more companies follow suit. The transparency is great, but more than that is their sharing of their retrospective process itself. They have a well-defined format for retrospectives including a statement of blamelessness at the beginning. Kudos to Chef for this, and thanks to Nell Shamrell-Harrington for posting the link on Hangops. The actual incident was fairly interesting too. The crux of it comes down to this quote that we’ve probably all uttered ourselves at one point or another: > The further distant staging is from production, the more likely we are to introduce a bug. ## 正文 We at Chef believe it is important to conduct public post mortems whenever possible. We recently conducted one around a Supermarket/Berkshelf incident that occurred on May 16, 2016. I was the incident commander for this incident and would like to share both the video and write up. Video Recording Write Up ### Description On May 16 we experienced a brief SSL issue between Supermarket and Berkshelf. ### Timeline This incident began at 21:56UTC on Monday, May 16, 2016. It was resolved at 22:49UTC that same day. ``` **Time to detect**: 13 minutes 21:56UTC - 22:09UTC on Monday, May 16, 2016 **Time to resolve**: 44 minutes 21:56UTC - 22:36UTC on Monday, May 16, 2016 All times UTC 21:56 - Nell Shamrell-Harrington upgraded 2 of the 4 Supermarket Prod nodes from Supermarket 2.5.2 to Supermarket 2.6.0. She also upgraded the cookbook versions of oc-omnibus-supermarket and supermarket-omnibus-cookbook 22:09 - Nell Shamrell-Harrington ran berks install to pull cookbooks from the public Supermarket and received this error: OpenSSL::SSL::SSLError: hostname "community-files.opscode.com.s3.amazonaws.com" does not match the server certificate She asked in the internal Chef Slack if someone else would run berks install to confirm what she was seeing 22:24 - Lamont Grandquist confirmed that he was seeing the same error in Travis builds 22:32 - Nell Shamrell-Harrington declared an incident 22:36 - Nell Shamrell-Harrington moved the two upgraded Supermarket prod nodes out of the Supermarket prod ELB and confirmed that she no longer saw the error when running berks install 22:38 - SaintAardvark in the #chef IRC channel reported SSL issues with running Berks install, Noah Katrowitz mentioned that kisoku (#chef IRC handle) was reporting the same thing 22:39 - Noah Kantrowitz DM'd Nell Shamrell-Harrington to let her know that users in the Chef IRC channel were reporting issues with berks and Supermarket 22:43 - Lamont Grandquist reported that Travis runs were working again 22:46 - Nell Shamrell-Harrington entered #chef IRC 22:47 - kisoku reported that his CI jobs were working again in #chef IRC 22:50 - SaintAardvark reported that his Jenkins jobs were working again in #chef IRC 22:49 - Nell Shamrell-Harrington declared the incident closed ``` ### Contributing Factor(s) The 2.6.0 release of Supermarket included a commit which changed the AWS S3 urls used to access cookbook artifacts in S3 storage. Prior to this change, Supermarket (through the Paperclip plug in) used a hosted-style S3 url. The one for public Supermarket looked like this: `https://s3.amazonaws.com/community-files.opscode.com/` The problem was this URL style only worked if an S3 bucket was in N. Virginia. To fix this, we changed our config to use a path-style url like this: `https://community-files.opscode.com.s3.amazonaws.com` When this change was merged and deployed, this error appeared when someone attempted to do a berks install using public Supermarket as the cookbook source: OpenSSL::SSL::SSLError: hostname "community-files.opscode.com.s3.amazonaws.com" does not match the server certificate This was due to there being “.” in the bucket name “community-files.opscode.com.s3.amazonaws.com.” Although the previous S3 url style worked with dots in the bucket name, it did not work for a path-style url ### Stabilization Steps We had fortunately only upgraded 2 of the 4 prod nodes, so we removed the 2 upgraded nodes from the ELB, then downgraded them back to Supermarket 2.5.2 ### Impact For approximately 53 minutes, anyone using berks install saw the SSL error. ### Corrective Actions - Make S3 url style configurable in Supermarket - Make sure staging bucket has similar formatted name to the production bucket - Ensure that berks install is part of smoke tests in both staging and production - Add documentation around considerations when naming an S3 bucket - Investigate adding a monitor that does a simple berks install and executes on a regular basis