risingwave icon indicating copy to clipboard operation
risingwave copied to clipboard

panic when `infer_stream_agg_state` in fuzz test: `stream_key` of the input node is `None`

Open BugenZhao opened this issue 7 months ago • 1 comments

Buildkite URL

https://buildkite.com/risingwavelabs/main-cron/builds/5128#01969c06-df29-4b00-a51a-2db63f9f01a8/314-315

Description and Insights

Please check the frontend node logs.

thread 'rw-main' panicked at src/frontend/src/optimizer/plan_node/generic/agg.rs:390:46:
called `Option::unwrap()` on a `None` value
stack backtrace:
   0: rust_begin_unwind
             at /rustc/f9e0239a7bc813b4aceffc7f069f4797cde3175c/library/std/src/panicking.rs:695:5
   1: core::panicking::panic_fmt
             at /rustc/f9e0239a7bc813b4aceffc7f069f4797cde3175c/library/core/src/panicking.rs:75:14
   2: core::panicking::panic
             at /rustc/f9e0239a7bc813b4aceffc7f069f4797cde3175c/library/core/src/panicking.rs:145:5
   3: core::option::unwrap_failed
             at /rustc/f9e0239a7bc813b4aceffc7f069f4797cde3175c/library/core/src/option.rs:2015:5
   4: unwrap<&[usize]>
             at /rustc/f9e0239a7bc813b4aceffc7f069f4797cde3175c/library/core/src/option.rs:978:21
   5: infer_stream_agg_state<risingwave_frontend::optimizer::plan_node::PlanRef, &&risingwave_frontend::optimizer::plan_node::plan_base::PlanBase<risingwave_frontend::optimizer::plan_node::Stream>>
             at ./src/frontend/src/optimizer/plan_node/generic/agg.rs:390:46
   6: infer_tables<risingwave_frontend::optimizer::plan_node::PlanRef, &risingwave_frontend::optimizer::plan_node::plan_base::PlanBase<risingwave_frontend::optimizer::plan_node::Stream>>
             at ./src/frontend/src/optimizer/plan_node/generic/agg.rs:323:13
   7: to_stream_prost_body
             at ./src/frontend/src/optimizer/plan_node/stream_hash_agg.rs:184:13

Likely the query:

