//throws InterruptedException public void brainsplit(Message msg) { lock (this) { // current transaction can timeout if (msg is CanCommitMessage) { // forbid new transactions Logger.getInstance().log( "Sending message to blocked cohort: " + msg.toString(), LOGGING_NAME, Logger.Level.INFO); blockedCohort.putMessage(msg); } else if (msg is TransactionMessage) { // forbid new transactions Logger.getInstance().log( "Sending message to blocked coordinator: " + msg.toString(), LOGGING_NAME, Logger.Level.INFO); blockedCoordinator.putMessage(msg); } else if (msg is RestoreIncentive) { // forbid new restoration Logger.getInstance().log( "Sending message to blocked restore coordinator: " + msg.toString(), LOGGING_NAME, Logger.Level.INFO); blockedRestoreCoordinator.putMessage(msg); } else if (msg is HelloMessage) { HelloMessage hm = (HelloMessage)msg; IPEndPoint node = new IPEndPoint( hm.getSender().Address, hm.ListeningPort ); if (node.Equals(me)) return; // try to add new node TcpSender.getInstance().AddServerNode(node, queue); } else { Logger.getInstance().log( "Undelivered message due to brainsplit: " + msg.toString(), LOGGING_NAME, Logger.Level.WARNING); } } }