コード例 #1
0
ファイル: Dispatcher.cs プロジェクト: Mofsy/sr-rbd
        //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);
                }
            }
        }