CREATE MATERIALIZED VIEW stream_query AS WITH with_0 AS (SELECT tumble_1.c8 AS col_0, TIME '16:20:00' AS col_1, (coalesce(NULL, NULL, NULL, ((BIGINT '402')), NULL, NULL, NULL, NULL, NULL, NULL)) AS col_2 FROM (tumble(alltypes1, alltypes1.c11, INTERVAL '11') AS tumble_1 RIGHT JOIN (SELECT (BIGINT '147') AS col_0, false AS col_1, CAST('1zGSe4O0u0' AS CHARACTER VARYING) AS col_2 FROM nation AS t_2 LEFT JOIN m19 AS t_3 ON t_2.n_name = t_3.col_0 AND (coalesce(NULL, false, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) WHERE false) AS sq_5 ON tumble_1.c9 = sq_5.col_2 AND true) JOIN hop(auction, auction.date_time, INTERVAL '24', INTERVAL '168') AS hop_6 ON tumble_1.c4 = hop_6.reserve AND sq_5.col_1 WHERE sq_5.col_1 GROUP BY sq_5.col_1, tumble_1.c7, hop_6.id, tumble_1.c15, tumble_1.c8, hop_6.seller, sq_5.col_2) SELECT (BIGINT '240') AS col_0, max(DISTINCT CAST('0PY2ZRo3vc' AS CHARACTER VARYING)) FILTER (WHERE true) AS col_1, (INTERVAL '99') AS col_2 FROM with_0

BugenZhao avatar May 05 '25 03:05 BugenZhao

Cannot reproduce anymore.

Queries I tried:

CREATE TABLE supplier (s_suppkey INT, s_name CHARACTER VARYING, s_address CHARACTER VARYING, s_nationkey INT, s_phone CHARACTER VARYING, s_acctbal NUMERIC, s_comment CHARACTER VARYING, PRIMARY KEY (s_suppkey));
CREATE TABLE part (p_partkey INT, p_name CHARACTER VARYING, p_mfgr CHARACTER VARYING, p_brand CHARACTER VARYING, p_type CHARACTER VARYING, p_size INT, p_container CHARACTER VARYING, p_retailprice NUMERIC, p_comment CHARACTER VARYING, PRIMARY KEY (p_partkey));
CREATE TABLE partsupp (ps_partkey INT, ps_suppkey INT, ps_availqty INT, ps_supplycost NUMERIC, ps_comment CHARACTER VARYING, PRIMARY KEY (ps_partkey, ps_suppkey));
CREATE TABLE customer (c_custkey INT, c_name CHARACTER VARYING, c_address CHARACTER VARYING, c_nationkey INT, c_phone CHARACTER VARYING, c_acctbal NUMERIC, c_mktsegment CHARACTER VARYING, c_comment CHARACTER VARYING, PRIMARY KEY (c_custkey));
CREATE TABLE orders (o_orderkey BIGINT, o_custkey INT, o_orderstatus CHARACTER VARYING, o_totalprice NUMERIC, o_orderdate DATE, o_orderpriority CHARACTER VARYING, o_clerk CHARACTER VARYING, o_shippriority INT, o_comment CHARACTER VARYING, PRIMARY KEY (o_orderkey));
CREATE TABLE lineitem (l_orderkey BIGINT, l_partkey INT, l_suppkey INT, l_linenumber INT, l_quantity NUMERIC, l_extendedprice NUMERIC, l_discount NUMERIC, l_tax NUMERIC, l_returnflag CHARACTER VARYING, l_linestatus CHARACTER VARYING, l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHARACTER VARYING, l_shipmode CHARACTER VARYING, l_comment CHARACTER VARYING, PRIMARY KEY (l_orderkey, l_linenumber));
CREATE TABLE nation (n_nationkey INT, n_name CHARACTER VARYING, n_regionkey INT, n_comment CHARACTER VARYING, PRIMARY KEY (n_nationkey));
CREATE TABLE region (r_regionkey INT, r_name CHARACTER VARYING, r_comment CHARACTER VARYING, PRIMARY KEY (r_regionkey));
CREATE TABLE person (id BIGINT, name CHARACTER VARYING, email_address CHARACTER VARYING, credit_card CHARACTER VARYING, city CHARACTER VARYING, state CHARACTER VARYING, date_time TIMESTAMP, extra CHARACTER VARYING, PRIMARY KEY (id));
CREATE TABLE auction (id BIGINT, item_name CHARACTER VARYING, description CHARACTER VARYING, initial_bid BIGINT, reserve BIGINT, date_time TIMESTAMP, expires TIMESTAMP, seller BIGINT, category BIGINT, extra CHARACTER VARYING, PRIMARY KEY (id));
CREATE TABLE bid (auction BIGINT, bidder BIGINT, price BIGINT, channel CHARACTER VARYING, url CHARACTER VARYING, date_time TIMESTAMP, extra CHARACTER VARYING);
CREATE TABLE alltypes1 (c1 BOOLEAN, c2 SMALLINT, c3 INT, c4 BIGINT, c5 REAL, c6 DOUBLE, c7 NUMERIC, c8 DATE, c9 CHARACTER VARYING, c10 TIME, c11 TIMESTAMP, c13 INTERVAL, c14 STRUCT<a INT>, c15 INT[], c16 CHARACTER VARYING[]);
CREATE TABLE alltypes2 (c1 BOOLEAN, c2 SMALLINT, c3 INT, c4 BIGINT, c5 REAL, c6 DOUBLE, c7 NUMERIC, c8 DATE, c9 CHARACTER VARYING, c10 TIME, c11 TIMESTAMP, c13 INTERVAL, c14 STRUCT<a INT>, c15 INT[], c16 CHARACTER VARYING[]);

CREATE TABLE m19 (col_0 CHARACTER VARYING, col_1 BOOLEAN, col_2 CHARACTER VARYING);

-- EXPLAIN (VERBOSE)
CREATE MATERIALIZED VIEW stream_query AS
WITH with_0 AS (
    SELECT 
        tumble_1.c8 AS col_0, 
        TIME '16:20:00' AS col_1, 
        (coalesce(NULL, NULL, NULL, ((BIGINT '402')), NULL, NULL, NULL, NULL, NULL, NULL)) AS col_2 
    FROM (
        tumble(alltypes1, alltypes1.c11, INTERVAL '11') AS tumble_1 
        RIGHT JOIN (
            SELECT 
                (BIGINT '147') AS col_0, 
                false AS col_1, 
                CAST('1zGSe4O0u0' AS CHARACTER VARYING) AS col_2 
            FROM nation AS t_2 
            LEFT JOIN m19 AS t_3 
                ON t_2.n_name = t_3.col_0 
                AND (coalesce(NULL, false, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) 
            WHERE false
        ) AS sq_5 
            ON tumble_1.c9 = sq_5.col_2 
            AND true
    ) 
    JOIN hop(auction, auction.date_time, INTERVAL '24', INTERVAL '168') AS hop_6 
        ON tumble_1.c4 = hop_6.reserve 
        AND sq_5.col_1 
    WHERE sq_5.col_1 
    GROUP BY 
        sq_5.col_1, 
        tumble_1.c7, 
        hop_6.id, 
        tumble_1.c15, 
        tumble_1.c8, 
        hop_6.seller, 
        sq_5.col_2
) 
SELECT 
    (BIGINT '240') AS col_0, 
    max(DISTINCT CAST('0PY2ZRo3vc' AS CHARACTER VARYING)) FILTER (WHERE true) AS col_1, 
    (INTERVAL '99') AS col_2 
FROM with_0;

stdrc avatar Jun 17 '25 09:06 stdrc