public RspList Multicast(ArrayList dests, object msg, byte mode, bool isSeqRequired, long timeout) { if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("ClustService.Mcast", ""); byte[] serializedMsg = SerializeMessage(msg); Message m = new Message(null, null, serializedMsg); if (msg is Function) m.Payload = ((Function)msg).UserPayload; m.setBuffer(serializedMsg); m.Dests = dests; m.IsSeqRequired = isSeqRequired; RspList rspList = null; try { rspList = _msgDisp.castMessage(dests, m, mode, timeout); } finally { if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("ClustService.Mcast", "completed"); } if (rspList.size() == 0) { return null; } Rsp rsp; for (int i = 0; i < rspList.size(); i++) { rsp = (Rsp)rspList.elementAt(i); rsp.Deflate(_context.SerializationContext); } return rspList; }
public RspList BroadcastToMultiple(ArrayList dests, object msg, byte mode, long timeout, string traceMsg, bool handleAsync) { if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("ClustService.BcastToMultiple", ""); byte[] serializedMsg = SerializeMessage(msg); Message m = new Message(null, null, serializedMsg); m.HandledAysnc = handleAsync; m.setBuffer(serializedMsg); m.IsUserMsg = true; RspList rspList = null; try { rspList = _msgDisp.castMessage(dests, m, mode, timeout); } finally { if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("ClustService.BcastToMultiple", "completed"); } if (rspList.size() == 0) { return null; } Rsp rsp; for (int i = 0; i < rspList.size(); i++) { rsp = (Rsp)rspList.elementAt(i); rsp.Deflate(_context.SerializationContext); } return rspList; }
/// <summary> Send the bcast request with the given localSeqID /// /// </summary> /// <param name="seqID">the local sequence id of the /// </param> private void _transmitBcastRequest(long seqID) { Message reqMsg; // i. If NULL_STATE, then ignore, just transient state before // shutting down the retransmission thread // ii. If blocked, be patient - reschedule // iii. If the request is not pending any more, acknowledge it // iv. Create a broadcast request and send it to the sequencer if (state == NULL_STATE) { if (Stack.NCacheLog.IsInfoEnabled) Stack.NCacheLog.Info("Transmit BCAST_REQ[" + seqID + "] in NULL_STATE"); return; } if (state == BLOCK) return; request_lock.AcquireReaderLock(Timeout.Infinite); try { if (!reqTbl.Contains((long)seqID)) { retransmitter.ack(seqID); return; } } finally { request_lock.ReleaseReaderLock(); } reqMsg = new Message(); reqMsg.Dest = sequencerAddr; reqMsg.Src = addr; reqMsg.setBuffer(new byte[0]); HDR hdr = new HDR(); hdr.type = HDR.REQ; hdr.localSeqID = seqID; hdr.seqID = NULL_ID; reqMsg.putHeader(HeaderType.TOTAL, hdr); reqMsg.IsUserMsg = true; reqMsg.Type = MsgType.TOKEN_SEEKING; Event evt = new Event(); evt.Type = Event.MSG; evt.Arg = reqMsg; passDown(evt); }
private RspList BroadcastToMultiple(ArrayList dests, object msg, byte mode, long timeout, bool isSeqRequired, string traceMsg,Priority priority) { ///TODO: remove this conditional compilation byte[] serializedMsg = SerializeMessage(msg); Message m = new Message(null, null, serializedMsg); if (msg is Function) { m.Payload = ((Function)msg).UserPayload; m.responseExpected = ((Function)msg).ResponseExpected; } m.setBuffer(serializedMsg); m.IsSeqRequired = isSeqRequired; m.Priority = priority; RspList rspList = null; try { rspList = _msgDisp.castMessage(dests, m, mode, timeout); } finally { if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("ClustService.BcastToMultiple", "completed"); } if (rspList.size() == 0) { return null; } Rsp rsp; for (int i = 0; i < rspList.size(); i++) { rsp = (Rsp)rspList.elementAt(i); rsp.Deflate(_context.SerializationContext); } return rspList; }
/// <summary> /// Fetches the request status from the nodes. /// </summary> /// <param name="nodes"></param> /// <returns></returns> public Hashtable FetchRequestStatus(ArrayList nodes, ArrayList clusterMembership, long reqId) { Hashtable result = new Hashtable(); if (nodes != null && nodes.Count > 0) { HDR hdr = new HDR(HDR.GET_REQ_STATUS, NextRequestId,true, null); hdr.status_reqId = reqId; Message msg = new Message(); msg.putHeader(HeaderType.REQUEST_COORELATOR, hdr); msg.Dests = nodes; msg.IsSeqRequired = false; msg.IsUserMsg = true; msg.RequestId = reqId; msg.setBuffer(new byte[0]); GroupRequest req = new GroupRequest(msg, this, nodes, clusterMembership, GroupRequest.GET_ALL, 2000, 0, this._ncacheLog); req.execute(); RspList rspList = req.Results; RequestStatus reqStatus = null; if (rspList != null) { for (int i = 0; i < rspList.size(); i++) { Rsp rsp = rspList.elementAt(i) as Rsp; if (rsp != null) { if (rsp.received) { if (NCacheLog.IsInfoEnabled) NCacheLog.Info("ReqCorrelator.FetchReqStatus", reqId + " status response received from " + rsp.sender); object rspValue = rsp.Value; if (rspValue is byte[]) reqStatus = CompactBinaryFormatter.Deserialize(new MemoryStream((byte[])rspValue), null) as RequestStatus; else reqStatus = rsp.Value as RequestStatus; if (NCacheLog.IsInfoEnabled) NCacheLog.Info("ReqCorrelator.FetchReqStatus", reqId + " status response: " + reqStatus); result[rsp.Sender] = reqStatus; } else { if (NCacheLog.IsInfoEnabled) NCacheLog.Info("ReqCorrelator.FetchReqStatus", reqId + " status response NOT received from " + rsp.sender); result[rsp.Sender] = new RequestStatus(reqId,RequestStatus.NONE); } } } } } return result; }