IMPALA-5653: Remove "unlimited" process mem_limit option

This was deprecated in 2.10. Now we can disable it.

Testing:
Started a minicluster with --mem_limit="" and --mem_limit=-1,
confirmed that it didn't start up and logged a reasonable
error in both cases.

  E0825 09:23:59.749104 32708 impalad-main.cc:95] Impalad services did
    not start correctly, exiting.  Error: The process memory limit
    (--mem_limit) must be a positive bytes value or percentage: -1

Change-Id: Ifb235ae34ce8d2aff37f0fa0c218419da01b30f3
Reviewed-on: http://gerrit.cloudera.org:8080/7828
Reviewed-by: Dan Hecht <[email protected]>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/30129c45
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/30129c45
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/30129c45

Branch: refs/heads/master
Commit: 30129c4535e3505bb203c3f84e2d3da7c73f1117
Parents: c163ac1
Author: Tim Armstrong <[email protected]>
Authored: Fri Aug 25 09:15:37 2017 -0700
Committer: Impala Public Jenkins <[email protected]>
Committed: Thu Aug 31 03:42:46 2017 +0000

----------------------------------------------------------------------
 be/src/runtime/exec-env.cc | 26 ++++++++++----------------
 1 file changed, 10 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/30129c45/be/src/runtime/exec-env.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/exec-env.cc b/be/src/runtime/exec-env.cc
index 0d7518a..2907768 100644
--- a/be/src/runtime/exec-env.cc
+++ b/be/src/runtime/exec-env.cc
@@ -221,7 +221,6 @@ Status ExecEnv::StartServices() {
   // memory limit either based on the available physical memory, or if 
overcommitting
   // is turned off, we use the memory commit limit from /proc/meminfo (see
   // IMPALA-1690).
-  // --mem_limit="" means no memory limit. TODO: IMPALA-5653: remove this mode
   int64_t bytes_limit = 0;
   bool is_percent;
   int64_t system_mem;
@@ -246,15 +245,11 @@ Status ExecEnv::StartServices() {
     system_mem = MemInfo::physical_mem();
     bytes_limit = ParseUtil::ParseMemSpec(FLAGS_mem_limit, &is_percent, 
system_mem);
   }
-  // ParseMemSpec returns 0 to mean unlimited.
-  bool no_process_mem_limit = bytes_limit == 0;
-  if (no_process_mem_limit) {
-    LOG(WARNING) << "Configured with unlimited process memory limit 
(--mem_limit='"
-                 << FLAGS_mem_limit << "'). Starting in the next Impala 
release, "
-                 << "a process memory limit must always be specified. See 
IMPALA-5653.";
-  }
-  if (bytes_limit < 0) {
-    return Status("Failed to parse mem limit from '" + FLAGS_mem_limit + "'.");
+  // ParseMemSpec() returns -1 for invalid input and 0 to mean unlimited. From 
Impala
+  // 2.11 onwards we do not support unlimited process memory limits.
+  if (bytes_limit <= 0) {
+    return Status(Substitute("The process memory limit (--mem_limit) must be a 
positive "
+          "bytes value or percentage: $0", FLAGS_mem_limit));
   }
 
   if (!BitUtil::IsPowerOf2(FLAGS_min_buffer_size)) {
@@ -262,10 +257,10 @@ Status ExecEnv::StartServices() {
         "--min_buffer_size must be a power-of-two: $0", 
FLAGS_min_buffer_size));
   }
   int64_t buffer_pool_limit = ParseUtil::ParseMemSpec(FLAGS_buffer_pool_limit,
-      &is_percent, no_process_mem_limit ? system_mem : bytes_limit);
+      &is_percent, bytes_limit);
   if (buffer_pool_limit <= 0) {
     return Status(Substitute("Invalid --buffer_pool_limit value, must be a 
percentage or "
-          "positive bytes value: $0", FLAGS_buffer_pool_limit));
+          "positive bytes value or percentage: $0", FLAGS_buffer_pool_limit));
   }
   buffer_pool_limit = BitUtil::RoundDown(buffer_pool_limit, 
FLAGS_min_buffer_size);
 
@@ -273,7 +268,7 @@ Status ExecEnv::StartServices() {
       &is_percent, buffer_pool_limit);
   if (clean_pages_limit <= 0) {
     return Status(Substitute("Invalid --buffer_pool_clean_pages_limit value, 
must be a percentage or "
-          "positive bytes value: $0", FLAGS_buffer_pool_clean_pages_limit));
+          "positive bytes value or percentage: $0", 
FLAGS_buffer_pool_clean_pages_limit));
   }
   InitBufferPool(FLAGS_min_buffer_size, buffer_pool_limit, clean_pages_limit);
 
@@ -283,9 +278,8 @@ Status ExecEnv::StartServices() {
   RETURN_IF_ERROR(RegisterMemoryMetrics(
       metrics_.get(), true, buffer_reservation_.get(), buffer_pool_.get()));
 
-  // Limit of -1 means no memory limit.
-  mem_tracker_.reset(new MemTracker(AggregateMemoryMetrics::TOTAL_USED,
-      no_process_mem_limit ? -1 : bytes_limit, "Process"));
+  mem_tracker_.reset(
+      new MemTracker(AggregateMemoryMetrics::TOTAL_USED, bytes_limit, 
"Process"));
   // Add BufferPool MemTrackers for cached memory that is not tracked against 
queries
   // but is included in process memory consumption.
   obj_pool_->Add(new MemTracker(BufferPoolMetric::FREE_BUFFER_BYTES, -1,

Reply via email to