2008,新年,奥运年,更是一个——闰年。闰年里来问题多,29号头一个。俗话说,29号猛于虎也。
没听过?
就在刚刚过去的周末,4年一遇的2月29号已经悄悄溜过去了。打开邮箱,发现一群Redmond的Windows Home Server前同事在剑拔弩张的商量如何对付29号。只因为这一天经销商的电话和论坛已经被愤怒的用户挤满了。事因是:这一天,跟很多天一样,很多人高高兴兴的买了传说中的MediaSmart Server (Windows Home Server的主要零售渠道是通过HP的MediaSmart Server预装),抱回家正待使用,却发现无论如何无法顺利安装客户端。HP很无辜的找到微软:这是为什么呢?
经过一番debug,疑惑被层层解开,居然是29号?就是2月29号!
事因的事因是:在Windows Home Server与客户端connector第一次连接时,需要Server为connector颁发安全证书。出于某种实现上无法避免的原因,客户端的证书日期一定要早于Windows Home Server,否则生成证书的函数会fail。Windows Home Server是2007年7月RTM的。为了方便起见,设计中规定,给客户端生成证书的函数使用2006年作为年份。
但是,2006年没有2月29号。
于是,2月29号首次安装Windows Home Server的人,会在创建客户端证书时出错,进而无法配置客户端。
好在这只洪水猛兽只在29号肆虐,到了3月1号自动消失。微软和HP只能尽快告诉用户,今天不要安装客户端,睡一觉,等过了29号再装。
但是已经造成的影响呢?HP平均每天卖出200台MediaSmart Server,29号上午的3.5个小时内已经有40名客户投诉。微软dogfood邮件组里,HP技术支持论坛里也充斥了问题帖子。当微软承认是闰年问题时,若干典型反应如下:
“I almost wanted to check the calendar to see if it was April 1 (April Fool's ) instead of February 29. You would think this could have been foreseen and corrected.” ——这位听起来也是内行
“I was going nuts trying to figure out why I was having problems getting it setup。” ——抓狂了
“I have a wonderfully efficient and stylish paperweight. Craig's List anybody?” ——我们卖的是时尚大个儿镇纸?不如当废铁处理掉了
同时,Windows Home Server team里都在问:“为啥我们当初没测出来?”Henry不觉脸上发烧,因为这本来该是他测的部分……
同一天发生的类似闰年问题:SQL Server 2008的CTP版本,也同样是由于证书问题,29号不能安装或者启动。不同的是,SQL Server是签发证书时,把expiration date设成30年后的今天。