|
1 | 1 | #include <ydb/core/keyvalue/keyvalue_events.h>
|
2 | 2 | #include <ydb/core/persqueue/events/internal.h>
|
3 | 3 | #include <ydb/core/persqueue/pqtablet/partition/partition.h>
|
| 4 | +#include <ydb/core/persqueue/pqtablet/partition/blob_key_filter.h> |
4 | 5 | #include <ydb/core/persqueue/ut/common/pq_ut_common.h>
|
5 | 6 | #include <ydb/core/protos/counters_keyvalue.pb.h>
|
6 | 7 | #include <ydb/core/protos/pqconfig.pb.h>
|
@@ -3682,6 +3683,161 @@ Y_UNIT_TEST_F(TEvTxCalcPredicate_With_Conflicts, TPartitionTxTestHelper)
|
3682 | 3683 | WaitTxPredicateReply(tx2);
|
3683 | 3684 | }
|
3684 | 3685 |
|
| 3686 | +Y_UNIT_TEST(BlobKeyFilfer) |
| 3687 | +{ |
| 3688 | + auto filterKeys = [](const TVector<TString>& keys, const TPartitionId& partitionId) -> THashSet<TString> { |
| 3689 | + NKikimrClient::TKeyValueResponse::TReadRangeResult result; |
| 3690 | + for (const auto& k : keys) { |
| 3691 | + auto* pair = result.AddPair(); |
| 3692 | + pair->SetStatus(NKikimrProto::OK); |
| 3693 | + pair->SetKey(k); |
| 3694 | + } |
| 3695 | + return FilterBlobsMetaData(result, partitionId); |
| 3696 | + }; |
| 3697 | + |
| 3698 | + TVector<TString> actualKeys{ |
| 3699 | + "d0000000000_00000000000000000000_00000_0000000001_00000?", |
| 3700 | + "d0000000000_00000000000000000001_00000_0000000001_00000?" |
| 3701 | + }; |
| 3702 | + THashSet<TString> expectedKeys{ |
| 3703 | + "d0000000000_00000000000000000000_00000_0000000001_00000?", |
| 3704 | + "d0000000000_00000000000000000001_00000_0000000001_00000?" |
| 3705 | + }; |
| 3706 | + auto filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3707 | + |
| 3708 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3709 | + |
| 3710 | + actualKeys = { |
| 3711 | + "d0000000000_00000000000000000000_00000_0000000001_00000?", |
| 3712 | + "d0000000000_00000000000000000000_00000_0000000002_00000|", |
| 3713 | + "d0000000000_00000000000000000001_00000_0000000001_00000?" |
| 3714 | + }; |
| 3715 | + expectedKeys = { |
| 3716 | + "d0000000000_00000000000000000000_00000_0000000002_00000|" |
| 3717 | + }; |
| 3718 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3719 | + |
| 3720 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3721 | + |
| 3722 | + actualKeys = { |
| 3723 | + "d0000000000_00000000000000000000_00000_0000000001_00000?", |
| 3724 | + "d0000000000_00000000000000000000_00000_0000000001_00000|", |
| 3725 | + "d0000000000_00000000000000000001_00000_0000000001_00000?", |
| 3726 | + "d0000000000_00000000000000000001_00000_0000000002_00000|", |
| 3727 | + "d0000000000_00000000000000000002_00000_0000000001_00000?" |
| 3728 | + }; |
| 3729 | + expectedKeys = { |
| 3730 | + "d0000000000_00000000000000000000_00000_0000000001_00000|", |
| 3731 | + "d0000000000_00000000000000000001_00000_0000000002_00000|" |
| 3732 | + }; |
| 3733 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3734 | + |
| 3735 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3736 | + |
| 3737 | + actualKeys = { |
| 3738 | + "d0000000000_00000000000000000000_00000_0000000000_00002|", |
| 3739 | + "d0000000000_00000000000000000000_00002_0000000001_00002|" |
| 3740 | + }; |
| 3741 | + expectedKeys = { |
| 3742 | + "d0000000000_00000000000000000000_00000_0000000000_00002|", |
| 3743 | + "d0000000000_00000000000000000000_00002_0000000001_00002|" |
| 3744 | + }; |
| 3745 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3746 | + |
| 3747 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3748 | + |
| 3749 | + actualKeys = { |
| 3750 | + "d0000000000_00000000000000000000_00000_0000000001_00000?", |
| 3751 | + "d0000000000_00000000000000000000_00000_0000000003_00000|", |
| 3752 | + "d0000000000_00000000000000000001_00000_0000000002_00000?", |
| 3753 | + "d0000000000_00000000000000000003_00000_0000000001_00000?", |
| 3754 | + "d0000000000_00000000000000000003_00000_0000000001_00000|" |
| 3755 | + }; |
| 3756 | + expectedKeys = { |
| 3757 | + "d0000000000_00000000000000000000_00000_0000000003_00000|", |
| 3758 | + "d0000000000_00000000000000000003_00000_0000000001_00000|" |
| 3759 | + }; |
| 3760 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3761 | + |
| 3762 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3763 | + |
| 3764 | + actualKeys = { |
| 3765 | + "d0000000000_00000000000000000000_00000_0000000000_00002?", |
| 3766 | + "d0000000000_00000000000000000000_00000_0000000000_00002|", |
| 3767 | + "d0000000000_00000000000000000000_00002_0000000001_00002?", |
| 3768 | + "d0000000000_00000000000000000000_00002_0000000001_00002|" |
| 3769 | + }; |
| 3770 | + expectedKeys = { |
| 3771 | + "d0000000000_00000000000000000000_00000_0000000000_00002|", |
| 3772 | + "d0000000000_00000000000000000000_00002_0000000001_00002|" |
| 3773 | + }; |
| 3774 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3775 | + |
| 3776 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3777 | + |
| 3778 | + actualKeys = { |
| 3779 | + "d0000000000_00000000000000000000_00000_0000000002_00000|", |
| 3780 | + "d0000000000_00000000000000000000_00000_0000000003_00000|" |
| 3781 | + }; |
| 3782 | + expectedKeys = { |
| 3783 | + "d0000000000_00000000000000000000_00000_0000000003_00000|" |
| 3784 | + }; |
| 3785 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3786 | + |
| 3787 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3788 | + |
| 3789 | + actualKeys = { |
| 3790 | + "d0000000000_00000000000000000000_00000_0000000002_00000?", |
| 3791 | + "d0000000000_00000000000000000000_00000_0000000003_00000|", |
| 3792 | + "d0000000000_00000000000000000002_00000_0000000001_00000?", |
| 3793 | + }; |
| 3794 | + expectedKeys = { |
| 3795 | + "d0000000000_00000000000000000000_00000_0000000003_00000|" |
| 3796 | + }; |
| 3797 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3798 | + |
| 3799 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3800 | + |
| 3801 | + actualKeys = { |
| 3802 | + "d0000000000_00000000000000000000_00000_0000000002_00004?", |
| 3803 | + "d0000000000_00000000000000000000_00000_0000000002_00005?", |
| 3804 | + "d0000000000_00000000000000000002_00000_0000000001_00002?" |
| 3805 | + }; |
| 3806 | + expectedKeys = { |
| 3807 | + "d0000000000_00000000000000000000_00000_0000000002_00005?", |
| 3808 | + "d0000000000_00000000000000000002_00000_0000000001_00002?" |
| 3809 | + }; |
| 3810 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3811 | + |
| 3812 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3813 | + |
| 3814 | + actualKeys = { |
| 3815 | + "d0000000000_00000000000000000000_00000_0000000002_00004?", |
| 3816 | + "d0000000000_00000000000000000000_00000_0000000002_00005|", |
| 3817 | + "d0000000000_00000000000000000002_00000_0000000001_00002?" |
| 3818 | + }; |
| 3819 | + expectedKeys = { |
| 3820 | + "d0000000000_00000000000000000000_00000_0000000002_00005|", |
| 3821 | + "d0000000000_00000000000000000002_00000_0000000001_00002?" |
| 3822 | + }; |
| 3823 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3824 | + |
| 3825 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3826 | + |
| 3827 | + actualKeys = { |
| 3828 | + "d0000000000_00000000000000000000_00000_0000000002_00004?", |
| 3829 | + "d0000000000_00000000000000000000_00000_0000000002_00004|", |
| 3830 | + "d0000000000_00000000000000000002_00000_0000000001_00002?" |
| 3831 | + }; |
| 3832 | + expectedKeys = { |
| 3833 | + "d0000000000_00000000000000000000_00000_0000000002_00004|", |
| 3834 | + "d0000000000_00000000000000000002_00000_0000000001_00002?" |
| 3835 | + }; |
| 3836 | + filteredKeys = filterKeys(actualKeys, TPartitionId(0)); |
| 3837 | + |
| 3838 | + UNIT_ASSERT_EQUAL(filteredKeys, expectedKeys); |
| 3839 | +} |
| 3840 | + |
3685 | 3841 | } // End of suite
|
3686 | 3842 |
|
3687 | 3843 | } // namespace
|
0 commit comments