You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2019/04/19 04:52:31 UTC

[incubator-iotdb] 01/01: remove JVMMemController

This is an automated email from the ASF dual-hosted git repository.

jiangtian pushed a commit to branch refactor_mem_controller
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit fad45c4eb753d9782545220b7188ed548e3cd4b5
Author: 江天 <jt...@163.com>
AuthorDate: Fri Apr 19 12:51:10 2019 +0800

    remove JVMMemController
---
 iotdb/iotdb/conf/iotdb-engine.properties           |   1 -
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |   5 +-
 .../db/engine/memcontrol/BasicMemController.java   |   6 +-
 ...hPartialPolicy.java => ClosePartialPolicy.java} |   3 +-
 ...LushAllPolicy.java => ForceCloseAllPolicy.java} |   0
 .../db/engine/memcontrol/JVMMemController.java     | 100 ---------------------
 6 files changed, 6 insertions(+), 109 deletions(-)

diff --git a/iotdb/iotdb/conf/iotdb-engine.properties b/iotdb/iotdb/conf/iotdb-engine.properties
index 5c7046f..88f1689 100644
--- a/iotdb/iotdb/conf/iotdb-engine.properties
+++ b/iotdb/iotdb/conf/iotdb-engine.properties
@@ -145,7 +145,6 @@ mem_monitor_interval=1000
 
 # Decide how to control memory used by inserting data.
 # 0 is RecordMemController, which count the size of every record (tuple).
-# 1 is JVMMemController, which use JVM heap memory as threshold.
 mem_controller_type=0
 
 # When a bufferwrite's metadata size (in byte) exceed this, the bufferwrite is forced closed.
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/iotdb/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 9790f37..0526cb3 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -187,10 +187,9 @@ public class IoTDBConfig {
   private long memMonitorInterval = 1000;
   /**
    * Decide how to control memory usage of inserting data. 0 is RecordMemController, which sums the
-   * size of each record (tuple). 1 is JVMMemController, which uses the JVM heap memory as the
-   * memory usage indicator.
+   * size of each record (tuple).
    */
-  private int memControllerType = 1;
+  private int memControllerType = 0;
   /**
    * When a bufferwrite's metadata size (in byte) exceed this, the bufferwrite is forced closed.
    */
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/BasicMemController.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/BasicMemController.java
index 503afa3..396888f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/BasicMemController.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/BasicMemController.java
@@ -49,8 +49,6 @@ public abstract class BasicMemController implements IService {
   public static BasicMemController getInstance() {
     switch (ControllerType.values()[IoTDBDescriptor.getInstance().getConfig()
         .getMemControllerType()]) {
-      case JVM:
-        return JVMMemController.getInstance();
       case RECORD:
       default:
         return RecordMemController.getInstance();
@@ -162,7 +160,7 @@ public abstract class BasicMemController implements IService {
    *          warning - there is only a small amount of memories available, the user would better
    *                    try to reduce memory usage but can still proceed and this usage is recorded.
    *          dangerous - there is almost no memories unused, the user cannot proceed before enough
-   *                    memory usages are released and this usage is NOT recorded.
+   *                    memory usages are released but this usage is still recorded.
    */
   public abstract UsageLevel acquireUsage(Object user, long usage);
 
@@ -175,7 +173,7 @@ public abstract class BasicMemController implements IService {
   public abstract void releaseUsage(Object user, long freeSize);
 
   public enum ControllerType {
-    RECORD, JVM
+    RECORD
   }
 
   public enum UsageLevel {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/FlushPartialPolicy.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/ClosePartialPolicy.java
similarity index 94%
rename from iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/FlushPartialPolicy.java
rename to iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/ClosePartialPolicy.java
index 31a5860..9be76dd 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/FlushPartialPolicy.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/ClosePartialPolicy.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.engine.memcontrol;
 import org.apache.iotdb.db.concurrent.ThreadName;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.filenode.FileNodeManager;
+import org.apache.iotdb.db.engine.memcontrol.BasicMemController.UsageLevel;
 import org.apache.iotdb.db.utils.MemUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,7 +61,7 @@ public class FlushPartialPolicy implements Policy {
 
   private Thread createWorkerThread() {
     return new Thread(() -> {
-      FileNodeManager.getInstance().forceFlush(BasicMemController.UsageLevel.SAFE);
+      FileNodeManager.getInstance().forceClose(UsageLevel.WARNING);
       try {
         Thread.sleep(sleepInterval);
       } catch (InterruptedException e) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/ForceFLushAllPolicy.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/ForceCloseAllPolicy.java
similarity index 100%
rename from iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/ForceFLushAllPolicy.java
rename to iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/ForceCloseAllPolicy.java
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/JVMMemController.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/JVMMemController.java
deleted file mode 100644
index 31a3ef8..0000000
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/JVMMemController.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.engine.memcontrol;
-
-import org.apache.iotdb.db.conf.IoTDBConfig;
-import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.utils.MemUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class JVMMemController extends BasicMemController {
-
-  private static Logger LOGGER = LoggerFactory.getLogger(JVMMemController.class);
-
-  private JVMMemController(IoTDBConfig config) {
-    super(config);
-  }
-
-  public static JVMMemController getInstance() {
-    return InstanceHolder.INSTANCE;
-  }
-
-  @Override
-  public long getTotalUsage() {
-    // memory used by non-data objects, this is used to estimate the memory used by data
-    long nonDataUsage = 0;
-    return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory() - nonDataUsage;
-  }
-
-  @Override
-  public UsageLevel getCurrLevel() {
-    long memUsage = getTotalUsage();
-    if (memUsage < warningThreshold) {
-      return UsageLevel.SAFE;
-    } else if (memUsage < dangerouseThreshold) {
-      return UsageLevel.WARNING;
-    } else {
-      return UsageLevel.DANGEROUS;
-    }
-  }
-
-  @Override
-  public void clear() {
-    // JVMMemController does not need cleaning
-  }
-
-  @Override
-  public UsageLevel acquireUsage(Object user, long usage) {
-    long memUsage = getTotalUsage() + usage;
-    if (memUsage < warningThreshold) {
-      return UsageLevel.SAFE;
-    } else if (memUsage < dangerouseThreshold) {
-      if (LOGGER.isDebugEnabled()) {
-        LOGGER.debug("Warning Threshold : {} allocated to {}, total usage {}",
-            MemUtils.bytesCntToStr(usage),
-            user.getClass(), MemUtils.bytesCntToStr(memUsage));
-      }
-      return UsageLevel.WARNING;
-    } else {
-      if (LOGGER.isWarnEnabled()) {
-        LOGGER.warn("Memory request from {} is denied, memory usage : {}", user.getClass(),
-            MemUtils.bytesCntToStr(memUsage));
-      }
-      return UsageLevel.DANGEROUS;
-    }
-  }
-
-  @Override
-  public void releaseUsage(Object user, long freeSize) {
-    if (LOGGER.isInfoEnabled()) {
-      LOGGER.info("{} freed from {}, total usage {}", MemUtils.bytesCntToStr(freeSize),
-          user.getClass(), MemUtils.bytesCntToStr(getTotalUsage()));
-    }
-  }
-
-  private static class InstanceHolder {
-
-    private InstanceHolder() {
-    }
-
-    private static final JVMMemController INSTANCE = new JVMMemController(
-        IoTDBDescriptor.getInstance().getConfig());
-  }
-}