/******************************************************************************
* 概述:     判断并创建一个新的sds socket
* 函数名:    insertSocket
* 返回值:
* 参数列表:  参数名          参数类型      取值范围     描述
*            pp             *dzhyun.SDSEndpoint
*
*******************************************************************************/
func (this *DataCache) insertSocket(pp *dzhyun.SDSEndpoint) {
	if pp == nil || pp.GetBusiPath() != DEFAULT_SdsServicepath {
		return
	}
	this.msocMutex.Lock()
	defer this.msocMutex.Unlock()
	if _, ok := this.mSocketGroup[(*pp).GetNodeName()]; !ok {
		newZmqSocket := &ZmqSocket{}
		if reqUrl, subUrl, err := this.getSdsAddr((*pp).GetInterface()); err == nil {
			this.msocketSerial++
			if err := newZmqSocket.Init(reqUrl, subUrl, this.mzmq, this.msocketSerial, this.mSocketsStateCh); err == nil {
				this.mSocketGroup[(*pp).GetNodeName()] = newZmqSocket
				log4.Debug("insertSocket size=%d nodename=%s %s %s", len(this.mSocketGroup), (*pp).GetNodeName(), reqUrl, subUrl)
			}
		}

	}
}
/******************************************************************************
* 概述:     按序插入数组
* 函数名:   SortMinPoints
* 返回值:
* 参数列表:  参数名          参数类型                取值范围       描述
*           arr            []*dzhyun.SDSEndpoint               操作的数组
*           arrSize        *int                                数组当前元素个数
*           arrCap         int                                 数组的总容量大小
*           insertData     *dzhyun.SDSEndpoint                 被插入的元素
*
*******************************************************************************/
func SortMinPoints(arr *[]*dzhyun.SDSEndpoint, arrSize *int, arrCap int, insertData *dzhyun.SDSEndpoint) {
	pos := *arrSize
	for i := *arrSize - 1; i >= 0; i-- {
		if insertData.GetLoading() < (*arr)[i].GetLoading() {
			if i+1 < arrCap {
				(*arr)[i+1] = (*arr)[i]
			}
			pos = i
		} else {
			break
		}
	}

	if pos <= arrCap-1 {
		(*arr)[pos] = insertData
	}
	if (*arrSize) < arrCap {
		(*arrSize)++
	}
}