--- ./source/private_module/arb_kernel/arb_exec/V3/arb_server_ctrl.c	2018-04-25 07:42:11.000000000 +0000
+++ ./source/private_module/arb_kernel/arb_exec/V3/arb_server_ctrl.c.hotpatch	2018-08-23 03:00:56.000000000 +0000
@@ -275,18 +275,7 @@
     }
 }
 
-/**********************************************************************
-*     :
-* :      ctrlObj
-                 cpsIdx
-                 ctrlIdx
-* : 
-*   ֵ: 
-* ע:
-**********************************************************************/
-static void ArbObjCtrlInit(ARB_OBJ_CTRL_S *ctrlObj,
-                           const uint32_t cpsIdx,
-                           const uint32_t ctrlIdx)
+static void ArbObjCtrlInit(ARB_OBJ_CTRL_S *ctrlObj, const uint32_t cpsIdx, const uint32_t ctrlIdx)
 {
     ARB_ASSERT_NO_RET(NULL != ctrlObj);
     UNREFERENCE_PARAM(cpsIdx);
@@ -297,21 +286,32 @@
     ctrlObj->syncSn = 0;
 }
 
-void arbObjCtrlReset(ARB_OBJ_CTRL_S *ctrlObj,
-                           const uint32_t cpsIdx,
-                           const uint32_t ctrlIdx)
+void arbObjCtrlReset(ARB_OBJ_CTRL_S *ctrlObj, const uint32_t cpsIdx, const uint32_t ctrlIdx)
 {
     ArbObjCtrlInit(ctrlObj, cpsIdx, ctrlIdx);
 }
 
-/**********************************************************************
-*     :
-* :      cpsObj
-                 cpsIdx
-* : 
-*   ֵ: 
-* ע:
-**********************************************************************/
+void ArbDbRecoverCpsInit(ARB_OBJ_CPS_S *cpsObj,
+                          const uint32_t cpsIdx)
+{
+    ARB_PTR_ASSERT_NO_RET(cpsObj);
+    cpsObj->nobackStartTime = INVALID_VALUE64;
+    cpsObj->nobackReportTime = 0;
+    cpsObj->dbInfo.cpsId = cpsIdx;
+    cpsObj->dbInfo.cpsSN = INVALID_VALUE64;
+    cpsObj->dbInfo.cpsName[0] = '\0'; 
+    cpsObj->dbInfo.cpsDesc[0] = '\0'; 
+    cpsObj->dbInfo.cpsUser[0] = '\0'; 
+    cpsObj->dbInfo.cpsPswd[0] = '\0'; 
+    cpsObj->dbInfo.cpsIpAddr0[0] = '\0';
+    cpsObj->dbInfo.cpsPort0 = 0;
+    cpsObj->dbInfo.cpsIpAddr1[0] = '\0';
+    cpsObj->dbInfo.cpsPort1 = 0;
+    cpsObj->dbInfo.usableCiphersList[0] = '\0';
+    atomic_set(&cpsObj->refCnt, 0);
+    DBG_LogInfo(ARB_LOG_ID_NEW, "Cps(%d) liveLinkCnt(%d)",cpsIdx,cpsObj->liveLinkCnt);
+    return;
+}
 void ArbObjCpsInit(ARB_OBJ_CPS_S *cpsObj,
                           const uint32_t cpsIdx)
 {
@@ -324,8 +324,8 @@
     cpsObj->enabled = FALSE;
     cpsObj->usrDlt = FALSE;
     cpsObj->nobackStartTime = INVALID_VALUE64;
-    /*ʼֵ0б·ϱDTS2018031311141*/
-    cpsObj->nobackReportTime = 0;
+
+    cpsObj->nobackReportTime = INVALID_VALUE64;
 
     cpsObj->dbInfo.cpsId = cpsIdx;
     cpsObj->dbInfo.cpsSN = INVALID_VALUE64;
@@ -469,7 +469,7 @@
             write_unlock(lock);
             return RETURN_EXIST;
         }
-        ArbObjCpsInit(objCps, cpsDb->cpsId);
+        ArbDbRecoverCpsInit(objCps, cpsDb->cpsId);
         objCps->enabled = TRUE;
         memcpy(&objCps->dbInfo, cpsDb, sizeof(objCps->dbInfo));
         write_unlock(lock);
@@ -1765,16 +1765,20 @@
     rwlock_t *cpsLock = NULL;
     uint32_t cpsId = 0;
     uint32_t ctrlId = 0;
-
+    uint32_t bitmap = 0;    
     ARB_PTR_ASSERT(routeInfo, RETURN_ERROR);
     cpsId = routeInfo->cpsId;
     ARB_ASSERT_RET(g_arbCpsMaxNum > cpsId, RETURN_ERROR);
     ctrlId = routeInfo->ctrlId;
     ARB_ASSERT_RET(MAX_CTRL_NODE_NUM > ctrlId, RETURN_ERROR);
-
+    getNormalNodeBitMap(&bitmap);
+    if (!LVOS_test_bit((int32_t)ctrlId, (void*)&bitmap))
+    {
+        DBG_LogError(ARB_LOG_ID_NEW, "Sync info from ctrl(%u),it is not online.", ctrlId);
+        return RETURN_OK;
+    }
     cpsObj = &g_arbObjTree.cpsTable[cpsId];
     cpsLock = &g_arbObjTree.cpsLock[cpsId];
-
     write_lock(cpsLock);
     if (!cpsObj->enabled)
     {
@@ -1782,8 +1786,6 @@
         DBG_LogError(ARB_LOG_ID_0413, "CpsId(%u) disabled.", cpsId);
         return RETURN_ERROR;
     }
-
-    // ֻµϢ
     if (LVOS_TIME_BEFORE(routeInfo->syncSn, cpsObj->ctrlTable[ctrlId].syncSn))
     {
         DBG_LogWarning(ARB_LOG_ID_0414,
@@ -1796,8 +1798,6 @@
         write_unlock(cpsLock);
         return RETURN_OK;
     }
-
-    // cpsSnЧҪ¼ݸ
     if (INVALID_VALUE64 == cpsObj->dbInfo.cpsSN)
     {
         cpsObj->dbInfo.cpsSN = routeInfo->cpsSn;
--- ./source/private_module/arb_kernel/arb_sysrpc.c	2018-04-29 09:50:52.000000000 +0000
+++ ./source/private_module/arb_kernel/arb_sysrpc.c.hotpatch	2018-08-23 03:00:56.000000000 +0000
@@ -1357,7 +1357,6 @@
         }
 
         cps = &g_arbObjTree.cpsTable[cpsIdx];
-
         write_lock(&g_arbObjTree.cpsLock[cpsIdx]);
         ctrl = &cps->ctrlTable[srcNid];
         if (LVOS_TIME_AFTER(ctrl->syncSn, routeInfo[cpsIdx].syncInfo.syncSn))
@@ -1370,6 +1369,7 @@
             write_unlock(&g_arbObjTree.cpsLock[cpsIdx]);
             continue;
         }
+        ctrl->syncSn = routeInfo[cpsIdx].syncInfo.syncSn;/*ͬSN*/
         ctrl->liveLinkCnt = routeInfo[cpsIdx].syncInfo.ctrlLiveLink;
         cps->dbInfo.cpsSN = routeInfo[cpsIdx].syncInfo.cpsSn;
         for (ctrlIdx = 0; ctrlIdx < ARRAY_LEN(cps->ctrlTable); ctrlIdx ++)
