weizuo93 commented on a change in pull request #5781:
URL: https://github.com/apache/incubator-doris/pull/5781#discussion_r698518440



##########
File path: be/test/util/threadpool_test.cpp
##########
@@ -778,6 +778,85 @@ TEST_F(ThreadPoolTest, TestLIFOThreadWakeUps) {
 }
 */
 
+TEST_F(ThreadPoolTest, TestThreadPoolDynamicAdjustMaximumMinimum) {
+ASSERT_TRUE(rebuild_pool_with_builder(ThreadPoolBuilder(kDefaultPoolName)

Review comment:
       > indent
   
   OK, Thank you.

##########
File path: be/src/util/threadpool.cpp
##########
@@ -610,6 +607,47 @@ void ThreadPool::check_not_pool_thread_unlocked() {
     }
 }
 
+Status ThreadPool::set_min_threads(int min_threads) {
+    if (min_threads <= _max_threads) {
+        _min_threads = min_threads;
+        if (min_threads > _num_threads + _num_threads_pending_start) {
+            int addition_threads = min_threads - _num_threads - 
_num_threads_pending_start;
+            _num_threads_pending_start += addition_threads;
+            for (int i = 0; i < addition_threads; i++) {
+                Status status = create_thread();
+                if (!status.ok()) {
+                    _num_threads_pending_start--;
+                    LOG(WARNING) << "Thread pool failed to create thread: " << 
status.to_string();
+                    return status;
+                }
+            }
+        }
+        return Status::OK();
+    }
+    return Status::InternalError("set thread pool min_threads failed");
+}
+
+Status ThreadPool::set_max_threads(int max_threads) {
+    if (_min_threads <= max_threads) {

Review comment:
       > Maybe Use short circuit return would make you code more elegant
   
   OK, Thank you.

##########
File path: be/src/util/threadpool.cpp
##########
@@ -610,6 +607,47 @@ void ThreadPool::check_not_pool_thread_unlocked() {
     }
 }
 
+Status ThreadPool::set_min_threads(int min_threads) {
+    if (min_threads <= _max_threads) {
+        _min_threads = min_threads;
+        if (min_threads > _num_threads + _num_threads_pending_start) {
+            int addition_threads = min_threads - _num_threads - 
_num_threads_pending_start;
+            _num_threads_pending_start += addition_threads;
+            for (int i = 0; i < addition_threads; i++) {
+                Status status = create_thread();
+                if (!status.ok()) {
+                    _num_threads_pending_start--;
+                    LOG(WARNING) << "Thread pool failed to create thread: " << 
status.to_string();
+                    return status;
+                }
+            }
+        }
+        return Status::OK();
+    }
+    return Status::InternalError("set thread pool min_threads failed");

Review comment:
       > Better to clarify why it failed.
   
   OK, Thank you.

##########
File path: be/src/util/threadpool.cpp
##########
@@ -610,6 +607,47 @@ void ThreadPool::check_not_pool_thread_unlocked() {
     }
 }
 
+Status ThreadPool::set_min_threads(int min_threads) {
+    if (min_threads <= _max_threads) {
+        _min_threads = min_threads;

Review comment:
       > Even though `_min_threads` is type of `AtomicInt32`, this function is 
not thread safe.
   
   You're right, thank you.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to