Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }