(operation uint64, key, val []byte)
| 548 | } |
| 549 | |
| 550 | func (cw *compactWriter) Mutate(operation uint64, key, val []byte) error { |
| 551 | if cw.syncAfterBytes > 0 && cw.bytesSinceSync > cw.syncAfterBytes { |
| 552 | err := cw.file.Sync() |
| 553 | if err != nil { |
| 554 | return err |
| 555 | } |
| 556 | cw.bytesSinceSync = 0 |
| 557 | } |
| 558 | |
| 559 | keyStart := cw.bufWriter.Written() |
| 560 | _, err := cw.bufWriter.Write(key) |
| 561 | if err != nil { |
| 562 | return err |
| 563 | } |
| 564 | |
| 565 | _, err = cw.bufWriter.Write(val) |
| 566 | if err != nil { |
| 567 | return err |
| 568 | } |
| 569 | |
| 570 | keyLen := len(key) |
| 571 | valLen := len(val) |
| 572 | |
| 573 | opKlVl := encodeOpKeyLenValLen(operation, keyLen, valLen) |
| 574 | |
| 575 | if keyLen <= 0 && valLen <= 0 { |
| 576 | keyStart = 0 |
| 577 | } |
| 578 | |
| 579 | pair := []uint64{opKlVl, uint64(keyStart)} |
| 580 | kvsBuf, err := Uint64SliceToByteSlice(pair) |
| 581 | if err != nil { |
| 582 | return err |
| 583 | } |
| 584 | |
| 585 | _, err = cw.kvsWriter.Write(kvsBuf) |
| 586 | if err != nil { |
| 587 | return err |
| 588 | } |
| 589 | |
| 590 | switch operation { |
| 591 | case OperationSet: |
| 592 | cw.totOperationSet++ |
| 593 | case OperationDel: |
| 594 | cw.totOperationDel++ |
| 595 | case OperationMerge: |
| 596 | cw.totOperationMerge++ |
| 597 | default: |
| 598 | } |
| 599 | |
| 600 | cw.totKeyByte += uint64(keyLen) |
| 601 | cw.totValByte += uint64(valLen) |
| 602 | |
| 603 | cw.bytesSinceSync += keyLen + valLen + 16 /* len(kvsBuf) */ |
| 604 | |
| 605 | return nil |
| 606 | } |
nothing calls this directly
no test coverage detected