Exemple #1
0
        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;
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        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;
        }