public void MulticastMsg(ViewMsg msg) { msg.Source = ThisMetaserverId; msg.Status = GetStatus(ThisMetaserverId); ViewElementsMutex.WaitOne( ); //Contact other servers for (int id = 0; id < ViewElements.Length; id++) { if (id == ThisMetaserverId) { continue; } // if ( GetStatus( id ) == ServerStatus.Off ) // continue; msg.Destination = id; log.Debug(DateTime.Now.Ticks + " [M] Multicast View: " + msg.Status); IMetaToMeta server = MetadataServer.ConnectToMetaserver(id); BullyDel invokeDel = new BullyDel(server.BullyRequestsRetrival); AsyncCallback callback = new AsyncCallback(BullyResponse); try { Console.WriteLine("Multicast: " + msg + " to " + msg.Destination); invokeDel.BeginInvoke(msg, callback, null); } catch (SocketException) { UpdateViewServerState(ServerStatus.Off, id, null); } } ViewElementsMutex.ReleaseMutex( ); }
private Boolean UpdateFromServers(List <int> serverIds) { foreach (int serverId in serverIds) { Console.WriteLine("Copy from : " + serverId); IMetaToMeta server = MetadataServer.ConnectToMetaserver(serverId); //Request copy from master try { CopyStructMetadata dataStruct = server.RequestUpdate(MetadataServer.GetQueueStateVector(), MetadataServer.ThisMetaserverId); //Update the server MetadataServer.UpdateServer(dataStruct); } catch (SocketException) { return(false); } } return(true); }