From ebb75fa690d9bbaa9f544d3b230c3976e3e34b55 Mon Sep 17 00:00:00 2001 From: pcherenkov <pcherenkov@gmail.com> Date: Tue, 24 Jan 2012 17:37:47 +0400 Subject: [PATCH] fix for bug920951: server crashes on cat command --- core/log_io.m | 23 +- test/box/cat.result | 506 ++++++++++++++++++++++++++++++++++++++++++++ test/box/cat.test | 24 +++ 3 files changed, 546 insertions(+), 7 deletions(-) create mode 100644 test/box/cat.result create mode 100644 test/box/cat.test diff --git a/core/log_io.m b/core/log_io.m index 1b1d54739d..f07331f370 100644 --- a/core/log_io.m +++ b/core/log_io.m @@ -62,11 +62,6 @@ const char *xlog_mark = "XLOG\n"; static struct tbuf *row_reader_v11(FILE *f, struct palloc_pool *pool); -/* Will be set to either HW or SW CRC32 calculation routine depending on CPU - capabilities. */ -static u_int32_t (*calc_crc32c)(u_int32_t crc, const unsigned char *buf, - unsigned int len) = NULL; - struct log_io_iter { struct tarantool_coro coro; struct log_io *log; @@ -77,6 +72,19 @@ struct log_io_iter { int io_rate_limit; }; +typedef u_int32_t (*crc32_func_t)(u_int32_t crc, const unsigned char *buf, + unsigned int len); + +static crc32_func_t +pick_crc32_func () +{ + static crc32_func_t impl = NULL; + if (!impl) + impl = cpu_has (cpuf_sse4_2) ? &crc32c_hw : &crc32c; + + return impl; +} + void wait_lsn_set(struct wait_lsn *wait_lsn, i64 lsn) @@ -454,6 +462,7 @@ static struct tbuf * row_reader_v11(FILE *f, struct palloc_pool *pool) { struct tbuf *m = tbuf_alloc(pool); + crc32_func_t calc_crc32c = pick_crc32_func (); u32 header_crc, data_crc; @@ -1191,6 +1200,7 @@ write_to_disk(void *_state, struct tbuf *t) struct tbuf *reply, *header; struct recovery_state *r = _state; u32 result = 0; + crc32_func_t calc_crc32c = pick_crc32_func (); /* we're not running inside ev_loop, so update ev_now manually */ ev_now_update(); @@ -1337,8 +1347,6 @@ recover_init(const char *snap_dirname, const char *wal_dirname, r->wal_class->fsync_delay = fsync_delay; wait_lsn_clear(&r->wait_lsn); - calc_crc32c = cpu_has (cpuf_sse4_2) ? &crc32c_hw : &crc32c; - if ((flags & RECOVER_READONLY) == 0) r->wal_writer = spawn_child("wal_writer", inbox_size, write_to_disk, r); @@ -1372,6 +1380,7 @@ write_rows(struct log_io_iter *i) { struct log_io *l = i->log; struct tbuf *row, *data; + crc32_func_t calc_crc32c = pick_crc32_func (); row = tbuf_alloc(eter_pool); tbuf_ensure(row, sizeof(struct row_v11)); diff --git a/test/box/cat.result b/test/box/cat.result new file mode 100644 index 0000000000..6d6d507f2f --- /dev/null +++ b/test/box/cat.result @@ -0,0 +1,506 @@ + +# Verify that the server starts from a pre-recorded snapshot. +# This way we check that the server can read old snapshots (v11) +# going forward. + +tarantool_box --cat=00000000000000000500.snap +n:0 1: {'I am a tuple 1'} +n:0 2: {'I am a tuple 2'} +n:0 3: {'I am a tuple 3'} +n:0 4: {'I am a tuple 4'} +n:0 5: {'I am a tuple 5'} +n:0 6: {'I am a tuple 6'} +n:0 7: {'I am a tuple 7'} +n:0 8: {'I am a tuple 8'} +n:0 9: {'I am a tuple 9'} +n:0 10: {'I am a tuple 10'} +n:0 11: {'I am a tuple 11'} +n:0 12: {'I am a tuple 12'} +n:0 13: {'I am a tuple 13'} +n:0 14: {'I am a tuple 14'} +n:0 15: {'I am a tuple 15'} +n:0 16: {'I am a tuple 16'} +n:0 17: {'I am a tuple 17'} +n:0 18: {'I am a tuple 18'} +n:0 19: {'I am a tuple 19'} +n:0 20: {'I am a tuple 20'} +n:0 21: {'I am a tuple 21'} +n:0 22: {'I am a tuple 22'} +n:0 23: {'I am a tuple 23'} +n:0 24: {'I am a tuple 24'} +n:0 25: {'I am a tuple 25'} +n:0 26: {'I am a tuple 26'} +n:0 27: {'I am a tuple 27'} +n:0 28: {'I am a tuple 28'} +n:0 29: {'I am a tuple 29'} +n:0 30: {'I am a tuple 30'} +n:0 31: {'I am a tuple 31'} +n:0 32: {'I am a tuple 32'} +n:0 33: {'I am a tuple 33'} +n:0 34: {'I am a tuple 34'} +n:0 35: {'I am a tuple 35'} +n:0 36: {'I am a tuple 36'} +n:0 37: {'I am a tuple 37'} +n:0 38: {'I am a tuple 38'} +n:0 39: {'I am a tuple 39'} +n:0 40: {'I am a tuple 40'} +n:0 41: {'I am a tuple 41'} +n:0 42: {'I am a tuple 42'} +n:0 43: {'I am a tuple 43'} +n:0 44: {'I am a tuple 44'} +n:0 45: {'I am a tuple 45'} +n:0 46: {'I am a tuple 46'} +n:0 47: {'I am a tuple 47'} +n:0 48: {'I am a tuple 48'} +n:0 49: {'I am a tuple 49'} +n:0 50: {'I am a tuple 50'} +n:0 51: {'I am a tuple 51'} +n:0 52: {'I am a tuple 52'} +n:0 53: {'I am a tuple 53'} +n:0 54: {'I am a tuple 54'} +n:0 55: {'I am a tuple 55'} +n:0 56: {'I am a tuple 56'} +n:0 57: {'I am a tuple 57'} +n:0 58: {'I am a tuple 58'} +n:0 59: {'I am a tuple 59'} +n:0 60: {'I am a tuple 60'} +n:0 61: {'I am a tuple 61'} +n:0 62: {'I am a tuple 62'} +n:0 63: {'I am a tuple 63'} +n:0 64: {'I am a tuple 64'} +n:0 65: {'I am a tuple 65'} +n:0 66: {'I am a tuple 66'} +n:0 67: {'I am a tuple 67'} +n:0 68: {'I am a tuple 68'} +n:0 69: {'I am a tuple 69'} +n:0 70: {'I am a tuple 70'} +n:0 71: {'I am a tuple 71'} +n:0 72: {'I am a tuple 72'} +n:0 73: {'I am a tuple 73'} +n:0 74: {'I am a tuple 74'} +n:0 75: {'I am a tuple 75'} +n:0 76: {'I am a tuple 76'} +n:0 77: {'I am a tuple 77'} +n:0 78: {'I am a tuple 78'} +n:0 79: {'I am a tuple 79'} +n:0 80: {'I am a tuple 80'} +n:0 81: {'I am a tuple 81'} +n:0 82: {'I am a tuple 82'} +n:0 83: {'I am a tuple 83'} +n:0 84: {'I am a tuple 84'} +n:0 85: {'I am a tuple 85'} +n:0 86: {'I am a tuple 86'} +n:0 87: {'I am a tuple 87'} +n:0 88: {'I am a tuple 88'} +n:0 89: {'I am a tuple 89'} +n:0 90: {'I am a tuple 90'} +n:0 91: {'I am a tuple 91'} +n:0 92: {'I am a tuple 92'} +n:0 93: {'I am a tuple 93'} +n:0 94: {'I am a tuple 94'} +n:0 95: {'I am a tuple 95'} +n:0 96: {'I am a tuple 96'} +n:0 97: {'I am a tuple 97'} +n:0 98: {'I am a tuple 98'} +n:0 99: {'I am a tuple 99'} +n:0 100: {'I am a tuple 100'} +n:0 101: {'I am a tuple 101'} +n:0 102: {'I am a tuple 102'} +n:0 103: {'I am a tuple 103'} +n:0 104: {'I am a tuple 104'} +n:0 105: {'I am a tuple 105'} +n:0 106: {'I am a tuple 106'} +n:0 107: {'I am a tuple 107'} +n:0 108: {'I am a tuple 108'} +n:0 109: {'I am a tuple 109'} +n:0 110: {'I am a tuple 110'} +n:0 111: {'I am a tuple 111'} +n:0 112: {'I am a tuple 112'} +n:0 113: {'I am a tuple 113'} +n:0 114: {'I am a tuple 114'} +n:0 115: {'I am a tuple 115'} +n:0 116: {'I am a tuple 116'} +n:0 117: {'I am a tuple 117'} +n:0 118: {'I am a tuple 118'} +n:0 119: {'I am a tuple 119'} +n:0 120: {'I am a tuple 120'} +n:0 121: {'I am a tuple 121'} +n:0 122: {'I am a tuple 122'} +n:0 123: {'I am a tuple 123'} +n:0 124: {'I am a tuple 124'} +n:0 125: {'I am a tuple 125'} +n:0 126: {'I am a tuple 126'} +n:0 127: {'I am a tuple 127'} +n:0 128: {'I am a tuple 128'} +n:0 129: {'I am a tuple 129'} +n:0 130: {'I am a tuple 130'} +n:0 131: {'I am a tuple 131'} +n:0 132: {'I am a tuple 132'} +n:0 133: {'I am a tuple 133'} +n:0 134: {'I am a tuple 134'} +n:0 135: {'I am a tuple 135'} +n:0 136: {'I am a tuple 136'} +n:0 137: {'I am a tuple 137'} +n:0 138: {'I am a tuple 138'} +n:0 139: {'I am a tuple 139'} +n:0 140: {'I am a tuple 140'} +n:0 141: {'I am a tuple 141'} +n:0 142: {'I am a tuple 142'} +n:0 143: {'I am a tuple 143'} +n:0 144: {'I am a tuple 144'} +n:0 145: {'I am a tuple 145'} +n:0 146: {'I am a tuple 146'} +n:0 147: {'I am a tuple 147'} +n:0 148: {'I am a tuple 148'} +n:0 149: {'I am a tuple 149'} +n:0 150: {'I am a tuple 150'} +n:0 151: {'I am a tuple 151'} +n:0 152: {'I am a tuple 152'} +n:0 153: {'I am a tuple 153'} +n:0 154: {'I am a tuple 154'} +n:0 155: {'I am a tuple 155'} +n:0 156: {'I am a tuple 156'} +n:0 157: {'I am a tuple 157'} +n:0 158: {'I am a tuple 158'} +n:0 159: {'I am a tuple 159'} +n:0 160: {'I am a tuple 160'} +n:0 161: {'I am a tuple 161'} +n:0 162: {'I am a tuple 162'} +n:0 163: {'I am a tuple 163'} +n:0 164: {'I am a tuple 164'} +n:0 165: {'I am a tuple 165'} +n:0 166: {'I am a tuple 166'} +n:0 167: {'I am a tuple 167'} +n:0 168: {'I am a tuple 168'} +n:0 169: {'I am a tuple 169'} +n:0 170: {'I am a tuple 170'} +n:0 171: {'I am a tuple 171'} +n:0 172: {'I am a tuple 172'} +n:0 173: {'I am a tuple 173'} +n:0 174: {'I am a tuple 174'} +n:0 175: {'I am a tuple 175'} +n:0 176: {'I am a tuple 176'} +n:0 177: {'I am a tuple 177'} +n:0 178: {'I am a tuple 178'} +n:0 179: {'I am a tuple 179'} +n:0 180: {'I am a tuple 180'} +n:0 181: {'I am a tuple 181'} +n:0 182: {'I am a tuple 182'} +n:0 183: {'I am a tuple 183'} +n:0 184: {'I am a tuple 184'} +n:0 185: {'I am a tuple 185'} +n:0 186: {'I am a tuple 186'} +n:0 187: {'I am a tuple 187'} +n:0 188: {'I am a tuple 188'} +n:0 189: {'I am a tuple 189'} +n:0 190: {'I am a tuple 190'} +n:0 191: {'I am a tuple 191'} +n:0 192: {'I am a tuple 192'} +n:0 193: {'I am a tuple 193'} +n:0 194: {'I am a tuple 194'} +n:0 195: {'I am a tuple 195'} +n:0 196: {'I am a tuple 196'} +n:0 197: {'I am a tuple 197'} +n:0 198: {'I am a tuple 198'} +n:0 199: {'I am a tuple 199'} +n:0 200: {'I am a tuple 200'} +n:0 201: {'I am a tuple 201'} +n:0 202: {'I am a tuple 202'} +n:0 203: {'I am a tuple 203'} +n:0 204: {'I am a tuple 204'} +n:0 205: {'I am a tuple 205'} +n:0 206: {'I am a tuple 206'} +n:0 207: {'I am a tuple 207'} +n:0 208: {'I am a tuple 208'} +n:0 209: {'I am a tuple 209'} +n:0 210: {'I am a tuple 210'} +n:0 211: {'I am a tuple 211'} +n:0 212: {'I am a tuple 212'} +n:0 213: {'I am a tuple 213'} +n:0 214: {'I am a tuple 214'} +n:0 215: {'I am a tuple 215'} +n:0 216: {'I am a tuple 216'} +n:0 217: {'I am a tuple 217'} +n:0 218: {'I am a tuple 218'} +n:0 219: {'I am a tuple 219'} +n:0 220: {'I am a tuple 220'} +n:0 221: {'I am a tuple 221'} +n:0 222: {'I am a tuple 222'} +n:0 223: {'I am a tuple 223'} +n:0 224: {'I am a tuple 224'} +n:0 225: {'I am a tuple 225'} +n:0 226: {'I am a tuple 226'} +n:0 227: {'I am a tuple 227'} +n:0 228: {'I am a tuple 228'} +n:0 229: {'I am a tuple 229'} +n:0 230: {'I am a tuple 230'} +n:0 231: {'I am a tuple 231'} +n:0 232: {'I am a tuple 232'} +n:0 233: {'I am a tuple 233'} +n:0 234: {'I am a tuple 234'} +n:0 235: {'I am a tuple 235'} +n:0 236: {'I am a tuple 236'} +n:0 237: {'I am a tuple 237'} +n:0 238: {'I am a tuple 238'} +n:0 239: {'I am a tuple 239'} +n:0 240: {'I am a tuple 240'} +n:0 241: {'I am a tuple 241'} +n:0 242: {'I am a tuple 242'} +n:0 243: {'I am a tuple 243'} +n:0 244: {'I am a tuple 244'} +n:0 245: {'I am a tuple 245'} +n:0 246: {'I am a tuple 246'} +n:0 247: {'I am a tuple 247'} +n:0 248: {'I am a tuple 248'} +n:0 249: {'I am a tuple 249'} +n:0 250: {'I am a tuple 250'} +n:0 251: {'I am a tuple 251'} +n:0 252: {'I am a tuple 252'} +n:0 253: {'I am a tuple 253'} +n:0 254: {'I am a tuple 254'} +n:0 255: {'I am a tuple 255'} +n:0 256: {'I am a tuple 256'} +n:0 257: {'I am a tuple 257'} +n:0 258: {'I am a tuple 258'} +n:0 259: {'I am a tuple 259'} +n:0 260: {'I am a tuple 260'} +n:0 261: {'I am a tuple 261'} +n:0 262: {'I am a tuple 262'} +n:0 263: {'I am a tuple 263'} +n:0 264: {'I am a tuple 264'} +n:0 265: {'I am a tuple 265'} +n:0 266: {'I am a tuple 266'} +n:0 267: {'I am a tuple 267'} +n:0 268: {'I am a tuple 268'} +n:0 269: {'I am a tuple 269'} +n:0 270: {'I am a tuple 270'} +n:0 271: {'I am a tuple 271'} +n:0 272: {'I am a tuple 272'} +n:0 273: {'I am a tuple 273'} +n:0 274: {'I am a tuple 274'} +n:0 275: {'I am a tuple 275'} +n:0 276: {'I am a tuple 276'} +n:0 277: {'I am a tuple 277'} +n:0 278: {'I am a tuple 278'} +n:0 279: {'I am a tuple 279'} +n:0 280: {'I am a tuple 280'} +n:0 281: {'I am a tuple 281'} +n:0 282: {'I am a tuple 282'} +n:0 283: {'I am a tuple 283'} +n:0 284: {'I am a tuple 284'} +n:0 285: {'I am a tuple 285'} +n:0 286: {'I am a tuple 286'} +n:0 287: {'I am a tuple 287'} +n:0 288: {'I am a tuple 288'} +n:0 289: {'I am a tuple 289'} +n:0 290: {'I am a tuple 290'} +n:0 291: {'I am a tuple 291'} +n:0 292: {'I am a tuple 292'} +n:0 293: {'I am a tuple 293'} +n:0 294: {'I am a tuple 294'} +n:0 295: {'I am a tuple 295'} +n:0 296: {'I am a tuple 296'} +n:0 297: {'I am a tuple 297'} +n:0 298: {'I am a tuple 298'} +n:0 299: {'I am a tuple 299'} +n:0 300: {'I am a tuple 300'} +n:0 301: {'I am a tuple 301'} +n:0 302: {'I am a tuple 302'} +n:0 303: {'I am a tuple 303'} +n:0 304: {'I am a tuple 304'} +n:0 305: {'I am a tuple 305'} +n:0 306: {'I am a tuple 306'} +n:0 307: {'I am a tuple 307'} +n:0 308: {'I am a tuple 308'} +n:0 309: {'I am a tuple 309'} +n:0 310: {'I am a tuple 310'} +n:0 311: {'I am a tuple 311'} +n:0 312: {'I am a tuple 312'} +n:0 313: {'I am a tuple 313'} +n:0 314: {'I am a tuple 314'} +n:0 315: {'I am a tuple 315'} +n:0 316: {'I am a tuple 316'} +n:0 317: {'I am a tuple 317'} +n:0 318: {'I am a tuple 318'} +n:0 319: {'I am a tuple 319'} +n:0 320: {'I am a tuple 320'} +n:0 321: {'I am a tuple 321'} +n:0 322: {'I am a tuple 322'} +n:0 323: {'I am a tuple 323'} +n:0 324: {'I am a tuple 324'} +n:0 325: {'I am a tuple 325'} +n:0 326: {'I am a tuple 326'} +n:0 327: {'I am a tuple 327'} +n:0 328: {'I am a tuple 328'} +n:0 329: {'I am a tuple 329'} +n:0 330: {'I am a tuple 330'} +n:0 331: {'I am a tuple 331'} +n:0 332: {'I am a tuple 332'} +n:0 333: {'I am a tuple 333'} +n:0 334: {'I am a tuple 334'} +n:0 335: {'I am a tuple 335'} +n:0 336: {'I am a tuple 336'} +n:0 337: {'I am a tuple 337'} +n:0 338: {'I am a tuple 338'} +n:0 339: {'I am a tuple 339'} +n:0 340: {'I am a tuple 340'} +n:0 341: {'I am a tuple 341'} +n:0 342: {'I am a tuple 342'} +n:0 343: {'I am a tuple 343'} +n:0 344: {'I am a tuple 344'} +n:0 345: {'I am a tuple 345'} +n:0 346: {'I am a tuple 346'} +n:0 347: {'I am a tuple 347'} +n:0 348: {'I am a tuple 348'} +n:0 349: {'I am a tuple 349'} +n:0 350: {'I am a tuple 350'} +n:0 351: {'I am a tuple 351'} +n:0 352: {'I am a tuple 352'} +n:0 353: {'I am a tuple 353'} +n:0 354: {'I am a tuple 354'} +n:0 355: {'I am a tuple 355'} +n:0 356: {'I am a tuple 356'} +n:0 357: {'I am a tuple 357'} +n:0 358: {'I am a tuple 358'} +n:0 359: {'I am a tuple 359'} +n:0 360: {'I am a tuple 360'} +n:0 361: {'I am a tuple 361'} +n:0 362: {'I am a tuple 362'} +n:0 363: {'I am a tuple 363'} +n:0 364: {'I am a tuple 364'} +n:0 365: {'I am a tuple 365'} +n:0 366: {'I am a tuple 366'} +n:0 367: {'I am a tuple 367'} +n:0 368: {'I am a tuple 368'} +n:0 369: {'I am a tuple 369'} +n:0 370: {'I am a tuple 370'} +n:0 371: {'I am a tuple 371'} +n:0 372: {'I am a tuple 372'} +n:0 373: {'I am a tuple 373'} +n:0 374: {'I am a tuple 374'} +n:0 375: {'I am a tuple 375'} +n:0 376: {'I am a tuple 376'} +n:0 377: {'I am a tuple 377'} +n:0 378: {'I am a tuple 378'} +n:0 379: {'I am a tuple 379'} +n:0 380: {'I am a tuple 380'} +n:0 381: {'I am a tuple 381'} +n:0 382: {'I am a tuple 382'} +n:0 383: {'I am a tuple 383'} +n:0 384: {'I am a tuple 384'} +n:0 385: {'I am a tuple 385'} +n:0 386: {'I am a tuple 386'} +n:0 387: {'I am a tuple 387'} +n:0 388: {'I am a tuple 388'} +n:0 389: {'I am a tuple 389'} +n:0 390: {'I am a tuple 390'} +n:0 391: {'I am a tuple 391'} +n:0 392: {'I am a tuple 392'} +n:0 393: {'I am a tuple 393'} +n:0 394: {'I am a tuple 394'} +n:0 395: {'I am a tuple 395'} +n:0 396: {'I am a tuple 396'} +n:0 397: {'I am a tuple 397'} +n:0 398: {'I am a tuple 398'} +n:0 399: {'I am a tuple 399'} +n:0 400: {'I am a tuple 400'} +n:0 401: {'I am a tuple 401'} +n:0 402: {'I am a tuple 402'} +n:0 403: {'I am a tuple 403'} +n:0 404: {'I am a tuple 404'} +n:0 405: {'I am a tuple 405'} +n:0 406: {'I am a tuple 406'} +n:0 407: {'I am a tuple 407'} +n:0 408: {'I am a tuple 408'} +n:0 409: {'I am a tuple 409'} +n:0 410: {'I am a tuple 410'} +n:0 411: {'I am a tuple 411'} +n:0 412: {'I am a tuple 412'} +n:0 413: {'I am a tuple 413'} +n:0 414: {'I am a tuple 414'} +n:0 415: {'I am a tuple 415'} +n:0 416: {'I am a tuple 416'} +n:0 417: {'I am a tuple 417'} +n:0 418: {'I am a tuple 418'} +n:0 419: {'I am a tuple 419'} +n:0 420: {'I am a tuple 420'} +n:0 421: {'I am a tuple 421'} +n:0 422: {'I am a tuple 422'} +n:0 423: {'I am a tuple 423'} +n:0 424: {'I am a tuple 424'} +n:0 425: {'I am a tuple 425'} +n:0 426: {'I am a tuple 426'} +n:0 427: {'I am a tuple 427'} +n:0 428: {'I am a tuple 428'} +n:0 429: {'I am a tuple 429'} +n:0 430: {'I am a tuple 430'} +n:0 431: {'I am a tuple 431'} +n:0 432: {'I am a tuple 432'} +n:0 433: {'I am a tuple 433'} +n:0 434: {'I am a tuple 434'} +n:0 435: {'I am a tuple 435'} +n:0 436: {'I am a tuple 436'} +n:0 437: {'I am a tuple 437'} +n:0 438: {'I am a tuple 438'} +n:0 439: {'I am a tuple 439'} +n:0 440: {'I am a tuple 440'} +n:0 441: {'I am a tuple 441'} +n:0 442: {'I am a tuple 442'} +n:0 443: {'I am a tuple 443'} +n:0 444: {'I am a tuple 444'} +n:0 445: {'I am a tuple 445'} +n:0 446: {'I am a tuple 446'} +n:0 447: {'I am a tuple 447'} +n:0 448: {'I am a tuple 448'} +n:0 449: {'I am a tuple 449'} +n:0 450: {'I am a tuple 450'} +n:0 451: {'I am a tuple 451'} +n:0 452: {'I am a tuple 452'} +n:0 453: {'I am a tuple 453'} +n:0 454: {'I am a tuple 454'} +n:0 455: {'I am a tuple 455'} +n:0 456: {'I am a tuple 456'} +n:0 457: {'I am a tuple 457'} +n:0 458: {'I am a tuple 458'} +n:0 459: {'I am a tuple 459'} +n:0 460: {'I am a tuple 460'} +n:0 461: {'I am a tuple 461'} +n:0 462: {'I am a tuple 462'} +n:0 463: {'I am a tuple 463'} +n:0 464: {'I am a tuple 464'} +n:0 465: {'I am a tuple 465'} +n:0 466: {'I am a tuple 466'} +n:0 467: {'I am a tuple 467'} +n:0 468: {'I am a tuple 468'} +n:0 469: {'I am a tuple 469'} +n:0 470: {'I am a tuple 470'} +n:0 471: {'I am a tuple 471'} +n:0 472: {'I am a tuple 472'} +n:0 473: {'I am a tuple 473'} +n:0 474: {'I am a tuple 474'} +n:0 475: {'I am a tuple 475'} +n:0 476: {'I am a tuple 476'} +n:0 477: {'I am a tuple 477'} +n:0 478: {'I am a tuple 478'} +n:0 479: {'I am a tuple 479'} +n:0 480: {'I am a tuple 480'} +n:0 481: {'I am a tuple 481'} +n:0 482: {'I am a tuple 482'} +n:0 483: {'I am a tuple 483'} +n:0 484: {'I am a tuple 484'} +n:0 485: {'I am a tuple 485'} +n:0 486: {'I am a tuple 486'} +n:0 487: {'I am a tuple 487'} +n:0 488: {'I am a tuple 488'} +n:0 489: {'I am a tuple 489'} +n:0 490: {'I am a tuple 490'} +n:0 491: {'I am a tuple 491'} +n:0 492: {'I am a tuple 492'} +n:0 493: {'I am a tuple 493'} +n:0 494: {'I am a tuple 494'} +n:0 495: {'I am a tuple 495'} +n:0 496: {'I am a tuple 496'} +n:0 497: {'I am a tuple 497'} +n:0 498: {'I am a tuple 498'} +n:0 499: {'I am a tuple 499'} + diff --git a/test/box/cat.test b/test/box/cat.test new file mode 100644 index 0000000000..789827230d --- /dev/null +++ b/test/box/cat.test @@ -0,0 +1,24 @@ +# encoding: tarantool +# +# Created to test for [Bug 920951]: server crashes on cat command +# +import os +import time +import yaml +from signal import SIGUSR1 + +print """ +# Verify that the server starts from a pre-recorded snapshot. +# This way we check that the server can read old snapshots (v11) +# going forward. +""" +server.stop() +snapshot = os.path.join(vardir, "00000000000000000500.snap") +os.symlink(os.path.abspath("box/00000000000000000500.snap"), snapshot) +server.test_option("--cat=00000000000000000500.snap") +# server.start() + +# print "# Restore the default server..." +# server.stop() +os.unlink(snapshot) + -- GitLab