(t testing.TB, encoding string, appendTrace bool, runner func([][]byte, []*tempopb.Trace, common.WALBlock))
| 358 | } |
| 359 | |
| 360 | func runWALTestWithAppendMode(t testing.TB, encoding string, appendTrace bool, runner func([][]byte, []*tempopb.Trace, common.WALBlock)) { |
| 361 | wal, err := New(&Config{ |
| 362 | Filepath: t.TempDir(), |
| 363 | Version: encoding, |
| 364 | }) |
| 365 | require.NoError(t, err, "unexpected error creating temp wal") |
| 366 | |
| 367 | blockID := uuid.New() |
| 368 | |
| 369 | meta := backend.NewBlockMeta("fake", blockID, encoding) |
| 370 | block, err := wal.NewBlock(meta, model.CurrentEncoding) |
| 371 | require.NoError(t, err, "unexpected error creating block") |
| 372 | |
| 373 | enc := model.MustNewSegmentDecoder(model.CurrentEncoding) |
| 374 | |
| 375 | objects := 250 |
| 376 | objs := make([]*tempopb.Trace, 0, objects) |
| 377 | ids := make([][]byte, 0, objects) |
| 378 | for i := 0; i < objects; i++ { |
| 379 | id := make([]byte, 16) |
| 380 | _, err = crand.Read(id) |
| 381 | require.NoError(t, err) |
| 382 | obj := test.MakeTrace(rand.Int()%10+1, id) |
| 383 | |
| 384 | trace.SortTrace(obj) |
| 385 | |
| 386 | ids = append(ids, id) |
| 387 | objs = append(objs, obj) |
| 388 | |
| 389 | if appendTrace { |
| 390 | err = block.AppendTrace(id, obj, 0, 0, true) |
| 391 | require.NoError(t, err) |
| 392 | } else { |
| 393 | b1, err := enc.PrepareForWrite(obj, 0, 0) |
| 394 | require.NoError(t, err) |
| 395 | |
| 396 | b2, err := enc.ToObject([][]byte{b1}) |
| 397 | require.NoError(t, err) |
| 398 | |
| 399 | err = block.Append(id, b2, 0, 0, true) |
| 400 | require.NoError(t, err) |
| 401 | } |
| 402 | |
| 403 | if i%100 == 0 { |
| 404 | err = block.Flush() |
| 405 | require.NoError(t, err) |
| 406 | } |
| 407 | } |
| 408 | err = block.Flush() |
| 409 | require.NoError(t, err) |
| 410 | |
| 411 | runner(ids, objs, block) |
| 412 | |
| 413 | // rescan blocks |
| 414 | blocks, err := wal.RescanBlocks(0, log.NewNopLogger()) |
| 415 | require.NoError(t, err, "unexpected error getting blocks") |
| 416 | require.Len(t, blocks, 1) |
| 417 |
no test coverage detected