1 /* 2 * Copyright 2004-2022 the Pacemaker project contributors 3 * 4 * The version control history for this file may have further details. 5 * 6 * This source code is licensed under the GNU Lesser General Public License 7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. 8 */ 9 10 #include <crm_internal.h> 11 12 #include <stdint.h> // uint64_t 13 14 #include <pacemaker-controld.h> 15 16 /* 17 * The state transition table. The rows are inputs, and 18 * the columns are states. 19 */ 20 static const enum crmd_fsa_state fsa_next_states[MAXINPUT][MAXSTATE] = { 21 /* Got an I_NULL */ 22 { 23 /* S_IDLE ==> */ S_IDLE, 24 /* S_ELECTION ==> */ S_ELECTION, 25 /* S_INTEGRATION ==> */ S_INTEGRATION, 26 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 27 /* S_NOT_DC ==> */ S_NOT_DC, 28 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 29 /* S_RECOVERY ==> */ S_RECOVERY, 30 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 31 /* S_STARTING ==> */ S_STARTING, 32 /* S_PENDING ==> */ S_PENDING, 33 /* S_STOPPING ==> */ S_STOPPING, 34 /* S_TERMINATE ==> */ S_TERMINATE, 35 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 36 /* S_HALT ==> */ S_HALT, 37 }, 38 39 /* Got an I_CIB_OP */ 40 { 41 /* S_IDLE ==> */ S_IDLE, 42 /* S_ELECTION ==> */ S_ELECTION, 43 /* S_INTEGRATION ==> */ S_INTEGRATION, 44 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 45 /* S_NOT_DC ==> */ S_NOT_DC, 46 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 47 /* S_RECOVERY ==> */ S_RECOVERY, 48 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 49 /* S_STARTING ==> */ S_STARTING, 50 /* S_PENDING ==> */ S_PENDING, 51 /* S_STOPPING ==> */ S_STOPPING, 52 /* S_TERMINATE ==> */ S_TERMINATE, 53 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 54 /* S_HALT ==> */ S_HALT, 55 }, 56 57 /* Got an I_CIB_UPDATE */ 58 { 59 /* S_IDLE ==> */ S_IDLE, 60 /* S_ELECTION ==> */ S_ELECTION, 61 /* S_INTEGRATION ==> */ S_INTEGRATION, 62 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 63 /* S_NOT_DC ==> */ S_RECOVERY, 64 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 65 /* S_RECOVERY ==> */ S_RECOVERY, 66 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 67 /* S_STARTING ==> */ S_RECOVERY, 68 /* S_PENDING ==> */ S_RECOVERY, 69 /* S_STOPPING ==> */ S_STOPPING, 70 /* S_TERMINATE ==> */ S_TERMINATE, 71 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 72 /* S_HALT ==> */ S_HALT, 73 }, 74 75 /* Got an I_DC_TIMEOUT */ 76 { 77 /* S_IDLE ==> */ S_RECOVERY, 78 /* S_ELECTION ==> */ S_ELECTION, 79 /* S_INTEGRATION ==> */ S_RECOVERY, 80 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 81 /* S_NOT_DC ==> */ S_ELECTION, 82 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 83 /* S_RECOVERY ==> */ S_RECOVERY, 84 /* S_RELEASE_DC ==> */ S_RECOVERY, 85 /* S_STARTING ==> */ S_STARTING, 86 /* S_PENDING ==> */ S_ELECTION, 87 /* S_STOPPING ==> */ S_STOPPING, 88 /* S_TERMINATE ==> */ S_TERMINATE, 89 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 90 /* S_HALT ==> */ S_ELECTION, 91 }, 92 93 /* Got an I_ELECTION */ 94 { 95 /* S_IDLE ==> */ S_ELECTION, 96 /* S_ELECTION ==> */ S_ELECTION, 97 /* S_INTEGRATION ==> */ S_ELECTION, 98 /* S_FINALIZE_JOIN ==> */ S_ELECTION, 99 /* S_NOT_DC ==> */ S_ELECTION, 100 /* S_POLICY_ENGINE ==> */ S_ELECTION, 101 /* S_RECOVERY ==> */ S_RECOVERY, 102 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 103 /* S_STARTING ==> */ S_STARTING, 104 /* S_PENDING ==> */ S_ELECTION, 105 /* S_STOPPING ==> */ S_STOPPING, 106 /* S_TERMINATE ==> */ S_TERMINATE, 107 /* S_TRANSITION_ENGINE ==> */ S_ELECTION, 108 /* S_HALT ==> */ S_HALT, 109 }, 110 111 /* Got an I_PE_CALC */ 112 { 113 /* S_IDLE ==> */ S_POLICY_ENGINE, 114 /* S_ELECTION ==> */ S_ELECTION, 115 /* S_INTEGRATION ==> */ S_INTEGRATION, 116 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 117 /* S_NOT_DC ==> */ S_NOT_DC, 118 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 119 /* S_RECOVERY ==> */ S_RECOVERY, 120 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 121 /* S_STARTING ==> */ S_RECOVERY, 122 /* S_PENDING ==> */ S_PENDING, 123 /* S_STOPPING ==> */ S_STOPPING, 124 /* S_TERMINATE ==> */ S_TERMINATE, 125 /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, 126 /* S_HALT ==> */ S_HALT, 127 }, 128 129 /* Got an I_RELEASE_DC */ 130 { 131 /* S_IDLE ==> */ S_RELEASE_DC, 132 /* S_ELECTION ==> */ S_RELEASE_DC, 133 /* S_INTEGRATION ==> */ S_RELEASE_DC, 134 /* S_FINALIZE_JOIN ==> */ S_RELEASE_DC, 135 /* S_NOT_DC ==> */ S_NOT_DC, 136 /* S_POLICY_ENGINE ==> */ S_RELEASE_DC, 137 /* S_RECOVERY ==> */ S_RECOVERY, 138 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 139 /* S_STARTING ==> */ S_RECOVERY, 140 /* S_PENDING ==> */ S_PENDING, 141 /* S_STOPPING ==> */ S_STOPPING, 142 /* S_TERMINATE ==> */ S_TERMINATE, 143 /* S_TRANSITION_ENGINE ==> */ S_RELEASE_DC, 144 /* S_HALT ==> */ S_HALT, 145 }, 146 147 /* Got an I_ELECTION_DC */ 148 { 149 /* S_IDLE ==> */ S_INTEGRATION, 150 /* S_ELECTION ==> */ S_INTEGRATION, 151 /* S_INTEGRATION ==> */ S_INTEGRATION, 152 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 153 /* S_NOT_DC ==> */ S_INTEGRATION, 154 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 155 /* S_RECOVERY ==> */ S_RECOVERY, 156 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 157 /* S_STARTING ==> */ S_RECOVERY, 158 /* S_PENDING ==> */ S_PENDING, 159 /* S_STOPPING ==> */ S_STOPPING, 160 /* S_TERMINATE ==> */ S_TERMINATE, 161 /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, 162 /* S_HALT ==> */ S_HALT, 163 }, 164 165 /* Got an I_ERROR */ 166 { 167 /* S_IDLE ==> */ S_RECOVERY, 168 /* S_ELECTION ==> */ S_RECOVERY, 169 /* S_INTEGRATION ==> */ S_RECOVERY, 170 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 171 /* S_NOT_DC ==> */ S_RECOVERY, 172 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 173 /* S_RECOVERY ==> */ S_RECOVERY, 174 /* S_RELEASE_DC ==> */ S_RECOVERY, 175 /* S_STARTING ==> */ S_RECOVERY, 176 /* S_PENDING ==> */ S_RECOVERY, 177 /* S_STOPPING ==> */ S_TERMINATE, 178 /* S_TERMINATE ==> */ S_TERMINATE, 179 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 180 /* S_HALT ==> */ S_RECOVERY, 181 }, 182 183 /* Got an I_FAIL */ 184 { 185 /* S_IDLE ==> */ S_RECOVERY, 186 /* S_ELECTION ==> */ S_RELEASE_DC, 187 /* S_INTEGRATION ==> */ S_INTEGRATION, 188 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 189 /* S_NOT_DC ==> */ S_RECOVERY, 190 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 191 /* S_RECOVERY ==> */ S_RECOVERY, 192 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 193 /* S_STARTING ==> */ S_STOPPING, 194 /* S_PENDING ==> */ S_STOPPING, 195 /* S_STOPPING ==> */ S_STOPPING, 196 /* S_TERMINATE ==> */ S_TERMINATE, 197 /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, 198 /* S_HALT ==> */ S_RELEASE_DC, 199 }, 200 201 /* Got an I_INTEGRATED */ 202 { 203 /* S_IDLE ==> */ S_IDLE, 204 /* S_ELECTION ==> */ S_ELECTION, 205 /* S_INTEGRATION ==> */ S_FINALIZE_JOIN, 206 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 207 /* S_NOT_DC ==> */ S_NOT_DC, 208 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 209 /* S_RECOVERY ==> */ S_RECOVERY, 210 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 211 /* S_STARTING ==> */ S_RECOVERY, 212 /* S_PENDING ==> */ S_RECOVERY, 213 /* S_STOPPING ==> */ S_STOPPING, 214 /* S_TERMINATE ==> */ S_TERMINATE, 215 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 216 /* S_HALT ==> */ S_HALT, 217 }, 218 219 /* Got an I_FINALIZED */ 220 { 221 /* S_IDLE ==> */ S_IDLE, 222 /* S_ELECTION ==> */ S_ELECTION, 223 /* S_INTEGRATION ==> */ S_INTEGRATION, 224 /* S_FINALIZE_JOIN ==> */ S_POLICY_ENGINE, 225 /* S_NOT_DC ==> */ S_NOT_DC, 226 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 227 /* S_RECOVERY ==> */ S_RECOVERY, 228 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 229 /* S_STARTING ==> */ S_RECOVERY, 230 /* S_PENDING ==> */ S_RECOVERY, 231 /* S_STOPPING ==> */ S_STOPPING, 232 /* S_TERMINATE ==> */ S_TERMINATE, 233 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 234 /* S_HALT ==> */ S_HALT, 235 }, 236 237 /* Got an I_NODE_JOIN */ 238 { 239 /* S_IDLE ==> */ S_INTEGRATION, 240 /* S_ELECTION ==> */ S_ELECTION, 241 /* S_INTEGRATION ==> */ S_INTEGRATION, 242 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 243 /* S_NOT_DC ==> */ S_NOT_DC, 244 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 245 /* S_RECOVERY ==> */ S_RECOVERY, 246 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 247 /* S_STARTING ==> */ S_RECOVERY, 248 /* S_PENDING ==> */ S_PENDING, 249 /* S_STOPPING ==> */ S_STOPPING, 250 /* S_TERMINATE ==> */ S_TERMINATE, 251 /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, 252 /* S_HALT ==> */ S_HALT, 253 }, 254 255 /* Got an I_NOT_DC */ 256 { 257 /* S_IDLE ==> */ S_RECOVERY, 258 /* S_ELECTION ==> */ S_ELECTION, 259 /* S_INTEGRATION ==> */ S_RECOVERY, 260 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 261 /* S_NOT_DC ==> */ S_NOT_DC, 262 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 263 /* S_RECOVERY ==> */ S_RECOVERY, 264 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 265 /* S_STARTING ==> */ S_RECOVERY, 266 /* S_PENDING ==> */ S_NOT_DC, 267 /* S_STOPPING ==> */ S_STOPPING, 268 /* S_TERMINATE ==> */ S_TERMINATE, 269 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 270 /* S_HALT ==> */ S_HALT, 271 }, 272 273 /* Got an I_RECOVERED */ 274 { 275 /* S_IDLE ==> */ S_IDLE, 276 /* S_ELECTION ==> */ S_ELECTION, 277 /* S_INTEGRATION ==> */ S_INTEGRATION, 278 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 279 /* S_NOT_DC ==> */ S_NOT_DC, 280 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 281 /* S_RECOVERY ==> */ S_PENDING, 282 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 283 /* S_STARTING ==> */ S_STARTING, 284 /* S_PENDING ==> */ S_PENDING, 285 /* S_STOPPING ==> */ S_STOPPING, 286 /* S_TERMINATE ==> */ S_TERMINATE, 287 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 288 /* S_HALT ==> */ S_HALT, 289 }, 290 291 /* Got an I_RELEASE_FAIL */ 292 { 293 /* S_IDLE ==> */ S_STOPPING, 294 /* S_ELECTION ==> */ S_STOPPING, 295 /* S_INTEGRATION ==> */ S_STOPPING, 296 /* S_FINALIZE_JOIN ==> */ S_STOPPING, 297 /* S_NOT_DC ==> */ S_NOT_DC, 298 /* S_POLICY_ENGINE ==> */ S_STOPPING, 299 /* S_RECOVERY ==> */ S_STOPPING, 300 /* S_RELEASE_DC ==> */ S_STOPPING, 301 /* S_STARTING ==> */ S_RECOVERY, 302 /* S_PENDING ==> */ S_PENDING, 303 /* S_STOPPING ==> */ S_STOPPING, 304 /* S_TERMINATE ==> */ S_TERMINATE, 305 /* S_TRANSITION_ENGINE ==> */ S_STOPPING, 306 /* S_HALT ==> */ S_HALT, 307 }, 308 309 /* Got an I_RELEASE_SUCCESS */ 310 { 311 /* S_IDLE ==> */ S_RECOVERY, 312 /* S_ELECTION ==> */ S_ELECTION, 313 /* S_INTEGRATION ==> */ S_RECOVERY, 314 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 315 /* S_NOT_DC ==> */ S_NOT_DC, 316 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 317 /* S_RECOVERY ==> */ S_RECOVERY, 318 /* S_RELEASE_DC ==> */ S_PENDING, 319 /* S_STARTING ==> */ S_RECOVERY, 320 /* S_PENDING ==> */ S_PENDING, 321 /* S_STOPPING ==> */ S_STOPPING, 322 /* S_TERMINATE ==> */ S_TERMINATE, 323 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 324 /* S_HALT ==> */ S_HALT, 325 }, 326 327 /* Got an I_RESTART */ 328 { 329 /* S_IDLE ==> */ S_IDLE, 330 /* S_ELECTION ==> */ S_ELECTION, 331 /* S_INTEGRATION ==> */ S_INTEGRATION, 332 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 333 /* S_NOT_DC ==> */ S_NOT_DC, 334 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 335 /* S_RECOVERY ==> */ S_RECOVERY, 336 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 337 /* S_STARTING ==> */ S_STARTING, 338 /* S_PENDING ==> */ S_PENDING, 339 /* S_STOPPING ==> */ S_STOPPING, 340 /* S_TERMINATE ==> */ S_TERMINATE, 341 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 342 /* S_HALT ==> */ S_HALT, 343 }, 344 345 /* Got an I_TE_SUCCESS */ 346 { 347 /* S_IDLE ==> */ S_IDLE, 348 /* S_ELECTION ==> */ S_ELECTION, 349 /* S_INTEGRATION ==> */ S_INTEGRATION, 350 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 351 /* S_NOT_DC ==> */ S_NOT_DC, 352 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 353 /* S_RECOVERY ==> */ S_RECOVERY, 354 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 355 /* S_STARTING ==> */ S_RECOVERY, 356 /* S_PENDING ==> */ S_PENDING, 357 /* S_STOPPING ==> */ S_STOPPING, 358 /* S_TERMINATE ==> */ S_TERMINATE, 359 /* S_TRANSITION_ENGINE ==> */ S_IDLE, 360 /* S_HALT ==> */ S_HALT, 361 }, 362 363 /* Got an I_ROUTER */ 364 { 365 /* S_IDLE ==> */ S_IDLE, 366 /* S_ELECTION ==> */ S_ELECTION, 367 /* S_INTEGRATION ==> */ S_INTEGRATION, 368 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 369 /* S_NOT_DC ==> */ S_NOT_DC, 370 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 371 /* S_RECOVERY ==> */ S_RECOVERY, 372 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 373 /* S_STARTING ==> */ S_STARTING, 374 /* S_PENDING ==> */ S_PENDING, 375 /* S_STOPPING ==> */ S_STOPPING, 376 /* S_TERMINATE ==> */ S_TERMINATE, 377 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 378 /* S_HALT ==> */ S_HALT, 379 }, 380 381 /* Got an I_SHUTDOWN */ 382 { 383 /* S_IDLE ==> */ S_POLICY_ENGINE, 384 /* S_ELECTION ==> */ S_ELECTION, 385 /* S_INTEGRATION ==> */ S_INTEGRATION, 386 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 387 /* S_NOT_DC ==> */ S_NOT_DC, 388 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 389 /* S_RECOVERY ==> */ S_STOPPING, 390 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 391 /* S_STARTING ==> */ S_STOPPING, 392 /* S_PENDING ==> */ S_PENDING, 393 /* S_STOPPING ==> */ S_STOPPING, 394 /* S_TERMINATE ==> */ S_TERMINATE, 395 /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, 396 /* S_HALT ==> */ S_ELECTION, 397 }, 398 399 /* Got an I_STOP */ 400 { 401 /* S_IDLE ==> */ S_STOPPING, 402 /* S_ELECTION ==> */ S_STOPPING, 403 /* S_INTEGRATION ==> */ S_STOPPING, 404 /* S_FINALIZE_JOIN ==> */ S_STOPPING, 405 /* S_NOT_DC ==> */ S_STOPPING, 406 /* S_POLICY_ENGINE ==> */ S_STOPPING, 407 /* S_RECOVERY ==> */ S_STOPPING, 408 /* S_RELEASE_DC ==> */ S_STOPPING, 409 /* S_STARTING ==> */ S_STOPPING, 410 /* S_PENDING ==> */ S_STOPPING, 411 /* S_STOPPING ==> */ S_STOPPING, 412 /* S_TERMINATE ==> */ S_TERMINATE, 413 /* S_TRANSITION_ENGINE ==> */ S_STOPPING, 414 /* S_HALT ==> */ S_STOPPING, 415 }, 416 417 /* Got an I_TERMINATE */ 418 { 419 /* S_IDLE ==> */ S_TERMINATE, 420 /* S_ELECTION ==> */ S_TERMINATE, 421 /* S_INTEGRATION ==> */ S_TERMINATE, 422 /* S_FINALIZE_JOIN ==> */ S_TERMINATE, 423 /* S_NOT_DC ==> */ S_TERMINATE, 424 /* S_POLICY_ENGINE ==> */ S_TERMINATE, 425 /* S_RECOVERY ==> */ S_TERMINATE, 426 /* S_RELEASE_DC ==> */ S_TERMINATE, 427 /* S_STARTING ==> */ S_TERMINATE, 428 /* S_PENDING ==> */ S_TERMINATE, 429 /* S_STOPPING ==> */ S_TERMINATE, 430 /* S_TERMINATE ==> */ S_TERMINATE, 431 /* S_TRANSITION_ENGINE ==> */ S_TERMINATE, 432 /* S_HALT ==> */ S_TERMINATE, 433 }, 434 435 /* Got an I_STARTUP */ 436 { 437 /* S_IDLE ==> */ S_RECOVERY, 438 /* S_ELECTION ==> */ S_RECOVERY, 439 /* S_INTEGRATION ==> */ S_RECOVERY, 440 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 441 /* S_NOT_DC ==> */ S_RECOVERY, 442 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 443 /* S_RECOVERY ==> */ S_RECOVERY, 444 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 445 /* S_STARTING ==> */ S_STARTING, 446 /* S_PENDING ==> */ S_PENDING, 447 /* S_STOPPING ==> */ S_STOPPING, 448 /* S_TERMINATE ==> */ S_TERMINATE, 449 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 450 /* S_HALT ==> */ S_HALT, 451 }, 452 453 /* Got an I_PE_SUCCESS */ 454 { 455 /* S_IDLE ==> */ S_IDLE, 456 /* S_ELECTION ==> */ S_ELECTION, 457 /* S_INTEGRATION ==> */ S_INTEGRATION, 458 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 459 /* S_NOT_DC ==> */ S_NOT_DC, 460 /* S_POLICY_ENGINE ==> */ S_TRANSITION_ENGINE, 461 /* S_RECOVERY ==> */ S_RECOVERY, 462 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 463 /* S_STARTING ==> */ S_RECOVERY, 464 /* S_PENDING ==> */ S_PENDING, 465 /* S_STOPPING ==> */ S_STOPPING, 466 /* S_TERMINATE ==> */ S_TERMINATE, 467 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 468 /* S_HALT ==> */ S_HALT, 469 }, 470 471 /* Got an I_JOIN_OFFER */ 472 { 473 /* S_IDLE ==> */ S_IDLE, 474 /* S_ELECTION ==> */ S_ELECTION, 475 /* S_INTEGRATION ==> */ S_INTEGRATION, 476 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 477 /* S_NOT_DC ==> */ S_PENDING, 478 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 479 /* S_RECOVERY ==> */ S_RECOVERY, 480 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 481 /* S_STARTING ==> */ S_STARTING, 482 /* S_PENDING ==> */ S_PENDING, 483 /* S_STOPPING ==> */ S_STOPPING, 484 /* S_TERMINATE ==> */ S_TERMINATE, 485 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 486 /* S_HALT ==> */ S_HALT, 487 }, 488 489 /* Got an I_JOIN_REQUEST */ 490 { 491 /* S_IDLE ==> */ S_INTEGRATION, 492 /* S_ELECTION ==> */ S_ELECTION, 493 /* S_INTEGRATION ==> */ S_INTEGRATION, 494 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 495 /* S_NOT_DC ==> */ S_NOT_DC, 496 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 497 /* S_RECOVERY ==> */ S_RECOVERY, 498 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 499 /* S_STARTING ==> */ S_STARTING, 500 /* S_PENDING ==> */ S_PENDING, 501 /* S_STOPPING ==> */ S_STOPPING, 502 /* S_TERMINATE ==> */ S_TERMINATE, 503 /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, 504 /* S_HALT ==> */ S_HALT, 505 }, 506 507 /* Got an I_JOIN_RESULT */ 508 { 509 /* S_IDLE ==> */ S_INTEGRATION, 510 /* S_ELECTION ==> */ S_ELECTION, 511 /* S_INTEGRATION ==> */ S_INTEGRATION, 512 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 513 /* S_NOT_DC ==> */ S_PENDING, 514 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 515 /* S_RECOVERY ==> */ S_RECOVERY, 516 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 517 /* S_STARTING ==> */ S_RECOVERY, 518 /* S_PENDING ==> */ S_PENDING, 519 /* S_STOPPING ==> */ S_STOPPING, 520 /* S_TERMINATE ==> */ S_TERMINATE, 521 /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, 522 /* S_HALT ==> */ S_HALT, 523 }, 524 525 /* Got an I_WAIT_FOR_EVENT */ 526 { 527 /* S_IDLE ==> */ S_IDLE, 528 /* S_ELECTION ==> */ S_ELECTION, 529 /* S_INTEGRATION ==> */ S_INTEGRATION, 530 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 531 /* S_NOT_DC ==> */ S_NOT_DC, 532 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 533 /* S_RECOVERY ==> */ S_RECOVERY, 534 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 535 /* S_STARTING ==> */ S_STARTING, 536 /* S_PENDING ==> */ S_PENDING, 537 /* S_STOPPING ==> */ S_STOPPING, 538 /* S_TERMINATE ==> */ S_TERMINATE, 539 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 540 /* S_HALT ==> */ S_HALT, 541 }, 542 543 /* Got an I_DC_HEARTBEAT */ 544 { 545 /* S_IDLE ==> */ S_IDLE, 546 /* S_ELECTION ==> */ S_ELECTION, 547 /* S_INTEGRATION ==> */ S_INTEGRATION, 548 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 549 /* S_NOT_DC ==> */ S_NOT_DC, 550 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 551 /* S_RECOVERY ==> */ S_RECOVERY, 552 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 553 /* S_STARTING ==> */ S_STARTING, 554 /* S_PENDING ==> */ S_PENDING, 555 /* S_STOPPING ==> */ S_STOPPING, 556 /* S_TERMINATE ==> */ S_TERMINATE, 557 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 558 /* S_HALT ==> */ S_HALT, 559 }, 560 561 /* Got an I_LRM_EVENT */ 562 { 563 /* S_IDLE ==> */ S_IDLE, 564 /* S_ELECTION ==> */ S_ELECTION, 565 /* S_INTEGRATION ==> */ S_INTEGRATION, 566 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 567 /* S_NOT_DC ==> */ S_NOT_DC, 568 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 569 /* S_RECOVERY ==> */ S_RECOVERY, 570 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 571 /* S_STARTING ==> */ S_STARTING, 572 /* S_PENDING ==> */ S_PENDING, 573 /* S_STOPPING ==> */ S_STOPPING, 574 /* S_TERMINATE ==> */ S_TERMINATE, 575 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 576 /* S_HALT ==> */ S_HALT, 577 }, 578 579 /* Got an I_PENDING */ 580 { 581 /* S_IDLE ==> */ S_PENDING, 582 /* S_ELECTION ==> */ S_PENDING, 583 /* S_INTEGRATION ==> */ S_PENDING, 584 /* S_FINALIZE_JOIN ==> */ S_PENDING, 585 /* S_NOT_DC ==> */ S_PENDING, 586 /* S_POLICY_ENGINE ==> */ S_PENDING, 587 /* S_RECOVERY ==> */ S_RECOVERY, 588 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 589 /* S_STARTING ==> */ S_PENDING, 590 /* S_PENDING ==> */ S_PENDING, 591 /* S_STOPPING ==> */ S_STOPPING, 592 /* S_TERMINATE ==> */ S_TERMINATE, 593 /* S_TRANSITION_ENGINE ==> */ S_PENDING, 594 /* S_HALT ==> */ S_HALT, 595 }, 596 597 /* Got an I_HALT */ 598 { 599 /* S_IDLE ==> */ S_HALT, 600 /* S_ELECTION ==> */ S_HALT, 601 /* S_INTEGRATION ==> */ S_HALT, 602 /* S_FINALIZE_JOIN ==> */ S_HALT, 603 /* S_NOT_DC ==> */ S_HALT, 604 /* S_POLICY_ENGINE ==> */ S_HALT, 605 /* S_RECOVERY ==> */ S_RECOVERY, 606 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 607 /* S_STARTING ==> */ S_STARTING, 608 /* S_PENDING ==> */ S_HALT, 609 /* S_STOPPING ==> */ S_STOPPING, 610 /* S_TERMINATE ==> */ S_TERMINATE, 611 /* S_TRANSITION_ENGINE ==> */ S_HALT, 612 /* S_HALT ==> */ S_HALT, 613 }, 614 }; 615 616 /* 617 * The action table. Each entry is a set of actions to take or-ed 618 * together. Like the state table, the rows are inputs, and 619 * the columns are states. 620 */ 621 622 /* NOTE: In the fsa, the actions are extracted then state is updated. */ 623 624 static const uint64_t fsa_actions[MAXINPUT][MAXSTATE] = { 625 626 /* Got an I_NULL */ 627 { 628 /* S_IDLE ==> */ A_NOTHING, 629 /* S_ELECTION ==> */ A_NOTHING, 630 /* S_INTEGRATION ==> */ A_NOTHING, 631 /* S_FINALIZE_JOIN ==> */ A_NOTHING, 632 /* S_NOT_DC ==> */ A_NOTHING, 633 /* S_POLICY_ENGINE ==> */ A_NOTHING, 634 /* S_RECOVERY ==> */ A_NOTHING, 635 /* S_RELEASE_DC ==> */ A_NOTHING, 636 /* S_STARTING ==> */ A_NOTHING, 637 /* S_PENDING ==> */ A_NOTHING, 638 /* S_STOPPING ==> */ A_NOTHING, 639 /* S_TERMINATE ==> */ A_NOTHING, 640 /* S_TRANSITION_ENGINE ==> */ A_NOTHING, 641 /* S_HALT ==> */ A_NOTHING, 642 }, 643 644 /* Got an I_CIB_OP */ 645 { 646 /* S_IDLE ==> */ A_ERROR, 647 /* S_ELECTION ==> */ A_ERROR, 648 /* S_INTEGRATION ==> */ A_ERROR, 649 /* S_FINALIZE_JOIN ==> */ A_ERROR, 650 /* S_NOT_DC ==> */ A_ERROR, 651 /* S_POLICY_ENGINE ==> */ A_ERROR, 652 /* S_RECOVERY ==> */ A_ERROR, 653 /* S_RELEASE_DC ==> */ A_ERROR, 654 /* S_STARTING ==> */ A_ERROR, 655 /* S_PENDING ==> */ A_ERROR, 656 /* S_STOPPING ==> */ A_ERROR, 657 /* S_TERMINATE ==> */ A_ERROR, 658 /* S_TRANSITION_ENGINE ==> */ A_ERROR, 659 /* S_HALT ==> */ A_ERROR, 660 }, 661 662 /* Got an I_CIB_UPDATE */ 663 { 664 /* S_IDLE ==> */ A_LOG, 665 /* S_ELECTION ==> */ A_LOG, 666 /* S_INTEGRATION ==> */ A_WARN, 667 /* S_FINALIZE_JOIN ==> */ A_WARN, 668 /* S_NOT_DC ==> */ A_WARN, 669 /* S_POLICY_ENGINE ==> */ A_LOG, 670 /* S_RECOVERY ==> */ A_WARN, 671 /* S_RELEASE_DC ==> */ A_WARN, 672 /* S_STARTING ==> */ A_WARN, 673 /* S_PENDING ==> */ A_WARN, 674 /* S_STOPPING ==> */ A_WARN, 675 /* S_TERMINATE ==> */ A_WARN, 676 /* S_TRANSITION_ENGINE ==> */ A_LOG, 677 /* S_HALT ==> */ A_WARN, 678 }, 679 680 /* Got an I_DC_TIMEOUT */ 681 { 682 /* S_IDLE ==> */ A_WARN, 683 /* S_ELECTION ==> */ A_ELECTION_VOTE, 684 /* S_INTEGRATION ==> */ A_WARN, 685 /* S_FINALIZE_JOIN ==> */ A_WARN, 686 /* S_NOT_DC ==> */ A_ELECTION_VOTE | A_WARN, 687 /* S_POLICY_ENGINE ==> */ A_WARN, 688 /* S_RECOVERY ==> */ A_NOTHING, 689 /* S_RELEASE_DC ==> */ A_WARN, 690 /* S_STARTING ==> */ A_WARN, 691 /* S_PENDING ==> */ A_ELECTION_VOTE | A_WARN, 692 /* S_STOPPING ==> */ A_NOTHING, 693 /* S_TERMINATE ==> */ A_NOTHING, 694 /* S_TRANSITION_ENGINE ==> */ A_TE_CANCEL | A_WARN, 695 /* S_HALT ==> */ A_WARN, 696 }, 697 698 /* Got an I_ELECTION */ 699 { 700 /* S_IDLE ==> */ A_ELECTION_VOTE, 701 /* S_ELECTION ==> */ A_ELECTION_VOTE, 702 /* S_INTEGRATION ==> */ A_ELECTION_VOTE, 703 /* S_FINALIZE_JOIN ==> */ A_ELECTION_VOTE, 704 /* S_NOT_DC ==> */ A_ELECTION_VOTE, 705 /* S_POLICY_ENGINE ==> */ A_ELECTION_VOTE, 706 /* S_RECOVERY ==> */ A_LOG, 707 /* S_RELEASE_DC ==> */ A_LOG, 708 /* S_STARTING ==> */ A_WARN, 709 /* S_PENDING ==> */ A_ELECTION_VOTE, 710 /* S_STOPPING ==> */ A_LOG, 711 /* S_TERMINATE ==> */ A_LOG, 712 /* S_TRANSITION_ENGINE ==> */ A_ELECTION_VOTE, 713 /* S_HALT ==> */ A_ELECTION_VOTE, 714 }, 715 716 /* Got an I_PE_CALC */ 717 { 718 /* S_IDLE ==> */ A_PE_INVOKE, 719 /* S_ELECTION ==> */ A_NOTHING, 720 /* S_INTEGRATION ==> */ A_NOTHING, 721 /* S_FINALIZE_JOIN ==> */ A_NOTHING, 722 /* S_NOT_DC ==> */ A_WARN, 723 /* S_POLICY_ENGINE ==> */ A_PE_INVOKE, 724 /* S_RECOVERY ==> */ A_NOTHING, 725 /* S_RELEASE_DC ==> */ A_NOTHING, 726 /* S_STARTING ==> */ A_ERROR, 727 /* S_PENDING ==> */ A_WARN, 728 /* S_STOPPING ==> */ A_WARN, 729 /* S_TERMINATE ==> */ A_ERROR, 730 /* S_TRANSITION_ENGINE ==> */ A_PE_INVOKE, 731 /* S_HALT ==> */ A_ERROR, 732 }, 733 734 /* Got an I_RELEASE_DC */ 735 { 736 /* S_IDLE ==> */ O_RELEASE, 737 /* S_ELECTION ==> */ O_RELEASE, 738 /* S_INTEGRATION ==> */ O_RELEASE | A_WARN, 739 /* S_FINALIZE_JOIN ==> */ O_RELEASE | A_WARN, 740 /* S_NOT_DC ==> */ A_WARN, 741 /* S_POLICY_ENGINE ==> */ O_RELEASE | A_WARN, 742 /* S_RECOVERY ==> */ O_RELEASE, 743 /* S_RELEASE_DC ==> */ O_RELEASE | A_WARN, 744 /* S_STARTING ==> */ A_ERROR, 745 /* S_PENDING ==> */ A_WARN, 746 /* S_STOPPING ==> */ A_WARN, 747 /* S_TERMINATE ==> */ A_WARN, 748 /* S_TRANSITION_ENGINE ==> */ O_RELEASE | A_WARN, 749 /* S_HALT ==> */ A_WARN, 750 }, 751 752 /* Got an I_ELECTION_DC */ 753 { 754 /* S_IDLE ==> */ A_WARN | A_ELECTION_VOTE, 755 /* S_ELECTION ==> */ 756 A_LOG | A_DC_TAKEOVER | A_PE_START | A_TE_START | A_DC_JOIN_OFFER_ALL | A_DC_TIMER_STOP, 757 /* S_INTEGRATION ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL, 758 /* S_FINALIZE_JOIN ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL, 759 /* S_NOT_DC ==> */ A_LOG | A_ELECTION_VOTE, 760 /* S_POLICY_ENGINE ==> */ A_WARN | A_ELECTION_VOTE, 761 /* S_RECOVERY ==> */ A_WARN, 762 /* S_RELEASE_DC ==> */ A_WARN | A_ELECTION_VOTE, 763 /* S_STARTING ==> */ A_LOG | A_WARN, 764 /* S_PENDING ==> */ A_LOG | A_WARN, 765 /* S_STOPPING ==> */ A_WARN, 766 /* S_TERMINATE ==> */ A_WARN, 767 /* S_TRANSITION_ENGINE ==> */ A_WARN | A_ELECTION_VOTE, 768 /* S_HALT ==> */ A_WARN, 769 }, 770 771 /* Got an I_ERROR */ 772 { 773 /* S_IDLE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 774 /* S_ELECTION ==> */ A_ERROR | A_RECOVER | O_RELEASE, 775 /* S_INTEGRATION ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 776 /* S_FINALIZE_JOIN ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 777 /* S_NOT_DC ==> */ A_ERROR | A_RECOVER, 778 /* S_POLICY_ENGINE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 779 /* S_RECOVERY ==> */ A_ERROR | O_RELEASE, 780 /* S_RELEASE_DC ==> */ A_ERROR | A_RECOVER, 781 /* S_STARTING ==> */ A_ERROR | A_RECOVER, 782 /* S_PENDING ==> */ A_ERROR | A_RECOVER, 783 /* S_STOPPING ==> */ A_ERROR | A_EXIT_1, 784 /* S_TERMINATE ==> */ A_ERROR | A_EXIT_1, 785 /* S_TRANSITION_ENGINE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 786 /* S_HALT ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 787 }, 788 789 /* Got an I_FAIL */ 790 { 791 /* S_IDLE ==> */ A_WARN, 792 /* S_ELECTION ==> */ A_WARN, 793 /* S_INTEGRATION ==> */ A_WARN | A_DC_JOIN_OFFER_ALL, 794 /* S_FINALIZE_JOIN ==> */ A_WARN | A_DC_JOIN_OFFER_ALL, 795 /* S_NOT_DC ==> */ A_WARN, 796 /* S_POLICY_ENGINE ==> */ A_WARN | A_DC_JOIN_OFFER_ALL | A_TE_CANCEL, 797 /* S_RECOVERY ==> */ A_WARN | O_RELEASE, 798 /* S_RELEASE_DC ==> */ A_WARN, 799 /* S_STARTING ==> */ A_WARN, 800 /* S_PENDING ==> */ A_WARN, 801 /* S_STOPPING ==> */ A_WARN, 802 /* S_TERMINATE ==> */ A_WARN | A_EXIT_1, 803 /* S_TRANSITION_ENGINE ==> */ A_WARN | O_LRM_RECONNECT | A_PE_INVOKE | A_TE_CANCEL, 804 /* S_HALT ==> */ A_WARN, 805 }, 806 807 /* Got an I_INTEGRATED */ 808 { 809 /* S_IDLE ==> */ A_NOTHING, 810 /* S_ELECTION ==> */ A_WARN, 811 /* S_INTEGRATION ==> */ A_DC_JOIN_FINALIZE, 812 /* S_FINALIZE_JOIN ==> */ A_WARN, 813 /* S_NOT_DC ==> */ A_WARN, 814 /* S_POLICY_ENGINE ==> */ A_NOTHING, 815 /* S_RECOVERY ==> */ A_WARN, 816 /* S_RELEASE_DC ==> */ A_WARN, 817 /* S_STARTING ==> */ A_WARN, 818 /* S_PENDING ==> */ A_WARN, 819 /* S_STOPPING ==> */ A_WARN, 820 /* S_TERMINATE ==> */ A_WARN, 821 /* S_TRANSITION_ENGINE ==> */ A_NOTHING, 822 /* S_HALT ==> */ A_WARN, 823 }, 824 825 /* Got an I_FINALIZED */ 826 { 827 /* S_IDLE ==> */ A_NOTHING, 828 /* S_ELECTION ==> */ A_WARN, 829 /* S_INTEGRATION ==> */ A_WARN, 830 /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_FINAL | A_TE_CANCEL, 831 /* S_NOT_DC ==> */ A_WARN, 832 /* S_POLICY_ENGINE ==> */ A_NOTHING, 833 /* S_RECOVERY ==> */ A_WARN, 834 /* S_RELEASE_DC ==> */ A_WARN, 835 /* S_STARTING ==> */ A_WARN, 836 /* S_PENDING ==> */ A_WARN, 837 /* S_STOPPING ==> */ A_WARN, 838 /* S_TERMINATE ==> */ A_WARN, 839 /* S_TRANSITION_ENGINE ==> */ A_NOTHING, 840 /* S_HALT ==> */ A_WARN, 841 }, 842 843 /* Got an I_NODE_JOIN */ 844 { 845 /* S_IDLE ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE, 846 /* S_ELECTION ==> */ A_WARN, 847 /* S_INTEGRATION ==> */ A_DC_JOIN_OFFER_ONE, 848 /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_OFFER_ONE, 849 /* S_NOT_DC ==> */ A_WARN, 850 /* S_POLICY_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, 851 /* S_RECOVERY ==> */ A_WARN, 852 /* S_RELEASE_DC ==> */ A_WARN, 853 /* S_STARTING ==> */ A_WARN, 854 /* S_PENDING ==> */ A_WARN, 855 /* S_STOPPING ==> */ A_WARN, 856 /* S_TERMINATE ==> */ A_WARN, 857 /* S_TRANSITION_ENGINE ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE, 858 /* S_HALT ==> */ A_WARN, 859 }, 860 861 /* Got an I_NOT_DC */ 862 { 863 /* S_IDLE ==> */ A_WARN | O_RELEASE, 864 /* S_ELECTION ==> */ A_ERROR | A_ELECTION_START | A_DC_TIMER_STOP, 865 /* S_INTEGRATION ==> */ A_ERROR | O_RELEASE, 866 /* S_FINALIZE_JOIN ==> */ A_ERROR | O_RELEASE, 867 /* S_NOT_DC ==> */ A_LOG, 868 /* S_POLICY_ENGINE ==> */ A_ERROR | O_RELEASE, 869 /* S_RECOVERY ==> */ A_ERROR | O_RELEASE, 870 /* S_RELEASE_DC ==> */ A_ERROR | O_RELEASE, 871 /* S_STARTING ==> */ A_WARN, 872 /* S_PENDING ==> */ A_LOG | A_DC_TIMER_STOP, 873 /* S_STOPPING ==> */ A_WARN, 874 /* S_TERMINATE ==> */ A_WARN, 875 /* S_TRANSITION_ENGINE ==> */ A_ERROR | O_RELEASE, 876 /* S_HALT ==> */ A_WARN, 877 }, 878 879 /* Got an I_RECOVERED */ 880 { 881 /* S_IDLE ==> */ A_WARN, 882 /* S_ELECTION ==> */ A_ELECTION_VOTE, 883 /* S_INTEGRATION ==> */ A_WARN, 884 /* S_FINALIZE_JOIN ==> */ A_WARN, 885 /* S_NOT_DC ==> */ A_WARN, 886 /* S_POLICY_ENGINE ==> */ A_WARN, 887 /* S_RECOVERY ==> */ A_LOG, 888 /* S_RELEASE_DC ==> */ A_WARN, 889 /* S_STARTING ==> */ A_WARN, 890 /* S_PENDING ==> */ A_WARN, 891 /* S_STOPPING ==> */ A_WARN, 892 /* S_TERMINATE ==> */ A_WARN, 893 /* S_TRANSITION_ENGINE ==> */ A_WARN, 894 /* S_HALT ==> */ A_WARN, 895 }, 896 897 /* Got an I_RELEASE_FAIL */ 898 { 899 /* S_IDLE ==> */ A_WARN, 900 /* S_ELECTION ==> */ A_WARN, 901 /* S_INTEGRATION ==> */ A_WARN, 902 /* S_FINALIZE_JOIN ==> */ A_WARN, 903 /* S_NOT_DC ==> */ A_WARN, 904 /* S_POLICY_ENGINE ==> */ A_NOTHING, 905 /* S_RECOVERY ==> */ A_WARN | A_SHUTDOWN_REQ, 906 /* S_RELEASE_DC ==> */ A_NOTHING, 907 /* S_STARTING ==> */ A_WARN, 908 /* S_PENDING ==> */ A_WARN, 909 /* S_STOPPING ==> */ A_WARN, 910 /* S_TERMINATE ==> */ A_WARN, 911 /* S_TRANSITION_ENGINE ==> */ A_WARN, 912 /* S_HALT ==> */ A_WARN, 913 }, 914 915 /* Got an I_RELEASE_SUCCESS */ 916 { 917 /* S_IDLE ==> */ A_WARN, 918 /* S_ELECTION ==> */ A_WARN, 919 /* S_INTEGRATION ==> */ A_WARN, 920 /* S_FINALIZE_JOIN ==> */ A_WARN, 921 /* S_NOT_DC ==> */ A_WARN, 922 /* S_POLICY_ENGINE ==> */ A_WARN, 923 /* S_RECOVERY ==> */ A_WARN, 924 /* S_RELEASE_DC ==> */ A_LOG, 925 /* S_STARTING ==> */ A_WARN, 926 /* S_PENDING ==> */ A_LOG, 927 /* S_STOPPING ==> */ A_WARN, 928 /* S_TERMINATE ==> */ A_WARN, 929 /* S_TRANSITION_ENGINE ==> */ A_WARN, 930 /* S_HALT ==> */ A_WARN, 931 }, 932 933 /* Got an I_RESTART */ 934 { 935 /* S_IDLE ==> */ A_NOTHING, 936 /* S_ELECTION ==> */ A_LOG | A_ELECTION_VOTE, 937 /* S_INTEGRATION ==> */ A_LOG | A_DC_JOIN_OFFER_ALL, 938 /* S_FINALIZE_JOIN ==> */ A_LOG | A_DC_JOIN_FINALIZE, 939 /* S_NOT_DC ==> */ A_LOG | A_NOTHING, 940 /* S_POLICY_ENGINE ==> */ A_LOG | A_PE_INVOKE, 941 /* S_RECOVERY ==> */ A_LOG | A_RECOVER | O_RELEASE, 942 /* S_RELEASE_DC ==> */ A_LOG | O_RELEASE, 943 /* S_STARTING ==> */ A_LOG, 944 /* S_PENDING ==> */ A_LOG, 945 /* S_STOPPING ==> */ A_LOG, 946 /* S_TERMINATE ==> */ A_LOG, 947 /* S_TRANSITION_ENGINE ==> */ A_LOG | A_TE_INVOKE, 948 /* S_HALT ==> */ A_WARN, 949 }, 950 951 /* Got an I_TE_SUCCESS */ 952 { 953 /* S_IDLE ==> */ A_LOG, 954 /* S_ELECTION ==> */ A_WARN, 955 /* S_INTEGRATION ==> */ A_WARN, 956 /* S_FINALIZE_JOIN ==> */ A_WARN, 957 /* S_NOT_DC ==> */ A_ERROR, 958 /* S_POLICY_ENGINE ==> */ A_WARN, 959 /* S_RECOVERY ==> */ A_RECOVER | A_WARN, 960 /* S_RELEASE_DC ==> */ A_WARN, 961 /* S_STARTING ==> */ A_ERROR, 962 /* S_PENDING ==> */ A_ERROR, 963 /* S_STOPPING ==> */ A_WARN, 964 /* S_TERMINATE ==> */ A_WARN, 965 /* S_TRANSITION_ENGINE ==> */ A_LOG, 966 /* S_HALT ==> */ A_WARN, 967 }, 968 969 /* Got an I_ROUTER */ 970 { 971 /* S_IDLE ==> */ A_MSG_ROUTE, 972 /* S_ELECTION ==> */ A_MSG_ROUTE, 973 /* S_INTEGRATION ==> */ A_MSG_ROUTE, 974 /* S_FINALIZE_JOIN ==> */ A_MSG_ROUTE, 975 /* S_NOT_DC ==> */ A_MSG_ROUTE, 976 /* S_POLICY_ENGINE ==> */ A_MSG_ROUTE, 977 /* S_RECOVERY ==> */ A_MSG_ROUTE, 978 /* S_RELEASE_DC ==> */ A_MSG_ROUTE, 979 /* S_STARTING ==> */ A_MSG_ROUTE, 980 /* S_PENDING ==> */ A_MSG_ROUTE, 981 /* S_STOPPING ==> */ A_MSG_ROUTE, 982 /* S_TERMINATE ==> */ A_MSG_ROUTE, 983 /* S_TRANSITION_ENGINE ==> */ A_MSG_ROUTE, 984 /* S_HALT ==> */ A_WARN | A_MSG_ROUTE, 985 }, 986 987 /* Got an I_SHUTDOWN */ 988 { 989 /* S_IDLE ==> */ A_LOG | A_SHUTDOWN_REQ, 990 /* S_ELECTION ==> */ A_LOG | A_SHUTDOWN_REQ | A_ELECTION_VOTE, 991 /* S_INTEGRATION ==> */ A_LOG | A_SHUTDOWN_REQ, 992 /* S_FINALIZE_JOIN ==> */ A_LOG | A_SHUTDOWN_REQ, 993 /* S_NOT_DC ==> */ A_SHUTDOWN_REQ, 994 /* S_POLICY_ENGINE ==> */ A_LOG | A_SHUTDOWN_REQ, 995 /* S_RECOVERY ==> */ A_WARN | O_EXIT | O_RELEASE, 996 /* S_RELEASE_DC ==> */ A_WARN | A_SHUTDOWN_REQ, 997 /* S_STARTING ==> */ A_WARN | O_EXIT, 998 /* S_PENDING ==> */ A_SHUTDOWN_REQ, 999 /* S_STOPPING ==> */ A_LOG, 1000 /* S_TERMINATE ==> */ A_LOG, 1001 /* S_TRANSITION_ENGINE ==> */ A_WARN | A_SHUTDOWN_REQ, 1002 /* S_HALT ==> */ A_WARN | A_ELECTION_START | A_SHUTDOWN_REQ, 1003 }, 1004 1005 /* Got an I_STOP */ 1006 { 1007 /* S_IDLE ==> */ A_ERROR | O_RELEASE | O_EXIT, 1008 /* S_ELECTION ==> */ O_RELEASE | O_EXIT, 1009 /* S_INTEGRATION ==> */ A_WARN | O_RELEASE | O_EXIT, 1010 /* S_FINALIZE_JOIN ==> */ A_ERROR | O_RELEASE | O_EXIT, 1011 /* S_NOT_DC ==> */ O_EXIT, 1012 /* S_POLICY_ENGINE ==> */ A_WARN | O_RELEASE | O_EXIT, 1013 /* S_RECOVERY ==> */ A_ERROR | O_RELEASE | O_EXIT, 1014 /* S_RELEASE_DC ==> */ A_ERROR | O_RELEASE | O_EXIT, 1015 /* S_STARTING ==> */ O_EXIT, 1016 /* S_PENDING ==> */ O_EXIT, 1017 /* S_STOPPING ==> */ O_EXIT, 1018 /* S_TERMINATE ==> */ A_ERROR | A_EXIT_1, 1019 /* S_TRANSITION_ENGINE ==> */ A_LOG | O_RELEASE | O_EXIT, 1020 /* S_HALT ==> */ O_RELEASE | O_EXIT | A_WARN, 1021 }, 1022 1023 /* Got an I_TERMINATE */ 1024 { 1025 /* S_IDLE ==> */ A_ERROR | O_EXIT, 1026 /* S_ELECTION ==> */ A_ERROR | O_EXIT, 1027 /* S_INTEGRATION ==> */ A_ERROR | O_EXIT, 1028 /* S_FINALIZE_JOIN ==> */ A_ERROR | O_EXIT, 1029 /* S_NOT_DC ==> */ A_ERROR | O_EXIT, 1030 /* S_POLICY_ENGINE ==> */ A_ERROR | O_EXIT, 1031 /* S_RECOVERY ==> */ A_ERROR | O_EXIT, 1032 /* S_RELEASE_DC ==> */ A_ERROR | O_EXIT, 1033 /* S_STARTING ==> */ O_EXIT, 1034 /* S_PENDING ==> */ A_ERROR | O_EXIT, 1035 /* S_STOPPING ==> */ O_EXIT, 1036 /* S_TERMINATE ==> */ O_EXIT, 1037 /* S_TRANSITION_ENGINE ==> */ A_ERROR | O_EXIT, 1038 /* S_HALT ==> */ A_ERROR | O_EXIT, 1039 }, 1040 1041 /* Got an I_STARTUP */ 1042 { 1043 /* S_IDLE ==> */ A_WARN, 1044 /* S_ELECTION ==> */ A_WARN, 1045 /* S_INTEGRATION ==> */ A_WARN, 1046 /* S_FINALIZE_JOIN ==> */ A_WARN, 1047 /* S_NOT_DC ==> */ A_WARN, 1048 /* S_POLICY_ENGINE ==> */ A_WARN, 1049 /* S_RECOVERY ==> */ A_WARN, 1050 /* S_RELEASE_DC ==> */ A_WARN, 1051 /* S_STARTING ==> */ 1052 A_LOG | A_STARTUP | A_CIB_START | A_LRM_CONNECT | A_HA_CONNECT | A_READCONFIG | A_STARTED, 1053 /* S_PENDING ==> */ A_LOG, 1054 /* S_STOPPING ==> */ A_WARN, 1055 /* S_TERMINATE ==> */ A_WARN, 1056 /* S_TRANSITION_ENGINE ==> */ A_WARN, 1057 /* S_HALT ==> */ A_WARN, 1058 }, 1059 1060 /* Got an I_PE_SUCCESS */ 1061 { 1062 /* S_IDLE ==> */ A_LOG, 1063 /* S_ELECTION ==> */ A_WARN, 1064 /* S_INTEGRATION ==> */ A_WARN, 1065 /* S_FINALIZE_JOIN ==> */ A_WARN, 1066 /* S_NOT_DC ==> */ A_NOTHING, 1067 /* S_POLICY_ENGINE ==> */ A_TE_INVOKE, 1068 /* S_RECOVERY ==> */ A_RECOVER | A_LOG, 1069 /* S_RELEASE_DC ==> */ A_LOG, 1070 /* S_STARTING ==> */ A_ERROR, 1071 /* S_PENDING ==> */ A_LOG, 1072 /* S_STOPPING ==> */ A_ERROR, 1073 /* S_TERMINATE ==> */ A_ERROR, 1074 /* S_TRANSITION_ENGINE ==> */ A_LOG, 1075 /* S_HALT ==> */ A_WARN, 1076 }, 1077 1078 /* Got an I_JOIN_OFFER */ 1079 { 1080 /* S_IDLE ==> */ A_WARN | A_CL_JOIN_REQUEST, 1081 /* S_ELECTION ==> */ A_WARN | A_ELECTION_VOTE, 1082 /* S_INTEGRATION ==> */ A_CL_JOIN_REQUEST, 1083 /* S_FINALIZE_JOIN ==> */ A_CL_JOIN_REQUEST, 1084 /* S_NOT_DC ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1085 /* S_POLICY_ENGINE ==> */ A_WARN | A_CL_JOIN_REQUEST, 1086 /* S_RECOVERY ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1087 /* S_RELEASE_DC ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1088 /* S_STARTING ==> */ A_LOG, 1089 /* S_PENDING ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1090 /* S_STOPPING ==> */ A_LOG, 1091 /* S_TERMINATE ==> */ A_LOG, 1092 /* S_TRANSITION_ENGINE ==> */ A_WARN | A_CL_JOIN_REQUEST, 1093 /* S_HALT ==> */ A_WARN, 1094 }, 1095 1096 /* Got an I_JOIN_REQUEST */ 1097 { 1098 /* S_IDLE ==> */ A_DC_JOIN_OFFER_ONE, 1099 /* S_ELECTION ==> */ A_WARN, 1100 /* S_INTEGRATION ==> */ A_DC_JOIN_PROCESS_REQ, 1101 /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_OFFER_ONE, 1102 /* S_NOT_DC ==> */ A_WARN, 1103 /* S_POLICY_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, 1104 /* S_RECOVERY ==> */ A_WARN, 1105 /* S_RELEASE_DC ==> */ A_WARN, 1106 /* S_STARTING ==> */ A_WARN, 1107 /* S_PENDING ==> */ A_WARN, 1108 /* S_STOPPING ==> */ A_WARN, 1109 /* S_TERMINATE ==> */ A_WARN, 1110 /* S_TRANSITION_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, 1111 /* S_HALT ==> */ A_WARN, 1112 }, 1113 1114 /* Got an I_JOIN_RESULT */ 1115 { 1116 /* S_IDLE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, 1117 /* S_ELECTION ==> */ A_LOG, 1118 /* S_INTEGRATION ==> */ A_LOG | A_CL_JOIN_RESULT | A_DC_JOIN_PROCESS_ACK, 1119 /* S_FINALIZE_JOIN ==> */ A_CL_JOIN_RESULT | A_DC_JOIN_PROCESS_ACK, 1120 /* S_NOT_DC ==> */ A_ERROR | A_CL_JOIN_ANNOUNCE, 1121 /* S_POLICY_ENGINE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, 1122 /* S_RECOVERY ==> */ A_LOG, 1123 /* S_RELEASE_DC ==> */ A_LOG, 1124 /* S_STARTING ==> */ A_ERROR, 1125 /* S_PENDING ==> */ A_CL_JOIN_RESULT, 1126 /* S_STOPPING ==> */ A_ERROR, 1127 /* S_TERMINATE ==> */ A_ERROR, 1128 /* S_TRANSITION_ENGINE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, 1129 /* S_HALT ==> */ A_WARN, 1130 }, 1131 1132 /* Got an I_WAIT_FOR_EVENT */ 1133 { 1134 /* S_IDLE ==> */ A_LOG, 1135 /* S_ELECTION ==> */ A_LOG, 1136 /* S_INTEGRATION ==> */ A_LOG, 1137 /* S_FINALIZE_JOIN ==> */ A_LOG, 1138 /* S_NOT_DC ==> */ A_LOG, 1139 /* S_POLICY_ENGINE ==> */ A_LOG, 1140 /* S_RECOVERY ==> */ A_LOG, 1141 /* S_RELEASE_DC ==> */ A_LOG, 1142 /* S_STARTING ==> */ A_LOG, 1143 /* S_PENDING ==> */ A_LOG, 1144 /* S_STOPPING ==> */ A_LOG, 1145 /* S_TERMINATE ==> */ A_LOG, 1146 /* S_TRANSITION_ENGINE ==> */ A_LOG, 1147 /* S_HALT ==> */ A_WARN, 1148 }, 1149 1150 /* Got an I_DC_HEARTBEAT */ 1151 { 1152 /* S_IDLE ==> */ A_ERROR, 1153 /* S_ELECTION ==> */ A_WARN | A_ELECTION_VOTE, 1154 /* S_INTEGRATION ==> */ A_ERROR, 1155 /* S_FINALIZE_JOIN ==> */ A_ERROR, 1156 /* S_NOT_DC ==> */ A_NOTHING, 1157 /* S_POLICY_ENGINE ==> */ A_ERROR, 1158 /* S_RECOVERY ==> */ A_NOTHING, 1159 /* S_RELEASE_DC ==> */ A_LOG, 1160 /* S_STARTING ==> */ A_LOG, 1161 /* S_PENDING ==> */ A_LOG | A_CL_JOIN_ANNOUNCE, 1162 /* S_STOPPING ==> */ A_NOTHING, 1163 /* S_TERMINATE ==> */ A_NOTHING, 1164 /* S_TRANSITION_ENGINE ==> */ A_ERROR, 1165 /* S_HALT ==> */ A_WARN, 1166 }, 1167 1168 /* Got an I_LRM_EVENT */ 1169 { 1170 /* S_IDLE ==> */ A_LRM_EVENT, 1171 /* S_ELECTION ==> */ A_LRM_EVENT, 1172 /* S_INTEGRATION ==> */ A_LRM_EVENT, 1173 /* S_FINALIZE_JOIN ==> */ A_LRM_EVENT, 1174 /* S_NOT_DC ==> */ A_LRM_EVENT, 1175 /* S_POLICY_ENGINE ==> */ A_LRM_EVENT, 1176 /* S_RECOVERY ==> */ A_LRM_EVENT, 1177 /* S_RELEASE_DC ==> */ A_LRM_EVENT, 1178 /* S_STARTING ==> */ A_LRM_EVENT, 1179 /* S_PENDING ==> */ A_LRM_EVENT, 1180 /* S_STOPPING ==> */ A_LRM_EVENT, 1181 /* S_TERMINATE ==> */ A_LRM_EVENT, 1182 /* S_TRANSITION_ENGINE ==> */ A_LRM_EVENT, 1183 /* S_HALT ==> */ A_WARN, 1184 }, 1185 1186 /* For everyone ending up in S_PENDING, (re)start the DC timer and wait for I_JOIN_OFFER or I_NOT_DC */ 1187 /* Got an I_PENDING */ 1188 { 1189 /* S_IDLE ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1190 /* S_ELECTION ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1191 /* S_INTEGRATION ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1192 /* S_FINALIZE_JOIN ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1193 /* S_NOT_DC ==> */ A_LOG | O_DC_TIMER_RESTART, 1194 /* S_POLICY_ENGINE ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1195 /* S_RECOVERY ==> */ A_WARN, 1196 /* S_RELEASE_DC ==> */ A_WARN | O_DC_TIMER_RESTART, 1197 /* S_STARTING ==> */ A_LOG | A_DC_TIMER_START | A_CL_JOIN_QUERY, 1198 /* S_PENDING ==> */ A_LOG | O_DC_TIMER_RESTART, 1199 /* S_STOPPING ==> */ A_WARN, 1200 /* S_TERMINATE ==> */ A_WARN, 1201 /* S_TRANSITION_ENGINE ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1202 /* S_HALT ==> */ A_WARN, 1203 }, 1204 1205 /* Got an I_HALT */ 1206 { 1207 /* S_IDLE ==> */ A_WARN, 1208 /* S_ELECTION ==> */ A_WARN, 1209 /* S_INTEGRATION ==> */ A_WARN, 1210 /* S_FINALIZE_JOIN ==> */ A_WARN, 1211 /* S_NOT_DC ==> */ A_WARN, 1212 /* S_POLICY_ENGINE ==> */ A_WARN, 1213 /* S_RECOVERY ==> */ A_WARN, 1214 /* S_RELEASE_DC ==> */ A_WARN, 1215 /* S_STARTING ==> */ A_WARN, 1216 /* S_PENDING ==> */ A_WARN, 1217 /* S_STOPPING ==> */ A_WARN, 1218 /* S_TERMINATE ==> */ A_WARN, 1219 /* S_TRANSITION_ENGINE ==> */ A_WARN, 1220 /* S_HALT ==> */ A_WARN, 1221 }, 1222 }; 1223 1224 /*! 1225 * \internal 1226 * \brief Get the next FSA state given an input and the current state 1227 * 1228 * \param[in] input FSA input 1229 * 1230 * \return The next FSA state 1231 */ 1232 enum crmd_fsa_state 1233 controld_fsa_get_next_state(enum crmd_fsa_input input) /* */ 1234 { 1235 return fsa_next_states[input][controld_globals.fsa_state]; 1236 } 1237 1238 /*! 1239 * \internal 1240 * \brief Get the appropriate FSA action given an input and the current state 1241 * 1242 * \param[in] input FSA input 1243 * 1244 * \return The appropriate FSA action 1245 */ 1246 uint64_t 1247 controld_fsa_get_action(enum crmd_fsa_input input) /* */ 1248 { 1249 return fsa_actions[input][controld_globals.fsa_state]; 1250 }