diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afd22ec81..aa70651d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -485,5 +485,13 @@ jobs: echo "TRAVIS_BUILD_DIR=$(pwd)" >> $GITHUB_ENV - name: Run pytest / ${{ matrix.TEST }} (PG${{ matrix.PGVERSION }}) - timeout-minutes: 15 + # citus is the heaviest TEST value in this matrix (6 files, ~76 items, + # several multi-coordinator/multi-worker convergence waits) and has + # been seen to run right up against a 15-minute step timeout while + # still making forward progress, not stuck -- e.g. citus (PG14) + # timed out mid-suite on 2026-07-29 with ~4-5 minutes of the job's + # own 20-minute ceiling (see above) left completely unused. 18 + # minutes gives real headroom while still leaving margin under the + # job-level timeout once checkout/download/docker-load are counted. + timeout-minutes: 18 run: make run-test-prebuilt diff --git a/docs/ref/pgaftest.rst b/docs/ref/pgaftest.rst index 7eed400bc..15e39de76 100644 --- a/docs/ref/pgaftest.rst +++ b/docs/ref/pgaftest.rst @@ -488,6 +488,17 @@ Commands inside ``setup``, ``teardown``, and ``step`` blocks wait until state is [timeout s] wait until primary, secondary [timeout s] wait until stopped [timeout s] + wait until replays [timeout s] + +``wait until replays `` captures ````'s current WAL +position (or, if ```` is itself a standby, its own last-replayed +position) once, at the moment the command runs, then polls ```` until +it has replayed at least that far. Use it right after a write on ```` +and before reading that data back from ````, instead of racing a fixed +``sleep`` against replication catch-up -- especially right after a +promotion/failover, when a node's FSM state can flip to +``primary``/``secondary`` a moment before a subsequent write has actually +propagated. **Assertions** diff --git a/src/bin/common/pgsql.c b/src/bin/common/pgsql.c index bee978c2e..105c4f96c 100644 --- a/src/bin/common/pgsql.c +++ b/src/bin/common/pgsql.c @@ -545,8 +545,51 @@ pgsql_open_connection(PGSQL *pgsql) INSTR_TIME_SET_CURRENT(pgsql->retryPolicy.startTime); INSTR_TIME_SET_ZERO(pgsql->retryPolicy.connectTime); - /* Make a connection to the database */ - pgsql->connection = PQconnectdb(pgsql->connectionString); + if (pgsql->connectionType == PGSQL_CONN_MONITOR) + { + /* + * Bound how long a query already in flight when the network + * disappears without a graceful FIN/RST (a hard network partition, + * or `docker network disconnect` in our own test suite) can block + * on read(), instead of relying on the OS default TCP retransmission + * timeout (many minutes). PGCONNECT_TIMEOUT above only bounds the + * initial handshake, not an already-established connection. + * + * Two distinct mechanisms, both needed: keepalives only start + * probing once a connection has been fully idle (no unacknowledged + * data) for keepalives_idle seconds -- if the query's own bytes are + * still unacknowledged at the moment the network vanishes, plain + * data retransmission (governed by the kernel's tcp_retries2, not + * by our keepalive settings) takes over instead and keepalives never + * get a chance to apply. tcp_user_timeout bounds that unacknowledged + * -data case directly, regardless of which timer the kernel is + * currently running. + * + * dbname carries the full connection string/URI as given by the + * caller; expand_dbname=1 tells libpq to parse it as such rather + * than take it literally, so this works whichever form (URI or + * keyword=value) pgsql->connectionString happens to be in, without + * us having to parse and rebuild it here ourselves. + */ + const char *keywords[] = { + "dbname", "keepalives", "keepalives_idle", + "keepalives_interval", "keepalives_count", + "tcp_user_timeout", NULL + }; + const char *values[] = { + pgsql->connectionString, "1", POSTGRES_MONITOR_KEEPALIVES_IDLE, + POSTGRES_MONITOR_KEEPALIVES_INTERVAL, + POSTGRES_MONITOR_KEEPALIVES_COUNT, + POSTGRES_MONITOR_TCP_USER_TIMEOUT, NULL + }; + + pgsql->connection = PQconnectdbParams(keywords, values, 1); + } + else + { + /* Make a connection to the database */ + pgsql->connection = PQconnectdb(pgsql->connectionString); + } /* Check to see that the backend connection was successfully made */ if (PQstatus(pgsql->connection) != CONNECTION_OK) diff --git a/src/bin/pg_autoctl/cli_config.c b/src/bin/pg_autoctl/cli_config.c index afc057abc..ef24833ec 100644 --- a/src/bin/pg_autoctl/cli_config.c +++ b/src/bin/pg_autoctl/cli_config.c @@ -649,6 +649,15 @@ cli_config_set(int argc, char **argv) /* * cli_keeper_config_set sets the given option path to the given value. + * + * pg_autoctl.name and pg_autoctl.hostname are node metadata that the monitor + * also carries a copy of: pushing the change there is normally left to the + * running supervisor's own config-reload handling, which this one-shot + * command can only trigger asynchronously (a SIGHUP) and has no way to wait + * on. Push those two synchronously here instead, the same way "pg_autoctl + * set node metadata" already does, so that by the time this command returns + * the monitor is guaranteed to be caught up -- no polling or sleep needed by + * the caller. */ static void cli_keeper_config_set(int argc, char **argv) @@ -675,6 +684,36 @@ cli_keeper_config_set(int argc, char **argv) exit(EXIT_CODE_BAD_ARGS); } + bool isNodeMetadata = streq(argv[0], "pg_autoctl.name") || + streq(argv[0], "pg_autoctl.hostname"); + + /* + * Capture the pre-change values now: keeper_config_set_setting() + * below both patches this exact file on disk and repopulates config + * from it, so config itself won't hold the "old" values anymore by + * the time we'd want to compare. + */ + KeeperConfig oldConfig = { 0 }; + + if (isNodeMetadata) + { + bool missingPgdataIsOk = true; + bool pgIsNotRunningIsOk = true; + bool monitorDisabledIsOk = true; + + oldConfig = keeperOptions; + + if (!keeper_config_read_file(&oldConfig, + missingPgdataIsOk, + pgIsNotRunningIsOk, + monitorDisabledIsOk)) + { + log_fatal("Failed to read configuration file \"%s\"", + config.pathnames.config); + exit(EXIT_CODE_BAD_CONFIG); + } + } + if (!keeper_config_set_setting(&config, argv[0], argv[1])) @@ -692,6 +731,31 @@ cli_keeper_config_set(int argc, char **argv) exit(EXIT_CODE_BAD_CONFIG); } + /* + * Push the name/hostname change to the monitor synchronously, + * unless this node runs with its monitor disabled, in which case + * there is nothing to synchronize with. + */ + if (isNodeMetadata && !oldConfig.monitorDisabled) + { + Keeper keeper = { 0 }; + + keeper.config = config; + + if (!monitor_init(&(keeper.monitor), config.monitor_pguri)) + { + /* errors have already been logged */ + exit(EXIT_CODE_BAD_ARGS); + } + + if (!keeper_set_node_metadata(&keeper, &oldConfig)) + { + log_error("Failed to update \"%s\" on the monitor, " + "see above for details", argv[0]); + exit(EXIT_CODE_MONITOR); + } + } + /* now read the value from just written file */ if (keeper_config_get_setting(&config, argv[0], diff --git a/src/bin/pg_autoctl/config.c b/src/bin/pg_autoctl/config.c index 898867a53..afbc90ad6 100644 --- a/src/bin/pg_autoctl/config.c +++ b/src/bin/pg_autoctl/config.c @@ -122,8 +122,15 @@ build_xdg_path(char *dst, join_path_components(filename, filename, pgdata); } - /* mkdir -p the target directory */ - if (pg_mkdir_p(filename, 0755) == -1) + /* + * mkdir -p the target directory. Several pg_autoctl processes (e.g. a + * freshly started node's own supervisor and a one-shot CLI command + * invoked against it) can race to create the same XDG_RUNTIME_DIR + * fallback ancestor (typically "/tmp/pg_autoctl") the first time either + * of them runs -- tolerate losing that race rather than failing, as + * long as the directory exists by the time we're done. + */ + if (pg_mkdir_p(filename, 0755) == -1 && !directory_exists(filename)) { log_error("Failed to create state directory \"%s\": %m", filename); return false; diff --git a/src/bin/pg_autoctl/defaults.h b/src/bin/pg_autoctl/defaults.h index bf931db87..d63e7a4e2 100644 --- a/src/bin/pg_autoctl/defaults.h +++ b/src/bin/pg_autoctl/defaults.h @@ -61,6 +61,28 @@ #define MAXIMUM_BACKUP_RATE "100M" #define MAXIMUM_BACKUP_RATE_LEN 32 +/* + * TCP keepalives for the keeper-to-monitor connection. PGCONNECT_TIMEOUT + * only bounds the initial TCP handshake -- once connected, a query that's + * in flight when the network vanishes without a graceful FIN/RST (e.g. a + * hard `docker network disconnect`, or a real network partition) blocks on + * a plain read() with no libpq-level timeout of its own, relying entirely + * on the OS's default TCP retransmission timeout (many minutes). These + * values bound that worst case to keepalives_idle + keepalives_interval * + * keepalives_count =~ 11 seconds instead. + */ +#define POSTGRES_MONITOR_KEEPALIVES_IDLE "5" +#define POSTGRES_MONITOR_KEEPALIVES_INTERVAL "2" +#define POSTGRES_MONITOR_KEEPALIVES_COUNT "3" + +/* + * Milliseconds. Bounds how long already-transmitted, unacknowledged data + * may go unacknowledged before the kernel gives up on the connection -- + * the case plain keepalives don't cover (see the comment at the + * PQconnectdbParams() call site in pgsql_open_connection()). + */ +#define POSTGRES_MONITOR_TCP_USER_TIMEOUT "10000" + /* * Microsoft approved cipher string. diff --git a/src/bin/pgaftest/cli_indent.c b/src/bin/pgaftest/cli_indent.c index e849951fc..8f6552c99 100644 --- a/src/bin/pgaftest/cli_indent.c +++ b/src/bin/pgaftest/cli_indent.c @@ -885,6 +885,13 @@ print_cmd(FILE *out, const TestCmd *cmd, int indent) break; } + case CMD_WAIT_LSN: + { + fformat(out, "%*swait until %s replays %s timeout %ds\n", + indent, "", cmd->service, cmd->state, cmd->timeoutSeconds); + break; + } + case CMD_PROMOTE: { fformat(out, "%*spromote", indent, ""); diff --git a/src/bin/pgaftest/test_runner.c b/src/bin/pgaftest/test_runner.c index 7477949d4..ea1608254 100644 --- a/src/bin/pgaftest/test_runner.c +++ b/src/bin/pgaftest/test_runner.c @@ -89,6 +89,13 @@ test_cmd_print(FILE *f, const TestCmd *cmd, int indent) break; } + case CMD_WAIT_LSN: + { + fprintf(f, "%swait until %s replays %s timeout %ds\n", /* IGNORE-BANNED */ + pad, cmd->service, cmd->state, cmd->timeoutSeconds); + break; + } + case CMD_ASSERT_STATE: { fprintf(f, "%sassert %s state = %s\n", /* IGNORE-BANNED */ @@ -3410,11 +3417,25 @@ runner_exec_cmd(TestRunner *r, TestCmd *cmd, char *errBuf, int errLen) * `--no-deps` is critical: without it, `start` (and `up`) would * also start any stopped services listed in `depends_on`, which * interferes with tests that restart a single node. + * + * `--wait --wait-timeout` lets compose's own daemon-side readiness + * check do the work, instead of a hand-rolled `docker compose ps + * -q | xargs docker inspect` poll loop from here: one call instead + * of up to N subprocess pairs, and it uses the service's own + * healthcheck when one is defined rather than only "process + * started". 30s (vs the previous 10s poll) gives real headroom + * for a loaded CI runner -- this restart briefly overlaps with + * the node's own in-flight config-reload-triggered Postgres + * restart on a slow runner (see the "did not report running + * within 10000 ms" flake on pgaftest/ssl this was sized for). */ char out[4096] = ""; + const int waitTimeoutSecs = 30; int rc = run_cmd_capture(out, sizeof(out), - "%s up -d --no-recreate --no-deps %s 2>&1", - r->composeBase, cmd->service); + "%s up -d --no-recreate --no-deps " + "--wait --wait-timeout %d %s 2>&1", + r->composeBase, waitTimeoutSecs, + cmd->service); if (out[0]) { log_output(" compose: ", out); @@ -3422,55 +3443,12 @@ runner_exec_cmd(TestRunner *r, TestCmd *cmd, char *errBuf, int errLen) if (rc != 0) { sformat(errBuf, errLen, - "docker compose start %s failed (exit %d)", - cmd->service, rc); + "docker compose start %s: container did not " + "become running/healthy within %ds (exit %d)", + cmd->service, waitTimeoutSecs, rc); return false; } - /* - * `docker compose up -d` (and its own "Started"/"Running" status - * line) returns as soon as the daemon has issued the start, not - * once the container is actually registered as running -- a - * following `docker exec` can still race that with "container - * ... is not running" for a few hundred ms. Poll the daemon's - * own view of the container state before declaring success. - */ - { - bool running = false; - int elapsedMs = 0; - const int pollIntervalMs = 200; - const int pollTimeoutMs = 10000; - - while (elapsedMs < pollTimeoutMs) - { - char state[64] = ""; - int stateRc = run_cmd_capture(state, sizeof(state), - "%s ps -q %s | " - "xargs -r docker inspect " - "--format '{{.State.Running}}' " - "2>/dev/null", - r->composeBase, cmd->service); - - if (stateRc == 0 && strcmp(state, "true") == 0) - { - running = true; - break; - } - - pg_usleep(pollIntervalMs * 1000); - elapsedMs += pollIntervalMs; - } - - if (!running) - { - sformat(errBuf, errLen, - "docker compose start %s: container did not " - "report running within %d ms", - cmd->service, pollTimeoutMs); - return false; - } - } - return true; } @@ -3813,6 +3791,66 @@ runner_exec_cmd(TestRunner *r, TestCmd *cmd, char *errBuf, int errLen) return false; } + case CMD_WAIT_LSN: + { + const char *targetNode = cmd->service; + const char *sourceNode = cmd->state; + int timeoutSecs = cmd->timeoutSeconds; + + /* + * Capture the source's WAL position now, once, at the moment + * this command runs -- not something re-evaluated on every poll + * iteration, which could chase a moving target forever on a + * busy primary. pg_is_in_recovery() lets this work whichever + * role the source currently has. + */ + char lsn[64] = ""; + if (!exec_sql_on_service( + r, sourceNode, + "SELECT CASE WHEN pg_is_in_recovery() " + "THEN pg_last_wal_replay_lsn() " + "ELSE pg_current_wal_lsn() END;", + lsn, sizeof(lsn))) + { + sformat(errBuf, errLen, + "wait until %s replays %s: failed to capture %s's LSN: %s", + targetNode, sourceNode, sourceNode, lsn); + return false; + } + + int n = strlen(lsn); + while (n > 0 && (lsn[n - 1] == '\n' || lsn[n - 1] == ' ')) + { + lsn[--n] = '\0'; + } + + log_info(" Waiting for %s to replay %s's LSN %s (timeout %ds)", + targetNode, sourceNode, lsn, timeoutSecs); + + char query[256]; + sformat(query, sizeof(query), + "SELECT pg_last_wal_replay_lsn() >= '%s';", lsn); + + time_t deadline = time(NULL) + timeoutSecs; + while (time(NULL) < deadline) + { + char caughtUp[64] = ""; + if (exec_sql_on_service(r, targetNode, query, + caughtUp, sizeof(caughtUp)) && + caughtUp[0] == 't') + { + return true; + } + + usleep(500000); /* 500ms */ + } + + sformat(errBuf, errLen, + "timeout: %s did not replay %s's LSN %s within %ds", + targetNode, sourceNode, lsn, timeoutSecs); + return false; + } + case CMD_STOP_POSTGRES: { /* @@ -4350,6 +4388,13 @@ cmd_label(const TestCmd *cmd, char *buf, int len) break; } + case CMD_WAIT_LSN: + { + sformat(buf, len, "wait until %s replays %s timeout %ds", + cmd->service, cmd->state, cmd->timeoutSeconds); + break; + } + case CMD_WAIT_MULTI: { char parts[512] = ""; diff --git a/src/bin/pgaftest/test_spec.h b/src/bin/pgaftest/test_spec.h index 196a8826b..9f0034d49 100644 --- a/src/bin/pgaftest/test_spec.h +++ b/src/bin/pgaftest/test_spec.h @@ -181,6 +181,13 @@ typedef enum TestCmdKind * node's host-side .ini [settings] entry directly * and asserts it equals . service = node, * state = key, args = expected value. */ + CMD_WAIT_LSN, /* wait until replays [timeout Ns] — + * captures 's current (or, if it's itself a + * standby, last-replayed) WAL LSN at the moment this + * command runs, then polls until its own + * last-replayed LSN has caught up to that captured + * value. service = node to poll, state = source + * node to capture the LSN from. */ } TestCmdKind; typedef struct TestCmd diff --git a/src/bin/pgaftest/test_spec_parse.c b/src/bin/pgaftest/test_spec_parse.c index f03a7f1e8..1a1b355ac 100644 --- a/src/bin/pgaftest/test_spec_parse.c +++ b/src/bin/pgaftest/test_spec_parse.c @@ -141,46 +141,47 @@ T_AND = 330, T_IS = 331, T_WITH = 332, - T_ASSERT = 333, - T_SQL = 334, - T_EXPECT = 335, - T_ERROR = 336, - T_PROMOTE = 337, - T_PERFORM = 338, - T_FAILOVER = 339, - T_NETWORK = 340, - T_DISCONNECT = 341, - T_CONNECT = 342, - T_SLEEP = 343, - T_COMPOSE = 344, - T_DOWN = 345, - T_START = 346, - T_STOP = 347, - T_STOPPED = 348, - T_KILL = 349, - T_INJECT = 350, - T_STATE = 351, - T_ASSIGNED_STATE = 352, - T_IN = 353, - T_GROUP = 354, - T_LBRACE = 355, - T_RBRACE = 356, - T_COMMA = 357, - T_POSTGRES = 358, - T_STAYS = 359, - T_WHILE = 360, - T_THROUGH = 361, - T_SET = 362, - T_GET = 363, - T_LOGS = 364, - T_NOT = 365, - T_CONTAINS = 366, - T_MATCHES = 367, - T_INTEGER = 368, - T_IDENT = 369, - T_STRING = 370, - T_BLOCK = 371, - T_SHELL_ARGS = 372 + T_REPLAYS = 333, + T_ASSERT = 334, + T_SQL = 335, + T_EXPECT = 336, + T_ERROR = 337, + T_PROMOTE = 338, + T_PERFORM = 339, + T_FAILOVER = 340, + T_NETWORK = 341, + T_DISCONNECT = 342, + T_CONNECT = 343, + T_SLEEP = 344, + T_COMPOSE = 345, + T_DOWN = 346, + T_START = 347, + T_STOP = 348, + T_STOPPED = 349, + T_KILL = 350, + T_INJECT = 351, + T_STATE = 352, + T_ASSIGNED_STATE = 353, + T_IN = 354, + T_GROUP = 355, + T_LBRACE = 356, + T_RBRACE = 357, + T_COMMA = 358, + T_POSTGRES = 359, + T_STAYS = 360, + T_WHILE = 361, + T_THROUGH = 362, + T_SET = 363, + T_GET = 364, + T_LOGS = 365, + T_NOT = 366, + T_CONTAINS = 367, + T_MATCHES = 368, + T_INTEGER = 369, + T_IDENT = 370, + T_STRING = 371, + T_BLOCK = 372, + T_SHELL_ARGS = 373 }; #endif /* Tokens. */ @@ -259,46 +260,47 @@ #define T_AND 330 #define T_IS 331 #define T_WITH 332 -#define T_ASSERT 333 -#define T_SQL 334 -#define T_EXPECT 335 -#define T_ERROR 336 -#define T_PROMOTE 337 -#define T_PERFORM 338 -#define T_FAILOVER 339 -#define T_NETWORK 340 -#define T_DISCONNECT 341 -#define T_CONNECT 342 -#define T_SLEEP 343 -#define T_COMPOSE 344 -#define T_DOWN 345 -#define T_START 346 -#define T_STOP 347 -#define T_STOPPED 348 -#define T_KILL 349 -#define T_INJECT 350 -#define T_STATE 351 -#define T_ASSIGNED_STATE 352 -#define T_IN 353 -#define T_GROUP 354 -#define T_LBRACE 355 -#define T_RBRACE 356 -#define T_COMMA 357 -#define T_POSTGRES 358 -#define T_STAYS 359 -#define T_WHILE 360 -#define T_THROUGH 361 -#define T_SET 362 -#define T_GET 363 -#define T_LOGS 364 -#define T_NOT 365 -#define T_CONTAINS 366 -#define T_MATCHES 367 -#define T_INTEGER 368 -#define T_IDENT 369 -#define T_STRING 370 -#define T_BLOCK 371 -#define T_SHELL_ARGS 372 +#define T_REPLAYS 333 +#define T_ASSERT 334 +#define T_SQL 335 +#define T_EXPECT 336 +#define T_ERROR 337 +#define T_PROMOTE 338 +#define T_PERFORM 339 +#define T_FAILOVER 340 +#define T_NETWORK 341 +#define T_DISCONNECT 342 +#define T_CONNECT 343 +#define T_SLEEP 344 +#define T_COMPOSE 345 +#define T_DOWN 346 +#define T_START 347 +#define T_STOP 348 +#define T_STOPPED 349 +#define T_KILL 350 +#define T_INJECT 351 +#define T_STATE 352 +#define T_ASSIGNED_STATE 353 +#define T_IN 354 +#define T_GROUP 355 +#define T_LBRACE 356 +#define T_RBRACE 357 +#define T_COMMA 358 +#define T_POSTGRES 359 +#define T_STAYS 360 +#define T_WHILE 361 +#define T_THROUGH 362 +#define T_SET 363 +#define T_GET 364 +#define T_LOGS 365 +#define T_NOT 366 +#define T_CONTAINS 367 +#define T_MATCHES 368 +#define T_INTEGER 369 +#define T_IDENT 370 +#define T_STRING 371 +#define T_BLOCK 372 +#define T_SHELL_ARGS 373 @@ -477,7 +479,7 @@ typedef union YYSTYPE TestCmd *cmd; } /* Line 193 of yacc.c. */ -#line 481 "test_spec_parse.c" +#line 483 "test_spec_parse.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -490,7 +492,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 494 "test_spec_parse.c" +#line 496 "test_spec_parse.c" #ifdef short # undef short @@ -705,20 +707,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 21 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 609 +#define YYLAST 618 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 118 +#define YYNTOKENS 119 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 64 /* YYNRULES -- Number of rules. */ -#define YYNRULES 210 +#define YYNRULES 211 /* YYNRULES -- Number of states. */ -#define YYNSTATES 347 +#define YYNSTATES 350 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 372 +#define YYMAXUTOK 373 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -763,7 +765,7 @@ static const yytype_uint8 yytranslate[] = 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117 + 115, 116, 117, 118 }; #if YYDEBUG @@ -784,87 +786,87 @@ static const yytype_uint16 yyprhs[] = 271, 273, 275, 277, 279, 281, 283, 285, 287, 291, 294, 298, 301, 305, 308, 312, 315, 317, 319, 321, 326, 331, 333, 337, 338, 341, 343, 345, 349, 353, - 354, 364, 365, 375, 383, 391, 397, 403, 410, 412, - 414, 418, 422, 423, 426, 429, 434, 435, 438, 442, - 449, 456, 463, 470, 474, 477, 480, 484, 488, 491, - 493, 497, 500, 505, 511, 519, 523, 527, 533, 539, - 542, 545, 549, 553, 557, 562, 566, 570, 571, 577, - 583, 587, 592, 598, 603, 609, 612, 613, 616, 618, - 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, - 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, - 660 + 354, 364, 365, 375, 383, 391, 397, 404, 410, 417, + 419, 421, 425, 429, 430, 433, 436, 441, 442, 445, + 449, 456, 463, 470, 477, 481, 484, 487, 491, 495, + 498, 500, 504, 507, 512, 518, 526, 530, 534, 540, + 546, 549, 552, 556, 560, 564, 569, 573, 577, 578, + 584, 590, 594, 599, 605, 610, 616, 619, 620, 623, + 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, + 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, + 665, 667 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 119, 0, -1, 120, -1, 119, 120, -1, 121, -1, - 143, -1, 144, -1, 145, -1, 178, -1, -1, 3, - 100, 122, 123, 101, -1, -1, 123, 124, -1, 125, - -1, 126, -1, 128, -1, 129, -1, 127, -1, 130, - -1, 43, -1, 44, -1, 4, -1, 4, 39, 114, - -1, 4, 14, 114, -1, 4, 35, 113, -1, 4, - 36, 115, -1, 4, 114, 24, 26, -1, 4, 114, - 30, 93, -1, 4, 114, 24, 26, 36, 115, -1, - 13, 115, -1, 13, 114, -1, 42, 114, -1, 42, - 115, -1, 15, 114, -1, 16, 114, -1, 17, 114, - -1, -1, 18, 131, 132, 100, 135, 101, -1, -1, - 132, 134, -1, 114, -1, 115, -1, 16, -1, 4, - -1, 5, -1, 133, -1, 19, 113, -1, 55, 28, - -1, -1, 135, 138, -1, 114, -1, 4, -1, -1, - -1, 136, 137, 139, 141, -1, -1, 5, 114, 137, - 140, 100, 141, 101, -1, -1, 141, 142, -1, 20, + 120, 0, -1, 121, -1, 120, 121, -1, 122, -1, + 144, -1, 145, -1, 146, -1, 179, -1, -1, 3, + 101, 123, 124, 102, -1, -1, 124, 125, -1, 126, + -1, 127, -1, 129, -1, 130, -1, 128, -1, 131, + -1, 43, -1, 44, -1, 4, -1, 4, 39, 115, + -1, 4, 14, 115, -1, 4, 35, 114, -1, 4, + 36, 116, -1, 4, 115, 24, 26, -1, 4, 115, + 30, 94, -1, 4, 115, 24, 26, 36, 116, -1, + 13, 116, -1, 13, 115, -1, 42, 115, -1, 42, + 116, -1, 15, 115, -1, 16, 115, -1, 17, 115, + -1, -1, 18, 132, 133, 101, 136, 102, -1, -1, + 133, 135, -1, 115, -1, 116, -1, 16, -1, 4, + -1, 5, -1, 134, -1, 19, 114, -1, 55, 28, + -1, -1, 136, 139, -1, 115, -1, 4, -1, -1, + -1, 137, 138, 140, 142, -1, -1, 5, 115, 138, + 141, 101, 142, 102, -1, -1, 142, 143, -1, 20, -1, 21, -1, 22, -1, 23, -1, 26, -1, 24, 26, -1, 25, 26, -1, 25, 75, 24, 26, -1, 24, 27, -1, 27, -1, 32, -1, 33, -1, 34, - 113, -1, 45, 114, -1, 45, 115, -1, 99, 113, - -1, 35, 113, -1, 38, 114, -1, 39, 114, -1, - 15, 114, -1, 16, 114, -1, 17, 114, -1, 40, - 29, -1, 40, 28, -1, 41, 115, -1, 37, 115, - -1, 31, 114, 114, -1, 31, 114, 115, -1, 8, - 146, -1, 9, 146, -1, 10, 181, 146, -1, 100, - 147, 101, -1, -1, 147, 148, -1, 149, -1, 155, - -1, 162, -1, 163, -1, 164, -1, 165, -1, 167, - -1, 168, -1, 170, -1, 171, -1, 172, -1, 175, - -1, 176, -1, 177, -1, 169, -1, 68, 114, 117, - -1, 68, 114, -1, 69, 114, 117, -1, 69, 114, - -1, 70, 114, 117, -1, 70, 114, -1, 71, 114, - 117, -1, 71, 114, -1, 71, -1, 12, -1, 76, - -1, 114, 96, 150, 180, -1, 114, 96, 150, 114, - -1, 151, -1, 152, 75, 151, -1, -1, 106, 154, - -1, 180, -1, 114, -1, 154, 102, 180, -1, 154, - 102, 114, -1, -1, 72, 73, 114, 96, 150, 180, - 156, 153, 161, -1, -1, 72, 73, 114, 96, 150, - 114, 157, 153, 161, -1, 72, 73, 114, 97, 150, - 180, 161, -1, 72, 73, 114, 97, 150, 114, 161, - -1, 72, 73, 114, 93, 161, -1, 72, 73, 158, - 159, 161, -1, 72, 73, 151, 75, 152, 161, -1, - 180, -1, 114, -1, 158, 102, 180, -1, 158, 102, - 114, -1, -1, 98, 160, -1, 99, 113, -1, 160, - 102, 99, 113, -1, -1, 74, 113, -1, 77, 74, - 113, -1, 78, 114, 96, 150, 180, 161, -1, 78, - 114, 96, 150, 114, 161, -1, 78, 114, 97, 150, - 180, 161, -1, 78, 114, 97, 150, 114, 161, -1, - 79, 114, 116, -1, 80, 116, -1, 80, 81, -1, - 80, 81, 114, -1, 80, 81, 113, -1, 82, 166, - -1, 114, -1, 166, 102, 114, -1, 83, 84, -1, - 83, 84, 99, 113, -1, 83, 84, 98, 18, 114, - -1, 83, 84, 98, 18, 114, 99, 113, -1, 85, - 86, 114, -1, 85, 87, 114, -1, 46, 107, 114, - 114, 114, -1, 46, 108, 114, 114, 114, -1, 88, - 113, -1, 89, 90, -1, 89, 91, 114, -1, 89, - 92, 114, -1, 89, 94, 114, -1, 89, 95, 114, - 117, -1, 92, 103, 136, -1, 91, 103, 136, -1, - -1, 105, 174, 100, 147, 101, -1, 78, 136, 104, - 180, 173, -1, 107, 114, 114, -1, 109, 114, 111, - 115, -1, 109, 114, 110, 111, 115, -1, 109, 114, - 112, 115, -1, 109, 114, 110, 112, 115, -1, 11, - 179, -1, -1, 179, 181, -1, 47, -1, 48, -1, - 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, - 54, -1, 55, -1, 56, -1, 57, -1, 58, -1, - 59, -1, 60, -1, 61, -1, 62, -1, 63, -1, - 64, -1, 65, -1, 66, -1, 67, -1, 114, -1, - 115, -1 + 114, -1, 45, 115, -1, 45, 116, -1, 100, 114, + -1, 35, 114, -1, 38, 115, -1, 39, 115, -1, + 15, 115, -1, 16, 115, -1, 17, 115, -1, 40, + 29, -1, 40, 28, -1, 41, 116, -1, 37, 116, + -1, 31, 115, 115, -1, 31, 115, 116, -1, 8, + 147, -1, 9, 147, -1, 10, 182, 147, -1, 101, + 148, 102, -1, -1, 148, 149, -1, 150, -1, 156, + -1, 163, -1, 164, -1, 165, -1, 166, -1, 168, + -1, 169, -1, 171, -1, 172, -1, 173, -1, 176, + -1, 177, -1, 178, -1, 170, -1, 68, 115, 118, + -1, 68, 115, -1, 69, 115, 118, -1, 69, 115, + -1, 70, 115, 118, -1, 70, 115, -1, 71, 115, + 118, -1, 71, 115, -1, 71, -1, 12, -1, 76, + -1, 115, 97, 151, 181, -1, 115, 97, 151, 115, + -1, 152, -1, 153, 75, 152, -1, -1, 107, 155, + -1, 181, -1, 115, -1, 155, 103, 181, -1, 155, + 103, 115, -1, -1, 72, 73, 115, 97, 151, 181, + 157, 154, 162, -1, -1, 72, 73, 115, 97, 151, + 115, 158, 154, 162, -1, 72, 73, 115, 98, 151, + 181, 162, -1, 72, 73, 115, 98, 151, 115, 162, + -1, 72, 73, 115, 94, 162, -1, 72, 73, 115, + 78, 115, 162, -1, 72, 73, 159, 160, 162, -1, + 72, 73, 152, 75, 153, 162, -1, 181, -1, 115, + -1, 159, 103, 181, -1, 159, 103, 115, -1, -1, + 99, 161, -1, 100, 114, -1, 161, 103, 100, 114, + -1, -1, 74, 114, -1, 77, 74, 114, -1, 79, + 115, 97, 151, 181, 162, -1, 79, 115, 97, 151, + 115, 162, -1, 79, 115, 98, 151, 181, 162, -1, + 79, 115, 98, 151, 115, 162, -1, 80, 115, 117, + -1, 81, 117, -1, 81, 82, -1, 81, 82, 115, + -1, 81, 82, 114, -1, 83, 167, -1, 115, -1, + 167, 103, 115, -1, 84, 85, -1, 84, 85, 100, + 114, -1, 84, 85, 99, 18, 115, -1, 84, 85, + 99, 18, 115, 100, 114, -1, 86, 87, 115, -1, + 86, 88, 115, -1, 46, 108, 115, 115, 115, -1, + 46, 109, 115, 115, 115, -1, 89, 114, -1, 90, + 91, -1, 90, 92, 115, -1, 90, 93, 115, -1, + 90, 95, 115, -1, 90, 96, 115, 118, -1, 93, + 104, 137, -1, 92, 104, 137, -1, -1, 106, 175, + 101, 148, 102, -1, 79, 137, 105, 181, 174, -1, + 108, 115, 115, -1, 110, 115, 112, 116, -1, 110, + 115, 111, 112, 116, -1, 110, 115, 113, 116, -1, + 110, 115, 111, 113, 116, -1, 11, 180, -1, -1, + 180, 182, -1, 47, -1, 48, -1, 49, -1, 50, + -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, + -1, 56, -1, 57, -1, 58, -1, 59, -1, 60, + -1, 61, -1, 62, -1, 63, -1, 64, -1, 65, + -1, 66, -1, 67, -1, 115, -1, 116, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -883,15 +885,15 @@ static const yytype_uint16 yyrline[] = 733, 734, 735, 736, 737, 738, 739, 740, 754, 761, 767, 774, 780, 787, 793, 801, 807, 834, 834, 845, 860, 878, 879, 894, 896, 900, 908, 916, 923, 935, - 934, 946, 945, 956, 965, 974, 981, 995, 1010, 1016, - 1023, 1029, 1042, 1044, 1048, 1053, 1061, 1062, 1063, 1074, - 1082, 1090, 1098, 1116, 1131, 1138, 1142, 1148, 1161, 1169, - 1177, 1198, 1205, 1212, 1220, 1236, 1242, 1263, 1271, 1286, - 1300, 1304, 1310, 1316, 1342, 1376, 1382, 1399, 1399, 1404, - 1423, 1448, 1457, 1466, 1475, 1491, 1494, 1496, 1518, 1519, - 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, - 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1546, - 1547 + 934, 946, 945, 956, 965, 974, 988, 996, 1010, 1025, + 1031, 1038, 1044, 1057, 1059, 1063, 1068, 1076, 1077, 1078, + 1089, 1097, 1105, 1113, 1131, 1146, 1153, 1157, 1163, 1176, + 1184, 1192, 1213, 1220, 1227, 1235, 1251, 1257, 1278, 1286, + 1301, 1315, 1319, 1325, 1331, 1357, 1391, 1397, 1414, 1414, + 1419, 1438, 1463, 1472, 1481, 1490, 1506, 1509, 1511, 1533, + 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, + 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, + 1561, 1562 }; #endif @@ -918,15 +920,15 @@ static const char *const yytname[] = "T_FS_PREPARE_MAINTENANCE", "T_FS_WAIT_MAINTENANCE", "T_FS_REPORT_LSN", "T_FS_FAST_FORWARD", "T_FS_JOIN_SECONDARY", "T_FS_DROPPED", "T_EXEC", "T_EXEC_FAILS", "T_RUN", "T_PG_AUTOCTL", "T_WAIT", "T_UNTIL", - "T_TIMEOUT", "T_AND", "T_IS", "T_WITH", "T_ASSERT", "T_SQL", "T_EXPECT", - "T_ERROR", "T_PROMOTE", "T_PERFORM", "T_FAILOVER", "T_NETWORK", - "T_DISCONNECT", "T_CONNECT", "T_SLEEP", "T_COMPOSE", "T_DOWN", "T_START", - "T_STOP", "T_STOPPED", "T_KILL", "T_INJECT", "T_STATE", - "T_ASSIGNED_STATE", "T_IN", "T_GROUP", "T_LBRACE", "T_RBRACE", "T_COMMA", - "T_POSTGRES", "T_STAYS", "T_WHILE", "T_THROUGH", "T_SET", "T_GET", - "T_LOGS", "T_NOT", "T_CONTAINS", "T_MATCHES", "T_INTEGER", "T_IDENT", - "T_STRING", "T_BLOCK", "T_SHELL_ARGS", "$accept", "spec", "spec_item", - "cluster_block", "@1", "cluster_item_list", "cluster_item", + "T_TIMEOUT", "T_AND", "T_IS", "T_WITH", "T_REPLAYS", "T_ASSERT", "T_SQL", + "T_EXPECT", "T_ERROR", "T_PROMOTE", "T_PERFORM", "T_FAILOVER", + "T_NETWORK", "T_DISCONNECT", "T_CONNECT", "T_SLEEP", "T_COMPOSE", + "T_DOWN", "T_START", "T_STOP", "T_STOPPED", "T_KILL", "T_INJECT", + "T_STATE", "T_ASSIGNED_STATE", "T_IN", "T_GROUP", "T_LBRACE", "T_RBRACE", + "T_COMMA", "T_POSTGRES", "T_STAYS", "T_WHILE", "T_THROUGH", "T_SET", + "T_GET", "T_LOGS", "T_NOT", "T_CONTAINS", "T_MATCHES", "T_INTEGER", + "T_IDENT", "T_STRING", "T_BLOCK", "T_SHELL_ARGS", "$accept", "spec", + "spec_item", "cluster_block", "@1", "cluster_item_list", "cluster_item", "monitor_line", "image_line", "extension_version_line", "ssl_line", "auth_line", "formation_block", "@2", "formation_opt_list", "bare_name", "formation_opt", "node_list", "node_name", "init_node_slot", "node_line", @@ -959,35 +961,35 @@ static const yytype_uint16 yytoknum[] = 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372 + 365, 366, 367, 368, 369, 370, 371, 372, 373 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 118, 119, 119, 120, 120, 120, 120, 120, 122, - 121, 123, 123, 124, 124, 124, 124, 124, 124, 124, - 124, 125, 125, 125, 125, 125, 125, 125, 125, 126, - 126, 127, 127, 128, 129, 129, 131, 130, 132, 132, - 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, - 136, 136, 137, 139, 138, 140, 138, 141, 141, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 143, 144, 145, - 146, 147, 147, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 150, 150, 151, - 151, 152, 152, 153, 153, 154, 154, 154, 154, 156, - 155, 157, 155, 155, 155, 155, 155, 155, 158, 158, - 158, 158, 159, 159, 160, 160, 161, 161, 161, 162, - 162, 162, 162, 163, 164, 164, 164, 164, 165, 166, - 166, 167, 167, 167, 167, 168, 168, 169, 169, 170, - 171, 171, 171, 171, 171, 172, 172, 174, 173, 175, - 176, 177, 177, 177, 177, 178, 179, 179, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 181, - 181 + 0, 119, 120, 120, 121, 121, 121, 121, 121, 123, + 122, 124, 124, 125, 125, 125, 125, 125, 125, 125, + 125, 126, 126, 126, 126, 126, 126, 126, 126, 127, + 127, 128, 128, 129, 130, 130, 132, 131, 133, 133, + 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, + 137, 137, 138, 140, 139, 141, 139, 142, 142, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 144, 145, 146, + 147, 148, 148, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 151, 151, 152, + 152, 153, 153, 154, 154, 155, 155, 155, 155, 157, + 156, 158, 156, 156, 156, 156, 156, 156, 156, 159, + 159, 159, 159, 160, 160, 161, 161, 162, 162, 162, + 163, 163, 163, 163, 164, 165, 165, 165, 165, 166, + 167, 167, 168, 168, 168, 168, 169, 169, 170, 170, + 171, 172, 172, 172, 172, 172, 173, 173, 175, 174, + 176, 177, 178, 178, 178, 178, 179, 180, 180, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 182, 182 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1006,15 +1008,15 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 3, 2, 3, 2, 3, 2, 1, 1, 1, 4, 4, 1, 3, 0, 2, 1, 1, 3, 3, 0, - 9, 0, 9, 7, 7, 5, 5, 6, 1, 1, - 3, 3, 0, 2, 2, 4, 0, 2, 3, 6, - 6, 6, 6, 3, 2, 2, 3, 3, 2, 1, - 3, 2, 4, 5, 7, 3, 3, 5, 5, 2, - 2, 3, 3, 3, 4, 3, 3, 0, 5, 5, - 3, 4, 5, 4, 5, 2, 0, 2, 1, 1, + 9, 0, 9, 7, 7, 5, 6, 5, 6, 1, + 1, 3, 3, 0, 2, 2, 4, 0, 2, 3, + 6, 6, 6, 6, 3, 2, 2, 3, 3, 2, + 1, 3, 2, 4, 5, 7, 3, 3, 5, 5, + 2, 2, 3, 3, 3, 4, 3, 3, 0, 5, + 5, 3, 4, 5, 4, 5, 2, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1 + 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1022,107 +1024,107 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 0, 0, 0, 0, 186, 0, 2, 4, 5, - 6, 7, 8, 9, 91, 87, 88, 209, 210, 0, - 185, 1, 3, 11, 0, 89, 187, 0, 0, 0, + 0, 0, 0, 0, 0, 187, 0, 2, 4, 5, + 6, 7, 8, 9, 91, 87, 88, 210, 211, 0, + 186, 1, 3, 11, 0, 89, 188, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 92, 93, 94, 95, 96, 97, 98, 99, 100, 107, 101, 102, 103, 104, 105, 106, 21, 0, 0, 0, 0, 36, 0, 19, 20, 10, 12, 13, 14, 17, 15, 16, 18, 0, 0, 109, 111, 113, 115, 0, 51, 50, 0, - 0, 155, 154, 159, 158, 161, 0, 0, 169, 170, + 0, 156, 155, 160, 159, 162, 0, 0, 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 29, 33, 34, 35, 38, 31, - 32, 0, 0, 108, 110, 112, 114, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 139, 0, - 142, 138, 0, 0, 0, 153, 157, 156, 0, 0, - 0, 165, 166, 171, 172, 173, 0, 50, 176, 175, - 180, 0, 0, 0, 23, 24, 25, 22, 0, 0, - 0, 0, 0, 146, 0, 0, 0, 0, 0, 146, - 117, 118, 0, 0, 0, 160, 0, 162, 174, 0, - 0, 181, 183, 26, 27, 43, 44, 42, 0, 0, - 48, 40, 41, 45, 39, 167, 168, 0, 0, 135, - 0, 0, 0, 121, 146, 0, 143, 141, 140, 136, - 146, 146, 146, 146, 177, 179, 163, 182, 184, 0, - 46, 47, 0, 147, 0, 131, 129, 146, 146, 0, - 0, 137, 144, 0, 150, 149, 152, 151, 0, 0, - 28, 0, 37, 52, 49, 148, 123, 123, 134, 133, - 0, 122, 0, 91, 164, 52, 53, 0, 146, 146, - 120, 119, 145, 0, 55, 57, 126, 124, 125, 132, - 130, 178, 0, 54, 0, 57, 0, 0, 0, 59, - 60, 61, 62, 0, 0, 63, 68, 0, 69, 70, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, - 128, 127, 0, 78, 79, 80, 64, 67, 65, 0, - 0, 71, 75, 84, 76, 77, 82, 81, 83, 72, - 73, 74, 56, 0, 85, 86, 66 + 32, 0, 0, 108, 110, 112, 114, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 140, 0, + 143, 139, 0, 0, 0, 154, 158, 157, 0, 0, + 0, 166, 167, 172, 173, 174, 0, 50, 177, 176, + 181, 0, 0, 0, 23, 24, 25, 22, 0, 0, + 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, + 147, 117, 118, 0, 0, 0, 161, 0, 163, 175, + 0, 0, 182, 184, 26, 27, 43, 44, 42, 0, + 0, 48, 40, 41, 45, 39, 168, 169, 147, 0, + 0, 135, 0, 0, 0, 121, 147, 0, 144, 142, + 141, 137, 147, 147, 147, 147, 178, 180, 164, 183, + 185, 0, 46, 47, 0, 136, 148, 0, 131, 129, + 147, 147, 0, 0, 138, 145, 0, 151, 150, 153, + 152, 0, 0, 28, 0, 37, 52, 49, 149, 123, + 123, 134, 133, 0, 122, 0, 91, 165, 52, 53, + 0, 147, 147, 120, 119, 146, 0, 55, 57, 126, + 124, 125, 132, 130, 179, 0, 54, 0, 57, 0, + 0, 0, 59, 60, 61, 62, 0, 0, 63, 68, + 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 58, 128, 127, 0, 78, 79, 80, 64, + 67, 65, 0, 0, 71, 75, 84, 76, 77, 82, + 81, 83, 72, 73, 74, 56, 0, 85, 86, 66 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 6, 7, 8, 23, 27, 73, 74, 75, 76, - 77, 78, 79, 118, 180, 213, 214, 242, 89, 276, - 264, 285, 292, 293, 319, 9, 10, 11, 15, 24, - 47, 48, 192, 149, 224, 278, 287, 49, 267, 266, - 150, 189, 226, 219, 50, 51, 52, 53, 94, 54, - 55, 56, 57, 58, 59, 235, 258, 60, 61, 62, + 77, 78, 79, 118, 180, 214, 215, 244, 89, 279, + 267, 288, 295, 296, 322, 9, 10, 11, 15, 24, + 47, 48, 193, 149, 226, 281, 290, 49, 270, 269, + 150, 190, 228, 221, 50, 51, 52, 53, 94, 54, + 55, 56, 57, 58, 59, 237, 261, 60, 61, 62, 12, 20, 151, 19 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -174 +#define YYPACT_NINF -176 static const yytype_int16 yypact[] = { - 80, -81, -72, -72, -52, -174, 71, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -174, -174, -174, -72, - -52, -174, -174, -174, 432, -174, -174, 7, -15, -71, - -59, -57, -50, -40, 3, -27, -69, -16, 25, 8, - 11, -22, 16, 19, -174, 24, 32, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -174, -4, -18, 42, 53, 59, -174, -14, - -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - 67, 94, 93, 116, 117, 118, 136, -174, 15, 133, - 122, 52, -174, -174, 138, 5, 125, 127, -174, -174, - 128, 129, 130, 131, 4, 4, 132, -26, 134, 159, - 158, 135, 6, -174, -174, -174, -174, -174, -174, -174, - -174, 160, 161, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -174, -174, -51, 172, - -54, -174, 2, 2, 542, -174, -174, -174, 162, 259, - 188, -174, -174, -174, -174, -174, 185, -174, -174, -174, - -174, 9, 163, 189, -174, -174, -174, -174, 277, 212, - -1, 192, 193, -21, 2, 2, 194, 210, 165, -21, - -174, -174, 204, 233, 205, -174, 197, -174, -174, 198, - 199, -174, -174, 276, -174, -174, -174, -174, 202, 288, - -174, -174, -174, -174, -174, -174, -174, 227, 243, -174, - 272, 301, 245, -174, -48, 229, 241, -174, -174, -174, - -21, -21, -21, -21, -174, -174, 246, -174, -174, 231, - -174, -174, 1, -174, 256, 269, 295, -21, -21, 2, - 194, -174, -174, 273, -174, -174, -174, -174, 271, 260, - -174, 261, -174, -174, -174, -174, 268, 268, -174, -174, - 340, -174, 263, -174, -174, -174, -174, 369, -21, -21, - -174, -174, -174, 479, -174, -174, -174, 275, -174, -174, - -174, -174, 278, 137, 408, -174, 265, 266, 267, -174, - -174, -174, -174, 102, -10, -174, -174, 270, -174, -174, - 296, 297, 293, 298, 299, 151, 322, 90, 325, -174, - -174, -174, 110, -174, -174, -174, -174, -174, -174, 358, - 92, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -174, 357, -174, -174, -174 + 74, -87, -74, -74, -59, -176, 55, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -74, + -59, -176, -176, -176, 439, -176, -176, 6, -48, -81, + -68, -64, -36, -20, 3, -34, -65, -27, 11, 14, + -24, 2, -5, 7, -176, 27, 34, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -6, -11, 44, 61, 69, -176, -9, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + 99, 122, 9, 52, 120, 121, 139, -176, 15, 16, + 0, 10, -176, -176, 138, 32, 127, 128, -176, -176, + 129, 130, 131, 132, 5, 5, 133, -41, 134, 136, + 135, 137, 8, -176, -176, -176, -176, -176, -176, -176, + -176, 161, 162, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -52, 178, + -62, -176, 4, 4, 551, -176, -176, -176, 163, 261, + 166, -176, -176, -176, -176, -176, 164, -176, -176, -176, + -176, 56, 165, 167, -176, -176, -176, -176, 280, 213, + -1, 193, 194, 195, -49, 4, 4, 196, 212, 169, + -49, -176, -176, 208, 238, 207, -176, 199, -176, -176, + 200, 201, -176, -176, 279, -176, -176, -176, -176, 204, + 291, -176, -176, -176, -176, -176, -176, -176, -49, 206, + 247, -176, 277, 307, 225, -176, 12, 231, 243, -176, + -176, -176, -49, -49, -49, -49, -176, -176, 248, -176, + -176, 233, -176, -176, 1, -176, -176, 236, 272, 276, + -49, -49, 4, 196, -176, -176, 252, -176, -176, -176, + -176, 274, 262, -176, 263, -176, -176, -176, -176, 270, + 270, -176, -176, 346, -176, 265, -176, -176, -176, -176, + 376, -49, -49, -176, -176, -176, 487, -176, -176, -176, + 278, -176, -176, -176, -176, 281, 140, 415, -176, 268, + 269, 271, -176, -176, -176, -176, 156, -13, -176, -176, + 273, -176, -176, 266, 275, 298, 300, 301, 179, 302, + 94, 303, -176, -176, -176, 113, -176, -176, -176, -176, + -176, -176, 361, 96, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, 364, -176, -176, -176 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -174, -174, 379, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -174, -174, -103, 139, - -174, -174, -174, 144, -174, -174, -174, -174, 18, 167, - -174, -174, -144, -173, -174, 174, -174, -174, -174, -174, - -174, -174, -174, -172, -174, -174, -174, -174, -174, -174, - -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, - -174, -174, -154, 391 + -176, -176, 381, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -103, 141, + -176, -176, -176, 93, -176, -176, -176, -176, 17, 144, + -176, -176, -142, -175, -176, 151, -176, -176, -176, -176, + -176, -176, -176, -159, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -154, 424 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -1132,173 +1134,175 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -121 static const yytype_int16 yytable[] = { - 194, 168, 169, 205, 206, 87, 261, 87, 87, 193, - 108, 63, 91, 223, 190, 207, 328, 229, 208, 13, - 64, 16, 65, 66, 67, 68, 217, 250, 14, 218, - 178, 109, 110, 86, 228, 111, 179, 25, 231, 233, - 220, 221, 183, 82, 187, 184, 185, 92, 188, 69, - 70, 71, 251, 217, 209, 83, 218, 84, 254, 255, - 256, 257, 17, 18, 85, 329, 246, 248, 99, 100, - 101, 21, 102, 103, 1, 268, 269, 271, 191, 2, - 3, 4, 5, 1, 171, 172, 173, 90, 2, 3, - 4, 5, 80, 81, 96, 97, 113, 114, 93, 210, - 119, 120, 262, 159, 160, 270, 289, 290, 72, 95, - 112, 152, 153, 211, 212, 167, 281, 88, 167, 104, - 199, 200, 105, 288, 98, 296, 297, 298, 326, 327, - 299, 300, 301, 302, 303, 304, 305, 306, 106, 263, - 321, 307, 308, 309, 310, 311, 107, 312, 313, 314, - 315, 316, 296, 297, 298, 317, 115, 299, 300, 301, - 302, 303, 304, 305, 306, 156, 157, 116, 307, 308, - 309, 310, 311, 117, 312, 313, 314, 315, 316, 336, - 337, 121, 317, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 339, 340, 344, 345, 122, 318, - 123, 342, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 124, 125, 126, 318, 154, 155, 161, - 158, 162, 163, 164, 165, 166, 170, 186, 174, 177, - 148, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 175, 176, 181, 182, 195, 196, 201, 227, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 197, 198, 203, 202, 204, 215, 216, 222, 225, - 234, 236, 239, 237, 238, 240, 241, 244, 230, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 243, 249, 252, 253, -120, 259, 260, 232, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 265, - -119, 273, 272, 274, 277, 275, 282, 294, 295, 323, - 324, 325, 343, 346, 330, 22, 245, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 333, 331, - 332, 26, 334, 335, 284, 247, 127, 128, 129, 130, + 195, 168, 169, 206, 207, 87, 264, 87, 108, 87, + 63, 194, 225, 331, 13, 208, 191, 91, 209, 64, + 16, 65, 66, 67, 68, 219, 183, 14, 220, 109, + 110, 231, 178, 111, 82, 230, 25, 188, 179, 233, + 235, 189, 184, 222, 223, 185, 186, 83, 69, 70, + 71, 84, 92, 86, 210, 21, 17, 18, 1, 245, + 80, 81, 332, 2, 3, 4, 5, 254, 249, 251, + 171, 172, 173, 257, 258, 259, 260, 1, 274, 85, + 192, 90, 2, 3, 4, 5, 219, 253, 93, 220, + 98, 271, 272, 99, 100, 101, 95, 102, 103, 104, + 211, 96, 97, 265, 113, 114, 119, 120, 72, 112, + 273, 105, 152, 153, 212, 213, 167, 155, 88, 284, + 167, 154, 292, 293, 156, 157, 291, 123, 299, 300, + 301, 159, 160, 302, 303, 304, 305, 306, 307, 308, + 309, 266, 106, 324, 310, 311, 312, 313, 314, 107, + 315, 316, 317, 318, 319, 299, 300, 301, 320, 115, + 302, 303, 304, 305, 306, 307, 308, 309, 200, 201, + 124, 310, 311, 312, 313, 314, 116, 315, 316, 317, + 318, 319, 329, 330, 117, 320, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 338, 341, 322, - 283, 279, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 280, 127, 128, 129, 130, 131, + 141, 142, 143, 144, 145, 146, 147, 339, 340, 342, + 343, 347, 348, 321, 121, 345, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 122, 125, 126, + 321, 158, 161, 162, 163, 164, 165, 166, 170, 174, + 175, 176, 177, 187, 148, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 181, 182, 196, 197, + 198, 202, 199, 203, 229, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 0, 0, 28, 0, - 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, + 142, 143, 144, 145, 146, 147, 204, 205, 216, 217, + 218, 224, 227, 236, 238, 241, 239, 240, 242, 243, + 246, 247, 252, 232, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 255, 256, -120, 262, 263, + 268, -119, 275, 234, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 276, 277, 280, 278, 285, + 334, 297, 298, 326, 327, 346, 328, 22, 333, 335, + 349, 325, 248, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 336, 337, 338, 344, 341, 287, + 286, 282, 250, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, - 34, 35, 36, 0, 37, 38, 0, 39, 0, 0, - 40, 41, 320, 42, 43, 28, 0, 0, 0, 0, - 0, 0, 0, 44, 0, 0, 0, 0, 0, 45, - 0, 46, 0, 0, 0, 0, 0, 29, 30, 31, - 32, 33, 0, 0, 0, 0, 0, 34, 35, 36, - 0, 37, 38, 0, 39, 0, 0, 40, 41, 0, - 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, - 291, 0, 0, 0, 0, 0, 45, 0, 46, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147 + 0, 283, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 0, 0, 28, 0, 0, 0, 0, + 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, + 32, 33, 0, 0, 0, 0, 0, 0, 34, 35, + 36, 0, 37, 38, 0, 39, 0, 0, 40, 41, + 323, 42, 43, 28, 0, 0, 0, 0, 0, 0, + 0, 44, 0, 0, 0, 0, 0, 45, 0, 46, + 0, 0, 0, 0, 0, 29, 30, 31, 32, 33, + 0, 0, 0, 0, 0, 0, 34, 35, 36, 0, + 37, 38, 0, 39, 0, 0, 40, 41, 0, 42, + 43, 0, 0, 0, 0, 0, 0, 0, 0, 294, + 0, 0, 0, 0, 0, 45, 0, 46, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147 }; static const yytype_int16 yycheck[] = { - 154, 104, 105, 4, 5, 4, 5, 4, 4, 153, - 14, 4, 81, 186, 12, 16, 26, 189, 19, 100, - 13, 3, 15, 16, 17, 18, 74, 75, 100, 77, - 24, 35, 36, 73, 188, 39, 30, 19, 192, 193, - 184, 185, 93, 114, 98, 96, 97, 116, 102, 42, - 43, 44, 224, 74, 55, 114, 77, 114, 230, 231, - 232, 233, 114, 115, 114, 75, 220, 221, 90, 91, - 92, 0, 94, 95, 3, 247, 248, 250, 76, 8, - 9, 10, 11, 3, 110, 111, 112, 114, 8, 9, - 10, 11, 107, 108, 86, 87, 114, 115, 114, 100, - 114, 115, 101, 98, 99, 249, 278, 279, 101, 84, - 114, 96, 97, 114, 115, 114, 270, 114, 114, 103, - 111, 112, 103, 277, 113, 15, 16, 17, 26, 27, - 20, 21, 22, 23, 24, 25, 26, 27, 114, 242, - 294, 31, 32, 33, 34, 35, 114, 37, 38, 39, - 40, 41, 15, 16, 17, 45, 114, 20, 21, 22, - 23, 24, 25, 26, 27, 113, 114, 114, 31, 32, - 33, 34, 35, 114, 37, 38, 39, 40, 41, 28, - 29, 114, 45, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 114, 115, 114, 115, 114, 99, - 117, 101, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 117, 117, 117, 99, 104, 116, 114, - 102, 114, 114, 114, 114, 114, 114, 75, 114, 114, - 114, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 113, 115, 114, 114, 114, 18, 115, 114, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 113, 117, 26, 115, 93, 114, 114, 114, 99, - 105, 114, 36, 115, 115, 113, 28, 74, 114, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 113, 96, 113, 102, 75, 99, 115, 114, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 113, - 75, 100, 99, 113, 106, 114, 113, 102, 100, 114, - 114, 114, 24, 26, 114, 6, 114, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 115, 113, - 113, 20, 114, 114, 275, 114, 47, 48, 49, 50, + 154, 104, 105, 4, 5, 4, 5, 4, 14, 4, + 4, 153, 187, 26, 101, 16, 12, 82, 19, 13, + 3, 15, 16, 17, 18, 74, 78, 101, 77, 35, + 36, 190, 24, 39, 115, 189, 19, 99, 30, 193, + 194, 103, 94, 185, 186, 97, 98, 115, 42, 43, + 44, 115, 117, 73, 55, 0, 115, 116, 3, 218, + 108, 109, 75, 8, 9, 10, 11, 226, 222, 223, + 111, 112, 113, 232, 233, 234, 235, 3, 253, 115, + 76, 115, 8, 9, 10, 11, 74, 75, 115, 77, + 114, 250, 251, 91, 92, 93, 85, 95, 96, 104, + 101, 87, 88, 102, 115, 116, 115, 116, 102, 115, + 252, 104, 97, 98, 115, 116, 115, 117, 115, 273, + 115, 105, 281, 282, 114, 115, 280, 118, 15, 16, + 17, 99, 100, 20, 21, 22, 23, 24, 25, 26, + 27, 244, 115, 297, 31, 32, 33, 34, 35, 115, + 37, 38, 39, 40, 41, 15, 16, 17, 45, 115, + 20, 21, 22, 23, 24, 25, 26, 27, 112, 113, + 118, 31, 32, 33, 34, 35, 115, 37, 38, 39, + 40, 41, 26, 27, 115, 45, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 28, 29, 115, + 116, 115, 116, 100, 115, 102, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 115, 113, 295, - 273, 267, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 114, 47, 48, 49, 50, 51, + 61, 62, 63, 64, 65, 66, 67, 115, 118, 118, + 100, 103, 115, 115, 115, 115, 115, 115, 115, 115, + 114, 116, 115, 75, 115, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 115, 115, 115, 18, + 114, 116, 118, 116, 115, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, 46, -1, - -1, -1, -1, 114, -1, -1, -1, -1, -1, -1, + 62, 63, 64, 65, 66, 67, 26, 94, 115, 115, + 115, 115, 100, 106, 115, 36, 116, 116, 114, 28, + 114, 74, 97, 115, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 114, 103, 75, 100, 116, + 114, 75, 100, 115, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 101, 114, 107, 115, 114, + 114, 103, 101, 115, 115, 24, 115, 6, 115, 114, + 26, 298, 115, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 116, 115, 115, 114, 116, 278, + 276, 270, 115, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 68, 69, 70, 71, 72, -1, -1, -1, -1, -1, - 78, 79, 80, -1, 82, 83, -1, 85, -1, -1, - 88, 89, 114, 91, 92, 46, -1, -1, -1, -1, - -1, -1, -1, 101, -1, -1, -1, -1, -1, 107, - -1, 109, -1, -1, -1, -1, -1, 68, 69, 70, - 71, 72, -1, -1, -1, -1, -1, 78, 79, 80, - -1, 82, 83, -1, 85, -1, -1, 88, 89, -1, - 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, - 101, -1, -1, -1, -1, -1, 107, -1, 109, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67 + -1, 115, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, 46, -1, -1, -1, -1, + -1, 115, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 68, 69, 70, + 71, 72, -1, -1, -1, -1, -1, -1, 79, 80, + 81, -1, 83, 84, -1, 86, -1, -1, 89, 90, + 115, 92, 93, 46, -1, -1, -1, -1, -1, -1, + -1, 102, -1, -1, -1, -1, -1, 108, -1, 110, + -1, -1, -1, -1, -1, 68, 69, 70, 71, 72, + -1, -1, -1, -1, -1, -1, 79, 80, 81, -1, + 83, 84, -1, 86, -1, -1, 89, 90, -1, 92, + 93, -1, -1, -1, -1, -1, -1, -1, -1, 102, + -1, -1, -1, -1, -1, 108, -1, 110, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 3, 8, 9, 10, 11, 119, 120, 121, 143, - 144, 145, 178, 100, 100, 146, 146, 114, 115, 181, - 179, 0, 120, 122, 147, 146, 181, 123, 46, 68, - 69, 70, 71, 72, 78, 79, 80, 82, 83, 85, - 88, 89, 91, 92, 101, 107, 109, 148, 149, 155, - 162, 163, 164, 165, 167, 168, 169, 170, 171, 172, - 175, 176, 177, 4, 13, 15, 16, 17, 18, 42, - 43, 44, 101, 124, 125, 126, 127, 128, 129, 130, - 107, 108, 114, 114, 114, 114, 73, 4, 114, 136, - 114, 81, 116, 114, 166, 84, 86, 87, 113, 90, - 91, 92, 94, 95, 103, 103, 114, 114, 14, 35, - 36, 39, 114, 114, 115, 114, 114, 114, 131, 114, - 115, 114, 114, 117, 117, 117, 117, 47, 48, 49, + 0, 3, 8, 9, 10, 11, 120, 121, 122, 144, + 145, 146, 179, 101, 101, 147, 147, 115, 116, 182, + 180, 0, 121, 123, 148, 147, 182, 124, 46, 68, + 69, 70, 71, 72, 79, 80, 81, 83, 84, 86, + 89, 90, 92, 93, 102, 108, 110, 149, 150, 156, + 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, + 176, 177, 178, 4, 13, 15, 16, 17, 18, 42, + 43, 44, 102, 125, 126, 127, 128, 129, 130, 131, + 108, 109, 115, 115, 115, 115, 73, 4, 115, 137, + 115, 82, 117, 115, 167, 85, 87, 88, 114, 91, + 92, 93, 95, 96, 104, 104, 115, 115, 14, 35, + 36, 39, 115, 115, 116, 115, 115, 115, 132, 115, + 116, 115, 115, 118, 118, 118, 118, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 114, 151, - 158, 180, 96, 97, 104, 116, 113, 114, 102, 98, - 99, 114, 114, 114, 114, 114, 114, 114, 136, 136, - 114, 110, 111, 112, 114, 113, 115, 114, 24, 30, - 132, 114, 114, 93, 96, 97, 75, 98, 102, 159, - 12, 76, 150, 150, 180, 114, 18, 113, 117, 111, - 112, 115, 115, 26, 93, 4, 5, 16, 19, 55, - 100, 114, 115, 133, 134, 114, 114, 74, 77, 161, - 150, 150, 114, 151, 152, 99, 160, 114, 180, 161, - 114, 180, 114, 180, 105, 173, 114, 115, 115, 36, - 113, 28, 135, 113, 74, 114, 180, 114, 180, 96, - 75, 161, 113, 102, 161, 161, 161, 161, 174, 99, - 115, 5, 101, 136, 138, 113, 157, 156, 161, 161, - 150, 151, 99, 100, 113, 114, 137, 106, 153, 153, - 114, 180, 113, 147, 137, 139, 114, 154, 180, 161, - 161, 101, 140, 141, 102, 100, 15, 16, 17, 20, - 21, 22, 23, 24, 25, 26, 27, 31, 32, 33, - 34, 35, 37, 38, 39, 40, 41, 45, 99, 142, - 114, 180, 141, 114, 114, 114, 26, 27, 26, 75, - 114, 113, 113, 115, 114, 114, 28, 29, 115, 114, - 115, 113, 101, 24, 114, 115, 26 + 60, 61, 62, 63, 64, 65, 66, 67, 115, 152, + 159, 181, 97, 98, 105, 117, 114, 115, 103, 99, + 100, 115, 115, 115, 115, 115, 115, 115, 137, 137, + 115, 111, 112, 113, 115, 114, 116, 115, 24, 30, + 133, 115, 115, 78, 94, 97, 98, 75, 99, 103, + 160, 12, 76, 151, 151, 181, 115, 18, 114, 118, + 112, 113, 116, 116, 26, 94, 4, 5, 16, 19, + 55, 101, 115, 116, 134, 135, 115, 115, 115, 74, + 77, 162, 151, 151, 115, 152, 153, 100, 161, 115, + 181, 162, 115, 181, 115, 181, 106, 174, 115, 116, + 116, 36, 114, 28, 136, 162, 114, 74, 115, 181, + 115, 181, 97, 75, 162, 114, 103, 162, 162, 162, + 162, 175, 100, 116, 5, 102, 137, 139, 114, 158, + 157, 162, 162, 151, 152, 100, 101, 114, 115, 138, + 107, 154, 154, 115, 181, 114, 148, 138, 140, 115, + 155, 181, 162, 162, 102, 141, 142, 103, 101, 15, + 16, 17, 20, 21, 22, 23, 24, 25, 26, 27, + 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, + 45, 100, 143, 115, 181, 142, 115, 115, 115, 26, + 27, 26, 75, 115, 114, 114, 116, 115, 115, 28, + 29, 116, 115, 116, 114, 102, 24, 115, 116, 26 }; #define yyerrok (yyerrstatus = 0) @@ -2974,7 +2978,18 @@ yyparse () break; case 136: -#line 982 "test_spec_parse.y" +#line 989 "test_spec_parse.y" + { + (yyval.cmd) = make_cmd(CMD_WAIT_LSN); + strlcpy((yyval.cmd)->service, (yyvsp[(3) - (6)].str), sizeof((yyval.cmd)->service)); + strlcpy((yyval.cmd)->state, (yyvsp[(5) - (6)].str), sizeof((yyval.cmd)->state)); + (yyval.cmd)->timeoutSeconds = (yyvsp[(6) - (6)].ival); + free((yyvsp[(3) - (6)].str)); free((yyvsp[(5) - (6)].str)); + ;} + break; + + case 137: +#line 997 "test_spec_parse.y" { (yyval.cmd) = current_wait_cmd; (yyval.cmd)->timeoutSeconds = (yyvsp[(5) - (5)].ival); @@ -2982,8 +2997,8 @@ yyparse () ;} break; - case 137: -#line 996 "test_spec_parse.y" + case 138: +#line 1011 "test_spec_parse.y" { (yyval.cmd) = current_wait_cmd; (yyval.cmd)->timeoutSeconds = (yyvsp[(6) - (6)].ival); @@ -2991,8 +3006,8 @@ yyparse () ;} break; - case 138: -#line 1011 "test_spec_parse.y" + case 139: +#line 1026 "test_spec_parse.y" { current_wait_cmd = make_cmd(CMD_WAIT_STATES); strlcpy(current_wait_cmd->waitStates[current_wait_cmd->waitStateCount++], @@ -3000,8 +3015,8 @@ yyparse () ;} break; - case 139: -#line 1017 "test_spec_parse.y" + case 140: +#line 1032 "test_spec_parse.y" { current_wait_cmd = make_cmd(CMD_WAIT_STATES); strlcpy(current_wait_cmd->waitStates[current_wait_cmd->waitStateCount++], @@ -3010,8 +3025,8 @@ yyparse () ;} break; - case 140: -#line 1024 "test_spec_parse.y" + case 141: +#line 1039 "test_spec_parse.y" { if (current_wait_cmd->waitStateCount < PGAF_MAX_WAIT_STATES) strlcpy(current_wait_cmd->waitStates[current_wait_cmd->waitStateCount++], @@ -3019,8 +3034,8 @@ yyparse () ;} break; - case 141: -#line 1030 "test_spec_parse.y" + case 142: +#line 1045 "test_spec_parse.y" { if (current_wait_cmd->waitStateCount < PGAF_MAX_WAIT_STATES) strlcpy(current_wait_cmd->waitStates[current_wait_cmd->waitStateCount++], @@ -3029,39 +3044,39 @@ yyparse () ;} break; - case 144: -#line 1049 "test_spec_parse.y" + case 145: +#line 1064 "test_spec_parse.y" { if (current_wait_cmd->waitGroupCount < PGAF_MAX_WAIT_GROUPS) current_wait_cmd->waitGroups[current_wait_cmd->waitGroupCount++] = (yyvsp[(2) - (2)].ival); ;} break; - case 145: -#line 1054 "test_spec_parse.y" + case 146: +#line 1069 "test_spec_parse.y" { if (current_wait_cmd->waitGroupCount < PGAF_MAX_WAIT_GROUPS) current_wait_cmd->waitGroups[current_wait_cmd->waitGroupCount++] = (yyvsp[(4) - (4)].ival); ;} break; - case 146: -#line 1061 "test_spec_parse.y" + case 147: +#line 1076 "test_spec_parse.y" { (yyval.ival) = PGAF_TIMEOUT_DEFAULT; ;} break; - case 147: -#line 1062 "test_spec_parse.y" + case 148: +#line 1077 "test_spec_parse.y" { (yyval.ival) = (yyvsp[(2) - (2)].ival); ;} break; - case 148: -#line 1063 "test_spec_parse.y" + case 149: +#line 1078 "test_spec_parse.y" { (yyval.ival) = (yyvsp[(3) - (3)].ival); ;} break; - case 149: -#line 1075 "test_spec_parse.y" + case 150: +#line 1090 "test_spec_parse.y" { (yyval.cmd) = make_cmd((yyvsp[(6) - (6)].ival) > 0 ? CMD_WAIT_STATE : CMD_ASSERT_STATE); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (6)].str), sizeof((yyval.cmd)->service)); @@ -3071,8 +3086,8 @@ yyparse () ;} break; - case 150: -#line 1083 "test_spec_parse.y" + case 151: +#line 1098 "test_spec_parse.y" { (yyval.cmd) = make_cmd((yyvsp[(6) - (6)].ival) > 0 ? CMD_WAIT_STATE : CMD_ASSERT_STATE); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (6)].str), sizeof((yyval.cmd)->service)); @@ -3082,8 +3097,8 @@ yyparse () ;} break; - case 151: -#line 1091 "test_spec_parse.y" + case 152: +#line 1106 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_ASSERT_ASSIGNED); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (6)].str), sizeof((yyval.cmd)->service)); @@ -3093,8 +3108,8 @@ yyparse () ;} break; - case 152: -#line 1099 "test_spec_parse.y" + case 153: +#line 1114 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_ASSERT_ASSIGNED); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (6)].str), sizeof((yyval.cmd)->service)); @@ -3104,8 +3119,8 @@ yyparse () ;} break; - case 153: -#line 1117 "test_spec_parse.y" + case 154: +#line 1132 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_SQL); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3114,8 +3129,8 @@ yyparse () ;} break; - case 154: -#line 1132 "test_spec_parse.y" + case 155: +#line 1147 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_EXPECT); strlcpy((yyval.cmd)->expected, (yyvsp[(2) - (2)].str), sizeof((yyval.cmd)->expected)); @@ -3124,15 +3139,15 @@ yyparse () ;} break; - case 155: -#line 1139 "test_spec_parse.y" + case 156: +#line 1154 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_EXPECT_ERROR); ;} break; - case 156: -#line 1143 "test_spec_parse.y" + case 157: +#line 1158 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_EXPECT_ERROR); strlcpy((yyval.cmd)->state, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->state)); @@ -3140,8 +3155,8 @@ yyparse () ;} break; - case 157: -#line 1149 "test_spec_parse.y" + case 158: +#line 1164 "test_spec_parse.y" { /* SQLSTATE codes like 25006 are all digits, lexed as T_INTEGER */ (yyval.cmd) = make_cmd(CMD_EXPECT_ERROR); @@ -3149,16 +3164,16 @@ yyparse () ;} break; - case 158: -#line 1162 "test_spec_parse.y" + case 159: +#line 1177 "test_spec_parse.y" { (yyval.cmd) = current_promote_cmd; current_promote_cmd = NULL; ;} break; - case 159: -#line 1170 "test_spec_parse.y" + case 160: +#line 1185 "test_spec_parse.y" { current_promote_cmd = make_cmd(CMD_PROMOTE); current_promote_cmd->timeoutSeconds = PGAF_TIMEOUT_DEFAULT; @@ -3168,8 +3183,8 @@ yyparse () ;} break; - case 160: -#line 1178 "test_spec_parse.y" + case 161: +#line 1193 "test_spec_parse.y" { if (current_promote_cmd->promoteCount < PGAF_MAX_PROMOTE_NODES) strlcpy(current_promote_cmd->promoteNodes[current_promote_cmd->promoteCount++], @@ -3178,8 +3193,8 @@ yyparse () ;} break; - case 161: -#line 1199 "test_spec_parse.y" + case 162: +#line 1214 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_FAILOVER); strlcpy((yyval.cmd)->service, "default", sizeof((yyval.cmd)->service)); @@ -3188,8 +3203,8 @@ yyparse () ;} break; - case 162: -#line 1206 "test_spec_parse.y" + case 163: +#line 1221 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_FAILOVER); strlcpy((yyval.cmd)->service, "default", sizeof((yyval.cmd)->service)); @@ -3198,8 +3213,8 @@ yyparse () ;} break; - case 163: -#line 1213 "test_spec_parse.y" + case 164: +#line 1228 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_FAILOVER); strlcpy((yyval.cmd)->service, (yyvsp[(5) - (5)].str), sizeof((yyval.cmd)->service)); @@ -3209,8 +3224,8 @@ yyparse () ;} break; - case 164: -#line 1221 "test_spec_parse.y" + case 165: +#line 1236 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_FAILOVER); strlcpy((yyval.cmd)->service, (yyvsp[(5) - (7)].str), sizeof((yyval.cmd)->service)); @@ -3220,8 +3235,8 @@ yyparse () ;} break; - case 165: -#line 1237 "test_spec_parse.y" + case 166: +#line 1252 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_NETWORK_OFF); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3229,8 +3244,8 @@ yyparse () ;} break; - case 166: -#line 1243 "test_spec_parse.y" + case 167: +#line 1258 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_NETWORK_ON); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3238,8 +3253,8 @@ yyparse () ;} break; - case 167: -#line 1264 "test_spec_parse.y" + case 168: +#line 1279 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_NODEINI_SET); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (5)].str), sizeof((yyval.cmd)->service)); @@ -3249,8 +3264,8 @@ yyparse () ;} break; - case 168: -#line 1272 "test_spec_parse.y" + case 169: +#line 1287 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_NODEINI_GET); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (5)].str), sizeof((yyval.cmd)->service)); @@ -3260,23 +3275,23 @@ yyparse () ;} break; - case 169: -#line 1287 "test_spec_parse.y" + case 170: +#line 1302 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_SLEEP); (yyval.cmd)->timeoutSeconds = (yyvsp[(2) - (2)].ival); ;} break; - case 170: -#line 1301 "test_spec_parse.y" + case 171: +#line 1316 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_COMPOSE_DOWN); ;} break; - case 171: -#line 1305 "test_spec_parse.y" + case 172: +#line 1320 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_COMPOSE_START); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3284,8 +3299,8 @@ yyparse () ;} break; - case 172: -#line 1311 "test_spec_parse.y" + case 173: +#line 1326 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_COMPOSE_STOP); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3293,8 +3308,8 @@ yyparse () ;} break; - case 173: -#line 1317 "test_spec_parse.y" + case 174: +#line 1332 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_COMPOSE_KILL); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3302,8 +3317,8 @@ yyparse () ;} break; - case 174: -#line 1343 "test_spec_parse.y" + case 175: +#line 1358 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_COMPOSE_INJECT); strlcpy((yyval.cmd)->expected, (yyvsp[(3) - (4)].str), sizeof((yyval.cmd)->expected)); /* image */ @@ -3328,8 +3343,8 @@ yyparse () ;} break; - case 175: -#line 1377 "test_spec_parse.y" + case 176: +#line 1392 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_STOP_POSTGRES); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3337,8 +3352,8 @@ yyparse () ;} break; - case 176: -#line 1383 "test_spec_parse.y" + case 177: +#line 1398 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_START_POSTGRES); strlcpy((yyval.cmd)->service, (yyvsp[(3) - (3)].str), sizeof((yyval.cmd)->service)); @@ -3346,18 +3361,18 @@ yyparse () ;} break; - case 177: -#line 1399 "test_spec_parse.y" + case 178: +#line 1414 "test_spec_parse.y" { pgaf_next_brace_is_while = 1; ;} break; - case 178: -#line 1400 "test_spec_parse.y" + case 179: +#line 1415 "test_spec_parse.y" { (yyval.step) = (yyvsp[(4) - (5)].step); ;} break; - case 179: -#line 1405 "test_spec_parse.y" + case 180: +#line 1420 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_STAYS_WHILE); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (5)].str), sizeof((yyval.cmd)->service)); @@ -3367,8 +3382,8 @@ yyparse () ;} break; - case 180: -#line 1424 "test_spec_parse.y" + case 181: +#line 1439 "test_spec_parse.y" { /* only "set monitor " is supported; $2 must be "monitor" */ if (strcmp((yyvsp[(2) - (3)].str), "monitor") != 0) @@ -3383,8 +3398,8 @@ yyparse () ;} break; - case 181: -#line 1449 "test_spec_parse.y" + case 182: +#line 1464 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_LOGS_CHECK); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (4)].str), sizeof((yyval.cmd)->service)); @@ -3395,8 +3410,8 @@ yyparse () ;} break; - case 182: -#line 1458 "test_spec_parse.y" + case 183: +#line 1473 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_LOGS_CHECK); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (5)].str), sizeof((yyval.cmd)->service)); @@ -3407,8 +3422,8 @@ yyparse () ;} break; - case 183: -#line 1467 "test_spec_parse.y" + case 184: +#line 1482 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_LOGS_CHECK); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (4)].str), sizeof((yyval.cmd)->service)); @@ -3419,8 +3434,8 @@ yyparse () ;} break; - case 184: -#line 1476 "test_spec_parse.y" + case 185: +#line 1491 "test_spec_parse.y" { (yyval.cmd) = make_cmd(CMD_LOGS_CHECK); strlcpy((yyval.cmd)->service, (yyvsp[(2) - (5)].str), sizeof((yyval.cmd)->service)); @@ -3431,8 +3446,8 @@ yyparse () ;} break; - case 187: -#line 1497 "test_spec_parse.y" + case 188: +#line 1512 "test_spec_parse.y" { int i = current_spec->sequenceLength; if (i < PGAF_MAX_SEQ) @@ -3446,124 +3461,124 @@ yyparse () ;} break; - case 188: -#line 1518 "test_spec_parse.y" + case 189: +#line 1533 "test_spec_parse.y" { (yyval.str) = "init"; ;} break; - case 189: -#line 1519 "test_spec_parse.y" + case 190: +#line 1534 "test_spec_parse.y" { (yyval.str) = "single"; ;} break; - case 190: -#line 1520 "test_spec_parse.y" + case 191: +#line 1535 "test_spec_parse.y" { (yyval.str) = "primary"; ;} break; - case 191: -#line 1521 "test_spec_parse.y" + case 192: +#line 1536 "test_spec_parse.y" { (yyval.str) = "wait_primary"; ;} break; - case 192: -#line 1522 "test_spec_parse.y" + case 193: +#line 1537 "test_spec_parse.y" { (yyval.str) = "wait_standby"; ;} break; - case 193: -#line 1523 "test_spec_parse.y" + case 194: +#line 1538 "test_spec_parse.y" { (yyval.str) = "demoted"; ;} break; - case 194: -#line 1524 "test_spec_parse.y" + case 195: +#line 1539 "test_spec_parse.y" { (yyval.str) = "demote_timeout"; ;} break; - case 195: -#line 1525 "test_spec_parse.y" + case 196: +#line 1540 "test_spec_parse.y" { (yyval.str) = "draining"; ;} break; - case 196: -#line 1526 "test_spec_parse.y" + case 197: +#line 1541 "test_spec_parse.y" { (yyval.str) = "secondary"; ;} break; - case 197: -#line 1527 "test_spec_parse.y" + case 198: +#line 1542 "test_spec_parse.y" { (yyval.str) = "catchingup"; ;} break; - case 198: -#line 1528 "test_spec_parse.y" + case 199: +#line 1543 "test_spec_parse.y" { (yyval.str) = "prepare_promotion"; ;} break; - case 199: -#line 1529 "test_spec_parse.y" + case 200: +#line 1544 "test_spec_parse.y" { (yyval.str) = "stop_replication"; ;} break; - case 200: -#line 1530 "test_spec_parse.y" + case 201: +#line 1545 "test_spec_parse.y" { (yyval.str) = "maintenance"; ;} break; - case 201: -#line 1531 "test_spec_parse.y" + case 202: +#line 1546 "test_spec_parse.y" { (yyval.str) = "join_primary"; ;} break; - case 202: -#line 1532 "test_spec_parse.y" + case 203: +#line 1547 "test_spec_parse.y" { (yyval.str) = "apply_settings"; ;} break; - case 203: -#line 1533 "test_spec_parse.y" + case 204: +#line 1548 "test_spec_parse.y" { (yyval.str) = "prepare_maintenance"; ;} break; - case 204: -#line 1534 "test_spec_parse.y" + case 205: +#line 1549 "test_spec_parse.y" { (yyval.str) = "wait_maintenance"; ;} break; - case 205: -#line 1535 "test_spec_parse.y" + case 206: +#line 1550 "test_spec_parse.y" { (yyval.str) = "report_lsn"; ;} break; - case 206: -#line 1536 "test_spec_parse.y" + case 207: +#line 1551 "test_spec_parse.y" { (yyval.str) = "fast_forward"; ;} break; - case 207: -#line 1537 "test_spec_parse.y" + case 208: +#line 1552 "test_spec_parse.y" { (yyval.str) = "join_secondary"; ;} break; - case 208: -#line 1538 "test_spec_parse.y" + case 209: +#line 1553 "test_spec_parse.y" { (yyval.str) = "dropped"; ;} break; - case 209: -#line 1546 "test_spec_parse.y" + case 210: +#line 1561 "test_spec_parse.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 210: -#line 1547 "test_spec_parse.y" + case 211: +#line 1562 "test_spec_parse.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; /* Line 1267 of yacc.c. */ -#line 3567 "test_spec_parse.c" +#line 3582 "test_spec_parse.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -3777,7 +3792,7 @@ yyparse () } -#line 1550 "test_spec_parse.y" +#line 1565 "test_spec_parse.y" /* ----------------------------------------------------------------------- diff --git a/src/bin/pgaftest/test_spec_parse.h b/src/bin/pgaftest/test_spec_parse.h index 9a5acacc7..85c01a17b 100644 --- a/src/bin/pgaftest/test_spec_parse.h +++ b/src/bin/pgaftest/test_spec_parse.h @@ -114,46 +114,47 @@ T_AND = 330, T_IS = 331, T_WITH = 332, - T_ASSERT = 333, - T_SQL = 334, - T_EXPECT = 335, - T_ERROR = 336, - T_PROMOTE = 337, - T_PERFORM = 338, - T_FAILOVER = 339, - T_NETWORK = 340, - T_DISCONNECT = 341, - T_CONNECT = 342, - T_SLEEP = 343, - T_COMPOSE = 344, - T_DOWN = 345, - T_START = 346, - T_STOP = 347, - T_STOPPED = 348, - T_KILL = 349, - T_INJECT = 350, - T_STATE = 351, - T_ASSIGNED_STATE = 352, - T_IN = 353, - T_GROUP = 354, - T_LBRACE = 355, - T_RBRACE = 356, - T_COMMA = 357, - T_POSTGRES = 358, - T_STAYS = 359, - T_WHILE = 360, - T_THROUGH = 361, - T_SET = 362, - T_GET = 363, - T_LOGS = 364, - T_NOT = 365, - T_CONTAINS = 366, - T_MATCHES = 367, - T_INTEGER = 368, - T_IDENT = 369, - T_STRING = 370, - T_BLOCK = 371, - T_SHELL_ARGS = 372 + T_REPLAYS = 333, + T_ASSERT = 334, + T_SQL = 335, + T_EXPECT = 336, + T_ERROR = 337, + T_PROMOTE = 338, + T_PERFORM = 339, + T_FAILOVER = 340, + T_NETWORK = 341, + T_DISCONNECT = 342, + T_CONNECT = 343, + T_SLEEP = 344, + T_COMPOSE = 345, + T_DOWN = 346, + T_START = 347, + T_STOP = 348, + T_STOPPED = 349, + T_KILL = 350, + T_INJECT = 351, + T_STATE = 352, + T_ASSIGNED_STATE = 353, + T_IN = 354, + T_GROUP = 355, + T_LBRACE = 356, + T_RBRACE = 357, + T_COMMA = 358, + T_POSTGRES = 359, + T_STAYS = 360, + T_WHILE = 361, + T_THROUGH = 362, + T_SET = 363, + T_GET = 364, + T_LOGS = 365, + T_NOT = 366, + T_CONTAINS = 367, + T_MATCHES = 368, + T_INTEGER = 369, + T_IDENT = 370, + T_STRING = 371, + T_BLOCK = 372, + T_SHELL_ARGS = 373 }; #endif /* Tokens. */ @@ -232,46 +233,47 @@ #define T_AND 330 #define T_IS 331 #define T_WITH 332 -#define T_ASSERT 333 -#define T_SQL 334 -#define T_EXPECT 335 -#define T_ERROR 336 -#define T_PROMOTE 337 -#define T_PERFORM 338 -#define T_FAILOVER 339 -#define T_NETWORK 340 -#define T_DISCONNECT 341 -#define T_CONNECT 342 -#define T_SLEEP 343 -#define T_COMPOSE 344 -#define T_DOWN 345 -#define T_START 346 -#define T_STOP 347 -#define T_STOPPED 348 -#define T_KILL 349 -#define T_INJECT 350 -#define T_STATE 351 -#define T_ASSIGNED_STATE 352 -#define T_IN 353 -#define T_GROUP 354 -#define T_LBRACE 355 -#define T_RBRACE 356 -#define T_COMMA 357 -#define T_POSTGRES 358 -#define T_STAYS 359 -#define T_WHILE 360 -#define T_THROUGH 361 -#define T_SET 362 -#define T_GET 363 -#define T_LOGS 364 -#define T_NOT 365 -#define T_CONTAINS 366 -#define T_MATCHES 367 -#define T_INTEGER 368 -#define T_IDENT 369 -#define T_STRING 370 -#define T_BLOCK 371 -#define T_SHELL_ARGS 372 +#define T_REPLAYS 333 +#define T_ASSERT 334 +#define T_SQL 335 +#define T_EXPECT 336 +#define T_ERROR 337 +#define T_PROMOTE 338 +#define T_PERFORM 339 +#define T_FAILOVER 340 +#define T_NETWORK 341 +#define T_DISCONNECT 342 +#define T_CONNECT 343 +#define T_SLEEP 344 +#define T_COMPOSE 345 +#define T_DOWN 346 +#define T_START 347 +#define T_STOP 348 +#define T_STOPPED 349 +#define T_KILL 350 +#define T_INJECT 351 +#define T_STATE 352 +#define T_ASSIGNED_STATE 353 +#define T_IN 354 +#define T_GROUP 355 +#define T_LBRACE 356 +#define T_RBRACE 357 +#define T_COMMA 358 +#define T_POSTGRES 359 +#define T_STAYS 360 +#define T_WHILE 361 +#define T_THROUGH 362 +#define T_SET 363 +#define T_GET 364 +#define T_LOGS 365 +#define T_NOT 366 +#define T_CONTAINS 367 +#define T_MATCHES 368 +#define T_INTEGER 369 +#define T_IDENT 370 +#define T_STRING 371 +#define T_BLOCK 372 +#define T_SHELL_ARGS 373 @@ -286,7 +288,7 @@ typedef union YYSTYPE TestCmd *cmd; } /* Line 1529 of yacc.c. */ -#line 290 "test_spec_parse.h" +#line 292 "test_spec_parse.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/src/bin/pgaftest/test_spec_parse.y b/src/bin/pgaftest/test_spec_parse.y index 5956f4813..4479a2310 100644 --- a/src/bin/pgaftest/test_spec_parse.y +++ b/src/bin/pgaftest/test_spec_parse.y @@ -176,7 +176,7 @@ static TestNode *current_node = NULL; /* ---- Step-body tokens (used in STEP_BODY lex state) ---- */ %token T_EXEC T_EXEC_FAILS T_RUN T_PG_AUTOCTL -%token T_WAIT T_UNTIL T_TIMEOUT T_AND T_IS T_WITH +%token T_WAIT T_UNTIL T_TIMEOUT T_AND T_IS T_WITH T_REPLAYS %token T_ASSERT %token T_SQL T_EXPECT T_ERROR %token T_PROMOTE @@ -978,6 +978,21 @@ wait_cmd: $$->timeoutSeconds = $5; free($3); } + /* + * wait until node1 replays node2 timeout 90s + * + * Captures node2's current WAL LSN at the moment this command runs, then + * polls node1 until it has replayed at least that far -- avoids racing a + * write against replication catch-up right after a promotion/failover. + */ + | T_WAIT T_UNTIL T_IDENT T_REPLAYS T_IDENT opt_timeout + { + $$ = make_cmd(CMD_WAIT_LSN); + strlcpy($$->service, $3, sizeof($$->service)); + strlcpy($$->state, $5, sizeof($$->state)); + $$->timeoutSeconds = $6; + free($3); free($5); + } | T_WAIT T_UNTIL state_name_list opt_in_group opt_timeout { $$ = current_wait_cmd; diff --git a/src/bin/pgaftest/test_spec_scan.c b/src/bin/pgaftest/test_spec_scan.c index ab48f71a2..1332387f2 100644 --- a/src/bin/pgaftest/test_spec_scan.c +++ b/src/bin/pgaftest/test_spec_scan.c @@ -356,8 +356,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 159 -#define YY_END_OF_BUFFER 160 +#define YY_NUM_RULES 160 +#define YY_END_OF_BUFFER 161 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -365,144 +365,144 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[1236] = +static const flex_int16_t yy_accept[1240] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 160, 18, 17, 16, 18, 1, 12, 11, 13, 13, - 13, 13, 13, 13, 15, 159, 21, 20, 159, 19, + 161, 18, 17, 16, 18, 1, 12, 11, 13, 13, + 13, 13, 13, 13, 15, 160, 21, 20, 160, 19, 61, 60, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 63, 64, 101, 100, 159, 99, 136, 149, 135, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, - 152, 155, 154, 156, 157, 158, 17, 0, 14, 1, + 98, 63, 64, 101, 100, 160, 99, 137, 150, 136, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 152, + 153, 156, 155, 157, 158, 159, 17, 0, 14, 1, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 21, 0, 62, 19, 61, 61, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 101, 0, 150, 99, 149, 149, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 127, 133, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 155, 154, 157, 13, 13, 13, 13, 13, + 98, 98, 98, 98, 101, 0, 151, 99, 150, 150, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 128, 134, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 156, 155, 158, 13, 13, 13, 13, 13, 13, 13, 13, 43, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 25, 98, 98, 98, 98, 98, 132, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 143, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 146, 153, - 153, 153, 153, 153, 153, 153, 153, 104, 153, 142, - 153, 153, 110, 153, 153, 153, 153, 153, 153, 153, - - 153, 13, 13, 13, 4, 13, 13, 9, 13, 98, + 98, 98, 98, 25, 98, 98, 98, 98, 98, 133, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 144, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 147, 154, + 154, 154, 154, 154, 154, 154, 154, 104, 154, 143, + 154, 154, 111, 154, 154, 154, 154, 154, 154, 154, + + 154, 13, 13, 13, 4, 13, 13, 9, 13, 98, 98, 27, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 65, 98, 98, 98, 98, 98, 98, 98, 30, 98, 98, 52, 98, 98, 98, 98, 98, 98, 98, 98, - 42, 98, 98, 98, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 122, 153, 153, 153, 103, 153, - 153, 153, 153, 153, 65, 153, 153, 126, 145, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 124, 153, 153, - - 153, 106, 153, 134, 13, 13, 13, 13, 7, 13, - 98, 33, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 41, 98, 98, 98, 51, - 24, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 42, 98, 98, 98, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 123, 154, 154, 154, 103, 154, + 154, 154, 154, 154, 65, 154, 154, 127, 146, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 125, 154, + + 154, 154, 106, 154, 135, 13, 13, 13, 13, 7, + 13, 98, 33, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 41, 98, 98, 98, + 51, 24, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 112, - 153, 153, 153, 153, 153, 153, 131, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 119, 123, 128, 138, 153, 153, - - 153, 153, 153, 107, 153, 153, 139, 13, 13, 13, - 13, 13, 98, 98, 98, 98, 98, 98, 98, 98, - 38, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 37, 98, 47, - 98, 98, 98, 98, 98, 98, 98, 50, 98, 98, - 98, 66, 98, 98, 98, 46, 98, 98, 98, 98, - 98, 98, 32, 153, 153, 109, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 111, 153, 153, - 153, 153, 144, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - - 66, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 13, 13, 2, 3, 13, 13, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 113, 154, 154, 154, 154, 154, 154, 132, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 120, 124, 129, 139, + + 154, 154, 154, 154, 154, 107, 154, 154, 140, 13, + 13, 13, 13, 13, 98, 98, 98, 98, 98, 98, + 98, 98, 38, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 37, + 98, 47, 98, 98, 98, 98, 98, 98, 98, 50, + 98, 98, 98, 66, 98, 98, 98, 46, 98, 98, + 98, 98, 98, 98, 32, 154, 154, 110, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 112, + 154, 154, 154, 154, 145, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + + 154, 154, 154, 66, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 13, 13, 2, 3, 13, + 13, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 72, 98, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 72, 98, 97, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 22, 98, 98, - 98, 98, 67, 98, 98, 98, 98, 98, 98, 45, - 98, 98, 98, 98, 98, 98, 153, 153, 153, 153, - 153, 120, 118, 153, 153, 153, 72, 153, 153, 97, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 148, 116, 121, 153, 114, 153, 153, 153, 67, 113, - - 153, 153, 153, 153, 153, 125, 141, 108, 153, 153, - 153, 153, 153, 153, 13, 13, 10, 8, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 39, 98, - 98, 75, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 29, 35, 98, + 22, 98, 98, 98, 98, 67, 98, 98, 98, 98, + 98, 98, 45, 98, 98, 98, 98, 98, 98, 154, + 154, 154, 154, 154, 121, 119, 154, 154, 154, 72, + 154, 154, 97, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 149, 117, 122, 154, 115, 154, 154, + + 154, 67, 114, 108, 154, 154, 154, 154, 154, 126, + 142, 109, 154, 154, 154, 154, 154, 154, 13, 13, + 10, 8, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 39, 98, 98, 75, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 153, 153, 153, 153, 153, 147, 153, - 153, 153, 75, 153, 115, 153, 153, 153, 153, 153, - 153, 153, 153, 0, 153, 137, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 13, + 98, 29, 35, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 154, 154, 154, + 154, 154, 148, 154, 154, 154, 75, 154, 116, 154, + 154, 154, 154, 154, 154, 154, 154, 0, 154, 138, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 13, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 28, 98, 40, 44, + 154, 154, 154, 13, 13, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 76, 98, 98, 98, 98, - 98, 98, 98, 98, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 28, 153, 153, 153, 153, - 153, 0, 153, 153, 153, 153, 153, 153, 153, 76, - 153, 153, 153, 153, 153, 153, 153, 153, 13, 13, - 98, 98, 98, 98, 98, 77, 98, 98, 98, 98, + 28, 98, 40, 44, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 76, + 98, 98, 98, 98, 98, 98, 98, 98, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 28, + 154, 154, 154, 154, 154, 0, 154, 154, 154, 154, + 154, 154, 154, 76, 154, 154, 154, 154, 154, 154, + 154, 154, 13, 13, 98, 98, 98, 98, 98, 77, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 34, 98, 98, 98, 98, 98, 92, - 91, 98, 98, 98, 98, 98, 98, 98, 98, 153, - 153, 153, 153, 77, 153, 153, 117, 102, 153, 153, - 153, 153, 153, 153, 153, 0, 105, 153, 153, 153, - 153, 92, 91, 153, 153, 153, 153, 153, 153, 153, - 153, 13, 13, 98, 98, 26, 58, 98, 98, 98, - 31, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 82, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - - 82, 0, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 13, 6, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 94, 93, 23, 84, 98, - 83, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 69, 71, 98, 68, 70, 153, 153, 153, - 153, 153, 153, 94, 93, 84, 153, 83, 153, 0, - 153, 153, 153, 153, 153, 153, 153, 69, 71, 153, - 68, 70, 13, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 34, 98, 98, + 98, 98, 98, 92, 91, 98, 98, 98, 98, 98, + 98, 98, 98, 154, 154, 154, 154, 77, 154, 154, + 118, 102, 154, 154, 154, 154, 154, 154, 154, 0, + 105, 154, 154, 154, 154, 92, 91, 154, 154, 154, + 154, 154, 154, 154, 154, 13, 13, 98, 98, 26, + 58, 98, 98, 98, 31, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 82, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 153, 153, 153, 153, - - 153, 153, 153, 153, 0, 153, 153, 153, 153, 153, - 153, 153, 153, 13, 86, 85, 98, 98, 98, 54, - 74, 73, 98, 96, 95, 59, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 86, 85, 129, - 153, 74, 73, 96, 95, 0, 153, 153, 153, 153, - 153, 153, 153, 153, 13, 98, 98, 48, 98, 98, + 98, 98, 154, 154, 154, 154, 154, 154, 154, 154, + + 154, 154, 154, 154, 82, 0, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 13, 6, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 94, + 93, 23, 84, 98, 83, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 69, 71, 98, 68, + 70, 154, 154, 154, 154, 154, 154, 94, 93, 84, + 154, 83, 154, 0, 154, 154, 154, 154, 154, 154, + 154, 69, 71, 154, 68, 70, 13, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 153, 140, 153, 153, 153, 153, 153, 153, 153, 153, - 13, 98, 98, 98, 36, 98, 98, 98, 98, 98, - 98, 81, 80, 90, 89, 153, 153, 153, 153, 153, - - 81, 80, 90, 89, 5, 98, 98, 57, 98, 79, - 98, 78, 98, 98, 153, 153, 79, 153, 78, 49, - 53, 98, 98, 98, 55, 130, 153, 153, 88, 87, - 98, 88, 87, 56, 0 + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 154, 154, 154, 154, 154, 154, 154, 154, 0, 154, + 154, 154, 154, 154, 154, 154, 154, 13, 86, 85, + 98, 98, 98, 54, 74, 73, 98, 96, 95, 59, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 86, 85, 130, 154, 74, 73, 96, 95, 0, + 154, 154, 154, 154, 154, 154, 154, 154, 13, 98, + 98, 48, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 154, 141, 154, 154, 154, 154, + 154, 154, 154, 154, 13, 98, 98, 98, 36, 98, + 98, 98, 98, 98, 98, 81, 80, 90, 89, 154, + + 154, 154, 154, 154, 81, 80, 90, 89, 5, 98, + 98, 57, 98, 79, 98, 78, 98, 98, 154, 154, + 79, 154, 78, 49, 53, 98, 98, 98, 55, 131, + 154, 154, 88, 87, 98, 88, 87, 56, 0 } ; static const YY_CHAR yy_ec[256] = @@ -545,289 +545,291 @@ static const YY_CHAR yy_meta[41] = 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 } ; -static const flex_int16_t yy_base[1249] = +static const flex_int16_t yy_base[1253] = { 0, - 0, 0, 40, 0, 80, 0, 119, 121, 1328, 1327, - 1329, 1332, 123, 1332, 1323, 0, 117, 1332, 0, 106, - 1299, 1298, 112, 1307, 1332, 1332, 130, 1332, 1319, 0, - 124, 1332, 0, 108, 1301, 124, 123, 1285, 125, 1290, - 117, 1292, 143, 134, 130, 145, 1301, 145, 1287, 1289, - 146, 1332, 1332, 164, 1332, 1311, 0, 1332, 138, 1332, - 0, 152, 155, 164, 154, 161, 162, 167, 1287, 1292, - 1285, 1298, 169, 182, 154, 186, 184, 1284, 193, 1332, - 1332, 0, 1308, 1332, 0, 1332, 199, 1304, 1332, 0, - 200, 1332, 0, 1275, 1273, 1279, 1288, 187, 1286, 1289, - - 219, 1297, 1332, 0, 213, 1332, 0, 1284, 1271, 1261, - 1265, 1270, 191, 1263, 1267, 1276, 211, 213, 1260, 203, - 1261, 1263, 217, 1268, 1267, 1254, 1267, 1254, 1263, 1257, - 221, 1257, 1250, 1250, 218, 213, 1264, 1252, 1253, 1249, - 1242, 1250, 1252, 1242, 242, 1267, 1332, 0, 238, 1332, - 0, 1254, 1241, 1237, 221, 225, 1242, 1235, 1230, 225, - 1234, 231, 233, 1233, 1230, 1234, 234, 0, 1239, 1235, - 1239, 236, 1225, 242, 1225, 1225, 1242, 1222, 244, 1224, - 1225, 245, 1224, 1232, 1224, 249, 1217, 1221, 1213, 1223, - 1222, 1210, 0, 1240, 0, 1207, 1208, 1217, 1220, 1203, - - 1202, 1206, 1203, 0, 1208, 1205, 1210, 1213, 1212, 1212, - 1193, 1195, 1211, 1202, 1205, 1194, 1199, 1191, 1201, 1186, - 1184, 1190, 1181, 1194, 1195, 1179, 1184, 1183, 1195, 1175, - 1180, 1184, 1179, 1186, 1195, 1170, 1168, 1171, 1173, 1176, - 239, 1169, 1176, 0, 1166, 1176, 1159, 1159, 1167, 0, - 1165, 258, 1172, 1172, 1158, 241, 1158, 1169, 1157, 1161, - 1153, 1153, 1164, 1161, 1153, 1144, 1150, 0, 1141, 1141, - 1155, 1145, 1146, 1138, 1142, 1152, 1131, 1148, 0, 1133, - 1145, 1149, 1129, 1132, 1134, 1133, 1130, 0, 1129, 0, - 1136, 1137, 0, 248, 1125, 1125, 1134, 1129, 1117, 1124, - - 1127, 1115, 1113, 1112, 0, 1126, 1114, 0, 1125, 1103, - 1124, 1131, 1130, 1115, 1115, 1103, 1117, 1100, 1118, 1100, - 1097, 1102, 1099, 1100, 1108, 274, 1111, 1095, 1105, 1105, - 1099, 275, 1104, 1103, 1100, 1084, 1083, 1087, 0, 1082, - 1077, 0, 1098, 1097, 1082, 1087, 1077, 1080, 1081, 276, - 0, 1079, 277, 1086, 1065, 1071, 1081, 1078, 1078, 1070, - 1079, 1082, 1062, 1066, 0, 1066, 1063, 1060, 1082, 1073, - 1060, 283, 1073, 1057, 0, 1069, 284, 0, 0, 1051, - 1062, 1054, 1059, 1058, 1051, 1044, 1057, 1062, 1061, 1046, - 1042, 1045, 1046, 1041, 1036, 1050, 1035, 285, 1032, 1037, - - 1039, 286, 1045, 0, 1054, 1043, 1032, 1032, 0, 1030, - 287, 0, 1031, 1024, 1038, 1032, 1045, 1030, 1033, 1023, - 1018, 1030, 1025, 1028, 1013, 0, 1025, 1024, 1009, 0, - 1033, 1018, 1025, 272, 274, 1017, 999, 1009, 1017, 1006, - 1006, 994, 1003, 999, 998, 1001, 1011, 993, 1008, 1006, - 992, 991, 1003, 1002, 281, 283, 988, 303, 985, 990, - 999, 993, 982, 997, 990, 993, 983, 987, 990, 0, - 988, 973, 970, 985, 984, 969, 0, 968, 288, 289, - 982, 981, 967, 970, 969, 964, 961, 962, 961, 960, - 957, 956, 971, 969, 0, 0, 0, 0, 955, 954, - - 966, 963, 948, 0, 293, 297, 0, 135, 950, 949, - 963, 942, 945, 944, 957, 946, 959, 945, 292, 944, - 0, 962, 951, 319, 941, 950, 944, 937, 936, 941, - 929, 947, 935, 928, 940, 926, 938, 0, 947, 0, - 927, 922, 930, 924, 919, 931, 910, 0, 933, 320, - 932, 0, 927, 926, 926, 0, 928, 910, 907, 925, - 907, 904, 0, 904, 903, 0, 916, 919, 905, 913, - 897, 902, 322, 901, 900, 909, 911, 0, 906, 895, - 894, 899, 0, 889, 901, 887, 899, 889, 883, 890, - 891, 892, 885, 882, 891, 890, 869, 888, 329, 891, - - 0, 886, 885, 885, 880, 867, 885, 867, 864, 882, - 864, 861, 865, 864, 0, 0, 873, 863, 871, 870, - 854, 852, 852, 864, 858, 864, 867, 864, 862, 845, - 844, 0, 856, 0, 847, 843, 842, 844, 857, 837, - 844, 846, 851, 844, 849, 832, 849, 854, 828, 844, - 842, 330, 0, 825, 832, 831, 824, 825, 824, 0, - 830, 829, 836, 827, 826, 833, 828, 827, 827, 810, - 822, 0, 0, 809, 807, 806, 0, 820, 817, 0, - 814, 803, 799, 798, 162, 176, 218, 249, 257, 288, - 0, 0, 0, 342, 0, 315, 302, 339, 0, 0, - - 315, 316, 317, 320, 321, 0, 0, 0, 329, 331, - 340, 333, 334, 343, 330, 328, 0, 0, 327, 328, - 341, 332, 346, 331, 332, 351, 335, 344, 0, 348, - 349, 0, 345, 337, 338, 348, 345, 359, 340, 353, - 352, 355, 354, 350, 357, 356, 358, 0, 0, 361, - 362, 367, 360, 361, 356, 370, 371, 370, 372, 372, - 373, 375, 375, 370, 371, 397, 388, 373, 0, 386, - 387, 394, 0, 386, 0, 376, 377, 387, 389, 388, - 391, 390, 392, 418, 390, 0, 398, 399, 394, 397, - 392, 406, 407, 406, 408, 408, 409, 411, 411, 408, - - 416, 408, 409, 415, 428, 437, 417, 415, 420, 421, - 416, 426, 427, 446, 441, 442, 0, 437, 0, 0, - 444, 432, 446, 434, 448, 447, 450, 434, 452, 436, - 454, 438, 442, 444, 445, 0, 451, 452, 442, 462, - 460, 445, 465, 463, 448, 449, 451, 476, 456, 460, - 461, 455, 457, 476, 477, 0, 478, 466, 480, 468, - 480, 476, 473, 485, 469, 487, 471, 476, 477, 0, - 483, 484, 474, 494, 492, 477, 497, 495, 496, 496, - 493, 494, 500, 500, 490, 0, 487, 494, 491, 491, - 506, 507, 491, 496, 497, 511, 499, 514, 501, 516, - - 503, 517, 504, 0, 515, 510, 517, 512, 514, 0, - 0, 526, 527, 526, 514, 531, 529, 517, 534, 528, - 529, 519, 524, 0, 536, 537, 0, 0, 525, 526, - 527, 542, 529, 544, 544, 532, 0, 542, 537, 544, - 539, 0, 0, 552, 553, 552, 540, 557, 555, 543, - 560, 554, 546, 551, 552, 0, 0, 549, 563, 565, - 0, 550, 556, 557, 568, 570, 571, 556, 552, 577, - 554, 579, 561, 0, 563, 569, 571, 571, 573, 592, - 587, 588, 576, 566, 567, 579, 569, 570, 582, 583, - 597, 581, 585, 586, 598, 599, 579, 604, 581, 606, - - 0, 593, 595, 597, 597, 599, 612, 613, 601, 591, - 592, 604, 594, 595, 607, 0, 615, 616, 615, 607, - 625, 622, 607, 608, 612, 0, 0, 0, 0, 613, - 0, 614, 612, 611, 615, 621, 617, 623, 623, 621, - 622, 642, 0, 0, 643, 0, 0, 638, 639, 627, - 639, 628, 629, 0, 0, 0, 633, 0, 634, 632, - 634, 640, 636, 642, 638, 639, 659, 0, 0, 660, - 0, 0, 661, 644, 645, 650, 671, 649, 650, 649, - 650, 652, 647, 648, 658, 660, 671, 657, 673, 659, - 679, 660, 673, 674, 670, 671, 667, 668, 683, 674, - - 670, 671, 667, 668, 687, 690, 676, 692, 678, 690, - 691, 687, 688, 683, 0, 0, 686, 691, 681, 0, - 0, 0, 698, 0, 0, 0, 690, 695, 701, 697, - 703, 694, 699, 700, 701, 714, 715, 0, 0, 0, - 701, 0, 0, 0, 0, 712, 707, 713, 709, 715, - 710, 711, 724, 725, 714, 721, 730, 0, 717, 729, - 733, 720, 735, 722, 719, 721, 726, 727, 737, 738, - 735, 1332, 744, 731, 746, 733, 735, 736, 746, 747, - 735, 734, 742, 742, 0, 743, 744, 745, 746, 738, - 741, 0, 0, 0, 0, 743, 750, 751, 752, 753, - - 0, 0, 0, 0, 0, 743, 764, 0, 767, 0, - 768, 0, 757, 760, 749, 772, 0, 773, 0, 0, - 0, 772, 773, 761, 0, 0, 775, 776, 0, 0, - 778, 0, 0, 0, 1332, 795, 799, 803, 807, 806, - 811, 815, 814, 819, 823, 822, 827, 831 + 0, 0, 40, 0, 80, 0, 119, 121, 1332, 1331, + 1333, 1336, 123, 1336, 1327, 0, 117, 1336, 0, 106, + 1303, 1302, 112, 1311, 1336, 1336, 130, 1336, 1323, 0, + 124, 1336, 0, 108, 1305, 124, 123, 1289, 125, 1294, + 117, 1296, 143, 134, 130, 145, 1305, 145, 1291, 1293, + 146, 1336, 1336, 164, 1336, 1315, 0, 1336, 138, 1336, + 0, 152, 155, 164, 154, 161, 162, 167, 1291, 1296, + 1289, 1302, 169, 182, 154, 186, 184, 1288, 193, 1336, + 1336, 0, 1312, 1336, 0, 1336, 199, 1308, 1336, 0, + 200, 1336, 0, 1279, 1277, 1283, 1292, 187, 1290, 1293, + + 219, 1301, 1336, 0, 213, 1336, 0, 1288, 1275, 1265, + 1269, 1274, 191, 1267, 1271, 1280, 211, 213, 1264, 203, + 1265, 1267, 217, 1272, 1271, 1258, 1271, 1258, 1267, 1261, + 221, 1261, 1254, 1254, 218, 213, 1268, 1256, 1257, 1253, + 1246, 1254, 1256, 1246, 242, 1271, 1336, 0, 238, 1336, + 0, 1258, 1245, 1241, 221, 225, 1246, 1239, 1234, 225, + 1238, 231, 233, 1237, 1234, 1238, 234, 0, 1243, 1239, + 1243, 236, 1229, 242, 1229, 1229, 1246, 1226, 244, 1228, + 1229, 245, 1228, 1236, 1228, 249, 1221, 1225, 1217, 1227, + 1226, 1214, 0, 1244, 0, 1211, 1212, 1221, 1224, 1207, + + 1206, 1210, 1207, 0, 1212, 1209, 1214, 1217, 1216, 1216, + 1197, 1199, 1215, 1206, 1209, 1198, 1203, 1195, 1205, 1190, + 1188, 1194, 1185, 1198, 1199, 1183, 1188, 1187, 1199, 1179, + 1184, 1188, 1183, 1190, 1199, 1174, 1172, 1175, 1177, 1180, + 239, 1173, 1180, 0, 1170, 1180, 1163, 1163, 1171, 0, + 1169, 258, 1176, 1176, 1162, 241, 1162, 1173, 1161, 1165, + 1157, 1157, 1168, 1165, 1157, 1148, 1154, 0, 1145, 1145, + 1159, 1149, 1150, 1142, 1146, 1156, 1135, 1152, 0, 1137, + 1149, 1153, 1133, 1136, 1138, 1137, 254, 0, 1134, 0, + 1141, 1142, 0, 250, 1130, 1130, 1139, 1134, 1122, 1129, + + 1132, 1120, 1118, 1117, 0, 1131, 1119, 0, 1130, 1108, + 1129, 1136, 1135, 1120, 1120, 1108, 1122, 1105, 1123, 1105, + 1102, 1107, 1104, 1105, 1113, 276, 1116, 1100, 1110, 1110, + 1104, 277, 1109, 1108, 1105, 1089, 1088, 1092, 0, 1087, + 1082, 0, 1103, 1102, 1087, 1092, 1082, 1085, 1086, 278, + 0, 1084, 279, 1091, 1070, 1076, 1086, 1083, 1083, 1075, + 1084, 1087, 1067, 1071, 0, 1071, 1068, 1065, 1087, 1078, + 1065, 285, 1078, 1062, 0, 1074, 286, 0, 0, 1056, + 1067, 1059, 1064, 1063, 1056, 1049, 1062, 1067, 1066, 1051, + 1064, 1046, 1049, 1050, 1045, 1040, 1054, 1039, 287, 1036, + + 1041, 1043, 288, 1049, 0, 1058, 1047, 1036, 1036, 0, + 1034, 289, 0, 1035, 1028, 1042, 1036, 1049, 1034, 1037, + 1027, 1022, 1034, 1029, 1032, 1017, 0, 1029, 1028, 1013, + 0, 1037, 1022, 1029, 274, 276, 1021, 1003, 1013, 1021, + 1010, 1010, 998, 1007, 1003, 1002, 1005, 1015, 997, 1012, + 1010, 996, 995, 1007, 1006, 283, 285, 992, 305, 989, + 994, 1003, 997, 986, 1001, 994, 997, 987, 991, 994, + 0, 992, 977, 974, 989, 988, 973, 0, 972, 290, + 291, 986, 985, 971, 974, 973, 968, 965, 966, 965, + 964, 961, 955, 959, 974, 972, 0, 0, 0, 0, + + 958, 957, 969, 966, 951, 0, 295, 299, 0, 135, + 953, 952, 966, 945, 948, 947, 960, 949, 962, 948, + 294, 947, 0, 965, 954, 321, 944, 953, 947, 940, + 939, 944, 932, 950, 938, 931, 943, 929, 941, 0, + 950, 0, 930, 925, 933, 927, 922, 934, 913, 0, + 936, 322, 935, 0, 930, 929, 929, 0, 931, 913, + 910, 928, 910, 907, 0, 907, 906, 0, 919, 922, + 908, 916, 900, 905, 324, 904, 903, 912, 914, 0, + 909, 898, 897, 902, 0, 892, 904, 890, 902, 892, + 886, 893, 894, 895, 888, 885, 894, 893, 872, 891, + + 876, 331, 893, 0, 888, 887, 887, 882, 869, 887, + 869, 866, 884, 866, 863, 867, 866, 0, 0, 875, + 865, 873, 872, 856, 854, 854, 866, 860, 866, 869, + 866, 864, 847, 846, 0, 858, 0, 849, 845, 844, + 846, 859, 839, 846, 848, 853, 846, 851, 834, 851, + 856, 830, 846, 844, 332, 0, 827, 834, 833, 826, + 827, 826, 0, 832, 831, 838, 829, 828, 835, 830, + 829, 829, 812, 824, 0, 0, 811, 809, 808, 0, + 822, 818, 0, 812, 802, 159, 167, 206, 249, 257, + 282, 317, 322, 0, 0, 0, 344, 0, 326, 311, + + 341, 0, 0, 0, 325, 326, 321, 324, 326, 0, + 0, 0, 334, 335, 344, 337, 338, 347, 334, 332, + 0, 0, 331, 332, 345, 336, 350, 335, 336, 355, + 339, 348, 0, 352, 353, 0, 349, 341, 342, 352, + 349, 363, 344, 357, 356, 359, 358, 354, 361, 360, + 362, 0, 0, 365, 366, 371, 364, 365, 360, 374, + 375, 374, 376, 376, 377, 379, 379, 374, 375, 401, + 392, 377, 0, 390, 391, 398, 0, 390, 0, 380, + 381, 391, 393, 392, 395, 394, 396, 422, 394, 0, + 402, 403, 398, 401, 396, 410, 411, 410, 412, 412, + + 413, 415, 415, 412, 420, 412, 413, 419, 432, 441, + 421, 419, 424, 425, 420, 430, 431, 450, 445, 446, + 0, 441, 0, 0, 448, 436, 450, 438, 452, 451, + 454, 438, 456, 440, 458, 442, 446, 448, 449, 0, + 455, 456, 446, 466, 464, 449, 469, 467, 452, 453, + 455, 480, 460, 464, 465, 459, 461, 480, 481, 0, + 482, 470, 484, 472, 484, 480, 477, 489, 473, 491, + 475, 480, 481, 0, 487, 488, 478, 498, 496, 481, + 501, 499, 500, 500, 497, 498, 504, 504, 494, 0, + 491, 498, 495, 495, 510, 511, 495, 500, 501, 515, + + 503, 518, 505, 520, 507, 521, 508, 0, 519, 514, + 521, 516, 518, 0, 0, 530, 531, 530, 518, 535, + 533, 521, 538, 532, 533, 523, 528, 0, 540, 541, + 0, 0, 529, 530, 531, 546, 533, 548, 548, 536, + 0, 546, 541, 548, 543, 0, 0, 556, 557, 556, + 544, 561, 559, 547, 564, 558, 550, 555, 556, 0, + 0, 553, 567, 569, 0, 554, 560, 561, 572, 574, + 575, 560, 556, 581, 558, 583, 565, 0, 567, 573, + 575, 575, 577, 596, 591, 592, 580, 570, 571, 583, + 573, 574, 586, 587, 601, 585, 589, 590, 602, 603, + + 583, 608, 585, 610, 0, 597, 599, 601, 601, 603, + 616, 617, 605, 595, 596, 608, 598, 599, 611, 0, + 619, 620, 619, 611, 629, 626, 611, 612, 616, 0, + 0, 0, 0, 617, 0, 618, 616, 615, 619, 625, + 621, 627, 627, 625, 626, 646, 0, 0, 647, 0, + 0, 642, 643, 631, 643, 632, 633, 0, 0, 0, + 637, 0, 638, 636, 638, 644, 640, 646, 642, 643, + 663, 0, 0, 664, 0, 0, 665, 648, 649, 654, + 675, 653, 654, 653, 654, 656, 651, 652, 662, 664, + 675, 661, 677, 663, 683, 664, 677, 678, 674, 675, + + 671, 672, 687, 678, 674, 675, 671, 672, 691, 694, + 680, 696, 682, 694, 695, 691, 692, 687, 0, 0, + 690, 695, 685, 0, 0, 0, 702, 0, 0, 0, + 694, 699, 705, 701, 707, 698, 703, 704, 705, 718, + 719, 0, 0, 0, 705, 0, 0, 0, 0, 716, + 711, 717, 713, 719, 714, 715, 728, 729, 718, 725, + 734, 0, 721, 733, 737, 724, 739, 726, 723, 725, + 730, 731, 741, 742, 739, 1336, 748, 735, 750, 737, + 739, 740, 750, 751, 739, 738, 746, 746, 0, 747, + 748, 749, 750, 742, 745, 0, 0, 0, 0, 747, + + 754, 755, 756, 757, 0, 0, 0, 0, 0, 747, + 768, 0, 771, 0, 772, 0, 761, 764, 753, 776, + 0, 777, 0, 0, 0, 776, 777, 765, 0, 0, + 779, 780, 0, 0, 782, 0, 0, 0, 1336, 799, + 803, 807, 811, 810, 815, 819, 818, 823, 827, 826, + 831, 835 } ; -static const flex_int16_t yy_def[1249] = +static const flex_int16_t yy_def[1253] = { 0, - 1235, 1, 1235, 3, 1235, 5, 1236, 1236, 1237, 1237, - 1235, 1235, 1235, 1235, 1238, 1239, 1235, 1235, 1240, 1240, - 1240, 1240, 1240, 1240, 1235, 1235, 1235, 1235, 1241, 1242, - 1235, 1235, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1235, 1235, 1235, 1235, 1244, 1245, 1235, 1235, 1235, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1235, - 1235, 1247, 1235, 1235, 1248, 1235, 1235, 1238, 1235, 1239, - 1235, 1235, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - - 1235, 1241, 1235, 1242, 1235, 1235, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1235, 1244, 1235, 1245, 1235, 1235, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1247, 1235, 1248, 1240, 1240, 1240, 1240, 1240, - - 1240, 1240, 1240, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - - 1246, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - - 1246, 1246, 1246, 1246, 1240, 1240, 1240, 1240, 1240, 1240, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1240, 1240, 1240, - 1240, 1240, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1240, 1240, 1240, 1240, 1240, 1240, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1240, 1240, 1240, 1240, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1235, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1240, - - 1240, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1235, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1240, 1240, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1235, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1240, 1240, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - - 1246, 1235, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1240, 1240, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1235, - 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1240, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1246, 1246, 1246, 1246, - - 1246, 1246, 1246, 1246, 1235, 1246, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1240, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1246, 1235, 1246, 1246, 1246, 1246, - 1246, 1246, 1246, 1246, 1240, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1246, 1235, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, - 1240, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1243, 1246, 1246, 1246, 1246, 1246, - - 1246, 1246, 1246, 1246, 1240, 1243, 1243, 1243, 1243, 1243, - 1243, 1243, 1243, 1243, 1246, 1246, 1246, 1246, 1246, 1243, - 1243, 1243, 1243, 1243, 1243, 1246, 1246, 1246, 1243, 1243, - 1243, 1246, 1246, 1243, 0, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235 + 1239, 1, 1239, 3, 1239, 5, 1240, 1240, 1241, 1241, + 1239, 1239, 1239, 1239, 1242, 1243, 1239, 1239, 1244, 1244, + 1244, 1244, 1244, 1244, 1239, 1239, 1239, 1239, 1245, 1246, + 1239, 1239, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1239, 1239, 1239, 1239, 1248, 1249, 1239, 1239, 1239, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1239, + 1239, 1251, 1239, 1239, 1252, 1239, 1239, 1242, 1239, 1243, + 1239, 1239, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, + + 1239, 1245, 1239, 1246, 1239, 1239, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1239, 1248, 1239, 1249, 1239, 1239, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1251, 1239, 1252, 1244, 1244, 1244, 1244, 1244, + + 1244, 1244, 1244, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + + 1250, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + + 1250, 1250, 1250, 1250, 1250, 1244, 1244, 1244, 1244, 1244, + 1244, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1244, + 1244, 1244, 1244, 1244, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1244, 1244, 1244, 1244, 1244, + 1244, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1244, 1244, + 1244, 1244, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1239, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + + 1250, 1250, 1250, 1244, 1244, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1239, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1244, 1244, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1239, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1244, 1244, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + + 1250, 1250, 1250, 1250, 1250, 1239, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1244, 1244, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1239, 1250, 1250, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1244, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1239, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1244, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1239, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1244, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1250, 1239, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1244, 1247, 1247, 1247, 1247, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1250, + + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1244, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1250, 1250, + 1250, 1250, 1250, 1247, 1247, 1247, 1247, 1247, 1247, 1250, + 1250, 1250, 1247, 1247, 1247, 1250, 1250, 1247, 0, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239 } ; -static const flex_int16_t yy_nxt[1373] = +static const flex_int16_t yy_nxt[1377] = { 0, 12, 13, 14, 13, 15, 16, 12, 12, 17, 18, 19, 19, 19, 19, 19, 20, 19, 19, 19, 19, @@ -845,40 +847,40 @@ static const flex_int16_t yy_nxt[1373] = 83, 84, 83, 84, 87, 91, 87, 94, 92, 98, 95, 101, 105, 101, 108, 106, 109, 113, 120, 110, 117, 111, 123, 124, 99, 114, 149, 129, 92, 150, - 613, 115, 121, 118, 116, 106, 126, 131, 133, 143, + 616, 115, 121, 118, 116, 106, 126, 131, 133, 143, 127, 130, 137, 132, 128, 145, 138, 145, 155, 150, - 614, 180, 134, 144, 163, 135, 139, 140, 152, 165, - 153, 157, 156, 154, 161, 158, 173, 181, 164, 778, - 162, 159, 166, 167, 160, 175, 174, 779, 168, 176, + 617, 180, 134, 144, 163, 135, 139, 140, 152, 165, + 153, 157, 156, 154, 161, 158, 173, 181, 164, 780, + 162, 159, 166, 167, 160, 175, 174, 781, 168, 176, 87, 177, 87, 182, 187, 188, 190, 183, 91, 178, 184, 92, 179, 191, 192, 185, 200, 209, 186, 201, 101, 105, 101, 210, 106, 214, 217, 220, 233, 215, - 224, 92, 240, 780, 221, 238, 216, 234, 260, 239, + 224, 92, 240, 782, 221, 238, 216, 234, 260, 239, 218, 241, 225, 145, 106, 145, 149, 253, 263, 150, 255, 256, 261, 254, 265, 270, 271, 275, 278, 264, 289, 284, 294, 346, 266, 285, 347, 361, 276, 150, - 781, 286, 782, 362, 279, 356, 295, 290, 395, 357, - 396, 427, 434, 451, 455, 397, 428, 435, 452, 456, - 474, 479, 499, 505, 513, 475, 480, 500, 506, 514, - - 534, 783, 536, 535, 453, 537, 557, 625, 560, 558, - 564, 561, 559, 501, 562, 565, 584, 586, 607, 585, - 587, 608, 610, 626, 609, 611, 630, 655, 612, 675, - 785, 631, 656, 786, 676, 632, 701, 750, 677, 789, - 790, 702, 751, 784, 784, 784, 787, 791, 792, 793, - 794, 788, 795, 796, 797, 798, 799, 800, 801, 802, + 783, 286, 784, 362, 279, 356, 295, 290, 391, 357, + 396, 392, 397, 428, 435, 452, 456, 398, 429, 436, + 453, 457, 475, 480, 501, 507, 515, 476, 481, 502, + + 508, 516, 536, 785, 538, 537, 454, 539, 559, 628, + 562, 560, 566, 563, 561, 503, 564, 567, 586, 588, + 610, 587, 589, 611, 613, 629, 612, 614, 633, 658, + 615, 678, 786, 634, 659, 787, 679, 635, 705, 754, + 680, 789, 790, 706, 755, 788, 788, 788, 791, 793, + 794, 795, 796, 792, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, - 823, 824, 825, 826, 827, 828, 829, 831, 833, 830, - 832, 834, 835, 836, 837, 838, 839, 840, 841, 842, + 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 835, 837, 834, 836, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, - 853, 854, 855, 856, 857, 858, 859, 860, 861, 784, - 784, 784, 863, 864, 866, 868, 865, 867, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 788, 788, 788, 867, 868, 870, 872, + 869, 871, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 862, 891, 892, 893, 894, 895, 896, 897, 898, 899, + 891, 892, 893, 894, 866, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, @@ -915,74 +917,74 @@ static const flex_int16_t yy_nxt[1373] = 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, - 1230, 1231, 1232, 1233, 1234, 82, 82, 82, 82, 85, - - 85, 85, 85, 88, 88, 88, 88, 90, 90, 93, - 90, 102, 102, 102, 102, 104, 104, 107, 104, 146, - 146, 146, 146, 148, 148, 151, 148, 193, 777, 776, - 193, 195, 195, 775, 195, 774, 773, 772, 771, 770, - 769, 768, 767, 766, 765, 764, 763, 762, 761, 760, - 759, 758, 757, 756, 755, 754, 753, 752, 749, 748, - 747, 746, 745, 744, 743, 742, 741, 740, 739, 738, - 737, 736, 735, 734, 733, 732, 731, 730, 729, 728, - 727, 726, 725, 724, 723, 722, 721, 720, 719, 718, - 717, 716, 715, 714, 713, 712, 711, 710, 709, 708, - - 707, 706, 705, 704, 703, 700, 699, 698, 697, 696, - 695, 694, 693, 692, 691, 690, 689, 688, 687, 686, - 685, 684, 683, 682, 681, 680, 679, 678, 674, 673, - 672, 671, 670, 669, 668, 667, 666, 665, 664, 663, - 662, 661, 660, 659, 658, 657, 654, 653, 652, 651, - 650, 649, 648, 647, 646, 645, 644, 643, 642, 641, - 640, 639, 638, 637, 636, 635, 634, 633, 629, 628, - 627, 624, 623, 622, 621, 620, 619, 618, 617, 616, - 615, 606, 605, 604, 603, 602, 601, 600, 599, 598, - 597, 596, 595, 594, 593, 592, 591, 590, 589, 588, - - 583, 582, 581, 580, 579, 578, 577, 576, 575, 574, - 573, 572, 571, 570, 569, 568, 567, 566, 563, 556, - 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, - 545, 544, 543, 542, 541, 540, 539, 538, 533, 532, - 531, 530, 529, 528, 527, 526, 525, 524, 523, 522, - 521, 520, 519, 518, 517, 516, 515, 512, 511, 510, - 509, 508, 507, 504, 503, 502, 498, 497, 496, 495, - 494, 493, 492, 491, 490, 489, 488, 487, 486, 485, - 484, 483, 482, 481, 478, 477, 476, 473, 472, 471, - 470, 469, 468, 467, 466, 465, 464, 463, 462, 461, - - 460, 459, 458, 457, 454, 450, 449, 448, 447, 446, - 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, - 433, 432, 431, 430, 429, 426, 425, 424, 423, 422, - 421, 420, 419, 418, 417, 416, 415, 414, 413, 412, - 411, 410, 409, 408, 407, 406, 405, 404, 403, 402, - 401, 400, 399, 398, 394, 393, 392, 391, 390, 389, - 388, 387, 386, 385, 384, 383, 382, 381, 380, 379, - 378, 377, 376, 375, 374, 373, 372, 371, 370, 369, - 368, 367, 366, 365, 364, 363, 360, 359, 358, 355, - 354, 353, 352, 351, 350, 349, 348, 345, 344, 343, - - 342, 341, 340, 339, 338, 337, 336, 335, 334, 333, - 332, 331, 330, 329, 328, 327, 326, 325, 324, 323, - 322, 321, 320, 319, 318, 317, 316, 315, 314, 313, - 312, 311, 310, 309, 308, 307, 306, 305, 304, 303, - 302, 194, 301, 300, 299, 298, 297, 296, 293, 292, - 291, 288, 287, 283, 282, 281, 280, 277, 274, 273, - 272, 269, 268, 267, 262, 259, 258, 257, 252, 251, - 250, 147, 249, 248, 247, 246, 245, 244, 243, 242, - 237, 236, 235, 232, 231, 230, 229, 228, 227, 226, - 223, 222, 219, 213, 212, 211, 208, 207, 206, 205, - - 204, 103, 203, 202, 199, 198, 197, 196, 89, 194, - 189, 172, 171, 170, 169, 147, 142, 141, 136, 125, - 122, 119, 112, 103, 100, 97, 96, 89, 1235, 86, - 86, 11, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235 + 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 82, + + 82, 82, 82, 85, 85, 85, 85, 88, 88, 88, + 88, 90, 90, 93, 90, 102, 102, 102, 102, 104, + 104, 107, 104, 146, 146, 146, 146, 148, 148, 151, + 148, 193, 779, 778, 193, 195, 195, 777, 195, 776, + 775, 774, 773, 772, 771, 770, 769, 768, 767, 766, + 765, 764, 763, 762, 761, 760, 759, 758, 757, 756, + 753, 752, 751, 750, 749, 748, 747, 746, 745, 744, + 743, 742, 741, 740, 739, 738, 737, 736, 735, 734, + 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, + 723, 722, 721, 720, 719, 718, 717, 716, 715, 714, + + 713, 712, 711, 710, 709, 708, 707, 704, 703, 702, + 701, 700, 699, 698, 697, 696, 695, 694, 693, 692, + 691, 690, 689, 688, 687, 686, 685, 684, 683, 682, + 681, 677, 676, 675, 674, 673, 672, 671, 670, 669, + 668, 667, 666, 665, 664, 663, 662, 661, 660, 657, + 656, 655, 654, 653, 652, 651, 650, 649, 648, 647, + 646, 645, 644, 643, 642, 641, 640, 639, 638, 637, + 636, 632, 631, 630, 627, 626, 625, 624, 623, 622, + 621, 620, 619, 618, 609, 608, 607, 606, 605, 604, + 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, + + 593, 592, 591, 590, 585, 584, 583, 582, 581, 580, + 579, 578, 577, 576, 575, 574, 573, 572, 571, 570, + 569, 568, 565, 558, 557, 556, 555, 554, 553, 552, + 551, 550, 549, 548, 547, 546, 545, 544, 543, 542, + 541, 540, 535, 534, 533, 532, 531, 530, 529, 528, + 527, 526, 525, 524, 523, 522, 521, 520, 519, 518, + 517, 514, 513, 512, 511, 510, 509, 506, 505, 504, + 500, 499, 498, 497, 496, 495, 494, 493, 492, 491, + 490, 489, 488, 487, 486, 485, 484, 483, 482, 479, + 478, 477, 474, 473, 472, 471, 470, 469, 468, 467, + + 466, 465, 464, 463, 462, 461, 460, 459, 458, 455, + 451, 450, 449, 448, 447, 446, 445, 444, 443, 442, + 441, 440, 439, 438, 437, 434, 433, 432, 431, 430, + 427, 426, 425, 424, 423, 422, 421, 420, 419, 418, + 417, 416, 415, 414, 413, 412, 411, 410, 409, 408, + 407, 406, 405, 404, 403, 402, 401, 400, 399, 395, + 394, 393, 390, 389, 388, 387, 386, 385, 384, 383, + 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, + 372, 371, 370, 369, 368, 367, 366, 365, 364, 363, + 360, 359, 358, 355, 354, 353, 352, 351, 350, 349, + + 348, 345, 344, 343, 342, 341, 340, 339, 338, 337, + 336, 335, 334, 333, 332, 331, 330, 329, 328, 327, + 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, + 316, 315, 314, 313, 312, 311, 310, 309, 308, 307, + 306, 305, 304, 303, 302, 194, 301, 300, 299, 298, + 297, 296, 293, 292, 291, 288, 287, 283, 282, 281, + 280, 277, 274, 273, 272, 269, 268, 267, 262, 259, + 258, 257, 252, 251, 250, 147, 249, 248, 247, 246, + 245, 244, 243, 242, 237, 236, 235, 232, 231, 230, + 229, 228, 227, 226, 223, 222, 219, 213, 212, 211, + + 208, 207, 206, 205, 204, 103, 203, 202, 199, 198, + 197, 196, 89, 194, 189, 172, 171, 170, 169, 147, + 142, 141, 136, 125, 122, 119, 112, 103, 100, 97, + 96, 89, 1239, 86, 86, 11, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239 } ; -static const flex_int16_t yy_chk[1373] = +static const flex_int16_t yy_chk[1377] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1000,141 +1002,141 @@ static const flex_int16_t yy_chk[1373] = 7, 7, 8, 8, 13, 17, 13, 20, 17, 23, 20, 27, 31, 27, 34, 31, 34, 36, 39, 34, 37, 34, 41, 41, 23, 36, 59, 44, 17, 59, - 508, 36, 39, 37, 36, 31, 43, 45, 46, 51, + 510, 36, 39, 37, 36, 31, 43, 45, 46, 51, 43, 44, 48, 45, 43, 54, 48, 54, 63, 59, - 508, 75, 46, 51, 66, 46, 48, 48, 62, 67, - 62, 64, 63, 62, 65, 64, 73, 75, 66, 685, - 65, 64, 67, 68, 64, 74, 73, 686, 68, 74, + 510, 75, 46, 51, 66, 46, 48, 48, 62, 67, + 62, 64, 63, 62, 65, 64, 73, 75, 66, 686, + 65, 64, 67, 68, 64, 74, 73, 687, 68, 74, 87, 74, 87, 76, 77, 77, 79, 76, 91, 74, 76, 91, 74, 79, 79, 76, 98, 113, 76, 98, 101, 105, 101, 113, 105, 117, 118, 120, 131, 117, - 123, 91, 136, 687, 120, 135, 117, 131, 160, 135, + 123, 91, 136, 688, 120, 135, 117, 131, 160, 135, 118, 136, 123, 145, 105, 145, 149, 155, 162, 149, 156, 156, 160, 155, 163, 167, 167, 172, 174, 162, 182, 179, 186, 241, 163, 179, 241, 256, 172, 149, - 688, 179, 689, 256, 174, 252, 186, 182, 294, 252, - 294, 326, 332, 350, 353, 294, 326, 332, 350, 353, - 372, 377, 398, 402, 411, 372, 377, 398, 402, 411, - - 434, 690, 435, 434, 350, 435, 455, 519, 456, 455, - 458, 456, 455, 398, 456, 458, 479, 480, 505, 479, - 480, 505, 506, 519, 505, 506, 524, 550, 506, 573, - 696, 524, 550, 697, 573, 524, 599, 652, 573, 701, - 702, 599, 652, 694, 694, 694, 698, 703, 704, 705, - 709, 698, 710, 711, 712, 713, 714, 715, 716, 719, - 720, 721, 722, 723, 724, 725, 726, 727, 728, 730, - 731, 733, 734, 735, 736, 737, 738, 739, 740, 741, - 742, 743, 744, 745, 746, 747, 750, 751, 752, 750, - 751, 753, 754, 755, 756, 757, 758, 759, 760, 761, - - 762, 763, 764, 765, 766, 767, 768, 770, 771, 772, - 774, 776, 777, 778, 779, 780, 781, 782, 783, 784, - 784, 784, 785, 787, 788, 789, 787, 788, 790, 791, - 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, + 689, 179, 690, 256, 174, 252, 186, 182, 287, 252, + 294, 287, 294, 326, 332, 350, 353, 294, 326, 332, + 350, 353, 372, 377, 399, 403, 412, 372, 377, 399, + + 403, 412, 435, 691, 436, 435, 350, 436, 456, 521, + 457, 456, 459, 457, 456, 399, 457, 459, 480, 481, + 507, 480, 481, 507, 508, 521, 507, 508, 526, 552, + 508, 575, 692, 526, 552, 693, 575, 526, 602, 655, + 575, 699, 700, 602, 655, 697, 697, 697, 701, 705, + 706, 707, 708, 701, 709, 713, 714, 715, 716, 717, + 718, 719, 720, 723, 724, 725, 726, 727, 728, 729, + 730, 731, 732, 734, 735, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, + 754, 755, 756, 754, 755, 757, 758, 759, 760, 761, + + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 774, 775, 776, 778, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 788, 788, 789, 791, 792, 793, + 791, 792, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, - 784, 812, 813, 814, 815, 816, 818, 821, 822, 823, - 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, - 834, 835, 837, 838, 839, 840, 841, 842, 843, 844, + 812, 813, 814, 815, 788, 816, 817, 818, 819, 820, + 822, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 834, 835, 836, 837, 838, 839, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, - 855, 857, 858, 859, 860, 861, 862, 863, 864, 865, - - 866, 867, 868, 869, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 905, 906, 907, 908, - 909, 912, 913, 914, 915, 916, 917, 918, 919, 920, - 921, 922, 923, 925, 926, 929, 930, 931, 932, 933, - 934, 935, 936, 938, 939, 940, 941, 944, 945, 946, - 947, 948, 949, 950, 951, 952, 953, 954, 955, 958, - 959, 960, 962, 963, 964, 965, 966, 967, 968, 969, - 970, 971, 972, 973, 975, 976, 977, 978, 979, 980, + 855, 856, 857, 858, 859, 861, 862, 863, 864, 865, + + 866, 867, 868, 869, 870, 871, 872, 873, 875, 876, + 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, + 887, 888, 889, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, + 909, 910, 911, 912, 913, 916, 917, 918, 919, 920, + 921, 922, 923, 924, 925, 926, 927, 929, 930, 933, + 934, 935, 936, 937, 938, 939, 940, 942, 943, 944, + 945, 948, 949, 950, 951, 952, 953, 954, 955, 956, + 957, 958, 959, 962, 963, 964, 966, 967, 968, 969, + 970, 971, 972, 973, 974, 975, 976, 977, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, - 1012, 1013, 1014, 1015, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 1024, 1025, 1030, 1032, 1033, 1034, 1035, 1036, 1037, - 1038, 1039, 1039, 1040, 1041, 1042, 1045, 1048, 1049, 1050, - 1051, 1052, 1053, 1057, 1059, 1060, 1061, 1062, 1063, 1064, - 1065, 1066, 1067, 1070, 1073, 1074, 1075, 1076, 1077, 1078, + 1001, 1002, 1003, 1004, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1021, 1022, + 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1034, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1043, 1044, 1045, 1046, + 1049, 1052, 1053, 1054, 1055, 1056, 1057, 1061, 1063, 1064, + 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1074, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, - 1109, 1110, 1111, 1112, 1113, 1114, 1117, 1118, 1119, 1123, - 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, - 1137, 1141, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, - 1154, 1155, 1156, 1157, 1159, 1160, 1161, 1162, 1163, 1164, - 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1173, 1174, 1175, - 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1186, - 1187, 1188, 1189, 1190, 1191, 1196, 1197, 1198, 1199, 1200, - 1206, 1207, 1209, 1211, 1213, 1214, 1215, 1216, 1218, 1222, - 1223, 1224, 1227, 1228, 1231, 1236, 1236, 1236, 1236, 1237, - - 1237, 1237, 1237, 1238, 1238, 1238, 1238, 1239, 1239, 1240, - 1239, 1241, 1241, 1241, 1241, 1242, 1242, 1243, 1242, 1244, - 1244, 1244, 1244, 1245, 1245, 1246, 1245, 1247, 684, 683, - 1247, 1248, 1248, 682, 1248, 681, 679, 678, 676, 675, - 674, 671, 670, 669, 668, 667, 666, 665, 664, 663, - 662, 661, 659, 658, 657, 656, 655, 654, 651, 650, - 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, - 639, 638, 637, 636, 635, 633, 631, 630, 629, 628, - 627, 626, 625, 624, 623, 622, 621, 620, 619, 618, - 617, 614, 613, 612, 611, 610, 609, 608, 607, 606, - - 605, 604, 603, 602, 600, 598, 597, 596, 595, 594, - 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, - 582, 581, 580, 579, 577, 576, 575, 574, 572, 571, - 570, 569, 568, 567, 565, 564, 562, 561, 560, 559, - 558, 557, 555, 554, 553, 551, 549, 547, 546, 545, - 544, 543, 542, 541, 539, 537, 536, 535, 534, 533, - 532, 531, 530, 529, 528, 527, 526, 525, 523, 522, - 520, 518, 517, 516, 515, 514, 513, 512, 511, 510, - 509, 503, 502, 501, 500, 499, 494, 493, 492, 491, - 490, 489, 488, 487, 486, 485, 484, 483, 482, 481, - - 478, 476, 475, 474, 473, 472, 471, 469, 468, 467, - 466, 465, 464, 463, 462, 461, 460, 459, 457, 454, - 453, 452, 451, 450, 449, 448, 447, 446, 445, 444, - 443, 442, 441, 440, 439, 438, 437, 436, 433, 432, - 431, 429, 428, 427, 425, 424, 423, 422, 421, 420, - 419, 418, 417, 416, 415, 414, 413, 410, 408, 407, - 406, 405, 403, 401, 400, 399, 397, 396, 395, 394, - 393, 392, 391, 390, 389, 388, 387, 386, 385, 384, - 383, 382, 381, 380, 376, 374, 373, 371, 370, 369, - 368, 367, 366, 364, 363, 362, 361, 360, 359, 358, - - 357, 356, 355, 354, 352, 349, 348, 347, 346, 345, - 344, 343, 341, 340, 338, 337, 336, 335, 334, 333, - 331, 330, 329, 328, 327, 325, 324, 323, 322, 321, - 320, 319, 318, 317, 316, 315, 314, 313, 312, 311, - 310, 309, 307, 306, 304, 303, 302, 301, 300, 299, - 298, 297, 296, 295, 292, 291, 289, 287, 286, 285, - 284, 283, 282, 281, 280, 278, 277, 276, 275, 274, - 273, 272, 271, 270, 269, 267, 266, 265, 264, 263, - 262, 261, 260, 259, 258, 257, 255, 254, 253, 251, - 249, 248, 247, 246, 245, 243, 242, 240, 239, 238, - - 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, - 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, - 217, 216, 215, 214, 213, 212, 211, 210, 209, 208, - 207, 206, 205, 203, 202, 201, 200, 199, 198, 197, - 196, 194, 192, 191, 190, 189, 188, 187, 185, 184, - 183, 181, 180, 178, 177, 176, 175, 173, 171, 170, - 169, 166, 165, 164, 161, 159, 158, 157, 154, 153, - 152, 146, 144, 143, 142, 141, 140, 139, 138, 137, - 134, 133, 132, 130, 129, 128, 127, 126, 125, 124, - 122, 121, 119, 116, 115, 114, 112, 111, 110, 109, - - 108, 102, 100, 99, 97, 96, 95, 94, 88, 83, - 78, 72, 71, 70, 69, 56, 50, 49, 47, 42, - 40, 38, 35, 29, 24, 22, 21, 15, 11, 10, - 9, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235 + 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, + 1121, 1122, 1123, 1127, 1131, 1132, 1133, 1134, 1135, 1136, + 1137, 1138, 1139, 1140, 1141, 1145, 1150, 1151, 1152, 1153, + 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, + 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, + 1175, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, + 1186, 1187, 1188, 1190, 1191, 1192, 1193, 1194, 1195, 1200, + 1201, 1202, 1203, 1204, 1210, 1211, 1213, 1215, 1217, 1218, + 1219, 1220, 1222, 1226, 1227, 1228, 1231, 1232, 1235, 1240, + + 1240, 1240, 1240, 1241, 1241, 1241, 1241, 1242, 1242, 1242, + 1242, 1243, 1243, 1244, 1243, 1245, 1245, 1245, 1245, 1246, + 1246, 1247, 1246, 1248, 1248, 1248, 1248, 1249, 1249, 1250, + 1249, 1251, 685, 684, 1251, 1252, 1252, 682, 1252, 681, + 679, 678, 677, 674, 673, 672, 671, 670, 669, 668, + 667, 666, 665, 664, 662, 661, 660, 659, 658, 657, + 654, 653, 652, 651, 650, 649, 648, 647, 646, 645, + 644, 643, 642, 641, 640, 639, 638, 636, 634, 633, + 632, 631, 630, 629, 628, 627, 626, 625, 624, 623, + 622, 621, 620, 617, 616, 615, 614, 613, 612, 611, + + 610, 609, 608, 607, 606, 605, 603, 601, 600, 599, + 598, 597, 596, 595, 594, 593, 592, 591, 590, 589, + 588, 587, 586, 584, 583, 582, 581, 579, 578, 577, + 576, 574, 573, 572, 571, 570, 569, 567, 566, 564, + 563, 562, 561, 560, 559, 557, 556, 555, 553, 551, + 549, 548, 547, 546, 545, 544, 543, 541, 539, 538, + 537, 536, 535, 534, 533, 532, 531, 530, 529, 528, + 527, 525, 524, 522, 520, 519, 518, 517, 516, 515, + 514, 513, 512, 511, 505, 504, 503, 502, 501, 496, + 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, + + 485, 484, 483, 482, 479, 477, 476, 475, 474, 473, + 472, 470, 469, 468, 467, 466, 465, 464, 463, 462, + 461, 460, 458, 455, 454, 453, 452, 451, 450, 449, + 448, 447, 446, 445, 444, 443, 442, 441, 440, 439, + 438, 437, 434, 433, 432, 430, 429, 428, 426, 425, + 424, 423, 422, 421, 420, 419, 418, 417, 416, 415, + 414, 411, 409, 408, 407, 406, 404, 402, 401, 400, + 398, 397, 396, 395, 394, 393, 392, 391, 390, 389, + 388, 387, 386, 385, 384, 383, 382, 381, 380, 376, + 374, 373, 371, 370, 369, 368, 367, 366, 364, 363, + + 362, 361, 360, 359, 358, 357, 356, 355, 354, 352, + 349, 348, 347, 346, 345, 344, 343, 341, 340, 338, + 337, 336, 335, 334, 333, 331, 330, 329, 328, 327, + 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, + 315, 314, 313, 312, 311, 310, 309, 307, 306, 304, + 303, 302, 301, 300, 299, 298, 297, 296, 295, 292, + 291, 289, 286, 285, 284, 283, 282, 281, 280, 278, + 277, 276, 275, 274, 273, 272, 271, 270, 269, 267, + 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, + 255, 254, 253, 251, 249, 248, 247, 246, 245, 243, + + 242, 240, 239, 238, 237, 236, 235, 234, 233, 232, + 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, + 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, + 211, 210, 209, 208, 207, 206, 205, 203, 202, 201, + 200, 199, 198, 197, 196, 194, 192, 191, 190, 189, + 188, 187, 185, 184, 183, 181, 180, 178, 177, 176, + 175, 173, 171, 170, 169, 166, 165, 164, 161, 159, + 158, 157, 154, 153, 152, 146, 144, 143, 142, 141, + 140, 139, 138, 137, 134, 133, 132, 130, 129, 128, + 127, 126, 125, 124, 122, 121, 119, 116, 115, 114, + + 112, 111, 110, 109, 108, 102, 100, 99, 97, 96, + 95, 94, 88, 83, 78, 72, 71, 70, 69, 56, + 50, 49, 47, 42, 40, 38, 35, 29, 24, 22, + 21, 15, 11, 10, 9, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239 } ; static yy_state_type yy_last_accepting_state; @@ -1229,10 +1231,10 @@ static char *pgaf_strdup(const char *s) * call flex's static input() function. */ static void pgaf_read_raw_block(void); -#line 1232 "test_spec_scan.c" - #line 1234 "test_spec_scan.c" +#line 1236 "test_spec_scan.c" + #define INITIAL 0 #define CLUSTER_BODY 1 #define STEP_BODY 2 @@ -1453,7 +1455,7 @@ YY_DECL #line 89 "test_spec_scan.l" -#line 1456 "test_spec_scan.c" +#line 1458 "test_spec_scan.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1480,13 +1482,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1236 ) + if ( yy_current_state >= 1240 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 1235 ); + while ( yy_current_state != 1239 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2096,170 +2098,170 @@ YY_RULE_SETUP case 108: YY_RULE_SETUP #line 267 "test_spec_scan.l" -{ return T_TIMEOUT; } +{ return T_REPLAYS; } YY_BREAK case 109: YY_RULE_SETUP #line 268 "test_spec_scan.l" -{ return T_ASSERT; } +{ return T_TIMEOUT; } YY_BREAK case 110: YY_RULE_SETUP #line 269 "test_spec_scan.l" -{ return T_SQL; } +{ return T_ASSERT; } YY_BREAK case 111: YY_RULE_SETUP #line 270 "test_spec_scan.l" -{ return T_EXPECT; } +{ return T_SQL; } YY_BREAK case 112: YY_RULE_SETUP #line 271 "test_spec_scan.l" -{ return T_ERROR; } +{ return T_EXPECT; } YY_BREAK case 113: YY_RULE_SETUP #line 272 "test_spec_scan.l" -{ return T_PROMOTE; } +{ return T_ERROR; } YY_BREAK case 114: YY_RULE_SETUP #line 273 "test_spec_scan.l" -{ return T_PERFORM; } +{ return T_PROMOTE; } YY_BREAK case 115: YY_RULE_SETUP #line 274 "test_spec_scan.l" -{ return T_FAILOVER; } +{ return T_PERFORM; } YY_BREAK case 116: YY_RULE_SETUP #line 275 "test_spec_scan.l" -{ return T_NETWORK; } +{ return T_FAILOVER; } YY_BREAK case 117: YY_RULE_SETUP #line 276 "test_spec_scan.l" -{ return T_DISCONNECT; } +{ return T_NETWORK; } YY_BREAK case 118: YY_RULE_SETUP #line 277 "test_spec_scan.l" -{ return T_CONNECT; } +{ return T_DISCONNECT; } YY_BREAK case 119: YY_RULE_SETUP #line 278 "test_spec_scan.l" -{ return T_SLEEP; } +{ return T_CONNECT; } YY_BREAK case 120: YY_RULE_SETUP #line 279 "test_spec_scan.l" -{ return T_COMPOSE; } +{ return T_SLEEP; } YY_BREAK case 121: YY_RULE_SETUP #line 280 "test_spec_scan.l" -{ return T_NODEINI; } +{ return T_COMPOSE; } YY_BREAK case 122: YY_RULE_SETUP #line 281 "test_spec_scan.l" -{ return T_DOWN; } +{ return T_NODEINI; } YY_BREAK case 123: YY_RULE_SETUP #line 282 "test_spec_scan.l" -{ return T_START; } +{ return T_DOWN; } YY_BREAK case 124: YY_RULE_SETUP #line 283 "test_spec_scan.l" -{ return T_STOP; } +{ return T_START; } YY_BREAK case 125: YY_RULE_SETUP #line 284 "test_spec_scan.l" -{ return T_STOPPED; } +{ return T_STOP; } YY_BREAK case 126: YY_RULE_SETUP #line 285 "test_spec_scan.l" -{ return T_KILL; } +{ return T_STOPPED; } YY_BREAK case 127: YY_RULE_SETUP #line 286 "test_spec_scan.l" -{ return T_IN; } +{ return T_KILL; } YY_BREAK case 128: YY_RULE_SETUP #line 287 "test_spec_scan.l" -{ return T_STATE; } +{ return T_IN; } YY_BREAK case 129: YY_RULE_SETUP #line 288 "test_spec_scan.l" -{ return T_ASSIGNED_STATE; } +{ return T_STATE; } YY_BREAK case 130: YY_RULE_SETUP #line 289 "test_spec_scan.l" -{ return T_CANDIDATE_PRIORITY; } +{ return T_ASSIGNED_STATE; } YY_BREAK case 131: YY_RULE_SETUP #line 290 "test_spec_scan.l" -{ return T_GROUP; } +{ return T_CANDIDATE_PRIORITY; } YY_BREAK case 132: YY_RULE_SETUP #line 291 "test_spec_scan.l" -{ return T_AND; } +{ return T_GROUP; } YY_BREAK case 133: YY_RULE_SETUP #line 292 "test_spec_scan.l" -{ return T_IS; } +{ return T_AND; } YY_BREAK case 134: YY_RULE_SETUP #line 293 "test_spec_scan.l" -{ return T_WITH; } +{ return T_IS; } YY_BREAK case 135: YY_RULE_SETUP #line 294 "test_spec_scan.l" -{ return T_EQUALS; } +{ return T_WITH; } YY_BREAK case 136: YY_RULE_SETUP #line 295 "test_spec_scan.l" -{ return T_COMMA; } +{ return T_EQUALS; } YY_BREAK case 137: YY_RULE_SETUP #line 296 "test_spec_scan.l" -{ return T_POSTGRES; } +{ return T_COMMA; } YY_BREAK case 138: YY_RULE_SETUP #line 297 "test_spec_scan.l" -{ return T_STAYS; } +{ return T_POSTGRES; } YY_BREAK case 139: YY_RULE_SETUP #line 298 "test_spec_scan.l" -{ return T_WHILE; } +{ return T_STAYS; } YY_BREAK case 140: -/* rule 140 can match eol */ YY_RULE_SETUP #line 299 "test_spec_scan.l" -{ return T_THROUGH; } +{ return T_WHILE; } YY_BREAK case 141: +/* rule 141 can match eol */ YY_RULE_SETUP #line 300 "test_spec_scan.l" { return T_THROUGH; } @@ -2267,59 +2269,64 @@ YY_RULE_SETUP case 142: YY_RULE_SETUP #line 301 "test_spec_scan.l" -{ return T_SET; } +{ return T_THROUGH; } YY_BREAK case 143: YY_RULE_SETUP #line 302 "test_spec_scan.l" -{ return T_GET; } +{ return T_SET; } YY_BREAK case 144: YY_RULE_SETUP #line 303 "test_spec_scan.l" -{ BEGIN(EXEC_ARGS); return T_INJECT; } +{ return T_GET; } YY_BREAK case 145: YY_RULE_SETUP #line 304 "test_spec_scan.l" -{ return T_LOGS; } +{ BEGIN(EXEC_ARGS); return T_INJECT; } YY_BREAK case 146: YY_RULE_SETUP #line 305 "test_spec_scan.l" -{ return T_NOT; } +{ return T_LOGS; } YY_BREAK case 147: YY_RULE_SETUP #line 306 "test_spec_scan.l" -{ return T_CONTAINS; } +{ return T_NOT; } YY_BREAK case 148: YY_RULE_SETUP #line 307 "test_spec_scan.l" -{ return T_MATCHES; } +{ return T_CONTAINS; } YY_BREAK case 149: YY_RULE_SETUP -#line 309 "test_spec_scan.l" +#line 308 "test_spec_scan.l" +{ return T_MATCHES; } + YY_BREAK +case 150: +YY_RULE_SETUP +#line 310 "test_spec_scan.l" { yylval.ival = atoi(yytext); return T_INTEGER; } YY_BREAK -case 150: -/* rule 150 can match eol */ +case 151: +/* rule 151 can match eol */ YY_RULE_SETUP -#line 314 "test_spec_scan.l" +#line 315 "test_spec_scan.l" { yytext[yyleng - 1] = '\0'; yylval.str = pgaf_strdup(yytext + 1); return T_STRING; } YY_BREAK -case 151: +case 152: YY_RULE_SETUP -#line 320 "test_spec_scan.l" +#line 321 "test_spec_scan.l" { if (pgaf_next_brace_is_while) { pgaf_next_brace_is_while = 0; @@ -2330,9 +2337,9 @@ YY_RULE_SETUP return T_BLOCK; } YY_BREAK -case 152: +case 153: YY_RULE_SETUP -#line 330 "test_spec_scan.l" +#line 331 "test_spec_scan.l" { if (pgaf_step_brace_depth > 0) { pgaf_step_brace_depth--; @@ -2343,40 +2350,40 @@ YY_RULE_SETUP return T_RBRACE; } YY_BREAK -case 153: +case 154: YY_RULE_SETUP -#line 340 "test_spec_scan.l" +#line 341 "test_spec_scan.l" { yylval.str = pgaf_strdup(yytext); return T_IDENT; } YY_BREAK -case 154: +case 155: YY_RULE_SETUP -#line 345 "test_spec_scan.l" +#line 346 "test_spec_scan.l" { /* skip whitespace before service name */ } YY_BREAK -case 155: +case 156: YY_RULE_SETUP -#line 347 "test_spec_scan.l" +#line 348 "test_spec_scan.l" { yylval.str = pgaf_strdup(yytext); BEGIN(EXEC_ARGS_REST); return T_IDENT; } YY_BREAK -case 156: -/* rule 156 can match eol */ +case 157: +/* rule 157 can match eol */ YY_RULE_SETUP -#line 353 "test_spec_scan.l" +#line 354 "test_spec_scan.l" { pgaf_line_number++; BEGIN(STEP_BODY); } YY_BREAK -case 157: +case 158: YY_RULE_SETUP -#line 358 "test_spec_scan.l" +#line 359 "test_spec_scan.l" { char *p = yytext; while (*p == ' ' || *p == '\t') p++; @@ -2385,21 +2392,21 @@ YY_RULE_SETUP return T_SHELL_ARGS; } YY_BREAK -case 158: -/* rule 158 can match eol */ +case 159: +/* rule 159 can match eol */ YY_RULE_SETUP -#line 366 "test_spec_scan.l" +#line 367 "test_spec_scan.l" { pgaf_line_number++; BEGIN(STEP_BODY); } YY_BREAK -case 159: +case 160: YY_RULE_SETUP -#line 371 "test_spec_scan.l" +#line 372 "test_spec_scan.l" ECHO; YY_BREAK -#line 2402 "test_spec_scan.c" +#line 2409 "test_spec_scan.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(CLUSTER_BODY): case YY_STATE_EOF(STEP_BODY): @@ -2701,7 +2708,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1236 ) + if ( yy_current_state >= 1240 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2729,11 +2736,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1236 ) + if ( yy_current_state >= 1240 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 1235); + yy_is_jam = (yy_current_state == 1239); return yy_is_jam ? 0 : yy_current_state; } @@ -3372,7 +3379,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 371 "test_spec_scan.l" +#line 372 "test_spec_scan.l" static void diff --git a/src/bin/pgaftest/test_spec_scan.l b/src/bin/pgaftest/test_spec_scan.l index a907d1170..6e63ea648 100644 --- a/src/bin/pgaftest/test_spec_scan.l +++ b/src/bin/pgaftest/test_spec_scan.l @@ -264,6 +264,7 @@ static void pgaf_read_raw_block(void); "wait" { return T_WAIT; } "until" { return T_UNTIL; } +"replays" { return T_REPLAYS; } "timeout" { return T_TIMEOUT; } "assert" { return T_ASSERT; } "sql" { return T_SQL; } diff --git a/tests/pgautofailover_utils.py b/tests/pgautofailover_utils.py index 76acb88c4..0c74f5495 100644 --- a/tests/pgautofailover_utils.py +++ b/tests/pgautofailover_utils.py @@ -252,7 +252,18 @@ def communicate(self, proc, timeout): pass self.flush_output() - return proc.communicate(timeout=timeout - full_secs) + + # When timeout is a whole number (the common case, e.g. the plain + # int COMMAND_TIMEOUT), the loop above already consumed the entire + # budget and this remainder is exactly 0 -- passing that (or an + # epsilon-negative value, depending on float rounding) straight into + # subprocess.communicate() lets its internal deadline arithmetic + # decide whether to wait at all, and it can flip a "still not done" + # into a spurious TimeoutExpired reporting a nonsensical negative + # timeout. Clamp to a small positive value so we always make one + # real last check instead. + remaining = timeout - full_secs + return proc.communicate(timeout=remaining if remaining > 0 else 0.1) def create_root_cert(self, directory, basename="root", CN="root"): self.cert = cert.SSLCert(directory, basename, CN) diff --git a/tests/tap/specs/auth.pgaf b/tests/tap/specs/auth.pgaf index c7e52aa4a..1935ca356 100644 --- a/tests/tap/specs/auth.pgaf +++ b/tests/tap/specs/auth.pgaf @@ -80,8 +80,12 @@ step test_006_no_password_leak_on_monitor_disconnect { # node1 (secondary) cannot reach the monitor while cut off from the # network: its node-active loop keeps retrying node_active() and hitting # the "Failed to connect to monitor database" error path (see #1043). + # + # 5s wasn't always enough margin under a loaded CI runner (same class of + # flake as has_needed_replication_slots()'s retry_timeout bump 5s -> 15s), + # so give it the same headroom here. network disconnect node1 - sleep 5s + sleep 15s logs node1 contains "Failed to connect to monitor database" logs node1 contains "****" logs node1 not contains "pg-auto-failover" diff --git a/tests/tap/specs/config_get_set.pgaf b/tests/tap/specs/config_get_set.pgaf index bb95d8f5d..5e77762f4 100644 --- a/tests/tap/specs/config_get_set.pgaf +++ b/tests/tap/specs/config_get_set.pgaf @@ -23,8 +23,12 @@ teardown { step test_001_init_primary { exec node1 pg_autoctl set node metadata --name "node a" exec node1 pg_autoctl show state + + # "config set pg_autoctl.name/hostname" pushes the change to the monitor + # synchronously (same code path as "set node metadata"), so there's + # nothing left to settle here -- no sleep needed before the next step + # queries the monitor for this node's identity. exec node1 pg_autoctl config set pg_autoctl.name a - sleep 2s exec node1 pg_autoctl show settings } @@ -45,6 +49,15 @@ step test_002b_config_set_node { exec-fails node1 pg_autoctl config set postgresql.pg_ctl invalid exec node1 pg_autoctl config get postgresql.pg_ctl expect { /bin/pg_ctl } + + # config set (even one that's ultimately rejected, above) signals node1's + # running supervisor to reload, which restarts its sub-services -- give + # it the same settle time test_001_init_primary already does after its + # own config-set, so the next step's monitor query doesn't race a node + # still re-registering after the restart cascade. CI hit this race with + # 2s (test_003_region_cli_roundtrip got "Query returned 0 rows" from the + # monitor for node1's freshly-renamed identity); bumped to 5s. + sleep 5s } # region is set at create time (node1 region dc1) and, unlike diff --git a/tests/tap/specs/multi_alternate.pgaf b/tests/tap/specs/multi_alternate.pgaf index ec5c72bec..cf91ba9fa 100644 --- a/tests/tap/specs/multi_alternate.pgaf +++ b/tests/tap/specs/multi_alternate.pgaf @@ -138,6 +138,19 @@ step test_003_005_check_slots_after_series_003 { } step test_005_001_fail_primary_again { + # Force node3 to win the upcoming test_005_002 election even if node2 + # (restarted there) manages to stream-catch-up to the exact same LSN as + # node3 before the monitor notices node1 is gone: on an LSN tie, the + # monitor's SelectFailoverCandidateNode() keeps the first candidate seen + # at equal priority (lowest node id), so without this node2 (id=2) would + # beat node3 (id=3) on any tie -- the opposite of what this step name and + # the series 005 diagram above document. candidate-priority 0 removes + # node2 from GroupListCandidates' selection pool entirely while still + # letting it report its LSN, which is required to satisfy this + # formation's number_sync_standbys=1 quorum (2 reports needed) -- see the + # comment on test_005_002 below. Restored once node2 rejoins as + # secondary, in test_005_003, before series 006 needs it eligible again. + exec node2 pg_autoctl set node candidate-priority 0 compose kill node2 wait until node1 state is primary and node3 state is secondary @@ -183,6 +196,10 @@ step test_005_003_bring_up_first_failed_primary { wait until node2 state is secondary and node3 state is primary timeout 300s + # Restore node2's normal candidate priority now that it's back as a + # healthy secondary: series 006 (test_006_002) expects node2 to win a + # later election, so it must be a normal-priority candidate again by then. + exec node2 pg_autoctl set node candidate-priority 50 } step test_005_004_bring_up_last_failed_primary { diff --git a/tests/tap/specs/upgrade.pgaf b/tests/tap/specs/upgrade.pgaf index 64a3cb48f..72bfbd30a 100644 --- a/tests/tap/specs/upgrade.pgaf +++ b/tests/tap/specs/upgrade.pgaf @@ -256,6 +256,14 @@ step test_008_failover_post_upgrade { step test_009_write_on_new_primary { sql node2 { INSERT INTO upgrade_marker DEFAULT VALUES; } + + # The FSM reports node1/node3 as secondary as soon as the promotion + # converges, which isn't the same instant a write issued a moment later + # has actually replicated -- wait for each standby to catch up to + # node2's post-INSERT LSN before reading, instead of racing that gap. + wait until node1 replays node2 timeout 30s + wait until node3 replays node2 timeout 30s + sql node1 { SELECT count(*) FROM upgrade_marker; } expect { 2 } sql node3 { SELECT count(*) FROM upgrade_marker; }