Ejemplo n.º 1
0
        private static MetaserverResponse Create(MetaRequest request)
        {
            RequestCreate      createRequest = (RequestCreate)request;
            MetaserverResponse response;

            //Invoca o servidor
            try
            {
                MetadataEntry entry = core.Create(createRequest.FileName, createRequest.NbDataServer, createRequest.ReadQuorum,
                                                  createRequest.WriteQuorum, request.ClientId);
                response           = new MetaserverResponse(ResponseStatus.Success, request, ThisMetaserverId);
                response.MetaEntry = entry;
            }
            catch (Exception ex)
            {
                response           = new MetaserverResponse(ResponseStatus.Exception, request, ThisMetaserverId);
                response.Exception = new PadiException(PadiExceptiontType.CreateFile, ex.Message);
            }
            return(response);
        }
Ejemplo n.º 2
0
        public void ReceiveResponse(MetaserverResponse response)
        {
            Console.WriteLine("Received Response ");
            log.Debug(DateTime.Now.Ticks + " ReceiveResponse: " + response);

            response.KnownByThisServersList.Add(ThisMetaserverId);
            //TODO check threads waiting for this request
            //TODO Retirar a thread pendente
            int previous = ThisMetaserverId;

            while (true)
            {
                Boolean iAmLast = false;
                previous = ViewManager.GetPreviousServerInView(previous, response.KnownByThisServersList, out iAmLast);
                if (iAmLast)
                {
                    Console.WriteLine("Source received the ack");
                    return;
                }
                {
                    try
                    {
                        //Tentar enviar ao seguinte
                        //TODO Se ele responder que desconhece, fico à espera do ack. Se ao fim de x tempo nao receber, enviar outra vez
                        log.Debug(DateTime.Now.Ticks + " [M] Response Sent: " + response.OriginalRequest.FileName);
                        ConnectToMetaserver(previous).ReceiveResponse(response);
                        return;
                    }
                    catch (SocketException e)
                    {
                        //Actualizar a view, esta mensagem tem de ser entregue mas a view tem de ser actualizada,
                        //O serializer pode ter morrido.
                        //TODO INVOKE UPDATE VIEW
                        Console.WriteLine("Previous server fail");
                        ViewManager.ServerBetray(previous, ThisMetaserverId);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        //////////////////////////////////// CLient Interface //////////////////////////////////
        public String Create(String filename, int nbDataServers, int readQuorum, int writeQuorum)
        {
            log.Debug(DateTime.Now.Ticks + " Create: " + filename);

            Console.WriteLine("#CREATE Create file: " + filename + " nbDataServer: " + nbDataServers + " readQuorum: " + readQuorum + " writeQuorum: " + writeQuorum);
            RequestCreate createRequest = new RequestCreate(filename, nbDataServers, readQuorum, writeQuorum);

            log.Debug(DateTime.Now.Ticks + " [M] Send Create: " + filename);
            MetaserverResponse response = MetaserverClient.SendRequestToMetaserver(createRequest);
            //Processar a resposta
            MetadataEntry metaEntry = response.MetaEntry;

            if (metaEntry != null)
            {
                Console.WriteLine("#CREATE Create Successeful");
                log.Debug(DateTime.Now.Ticks + " Create Done: " + filename);
                return(metaEntry.ToString( ));
            }
            else
            {
                throw new PadiException(PadiExceptiontType.CreateFile, "Response without entry");
            }
        }
Ejemplo n.º 4
0
        private static MetaserverResponse Balancing(MetaRequest request)
        {
            Console.WriteLine("New balancing message");
            if (!LoadBalancer.Enabled)
            {
                Console.WriteLine("Load balance not enable");
                return(new MetaserverResponse(ResponseStatus.Success, request, ThisMetaserverId));
            }
            Console.WriteLine("Load balance  enable");
            RequestBalancing   balancingRequest = (RequestBalancing)request;
            MetaserverResponse response;

            try
            {
                core.Balancing(balancingRequest);
                response = new MetaserverResponse(ResponseStatus.Success, request, ThisMetaserverId);
            }
            catch (Exception ex)
            {
                response           = new MetaserverResponse(ResponseStatus.Exception, request, ThisMetaserverId);
                response.Exception = new PadiException(PadiExceptiontType.Balancing, ex.Message);
            }
            return(response);
        }
Ejemplo n.º 5
0
 public Boolean ReceiveMetaserverResponse(MetaserverResponse response)
 {
     return(MetaserverClient.ReceiveMetaserverResponse(response));
 }