github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/testdata/compaction_iter (about) 1 define 2 a.SET.1:b 3 ---- 4 5 iter print-snapshot-pinned 6 first 7 next 8 ---- 9 a#1,1:b (not pinned) 10 . 11 12 define 13 a.SET.2:c 14 a.SET.1:b 15 ---- 16 17 iter print-snapshot-pinned 18 first 19 next 20 ---- 21 a#2,1:c (not pinned) 22 . 23 24 iter print-snapshot-pinned snapshots=0 25 first 26 next 27 ---- 28 a#2,1:c (not pinned) 29 . 30 31 iter snapshots=1 32 first 33 next 34 ---- 35 a#2,1:c 36 . 37 38 iter print-snapshot-pinned snapshots=2 39 first 40 next 41 next 42 ---- 43 a#2,1:c (not pinned) 44 a#1,1:b (pinned) 45 . 46 47 define 48 a.DEL.2: 49 a.SET.1:b 50 ---- 51 52 iter 53 first 54 next 55 ---- 56 a#2,0: 57 . 58 59 iter elide-tombstones=true 60 first 61 ---- 62 . 63 64 iter print-snapshot-pinned elide-tombstones=true snapshots=2 65 first 66 next 67 next 68 ---- 69 a#2,0: (pinned) 70 a#1,1:b (pinned) 71 . 72 73 iter print-snapshot-pinned elide-tombstones=true snapshots=1 74 first 75 next 76 ---- 77 a#2,0: (pinned) 78 . 79 80 define 81 a.DEL.2: 82 a.SET.1:b 83 b.SET.3:c 84 ---- 85 86 iter print-snapshot-pinned 87 first 88 next 89 next 90 ---- 91 a#2,0: (not pinned) 92 b#3,1:c (not pinned) 93 . 94 95 iter snapshots=1 96 first 97 next 98 next 99 ---- 100 a#2,0: 101 b#3,1:c 102 . 103 104 iter snapshots=2 105 first 106 next 107 next 108 next 109 ---- 110 a#2,0: 111 a#1,1:b 112 b#3,1:c 113 . 114 115 define 116 a.SET.1:a 117 b.SET.2:b 118 c.SET.3:c 119 ---- 120 121 iter 122 first 123 next 124 next 125 next 126 ---- 127 a#1,1:a 128 b#2,1:b 129 c#3,1:c 130 . 131 132 define 133 a.MERGE.3:d 134 a.MERGE.2:c 135 a.SET.1:b 136 b.MERGE.2:b 137 b.MERGE.1:a 138 ---- 139 140 iter 141 first 142 next 143 next 144 ---- 145 a#3,1:bcd[base] 146 b#2,2:ab 147 . 148 149 iter snapshots=3 print-snapshot-pinned 150 first 151 next 152 next 153 next 154 ---- 155 a#3,2:d (not pinned) 156 a#2,1:bc[base] (pinned) 157 b#2,2:ab (not pinned) 158 . 159 160 define 161 a.SET.9:b 162 a.DEL.8: 163 a.SET.7:d 164 a.DEL.6: 165 a.SET.5:f 166 ---- 167 168 iter 169 first 170 next 171 ---- 172 a#9,1:b 173 . 174 175 iter snapshots=6 176 first 177 next 178 next 179 ---- 180 a#9,1:b 181 a#5,1:f 182 . 183 184 iter snapshots=7 185 first 186 next 187 next 188 ---- 189 a#9,1:b 190 a#6,0: 191 . 192 193 iter snapshots=8 194 first 195 next 196 next 197 ---- 198 a#9,1:b 199 a#7,1:d 200 . 201 202 iter snapshots=9 203 first 204 next 205 next 206 ---- 207 a#9,1:b 208 a#8,0: 209 . 210 211 iter snapshots=10 212 first 213 next 214 ---- 215 a#9,1:b 216 . 217 218 iter snapshots=(5,6,7,8,9) print-snapshot-pinned 219 first 220 next 221 next 222 next 223 next 224 next 225 ---- 226 a#9,1:b (not pinned) 227 a#8,0: (pinned) 228 a#7,1:d (pinned) 229 a#6,0: (pinned) 230 a#5,1:f (pinned) 231 . 232 233 define 234 a.INVALID.2:b 235 a.SET.1:c 236 ---- 237 238 iter 239 first 240 ---- 241 err=invalid internal key kind: INVALID 242 243 define 244 a.SET.2:b 245 a.INVALID.1:c 246 ---- 247 248 iter 249 first 250 next 251 ---- 252 a#2,1:b 253 err=invalid internal key kind: INVALID 254 255 define 256 a.MERGE.2:b 257 a.INVALID.1:c 258 ---- 259 260 iter 261 first 262 next 263 ---- 264 a#2,2:b 265 err=invalid internal key kind: INVALID 266 267 define 268 a.INVALID.2:c 269 a.RANGEDEL.1:d 270 ---- 271 272 iter 273 first 274 tombstones 275 ---- 276 err=invalid internal key kind: INVALID 277 . 278 279 define 280 a.MERGE.2:b 281 a.MERGE.1:c 282 a.MERGE.0:d 283 ---- 284 285 iter snapshots=(1,2) print-snapshot-pinned 286 first 287 next 288 next 289 next 290 ---- 291 a#2,2:b (not pinned) 292 a#1,2:c (pinned) 293 a#0,2:d (pinned) 294 . 295 296 define 297 a.SET.2:b 298 a.RANGEDEL.1:c 299 b.RANGEDEL.4:d 300 b.SET.2:e 301 c.SET.3:f 302 ---- 303 304 # NB: Range deletions are always marked as 'not pinned' currently. Extending 305 # snapshot-pinning statistics to range deletions and range keys is TODO. 306 307 iter print-snapshot-pinned 308 first 309 next 310 next 311 next 312 tombstones 313 ---- 314 a#2,1:b (not pinned) 315 a#1,15:c (not pinned) 316 b#4,15:d (not pinned) 317 . 318 a-b#1 319 b-c#4 320 c-d#4 321 . 322 323 iter snapshots=2 print-snapshot-pinned 324 first 325 next 326 next 327 next 328 tombstones 329 ---- 330 a#2,1:b (not pinned) 331 a#1,15:c (not pinned) 332 b#4,15:d (not pinned) 333 . 334 a-b#1 335 b-c#4 336 b-c#1 337 c-d#4 338 . 339 340 iter snapshots=3 print-snapshot-pinned 341 first 342 next 343 next 344 next 345 next 346 tombstones 347 ---- 348 a#2,1:b (not pinned) 349 a#1,15:c (not pinned) 350 b#4,15:d (not pinned) 351 b#2,1:e (pinned) 352 . 353 a-b#1 354 b-c#4 355 b-c#1 356 c-d#4 357 . 358 359 iter snapshots=4 print-snapshot-pinned 360 first 361 next 362 next 363 next 364 next 365 next 366 tombstones 367 ---- 368 a#2,1:b (not pinned) 369 a#1,15:c (not pinned) 370 b#4,15:d (not pinned) 371 b#2,1:e (pinned) 372 c#3,1:f (pinned) 373 . 374 a-b#1 375 b-c#4 376 b-c#1 377 c-d#4 378 . 379 380 define 381 a.RANGEDEL.3:e 382 b.SET.4:b 383 c.SET.3:c 384 d.SET.2:d 385 e.SET.1:e 386 ---- 387 388 iter 389 first 390 next 391 next 392 next 393 next 394 tombstones 395 ---- 396 a#3,15:e 397 b#4,1:b 398 c#3,1:c 399 e#1,1:e 400 . 401 a-e#3 402 . 403 404 define 405 a.RANGEDEL.3:e 406 b.MERGE.4:b 407 c.MERGE.3:c 408 d.MERGE.2:d 409 e.MERGE.1:e 410 ---- 411 412 iter 413 first 414 next 415 next 416 next 417 next 418 tombstones 419 ---- 420 a#3,15:e 421 b#4,2:b 422 c#3,2:c 423 e#1,2:e 424 . 425 a-e#3 426 . 427 428 define 429 a.RANGEDEL.3:c 430 b.MERGE.5:e 431 b.MERGE.4:d 432 b.MERGE.2:c 433 b.MERGE.1:b 434 d.MERGE.5:c 435 d.MERGE.4:b 436 d.RANGEDEL.3:f 437 d.MERGE.2:e 438 d.MERGE.1:d 439 ---- 440 441 iter 442 first 443 next 444 next 445 next 446 next 447 tombstones 448 ---- 449 a#3,15:c 450 b#5,2:de 451 d#5,2:bc 452 d#3,15:f 453 . 454 a-c#3 455 d-f#3 456 . 457 458 define 459 a.RANGEDEL.3:d 460 b.RANGEDEL.2:e 461 c.RANGEDEL.1:f 462 ---- 463 464 iter 465 first 466 next 467 next 468 next 469 tombstones 470 ---- 471 a#3,15:d 472 b#2,15:e 473 c#1,15:f 474 . 475 a-b#3 476 b-c#3 477 c-d#3 478 d-e#2 479 e-f#1 480 . 481 482 iter snapshots=2 483 first 484 next 485 next 486 next 487 tombstones 488 ---- 489 a#3,15:d 490 b#2,15:e 491 c#1,15:f 492 . 493 a-b#3 494 b-c#3 495 c-d#3 496 c-d#1 497 d-e#2 498 d-e#1 499 e-f#1 500 . 501 502 iter snapshots=3 503 first 504 next 505 next 506 next 507 tombstones 508 ---- 509 a#3,15:d 510 b#2,15:e 511 c#1,15:f 512 . 513 a-b#3 514 b-c#3 515 b-c#2 516 c-d#3 517 c-d#2 518 d-e#2 519 e-f#1 520 . 521 522 iter snapshots=(2,3) 523 first 524 next 525 next 526 next 527 tombstones 528 ---- 529 a#3,15:d 530 b#2,15:e 531 c#1,15:f 532 . 533 a-b#3 534 b-c#3 535 b-c#2 536 c-d#3 537 c-d#2 538 c-d#1 539 d-e#2 540 d-e#1 541 e-f#1 542 . 543 544 define 545 a.RANGEDEL.10:k 546 f.SET.9:f 547 f.SET.8:f 548 ---- 549 550 iter snapshots=(9,10) 551 first 552 next 553 tombstones f 554 next 555 tombstones 556 ---- 557 a#10,15:k 558 f#9,1:f 559 a-f#10 560 . 561 f#8,1:f 562 f-k#10 563 . 564 565 define 566 f.RANGEDEL.10:k 567 f.SET.9:f 568 f.SET.8:f 569 ---- 570 571 iter snapshots=(9,10) 572 first 573 next 574 tombstones f 575 next 576 tombstones 577 ---- 578 f#10,15:k 579 f#9,1:f 580 . 581 f#8,1:f 582 f-k#10 583 . 584 585 define 586 a.SET.1:a 587 b.RANGEDEL.2:d 588 c.RANGEDEL.3:e 589 d.SET.4:d 590 ---- 591 592 iter 593 first 594 next 595 next 596 next 597 tombstones c 598 tombstones 599 ---- 600 a#1,1:a 601 b#2,15:d 602 c#3,15:e 603 d#4,1:d 604 b-c#2 605 . 606 c-d#3 607 d-e#3 608 . 609 610 iter snapshots=3 611 first 612 next 613 next 614 next 615 tombstones c 616 tombstones 617 ---- 618 a#1,1:a 619 b#2,15:d 620 c#3,15:e 621 d#4,1:d 622 b-c#2 623 . 624 c-d#3 625 c-d#2 626 d-e#3 627 . 628 629 define 630 a.SET.1:a 631 b.RANGEDEL.2:d 632 c.SET.4:d 633 ---- 634 635 iter 636 first 637 next 638 next 639 tombstones c 640 tombstones 641 ---- 642 a#1,1:a 643 b#2,15:d 644 c#4,1:d 645 b-c#2 646 . 647 c-d#2 648 . 649 650 define 651 a.RANGEDEL.2:d 652 a.SET.2:a 653 b.SET.2:b 654 c.SET.2:c 655 ---- 656 657 iter 658 first 659 next 660 next 661 next 662 next 663 ---- 664 a#2,15:d 665 a#2,1:a 666 b#2,1:b 667 c#2,1:c 668 . 669 670 define 671 a.SINGLEDEL.1: 672 ---- 673 674 iter 675 first 676 next 677 ---- 678 a#1,7: 679 . 680 681 iter elide-tombstones=true 682 first 683 ---- 684 . 685 ineffectual-single-deletes: a 686 687 define 688 a.SINGLEDEL.2: 689 a.SINGLEDEL.1: 690 ---- 691 692 iter 693 first 694 next 695 ---- 696 a#2,7: 697 . 698 ineffectual-single-deletes: a 699 700 define 701 a.SINGLEDEL.3: 702 a.SINGLEDEL.2: 703 a.SET.1:a 704 ---- 705 706 iter 707 first 708 ---- 709 . 710 ineffectual-single-deletes: a 711 712 define 713 a.SET.3:a 714 b.SINGLEDEL.2: 715 b.DEL.1: 716 ---- 717 718 iter 719 first 720 next 721 next 722 ---- 723 a#3,1:a 724 b#2,0: 725 . 726 ineffectual-single-deletes: b 727 728 define 729 a.SINGLEDEL.2: 730 a.DEL.1: 731 ---- 732 733 iter 734 first 735 next 736 ---- 737 a#2,0: 738 . 739 ineffectual-single-deletes: a 740 741 iter elide-tombstones=true 742 first 743 ---- 744 . 745 ineffectual-single-deletes: a 746 747 define 748 a.SINGLEDEL.2: 749 a.MERGE.1: 750 ---- 751 752 iter 753 first 754 ---- 755 . 756 757 iter elide-tombstones=true 758 first 759 ---- 760 . 761 762 define 763 a.SINGLEDEL.2: 764 a.SET.1:b 765 ---- 766 767 iter 768 first 769 ---- 770 . 771 772 define 773 a.SET.2:b 774 a.SINGLEDEL.1: 775 ---- 776 777 iter 778 first 779 next 780 ---- 781 a#2,1:b 782 . 783 784 # We don't notice the ineffectual single delete since the SET causes all 785 # SingleDelete error checking to be skipped. 786 iter elide-tombstones=true 787 first 788 next 789 ---- 790 a#2,1:b 791 . 792 793 define 794 a.MERGE.6:b 795 a.SINGLEDEL.5: 796 a.SET.4:a 797 ---- 798 799 iter 800 first 801 next 802 ---- 803 a#6,18:b[base] 804 . 805 806 # Non-deterministic use of SINGLEDEL where there are two older SETs that have 807 # not been deleted or single deleted. It is permitted to shadow both, since 808 # MERGE turns into a SETWITHDELETE when it meets the SINGLEDEL. 809 define 810 a.MERGE.6:b 811 a.SINGLEDEL.5: 812 a.SET.4:a 813 a.SET.3:a 814 ---- 815 816 iter 817 first 818 next 819 ---- 820 a#6,18:b[base] 821 . 822 823 define 824 a.SINGLEDEL.2: 825 a.SET.1:b 826 b.SET.3:c 827 ---- 828 829 iter 830 first 831 next 832 ---- 833 b#3,1:c 834 . 835 836 define 837 a.SINGLEDEL.3: 838 a.SET.2:b 839 a.SET.1:a 840 ---- 841 842 iter 843 first 844 next 845 ---- 846 a#1,1:a 847 . 848 invariant-violation-single-deletes: a 849 850 define 851 a.SINGLEDEL.3: 852 a.MERGE.2:b 853 a.MERGE.1:a 854 ---- 855 856 # SINGLEDEL consumes the first MERGE. 857 iter 858 first 859 next 860 ---- 861 a#1,2:a 862 . 863 invariant-violation-single-deletes: a 864 865 define 866 a.SINGLEDEL.4: 867 a.SET.3:val 868 a.SINGLEDEL.2: 869 a.SET.1:val 870 ---- 871 872 iter 873 first 874 ---- 875 . 876 877 iter snapshots=2 878 first 879 next 880 next 881 ---- 882 a#2,7: 883 a#1,1:val 884 . 885 886 define 887 a.SINGLEDEL.4: 888 a.SET.3:val 889 a.DEL.2: 890 a.SET.1:val 891 ---- 892 893 iter 894 first 895 next 896 ---- 897 a#2,0: 898 . 899 900 iter snapshots=2 901 first 902 next 903 next 904 ---- 905 a#2,0: 906 a#1,1:val 907 . 908 909 iter snapshots=3 910 first 911 next 912 ---- 913 a#2,0: 914 . 915 916 iter snapshots=(2,3) 917 first 918 next 919 next 920 ---- 921 a#2,0: 922 a#1,1:val 923 . 924 925 define 926 a.SINGLEDEL.4: 927 a.SET.3:c 928 a.MERGE.2:b 929 a.SET.1:a 930 ---- 931 932 iter 933 first 934 next 935 ---- 936 a#2,1:ab[base] 937 . 938 invariant-violation-single-deletes: a 939 940 iter snapshots=2 941 first 942 next 943 next 944 ---- 945 a#2,2:b 946 a#1,1:a 947 . 948 invariant-violation-single-deletes: a 949 950 iter snapshots=3 951 first 952 next 953 ---- 954 a#2,1:ab[base] 955 . 956 invariant-violation-single-deletes: a 957 958 iter snapshots=(2,3,4) 959 first 960 next 961 next 962 next 963 next 964 ---- 965 a#4,7: 966 a#3,1:c 967 a#2,2:b 968 a#1,1:a 969 . 970 971 define 972 a.SINGLEDEL.3: 973 a.RANGEDEL.2:c 974 a.SET.1:val 975 ---- 976 977 iter 978 first 979 next 980 next 981 tombstones 982 ---- 983 a#3,7: 984 a#2,15:c 985 . 986 a-c#2 987 . 988 989 define 990 a.RANGEDEL.3:d 991 a.DEL.2: 992 a.SET.1:a 993 d.DEL.2: 994 ---- 995 996 iter 997 first 998 next 999 next 1000 tombstones 1001 ---- 1002 a#3,15:d 1003 d#2,0: 1004 . 1005 a-d#3 1006 . 1007 1008 iter snapshots=3 1009 first 1010 next 1011 next 1012 next 1013 ---- 1014 a#3,15:d 1015 a#2,0: 1016 d#2,0: 1017 . 1018 1019 iter snapshots=2 1020 first 1021 next 1022 next 1023 next 1024 ---- 1025 a#3,15:d 1026 a#1,1:a 1027 d#2,0: 1028 . 1029 1030 iter snapshots=1 1031 first 1032 next 1033 next 1034 ---- 1035 a#3,15:d 1036 d#2,0: 1037 . 1038 1039 define 1040 a.MERGE.2:a 1041 b.RANGEDEL.1:c 1042 ---- 1043 1044 iter 1045 first 1046 tombstones a 1047 next 1048 next 1049 tombstones 1050 ---- 1051 a#2,2:a 1052 . 1053 b#1,15:c 1054 . 1055 b-c#1 1056 . 1057 1058 define 1059 a.MERGE.2:v2 1060 a.RANGEDEL.1:b 1061 a.MERGE.1:v1 1062 ---- 1063 1064 iter allow-zero-seqnum=true 1065 first 1066 next 1067 next 1068 next 1069 tombstones 1070 ---- 1071 a#2,2:v2 1072 a#1,15:b 1073 a#0,2:v1 1074 . 1075 a-b#1 1076 . 1077 1078 # Verify that we transform merge+del -> set. 1079 1080 define 1081 a.MERGE.5:5 1082 a.DEL.3: 1083 a.MERGE.1:1 1084 ---- 1085 1086 iter 1087 first 1088 next 1089 ---- 1090 a#5,18:5[base] 1091 . 1092 1093 iter allow-zero-seqnum=true 1094 first 1095 next 1096 ---- 1097 a#0,18:5[base] 1098 . 1099 1100 iter elide-tombstones=true 1101 first 1102 next 1103 ---- 1104 a#5,18:5[base] 1105 . 1106 1107 iter snapshots=2 1108 first 1109 next 1110 next 1111 ---- 1112 a#5,18:5[base] 1113 a#1,2:1 1114 . 1115 1116 iter snapshots=2 elide-tombstones=true 1117 first 1118 next 1119 next 1120 ---- 1121 a#5,18:5[base] 1122 a#1,2:1 1123 . 1124 1125 # Verify that merge+rangedel -> merge. 1126 1127 define 1128 a.RANGEDEL.3:c 1129 b.MERGE.5:5 1130 b.SET.2:2 1131 b.MERGE.1:1 1132 ---- 1133 1134 iter 1135 first 1136 next 1137 next 1138 ---- 1139 a#3,15:c 1140 b#5,2:5 1141 . 1142 1143 iter allow-zero-seqnum=true 1144 first 1145 next 1146 next 1147 ---- 1148 a#3,15:c 1149 b#0,2:5 1150 . 1151 1152 iter snapshots=2 1153 first 1154 next 1155 next 1156 ---- 1157 a#3,15:c 1158 b#5,2:5 1159 b#1,2:1 1160 1161 define 1162 a.RANGEDEL.3:c 1163 b.MERGE.5:5 1164 b.MERGE.2:2 1165 b.MERGE.1:1 1166 ---- 1167 1168 iter 1169 first 1170 next 1171 next 1172 ---- 1173 a#3,15:c 1174 b#5,2:5 1175 . 1176 1177 iter snapshots=2 1178 first 1179 next 1180 next 1181 ---- 1182 a#3,15:c 1183 b#5,2:5 1184 b#1,2:1 1185 1186 # NB: Zero values are skipped by deletable merger. 1187 define merger=deletable 1188 a.MERGE.4:-2 1189 a.MERGE.3:-1 1190 a.MERGE.2:2 1191 a.MERGE.1:1 1192 b.MERGE.4:-3 1193 b.MERGE.3:3 1194 b.MERGE.2:2 1195 b.MERGE.1:-2 1196 ---- 1197 1198 iter 1199 first 1200 next 1201 next 1202 ---- 1203 . 1204 . 1205 . 1206 1207 # Test that range keys are interleaved, and exposed to the fragmenter. 1208 1209 define 1210 a.SINGLEDEL.4: 1211 a.SET.3:val 1212 a.DEL.2: 1213 a.SET.1:val 1214 c.SET.3:val 1215 ---- 1216 1217 define-range-keys 1218 a-b:{(#3,RANGEKEYSET,@2,foo)} 1219 d-e:{(#3,RANGEKEYSET,@2,foo)} 1220 ---- 1221 1222 iter 1223 first 1224 next 1225 next 1226 next 1227 next 1228 range-keys 1229 ---- 1230 a#72057594037927935,21: 1231 a#2,0: 1232 c#3,1:val 1233 d#72057594037927935,21: 1234 . 1235 a-b:{(#3,RANGEKEYSET,@2,foo)} 1236 d-e:{(#3,RANGEKEYSET,@2,foo)} 1237 .