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 <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> Tested-by: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> 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 <[email protected]> Authored: Tue Dec 11 15:51:34 2018 +0300 Committer: Murtadha Hubail <[email protected]> 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
