diff --git a/src/navigators/smart/paxosatwar/executionmanager/ExecutionManager.java b/src/navigators/smart/paxosatwar/executionmanager/ExecutionManager.java index 82159d3c4318257b5bebc648000557029ae89014..3e4d0cf710d8d1185b9176ca64b3e37ea638bb97 100644 --- a/src/navigators/smart/paxosatwar/executionmanager/ExecutionManager.java +++ b/src/navigators/smart/paxosatwar/executionmanager/ExecutionManager.java @@ -265,6 +265,8 @@ public final class ExecutionManager { //TODO: at this point a new state should be recovered from other correct replicas /** ISTO E CODIGO DO JOAO, PARA TRATAR DA TRANSFERENCIA DE ESTADO */ + Logger.println("(ExecutionManager.checkLimits) adding message for execution "+consId+" to out of context"); + addOutOfContextMessage(msg); tomLayer.requestState(me, otherAcceptors, msg.getSender(), consId); /******************************************************************/ } @@ -317,21 +319,12 @@ public final class ExecutionManager { return execution; } /** ISTO E CODIGO DO JOAO, PARA TRATAR DA TRANSFERENCIA DE ESTADO */ - public void removeExecutions(int id) { - executionsLock.lock(); - /******* BEGIN EXECUTIONS CRITICAL SECTION *******/ - - Set keys = executions.keySet(); - for (int execution : keys) - if (execution <= id) executions.remove(execution); - - /******* END EXECUTIONS CRITICAL SECTION *******/ - executionsLock.unlock(); + public void removeOutOfContexts(int id) { outOfContextLock.lock(); /******* BEGIN OUTOFCONTEXT CRITICAL SECTION *******/ - keys = outOfContextProposes.keySet(); + Set keys = outOfContextProposes.keySet(); for (int execution : keys) if (execution <= id) outOfContextProposes.remove(execution); diff --git a/src/navigators/smart/tom/core/DeliveryThread.java b/src/navigators/smart/tom/core/DeliveryThread.java index d7f803ca96484f67650916ed060054e786cc7962..76b9e5f86f11eab1b8271e62ce4c952493249bd4 100644 --- a/src/navigators/smart/tom/core/DeliveryThread.java +++ b/src/navigators/smart/tom/core/DeliveryThread.java @@ -90,7 +90,7 @@ public class DeliveryThread extends Thread { // obtain an array of requests from the taken consensus BatchReader batchReader = new BatchReader(batch, conf.getUseSignatures()==1); - Logger.println("(DeliveryThread.run) interpreting and verifying batched requests."); + Logger.println("(DeliveryThread.update) interpreting and verifying batched requests."); int numberOfMessages = batchReader.getNumberOfMessages(); @@ -157,13 +157,13 @@ public class DeliveryThread extends Thread { /****** Julgo que isto nao sera necessario *********** if (conf.getCheckpoint_period() > 0) { if ((eid > 0) && (eid % conf.getCheckpoint_period() == 0)) { - Logger.println("(DeliveryThread.run) Performing checkpoint for consensus " + eid); + Logger.println("(DeliveryThread.update) Performing checkpoint for consensus " + eid); byte[] state2 = receiver.getState(); tomLayer.saveState(state2, eid); //TODO: possivelmente fazer mais alguma coisa } else { - Logger.println("(DeliveryThread.run) Storing message batch in the state log for consensus " + eid); + Logger.println("(DeliveryThread.update) Storing message batch in the state log for consensus " + eid); tomLayer.saveBatch(batch, eid); //TODO: possivelmente fazer mais alguma coisa } @@ -194,10 +194,10 @@ public class DeliveryThread extends Thread { //(it only happens if the previous consensus were decided in a //round > 0 /** Nao consigo perceber se isto tem utilidade neste contexto *****/ - int nextExecution = lastEid + 1; - if(tomLayer.acceptor.executeAcceptedPendent(nextExecution)) { - Logger.println("(DeliveryThread.run) Executed propose for " + nextExecution); - } + //int nextExecution = lastEid + 1; + //if(tomLayer.acceptor.executeAcceptedPendent(nextExecution)) { + //Logger.println("(DeliveryThread.update) Executed propose for " + nextExecution); + //} /******************************************************************/ } @@ -308,6 +308,10 @@ public class DeliveryThread extends Thread { } /** ISTO E CODIGO DO JOAO, PARA TRATAR DOS CHECKPOINTS */ + + System.out.println("[DeliveryThread.run]"); + System.out.println("Acabei de entregar o batch do EID " + cons.getId()); + System.out.println("[/DeliveryThread.run]"); if (conf.getCheckpoint_period() > 0) { if ((cons.getId() > 0) && ((cons.getId() % conf.getCheckpoint_period()) == 0)) { Logger.println("(DeliveryThread.run) Performing checkpoint for consensus " + cons.getId()); diff --git a/src/navigators/smart/tom/core/OutOfContextMessageThread.java b/src/navigators/smart/tom/core/OutOfContextMessageThread.java index 9afbc658f5cb841f8117162445344d178240c165..0c319f8eb8623045ffe2f60053406e2cb18e328d 100644 --- a/src/navigators/smart/tom/core/OutOfContextMessageThread.java +++ b/src/navigators/smart/tom/core/OutOfContextMessageThread.java @@ -58,6 +58,9 @@ public class OutOfContextMessageThread extends Thread { int nextExecution = tomLayer.getLastExec() + 1; if (tomLayer.execManager.thereArePendentMessages(nextExecution)) { + System.out.println("[OutOfContextMessageThread.run]"); + System.out.println("Vou processar mensagens q estavam fora do contexto para o EID " + nextExecution); + System.out.println("[/OutOfContextMessageThread.run]"); Logger.println("(OutOfContextMessageThread.run) starting processing out of context messages for consensus " + nextExecution); execution = tomLayer.execManager.getExecution(nextExecution); Logger.println("(OutOfContextMessageThread.run) finished processing out fo context messages for consensus " + nextExecution); diff --git a/src/navigators/smart/tom/core/TOMLayer.java b/src/navigators/smart/tom/core/TOMLayer.java index 5c885371aa34d4f4cca80cce99b83e3b107cb9c0..9d25763214bfdd1a99fa2af5a8fd7be886fe2faf 100644 --- a/src/navigators/smart/tom/core/TOMLayer.java +++ b/src/navigators/smart/tom/core/TOMLayer.java @@ -225,7 +225,11 @@ public final class TOMLayer extends Thread implements RequestReceiver { proposeLock.lock(); this.inExecution = inEx; - if (inEx == -1) { + if (inEx == -1 + /** ISTO E CODIGO DO JOAO, PARA TRATAR DA TRANSFERENCIA DE ESTADO */ + && !isRetrievingState() + /******************************************************************/ + ) { canPropose.signalAll(); } proposeLock.unlock(); @@ -911,6 +915,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { log.setLastCheckpointEid(lastEid); /************************* TESTE ************************* + System.out.println("[TOMLayer.saveState]"); int value = 0; for (int i = 0; i < 4; i++) { int shift = (4 - 1 - i) * 8; @@ -921,6 +926,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { System.out.println("Checkpoint: " + log.getLastCheckpointEid()); System.out.println("Ultimo EID: " + log.getLastEid()); System.out.println("//////////////////////////////////////////////////"); + System.out.println("[/TOMLayer.saveState]"); /************************* TESTE *************************/ lockState.unlock(); @@ -935,6 +941,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { log.setLastEid(lastEid); /************************* TESTE ************************* + System.out.println("[TOMLayer.saveBatch]"); byte[][] batches = log.getMessageBatches(); int count = 0; for (int i = 0; i < batches.length; i++) @@ -946,6 +953,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { System.out.println("Ultimo EID: " + log.getLastEid()); //System.out.println("Espaco restante para armazenar batches: " + (stateManager.getLog().getMessageBatches().length - count)); System.out.println("//////////////////////////////////////////////////"); + System.out.println("[/TOMLayer.saveBatch]"); /************************* TESTE *************************/ lockState.unlock(); @@ -955,7 +963,8 @@ public final class TOMLayer extends Thread implements RequestReceiver { public void requestState(int me, int[] otherAcceptors, int sender, int eid) { - /************************* TESTE ************************* + /************************* TESTE *************************/ + System.out.println("[TOMLayer.requestState]"); System.out.println("Mensagem adiantada! (eid " + eid + " vindo de " + sender + ") "); /************************* TESTE *************************/ @@ -963,7 +972,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { stateManager.addEID(sender, eid); - /************************* TESTE ************************* + /************************* TESTE *************************/ System.out.println("Mensagem adiantada! (eid " + eid + " vindo de " + sender + ") "); System.out.println("Nao estou a espera"); System.out.println("Numero de mensagens recebidas para este EID de replicas diferentes: " + stateManager.moreThenF_EIDs(eid)); @@ -971,7 +980,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { if (stateManager.getLastEID() < eid && stateManager.moreThenF_EIDs(eid)) { - /************************* TESTE ************************* + /************************* TESTE *************************/ System.out.println("Recebi mais de " + conf.getF() + " mensagens para eid " + eid + " que sao posteriores a " + stateManager.getLastEID()); /************************* TESTE *************************/ @@ -982,7 +991,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { SMMessage smsg = new SMMessage(me, eid - 1, TOMUtil.SM_REQUEST, null); communication.send(otherAcceptors, smsg); - /************************* TESTE ************************* + /************************* TESTE *************************/ System.out.println("Enviei um pedido!"); System.out.println("Quem envia: " + smsg.getSender()); @@ -993,13 +1002,17 @@ public final class TOMLayer extends Thread implements RequestReceiver { /************************* TESTE *************************/ } } + /************************* TESTE *************************/ + System.out.println("[/TOMLayer.requestState]"); + /************************* TESTE *************************/ } public void SMRequestDeliver(SMMessage msg) { lockState.lock(); - /************************* TESTE ************************* + /************************* TESTE *************************/ + System.out.println("[TOMLayer.SMRequestDeliver]"); System.out.println("Recebi um pedido de estado!"); System.out.println("Estado pedido: " + msg.getEid()); System.out.println("Checkpoint q eu tenho: " + stateManager.getLog().getLastCheckpointEid()); @@ -1011,7 +1024,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { lockState.unlock(); if (state == null) { - /************************* TESTE ************************* + /************************* TESTE *************************/ System.out.println("Nao tenho o estado pedido!"); /************************* TESTE *************************/ state = new TransferableState(); @@ -1021,18 +1034,21 @@ public final class TOMLayer extends Thread implements RequestReceiver { SMMessage smsg = new SMMessage(execManager.getProcessId(), msg.getEid(), TOMUtil.SM_REPLY, state); communication.send(targets, smsg); - /************************* TESTE ************************* + /************************* TESTE *************************/ System.out.println("Quem envia: " + smsg.getSender()); System.out.println("Que tipo: " + smsg.getType()); System.out.println("Que EID: " + smsg.getEid()); //System.exit(0); /************************* TESTE *************************/ - + /************************* TESTE *************************/ + System.out.println("[/TOMLayer.SMRequestDeliver]"); + /************************* TESTE *************************/ } public void SMReplyDeliver(SMMessage msg) { /************************* TESTE *************************/ + System.out.println("[TOMLayer.SMReplyDeliver]"); System.out.println("Recebi uma resposta de uma replica!"); System.out.println("[reply] Esta resposta tem o estado? " + msg.getState().hasState()); System.out.println("[reply] EID do ultimo checkpoint: " + msg.getState().getLastCheckpointEid()); @@ -1117,10 +1133,11 @@ public final class TOMLayer extends Thread implements RequestReceiver { /************************* TESTE *************************/ lockState.unlock(); - - dt.update(state); stateManager.setWaiting(-1); + dt.update(state); + + stateManager.emptyStates(); @@ -1136,6 +1153,9 @@ public final class TOMLayer extends Thread implements RequestReceiver { } } } + /************************* TESTE *************************/ + System.out.println("[/TOMLayer.SMReplyDeliver]"); + /************************* TESTE *************************/ } public boolean isRetrievingState() {