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