异常考虑
=======

使用Disconf-client和Disconf-Web，如果进行一些非预期操作，可能会影响到配置服务的正常运行，下面归纳了 目前配置系统的异常处理策略：

**disconf-web事件定义：**

	A1: 未启动disconf-web
	A2: 启动Disconf-web后，未上传一个配置文件叫redis.properties
	A3: 在Disconf-Web上更新分布式配置文件
	
**disconf-client事件定义：**

	B1: 启动包含了Disconf-client的实例
	B2: 启动包含了Disconf-client的实例，它需要一个redis.properties作为分布式配置
	B3: 有一个包含了Disconf-client的实例使用此分布式配置文件redis.properties

以下为详细表格

<table border="1" cellspacing="1" cellpadding="1">
  <tr>
   <th width="100px">操作前提</th>
   <th width="100px">操作时间点</th>
   <th width="100px">操作行为</th>
   <th width="100px">配置系统的处理</th>
   <th width="100px">影响</th>
   <th width="100px">用户建议</th>
  </tr>
  <tr>
    <td width="100px">A1</td>
    <td width="100px">B1</td>
    <td width="100px">B1</td>
    <td width="100px">此实例无法使用所有分布式配置</td>
	<td width="100px">此实例使用本地(classpath目录下)的配置</td>
	<td width="100px">启动disconf-web, 然后再重新实例</td>
  </tr>
  <tr>
    <td width="100px">A2</td>
    <td width="100px">B1</td>
    <td width="100px">B2</td>
    <td width="100px">此实例无法使用此分布式配置redis.properties</td>
	<td width="100px">此实例使用本地的配置redis.properties</td>
    <td width="100px">先上传redis.properties, 然后重新启动实例</td>
  </tr>
  <tr>
    <td width="100px">A2 & B3</td>
    <td width="100px">A3</td>
    <td width="100px">误操作，上传了一个空的配置文件redis.properties</td>
    <td width="100px">此实例无法正常更新配置文件redis.properties</td>
	<td width="100px">1. 此实例没有更新配置，仍沿用以前的配置<br/>2. 实例日志打印ERROR错误<br/>3. 监控系统报警（由于ZK上的配置数据与DB出现不同步，因此有报警）</td>
    <td width="100px">重新上传redis.properties</td>
  </tr>
  <tr>
    <td width="100px">A2 & B3</td>
    <td width="100px">A3</td>
    <td width="100px">误操作，上传了一个别人的配置文件remote.properties</td>
    <td width="100px">disconf-web拒绝了此次更新请求</td>
	<td width="100px">上传失败</td>
    <td width="100px">重新上传redis.properties</td>
  </tr> 
</table>