Michael, in schema/schema_stat.c, there some code:
/* Process the column groups. */ for (i = 0; i < WT_COLGROUPS(table); i++) { colgroup = table->cgroups[i]; WT_ERR(__wt_buf_fmt( session, buf, "statistics:%s", colgroup->name)); ret = __wt_curstat_open( session, buf->data, cfg, &stat_cursor); while ((ret = stat_cursor->next(stat_cursor)) == 0) { WT_ERR(stat_cursor->get_key(stat_cursor, &stat_key)); WT_ERR(stat_cursor->get_value( stat_cursor, &desc, &pvalue, &value)); WT_STAT_INCRKV(stats, stat_key, value); } WT_ERR_NOTFOUND_OK(ret); WT_ERR(stat_cursor->close(stat_cursor)); }
that has a problem – notice we're not checking the return of __wt_curstat_open for an error return, and when we see one, we drop core because stat_cursor is NULL.
I'm not sure what's supposed to be going on there, but if you use the existing session handle to open up a statistics cursor BEFORE closing the bulk-load cursor in test/format/wts_bulk.c/wts_load(), you hit a problem with this stack, where stat_cursor is NULL:
0x0000000000469fbd in __curstat_table_init (session=0x800ff0430, uri=0x800e188ab "table:wt", cfg=0x7fffffffe590, cst=0x800e47e80, flags=0) at ../src/schema/schema_stat.c:99 99 while ((ret = stat_cursor->next(stat_cursor)) == 0) { (gdb) where #0 0x0000000000469fbd in __curstat_table_init (session=0x800ff0430, uri=0x800e188ab "table:wt", cfg=0x7fffffffe590, cst=0x800e47e80, flags=0) at ../src/schema/schema_stat.c:99 WT-1 0x000000000046a2a8 in __wt_schema_stat_init (session=0x800ff0430, uri=0x800e188a0 "statistics:table:wt", cfg=0x7fffffffe590, cst=0x800e47e80, flags=0) at ../src/schema/schema_stat.c:152 WT-2 0x0000000000455414 in __wt_curstat_init (session=0x800ff0430, uri=0x800e188a0 "statistics:table:wt", cfg=0x7fffffffe590, cst=0x800e47e80, flags=0) at ../src/cursor/cur_stat.c:385 WT-3 0x000000000045553c in __wt_curstat_open (session=0x800ff0430, uri=0x800e188a0 "statistics:table:wt", cfg=0x7fffffffe590, cursorp=0x7fffffffe718) at ../src/cursor/cur_stat.c:439 WT-4 0x000000000041d5ff in __wt_open_cursor (session=0x800ff0430, uri=0x800e188a0 "statistics:table:wt", owner=0x0, cfg=0x7fffffffe590, cursorp=0x7fffffffe718) at ../src/session/session_api.c:203 WT-5 0x000000000041d8b5 in __session_open_cursor (wt_session=0x800ff0430, uri=0x800e188a0 "statistics:table:wt", to_dup=0x0, config=0x0, cursorp=0x7fffffffe718) at ../src/session/session_api.c:243 WT-6 0x0000000000407154 in wts_stats (session_arg=0x800ff0430, tag=0x5a8b20 "bulk") at ../../../test/format/wts.c:342 WT-7 0x000000000040740a in wts_load () at ../../../test/format/wts_bulk.c:121 WT-8 0x00000000004052f3 in main (argc=0, argv=0x7fffffffe8a0) at ../../../test/format/t.c:120
I don't have a great recipe to reproduce it, because opening a stat cursor at that point requires some other random changes I haven't committed. I'll try and give you something better if it's not obvious what's supposed to happen here.
One other hint:
Breakpoint 1, __wt_curstat_open (session=0x800ff0430, uri=0x801b99000 "statistics:colgroup:wt", cfg=0x7fffffffe590, cursorp=0x7fffffffe388) at ../src/cursor/cur_stat.c:414 414 WT_DECL_RET; (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x0000000000469fbd in __curstat_table_init (session=0x800ff0430, uri=0x800e188cb "table:wt", cfg=0x7fffffffe590, cst=0x800e47e80, flags=0) at ../src/schema/schema_stat.c:99 99 while ((ret = stat_cursor->next(stat_cursor)) == 0) {
Notice that we're opening a column-group statistic, for what must be a default column group, that is, I would have guessed that test/format wouldn't open statistics on any column group?
But maybe it's the fact that we haven't closed the bulk-load cursor before we try and do this work?
Open the statistics cursor AFTER closing the bulk-load cursor in that code, and it all works.
- related to
-
WT-1 placeholder WT-1
- Closed
-
WT-2 What does metadata look like?
- Closed
-
WT-3 What file formats are required?
- Closed
-
WT-4 Flexible cursor traversals
- Closed
-
WT-5 How does pget work: is it necessary?
- Closed
-
WT-6 Complex schema example
- Closed
-
WT-7 Do we need the handle->err/errx methods?
- Closed
-
WT-8 Do we need table load, bulk-load and/or dump methods?
- Closed