Uploaded image for project: 'Kudu'
  1. Kudu
  2. KUDU-3397

do refactor for some periodic tasks using SchedulerThread

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • master, tserver
    • None

    Description

      Background

      At Jira https://issues.apache.org/jira/browse/KUDU-3364 said,

       

      I have added a SchedulerThread function, as Jira https://issues.apache.org/jira/browse/KUDU-3364 said,

      some periodic tasks can be refactor using SchedulerThread.

       

      There are 2 benefits:

      1. Use a thread pool(very few threads 1 or 2 is ok) with SchedulerThread to replace all the independent, isolated Threads. less threads.
      2. The root reason of refactor.  By the refactor, some tasks can support manual trigger, more maintainable, This is the root of refactor. 
        1. auto-rebalancer
        2. leader-auto-rebalancer(doing at: )
        3. compaction jobs

       

      The latent Thread can be refactor may exist below. 

      They should be analysed more details.

      //代码占位符
      ag Thread::Create src/kudu/ | grep -v test | grep -v src/kudu/util/threadpool.cc
      src/kudu/clock/builtin_ntp.cc:651:      Thread::Create("ntp", "ntp client", [this]() { this->PollThread(); }, &thread_),
      src/kudu/hms/hms_catalog.cc:132:  RETURN_NOT_OK(Thread::Create("hms_catalog", "fetch_uuid",
      src/kudu/master/hms_notification_log_listener.cc:98:  return kudu::Thread::Create("catalog manager", "hms-notification-log-listener",
      src/kudu/master/master.cc:452:  return Thread::Create("master",
      src/kudu/master/catalog_manager.cc:787:  RETURN_NOT_OK(kudu::Thread::Create("catalog manager", "bgtasks",
      src/kudu/rpc/acceptor_pool.cc:96:    Status s = kudu::Thread::Create("acceptor pool", "acceptor",
      src/kudu/rpc/reactor.cc:193:  return kudu::Thread::Create("reactor", "rpc reactor",
      src/kudu/rpc/reactor.cc:660:Status ReactorThread::CreateClientSocket(int family, Socket* sock) {
      src/kudu/rpc/result_tracker.cc:462:  CHECK_OK(Thread::Create("server", "result-tracker",
      src/kudu/rpc/service_pool.cc:93:    CHECK_OK(kudu::Thread::Create(
      src/kudu/security/init.cc:318:  RETURN_NOT_OK(Thread::Create("kerberos", "reacquire thread",
      src/kudu/server/diagnostics_log.cc:144:  Status s = Thread::Create("server", "diag-logger",
      src/kudu/server/server_base.cc:837:  return Thread::Create("server", "excess-log-deleter",
      src/kudu/server/server_base.cc:885:  return Thread::Create("server", "tcmalloc-memory-gc",
      src/kudu/subprocess/server.cc:130:  RETURN_NOT_OK(Thread::Create("subprocess", "start",
      src/kudu/subprocess/server.cc:153:    RETURN_NOT_OK(Thread::Create("subprocess", "responder",
      src/kudu/subprocess/server.cc:157:  RETURN_NOT_OK(Thread::Create("subprocess", "reader",
      src/kudu/subprocess/server.cc:160:  RETURN_NOT_OK(Thread::Create("subprocess", "writer",
      src/kudu/subprocess/server.cc:163:  return Thread::Create("subprocess", "deadline-checker",
      src/kudu/tools/tool_action_local_replica.cc:265:    RETURN_NOT_OK(Thread::Create("tool-tablet-copy", "check-progress",
      src/kudu/tserver/heartbeater.cc:669:  return kudu::Thread::Create("heartbeater", "heartbeat",
      src/kudu/tserver/scanners.cc:118:  RETURN_NOT_OK(Thread::Create("scanners", "removal_thread",
      src/kudu/tserver/tablet_copy_service.cc:114:  CHECK_OK(Thread::Create("tablet-copy", "tc-session-exp",
      src/kudu/util/cloud/instance_detector.cc:76:    RETURN_NOT_OK(Thread::Create(
      src/kudu/util/debug/trace_event_impl.cc:1364:      Status s = Thread::CreateWithFlags(
      src/kudu/util/file_cache.cc:504:  return Thread::Create("cache", Substitute("$0-evict", cache_name_),
      src/kudu/util/kernel_stack_watchdog.cc:71:  CHECK_OK(Thread::CreateWithFlags(
      src/kudu/util/maintenance_manager.cc:209:  return Thread::Create("maintenance", "maintenance_scheduler",
      src/kudu/util/minidump.cc:288:  return Thread::Create("minidump", "sigusr1-handler",
      src/kudu/util/pstack_watcher.cc:53:  CHECK_OK(Thread::Create("pstack_watcher", "pstack_watcher",
      src/kudu/util/thread.h:118:  // Flags passed to Thread::CreateWithFlags().
      src/kudu/util/ttl_cache.h:139:      CHECK_OK(Thread::Create( 

       

      The direct purpose, the threadpool can unified some seperator threads, eg: master's 'auto-rebalancer' (the Thread), 'expired-reserved-tables-deleter', 'hms-notification-log-listener' ("catalog manager", "bgtasks"), and later's leader-rebalancer's Thread, and some other threads. As tserver has some others thread

       

       

      The first one : https://gerrit.cloudera.org/c/18679/

       

      Attachments

        Activity

          People

            Unassigned Unassigned
            shenxingwuying Yuqi Du
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: