You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mh...@apache.org on 2018/12/11 20:46:00 UTC

asterixdb git commit: [ASTERIXDB-2494][RT] Log Allocated Datasets on Allocation Failure

Repository: asterixdb
Updated Branches:
  refs/heads/master 595a0f3e8 -> 69ca99edd


[ASTERIXDB-2494][RT] Log Allocated Datasets on Allocation Failure

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Log the currently allocated datasets on dataset memory
  allocation failure.

Change-Id: Iefabb9c080c8937a2d2fd928dadde4993d4dd226
Reviewed-on: https://asterix-gerrit.ics.uci.edu/3070
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <al...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/69ca99ed
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/69ca99ed
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/69ca99ed

Branch: refs/heads/master
Commit: 69ca99eddd9c212eb4928c501ed1e9c1ba69f76a
Parents: 595a0f3
Author: Murtadha Hubail <mh...@apache.org>
Authored: Tue Dec 11 15:51:34 2018 +0300
Committer: Murtadha Hubail <mh...@apache.org>
Committed: Tue Dec 11 12:45:22 2018 -0800

----------------------------------------------------------------------
 .../common/context/DatasetLifecycleManager.java |  2 ++
 .../common/context/DatasetMemoryManager.java    | 24 ++++++++++++++++++++
 2 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/69ca99ed/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
index 1dff69d..486cd45 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
@@ -579,6 +579,8 @@ public class DatasetLifecycleManager implements IDatasetLifecycleManager, ILifeC
             if (!dsInfo.isMemoryAllocated() && !dsInfo.isExternal()) {
                 while (!memoryManager.allocate(datasetId)) {
                     if (!evictCandidateDataset()) {
+                        LOGGER.warn("failed to allocate memory for dataset {}. Currently allocated {}",
+                                dsInfo::getDatasetID, ((DatasetMemoryManager) memoryManager)::getState);
                         throw new HyracksDataException("Cannot allocate dataset " + dsInfo.getDatasetID()
                                 + " memory since memory budget would be exceeded.");
                     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/69ca99ed/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetMemoryManager.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetMemoryManager.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetMemoryManager.java
index 34d0774..1b4b48e 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetMemoryManager.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetMemoryManager.java
@@ -24,10 +24,15 @@ import java.util.Map;
 import org.apache.asterix.common.api.IDatasetMemoryManager;
 import org.apache.asterix.common.config.StorageProperties;
 import org.apache.asterix.common.metadata.MetadataIndexImmutableProperties;
+import org.apache.hyracks.util.JSONUtil;
 import org.apache.hyracks.util.annotations.ThreadSafe;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 @ThreadSafe
 public class DatasetMemoryManager implements IDatasetMemoryManager {
 
@@ -114,6 +119,14 @@ public class DatasetMemoryManager implements IDatasetMemoryManager {
                 : storageProperties.getMemoryComponentNumPages();
     }
 
+    public JsonNode getState() {
+        final ObjectNode state = JSONUtil.createObject();
+        state.put("availableBudget", available);
+        state.set("allocated", budgetMapToJsonArray(allocatedMap));
+        state.set("reserved", budgetMapToJsonArray(reservedMap));
+        return state;
+    }
+
     private long getTotalSize(int datasetId) {
         return storageProperties.getMemoryComponentPageSize() * (long) getNumPages(datasetId);
     }
@@ -126,4 +139,15 @@ public class DatasetMemoryManager implements IDatasetMemoryManager {
         final Long reserved = reservedMap.get(datasetId);
         allocatedMap.put(datasetId, reserved);
     }
+
+    private static ArrayNode budgetMapToJsonArray(Map<Integer, Long> memorytMap) {
+        final ArrayNode array = JSONUtil.createArray();
+        memorytMap.forEach((k, v) -> {
+            final ObjectNode dataset = JSONUtil.createObject();
+            dataset.put("datasetId", k);
+            dataset.put("budget", v);
+            array.add(dataset);
+        });
+        return array;
+    }
 }
\ No newline at end of file