setExtractCreator sets what type of file extraction and creation is used based on the RequestSpec.
()
| 447 | |
| 448 | // setExtractCreator sets what type of file extraction and creation is used based on the RequestSpec. |
| 449 | func (m *Manager) setExtractCreator() (err error) { |
| 450 | var keyExtractor extract.KeyExtractor |
| 451 | |
| 452 | switch m.rs.Algorithm.Kind { |
| 453 | case SortKindContent: |
| 454 | keyExtractor, err = extract.NewContentKeyExtractor(m.rs.Algorithm.FormatType, m.rs.Algorithm.Extension) |
| 455 | case SortKindMD5: |
| 456 | keyExtractor, err = extract.NewMD5KeyExtractor() |
| 457 | default: |
| 458 | keyExtractor, err = extract.NewNameKeyExtractor() |
| 459 | } |
| 460 | |
| 461 | if err != nil { |
| 462 | return errors.WithStack(err) |
| 463 | } |
| 464 | |
| 465 | onDuplicatedRecords := func(msg string) error { |
| 466 | return m.react(m.rs.DuplicatedRecords, msg) |
| 467 | } |
| 468 | |
| 469 | var extractCreator extract.Creator |
| 470 | switch m.rs.Extension { |
| 471 | case cos.ExtTar: |
| 472 | extractCreator = extract.NewTarExtractCreator(m.ctx.t) |
| 473 | case cos.ExtTarTgz, cos.ExtTgz: |
| 474 | extractCreator = extract.NewTargzExtractCreator(m.ctx.t) |
| 475 | case cos.ExtZip: |
| 476 | extractCreator = extract.NewZipExtractCreator(m.ctx.t) |
| 477 | default: |
| 478 | cos.Assertf(false, "unknown extension %s", m.rs.Extension) |
| 479 | } |
| 480 | |
| 481 | if !m.rs.DryRun { |
| 482 | m.extractCreator = extractCreator |
| 483 | } else { |
| 484 | m.extractCreator = extract.NopExtractCreator(extractCreator) |
| 485 | } |
| 486 | |
| 487 | m.recManager = extract.NewRecordManager( |
| 488 | m.ctx.t, m.rs.Bck, |
| 489 | m.rs.Extension, m.extractCreator, |
| 490 | keyExtractor, onDuplicatedRecords, |
| 491 | ) |
| 492 | |
| 493 | return nil |
| 494 | } |
| 495 | |
| 496 | // updateFinishedAck marks daemonID as finished. If all daemons ack then the |
| 497 | // finalCleanup is dispatched in separate goroutine. |
no test coverage detected