- if params != nil {
- if params.Meid != nil {
- b := make([]byte, int(C.RMR_MAX_MEID))
- copy(b, []byte(params.Meid.RanName))
- C.rmr_bytes2meid(txBuffer, (*C.uchar)(unsafe.Pointer(&b[0])), C.int(len(b)))
+ if params.Meid != nil {
+ b := make([]byte, int(C.RMR_MAX_MEID))
+ copy(b, []byte(params.Meid.RanName))
+ C.rmr_bytes2meid(txBuffer, (*C.uchar)(unsafe.Pointer(&b[0])), C.int(len(b)))
+ }
+
+ xidLen := len(params.Xid)
+ if xidLen > 0 && xidLen <= C.RMR_MAX_XID {
+ b := make([]byte, int(C.RMR_MAX_XID))
+ copy(b, []byte(params.Xid))
+ C.rmr_bytes2xact(txBuffer, (*C.uchar)(unsafe.Pointer(&b[0])), C.int(len(b)))
+ }
+
+ C.write_bytes_array(txBuffer.payload, datap, txBuffer.len)
+
+ return txBuffer
+}
+
+func (m *RMRClient) Send(params *RMRParams, isRts bool) bool {
+
+ txBuffer := m.CopyBuffer(params)
+ if txBuffer == nil {
+ return false
+ }
+ params.status = m.SendBuf(txBuffer, isRts, params.Whid)
+ if params.status == int(C.RMR_OK) {
+ return true
+ }
+ return false
+}
+
+func (m *RMRClient) SendBuf(txBuffer *C.rmr_mbuf_t, isRts bool, whid int) int {
+ txBuffer.state = 0
+
+ // Just quick retry seems to help for K8s issue
+ if m.maxRetryOnFailure == 0 {
+ m.maxRetryOnFailure = 5
+ }
+
+ for j := 0; j <= m.maxRetryOnFailure; j++ {
+ m.contextMux.Lock()
+ if whid != 0 {
+ txBuffer = C.rmr_wh_send_msg(m.context, C.rmr_whid_t(whid), txBuffer)
+ } else {
+ if isRts {
+ txBuffer = C.rmr_rts_msg(m.context, txBuffer)
+ } else {
+ txBuffer = C.rmr_send_msg(m.context, txBuffer)
+ }