docstr: target: test search after compact, and queryNode get delete request from channel,
          rather than compacted delta log
  method: 1.insert, flush and load
          2.delete half
          3.compact
          4.search
  expected: No compact, compact get delta log from storage
docstr_tok: ["target",":","test","search","after","compact",",","and","queryNode","get","delete","request","from","channel",",","rather","than","compacted","delta","log","method",":","1.insert",",","flush","and","load","2.delete","half","3.compact","4.search","expected",":","No","compact",",","compact","get","delta","log","from","storage"]
code: def test_compact_search_after_delete_channel(self):
      """
      target: test search after compact, and queryNode get delete request from channel,
              rather than compacted delta log
      method: 1.insert, flush and load
              2.delete half
              3.compact
              4.search
      expected: No compact, compact get delta log from storage
      """
      collection_w = self.init_collection_wrap(
          cf.gen_unique_str(prefix), shards_num=1
      )
  
      df = cf.gen_default_dataframe_data()
      insert_res, _ = collection_w.insert(df)
      assert collection_w.num_entities == ct.default_nb
      collection_w.create_index(
          ct.default_float_vec_field_name, ct.default_index
      )
      collection_w.load()
  
      expr = f"{ct.default_int64_field_name} in {insert_res.primary_keys[:ct.default_nb // 2]}"
      collection_w.delete(expr)
  
      collection_w.compact()
      collection_w.wait_for_compaction_completed()
      c_plans = collection_w.get_compaction_plans()[0]
      assert len(c_plans.plans) == 1
  
      # search
      collection_w.load()
      search_res, _ = collection_w.search(
          cf.gen_vectors(ct.default_nq, ct.default_dim),
          ct.default_float_vec_field_name,
          ct.default_search_params,
          ct.default_limit,
          check_task=CheckTasks.check_search_results,
          check_items={
              "nq": ct.default_nq,
              "ids": insert_res.primary_keys[ct.default_nb // 2 :],
              "limit": ct.default_limit,
          },
      )
  
imports: import threading
  from time import time, sleep
  import pytest
  from pymilvus.grpc_gen.common_pb2 import SegmentState
  from pymilvus.exceptions import MilvusException
  from base.client_base import TestcaseBase
  from common import common_func
  from common import common_type
  from common.common_type import CaseLabel, CheckTasks
  from utils.util_log import test_log
label_desc: Use image node_id 9 for calling the TestCompactionOperation obj's underlying member method code with example usage: obj.test_compact_search_after_delete_channel() without return types