private ConcurrentDictionary <string, MetadataEntry> GetParcialMetaTable(NamespaceManager namespaceManager, List <int> sectionsToSend) { ConcurrentDictionary <string, MetadataEntry> tableToSend = new ConcurrentDictionary <string, MetadataEntry>( ); foreach (KeyValuePair <string, MetadataEntry> metadataEntry in _metaTable) { int queue = namespaceManager.GetNameSpaceID(metadataEntry.Key); if (sectionsToSend.Contains(queue)) { tableToSend.TryAdd(metadataEntry.Key, metadataEntry.Value); } } return(tableToSend); }
/// <summary> /// Corre numa thread independente /// </summary> /// <param name="request"></param> private void NewRequestProcess(MetaRequest request) { Console.WriteLine("New Request: " + request); log.Debug(DateTime.Now.Ticks + " New Request: " + request); //Get NamespaceId int namespaceId = NamespaceManager.GetNameSpaceID(request.FileName); //Get Serializer ID. if equal mine, get this sector next ID and stamp it int serializer = NamespaceManager.GetPartSerializer(namespaceId, ViewManager); //A mensagem nao tem serializador mas sou eu: entao serializo if (request.Serializer == -1) { if (serializer == ThisMetaserverId) { //sou eu a serializar isto request.Serializer = ThisMetaserverId; //Se os servidores querem congelar, nao vou lancar mais pedidos. //Se nao serializar nem aceitar novos pedidos, o sistema fica isolado freezeNewRequests.WaitOne( ); Console.WriteLine("Passed Serializer"); log.Debug(DateTime.Now.Ticks + " Start Serializing request: " + request); request = NamespaceManager.SerializeRequest(request); log.Debug(DateTime.Now.Ticks + " Request serialized: " + request); } else { //passo a outro para ele serializar isto e espero que volte SendToNext(request, null); return; } } //agora tem serializador de certeza if (request.Serializer != serializer) { //Discordo quem seja o serializador Console.WriteLine("Dont agree: " + request.Serializer + " is the serializer. Should be: " + serializer); } //Concordo com o serializador, entregar Console.WriteLine("Deliver to App " + request); //Deliver to app (if this request is newer (serializer tells it)) MetaserverResponse result = AppDelivery(request); SendToNext(request, result); }