func syncData2Slave(node *models.Node, data interface{}, dataVer *models.DataVersion, opUserKey string) error { kind := "" switch data.(type) { case *models.User: kind = NODE_REQUEST_SYNC_TYPE_USER case *models.App: kind = NODE_REQUEST_SYNC_TYPE_APP case *models.WebHook: kind = NODE_REQUEST_SYNC_TYPE_WEBHOOK case *models.Config: kind = NODE_REQUEST_SYNC_TYPE_CONFIG case *models.Node: kind = NODE_REQUEST_SYNC_TYPE_NODE case *cloneData: kind = NODE_REQUEST_SYNC_TYPE_CLONE default: log.Panicln("unknown node data sync type: ", reflect.TypeOf(data)) } bs, _ := json.Marshal(data) syncDataString, _ := json.Marshal(&syncDataT{ DataVersion: dataVer, Kind: kind, Data: string(bs), OpUserKey: opUserKey, }) reqData := nodeRequestDataT{ Auth: nodeAuthString, Data: string(syncDataString), } _, err := nodeRequest(node.NodeURL, NODE_REQUEST_TYPE_SYNCSLAVE, reqData) if err == nil && kind != NODE_REQUEST_SYNC_TYPE_NODE { // update slave data version here dataVersionStr, _ := json.Marshal(dataVer) memConfMux.Lock() node.DataVersion = dataVer node.DataVersionStr = string(dataVersionStr) node.LastCheckUTC = utils.GetNowSecond() memConfMux.Unlock() updateNodeDataVersion(nil, node, dataVer) } return err }