|
76 | 76 |
|
77 | 77 |
|
78 | 78 | #include"multimaster.h"
|
| 79 | +#include"state.h" |
79 | 80 |
|
80 | 81 | #defineMAX_ROUTES 16
|
81 | 82 | #defineINIT_BUFFER_SIZE 1024
|
@@ -316,25 +317,22 @@ static void MtmCheckResponse(MtmArbiterMessage* resp)
|
316 | 317 | }else {
|
317 | 318 | BIT_CLEAR(Mtm->currentLockNodeMask,resp->node-1);
|
318 | 319 | }
|
319 |
| -if ( |
320 |
| -(BIT_CHECK(resp->disabledNodeMask,MtmNodeId-1)||Mtm->status==MTM_IN_MINORITY ) |
321 |
| -&& !BIT_CHECK(Mtm->disabledNodeMask,resp->node-1) |
322 |
| -&&Mtm->status!=MTM_RECOVERY |
323 |
| -&&Mtm->status!=MTM_RECOVERED |
324 |
| -&&Mtm->nodes[MtmNodeId-1].lastStatusChangeTime+MSEC_TO_USEC(MtmNodeDisableDelay)<MtmGetSystemTime()) |
325 |
| -{ |
326 |
| -MTM_ELOG(WARNING,"Node %d thinks that I'm dead, while I'm %s (message %s)",resp->node,MtmNodeStatusMnem[Mtm->status],MtmMessageKindMnem[resp->code]); |
327 |
| -BIT_SET(Mtm->disabledNodeMask,MtmNodeId-1); |
328 |
| -Mtm->nConfigChanges+=1; |
329 |
| -MtmSwitchClusterMode(MTM_RECOVERY); |
330 |
| -}elseif (BIT_CHECK(Mtm->disabledNodeMask,resp->node-1)&&sockets[resp->node-1]<0) { |
331 |
| -/* We receive heartbeat from disabled node. |
| 320 | + |
| 321 | +if (BIT_CHECK(resp->disabledNodeMask,MtmNodeId-1)) |
| 322 | +{ |
| 323 | +MtmStateProcessEvent(MTM_REMOTE_DISABLE); |
| 324 | +} |
| 325 | + |
| 326 | +if (BIT_CHECK(Mtm->disabledNodeMask,resp->node-1)&& |
| 327 | +sockets[resp->node-1]<0) |
| 328 | +{ |
| 329 | +/* We've received heartbeat from disabled node. |
332 | 330 | * Looks like it is restarted.
|
333 | 331 | * Try to reconnect to it.
|
334 | 332 | */
|
335 | 333 | MTM_ELOG(WARNING,"Receive heartbeat from disabled node %d",resp->node);
|
336 | 334 | BIT_SET(Mtm->reconnectMask,resp->node-1);
|
337 |
| -} |
| 335 | +} |
338 | 336 | }
|
339 | 337 |
|
340 | 338 | staticvoidMtmScheduleHeartbeat()
|
@@ -548,12 +546,7 @@ static void MtmOpenConnections()
|
548 | 546 | }
|
549 | 547 | }
|
550 | 548 | }
|
551 |
| -if (Mtm->nLiveNodes<Mtm->nAllNodes/2+1) {/* no quorum */ |
552 |
| -MTM_ELOG(WARNING,"Node is out of quorum: only %d nodes of %d are accessible",Mtm->nLiveNodes,Mtm->nAllNodes); |
553 |
| -MtmSwitchClusterMode(MTM_IN_MINORITY); |
554 |
| -}elseif (Mtm->status==MTM_INITIALIZATION) { |
555 |
| -MtmSwitchClusterMode(MTM_CONNECTED); |
556 |
| -} |
| 549 | +MtmStateProcessEvent(MTM_ARBITER_RECEIVER_START); |
557 | 550 | }
|
558 | 551 |
|
559 | 552 |
|
|