This is an automated email from the ASF dual-hosted git repository.
wyk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new e3aae4a56d [ASTERIXDB-3437][STO] Make eviction plan reevaluation
threshold configurable
e3aae4a56d is described below
commit e3aae4a56d0704b81bbcfb95103bf32c190b9f21
Author: Ritik Raj <[email protected]>
AuthorDate: Wed Jun 19 00:03:43 2024 +0530
[ASTERIXDB-3437][STO] Make eviction plan reevaluation threshold configurable
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
This patch makes eviction plan reevaluation threshold configurable.
The default value is set to 50 operation that require cloud read,
(e.g., running 50 query that require cloud read).
Change-Id: I6b937610982c13f16552f8aff4acc7608b45ee7d
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18384
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Ritik Raj <[email protected]>
Reviewed-by: Wail Alkowaileet <[email protected]>
Tested-by: Jenkins <[email protected]>
---
.../results/api/cluster_state_1/cluster_state_1.1.regexadm | 1 +
.../api/cluster_state_1_full/cluster_state_1_full.1.regexadm | 1 +
.../api/cluster_state_1_less/cluster_state_1_less.1.regexadm | 1 +
.../main/java/org/apache/asterix/cloud/CloudConfigurator.java | 4 ++--
.../java/org/apache/asterix/common/config/CloudProperties.java | 10 +++++++++-
.../service/CloudDiskCacheMonitoringAndPrefetchingService.java | 9 ++++++++-
.../btree/column/cloud/CloudColumnIndexDiskCacheManager.java | 6 +++---
.../am/lsm/btree/column/cloud/sweep/ColumnSweepPlanner.java | 6 ++++--
.../storage/am/lsm/btree/column/utils/LSMColumnBTreeUtil.java | 1 +
.../lsm/btree/column/cloud/sweep/ColumnSweepPlannerTest.java | 3 ++-
.../storage/common/disk/IDiskCacheMonitoringService.java | 5 +++++
.../storage/common/disk/NoOpDiskCacheMonitoringService.java | 5 +++++
12 files changed, 42 insertions(+), 10 deletions(-)
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
index 107de0079a..805f785601 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.regexadm
@@ -10,6 +10,7 @@
"active\.suspend\.timeout" : 3600,
"azure.request.timeout" : 120,
"cloud.deployment" : false,
+ "cloud.eviction.plan.reevaluate.threshold" : 50,
"cloud.profiler.log.interval" : 5,
"cloud.storage.allocation.percentage" : 0.8,
"cloud.storage.anonymous.auth" : false,
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
index bdeedd67f7..35a488af6b 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.regexadm
@@ -10,6 +10,7 @@
"active\.suspend\.timeout" : 3600,
"azure.request.timeout" : 120,
"cloud.deployment" : false,
+ "cloud.eviction.plan.reevaluate.threshold" : 50,
"cloud.profiler.log.interval" : 5,
"cloud.storage.allocation.percentage" : 0.8,
"cloud.storage.anonymous.auth" : false,
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
index 96fa23ca42..13e7a4e13d 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.regexadm
@@ -10,6 +10,7 @@
"active\.suspend\.timeout" : 3600,
"azure.request.timeout" : 120,
"cloud.deployment" : false,
+ "cloud.eviction.plan.reevaluate.threshold" : 50,
"cloud.profiler.log.interval" : 5,
"cloud.storage.allocation.percentage" : 0.8,
"cloud.storage.anonymous.auth" : false,
diff --git
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/CloudConfigurator.java
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/CloudConfigurator.java
index 3c0f1df00e..dced5b0f44 100644
---
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/CloudConfigurator.java
+++
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/CloudConfigurator.java
@@ -124,8 +124,8 @@ public final class CloudConfigurator {
resourceCacheManager, cloudIOManager, numOfSweepThreads,
maxSweepQueueSize, physicalDrive,
diskBufferCache, fileInfoMap, inactiveThreshold);
- IDiskCacheMonitoringService diskCacheService =
- new CloudDiskCacheMonitoringAndPrefetchingService(executor,
physicalDrive, monitorThread);
+ IDiskCacheMonitoringService diskCacheService = new
CloudDiskCacheMonitoringAndPrefetchingService(executor,
+ physicalDrive, monitorThread,
cloudProperties.getEvictionPlanReevaluationThreshold());
localIoManager.setSpaceMaker(monitorThread);
return diskCacheService;
}
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CloudProperties.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CloudProperties.java
index 7e7ac69867..a4d3b7ab56 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CloudProperties.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CloudProperties.java
@@ -60,7 +60,8 @@ public class CloudProperties extends AbstractProperties {
CLOUD_PROFILER_LOG_INTERVAL(NONNEGATIVE_INTEGER, 5),
CLOUD_WRITE_BUFFER_SIZE(
getRangedIntegerType(5, Integer.MAX_VALUE),
- StorageUtil.getIntSizeInBytes(8,
StorageUtil.StorageUnit.MEGABYTE));
+ StorageUtil.getIntSizeInBytes(8,
StorageUtil.StorageUnit.MEGABYTE)),
+ CLOUD_EVICTION_PLAN_REEVALUATE_THRESHOLD(POSITIVE_INTEGER, 50);
private final IOptionType interpreter;
private final Object defaultValue;
@@ -88,6 +89,7 @@ public class CloudProperties extends AbstractProperties {
case CLOUD_STORAGE_DEBUG_MODE_ENABLED:
case CLOUD_PROFILER_LOG_INTERVAL:
case CLOUD_WRITE_BUFFER_SIZE:
+ case CLOUD_EVICTION_PLAN_REEVALUATE_THRESHOLD:
return Section.COMMON;
default:
return Section.NC;
@@ -146,6 +148,8 @@ public class CloudProperties extends AbstractProperties {
+ " NOTE: Enabling the profiler could perturb the
performance of cloud requests";
case CLOUD_WRITE_BUFFER_SIZE:
return "The write buffer size in bytes. (default: 8MB,
min: 5MB)";
+ case CLOUD_EVICTION_PLAN_REEVALUATE_THRESHOLD:
+ return "The number of cloud reads for re-evaluating an
eviction plan. (default: 50)";
default:
throw new IllegalStateException("NYI: " + this);
}
@@ -224,4 +228,8 @@ public class CloudProperties extends AbstractProperties {
public int getWriteBufferSize() {
return accessor.getInt(Option.CLOUD_WRITE_BUFFER_SIZE);
}
+
+ public int getEvictionPlanReevaluationThreshold() {
+ return
accessor.getInt(Option.CLOUD_EVICTION_PLAN_REEVALUATE_THRESHOLD);
+ }
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/service/CloudDiskCacheMonitoringAndPrefetchingService.java
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/service/CloudDiskCacheMonitoringAndPrefetchingService.java
index 4564856d94..b58a6bf266 100644
---
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/service/CloudDiskCacheMonitoringAndPrefetchingService.java
+++
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/service/CloudDiskCacheMonitoringAndPrefetchingService.java
@@ -33,12 +33,14 @@ public final class
CloudDiskCacheMonitoringAndPrefetchingService
private final ExecutorService executor;
private final DiskCacheSweeperThread monitorThread;
private final IPhysicalDrive drive;
+ private final int evictionPlanReevaluationThreshold;
public CloudDiskCacheMonitoringAndPrefetchingService(ExecutorService
executor, IPhysicalDrive drive,
- DiskCacheSweeperThread monitorThread) {
+ DiskCacheSweeperThread monitorThread, int
evictionPlanReevaluationThreshold) {
this.executor = executor;
this.drive = drive;
this.monitorThread = monitorThread;
+ this.evictionPlanReevaluationThreshold =
evictionPlanReevaluationThreshold;
}
@Override
@@ -81,4 +83,9 @@ public final class
CloudDiskCacheMonitoringAndPrefetchingService
public void request(AbstractPrefetchRequest request) throws
HyracksDataException {
// TODO implement
}
+
+ @Override
+ public int getEvictionPlanReevaluationThreshold() {
+ return evictionPlanReevaluationThreshold;
+ }
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/CloudColumnIndexDiskCacheManager.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/CloudColumnIndexDiskCacheManager.java
index 7187496874..417322e75c 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/CloudColumnIndexDiskCacheManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/CloudColumnIndexDiskCacheManager.java
@@ -48,11 +48,11 @@ public final class CloudColumnIndexDiskCacheManager
implements IColumnIndexDiskC
private final ColumnSweepPlanner planner;
private final ColumnSweeper sweeper;
- public CloudColumnIndexDiskCacheManager(int numberOfPrimaryKeys,
IColumnTupleProjector sweepProjector,
- IPhysicalDrive drive) {
+ public CloudColumnIndexDiskCacheManager(int numberOfPrimaryKeys, int
evictionPlanReevaluationThreshold,
+ IColumnTupleProjector sweepProjector, IPhysicalDrive drive) {
this.sweepProjector = sweepProjector;
this.drive = drive;
- planner = new ColumnSweepPlanner(numberOfPrimaryKeys,
System::nanoTime);
+ planner = new ColumnSweepPlanner(numberOfPrimaryKeys,
evictionPlanReevaluationThreshold, System::nanoTime);
sweeper = new ColumnSweeper(numberOfPrimaryKeys);
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlanner.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlanner.java
index 38758122c9..9d52603ebd 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlanner.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlanner.java
@@ -57,6 +57,7 @@ public final class ColumnSweepPlanner {
private final BitSet reevaluatedPlan;
private final IntSet indexedColumns;
private final ISweepClock clock;
+ private final int evictionPlanReevaluationThreshold;
private int numberOfColumns;
private long lastAccess;
private int maxSize;
@@ -67,7 +68,7 @@ public final class ColumnSweepPlanner {
private int numberOfSweptColumns;
private int numberOfCloudRequests;
- public ColumnSweepPlanner(int numberOfPrimaryKeys, ISweepClock clock) {
+ public ColumnSweepPlanner(int numberOfPrimaryKeys, int
evictionPlanReevaluationThreshold, ISweepClock clock) {
this.clock = clock;
active = new AtomicBoolean(false);
this.numberOfPrimaryKeys = numberOfPrimaryKeys;
@@ -77,6 +78,7 @@ public final class ColumnSweepPlanner {
plan = new BitSet();
reevaluatedPlan = new BitSet();
punchableThreshold = INITIAL_PUNCHABLE_THRESHOLD;
+ this.evictionPlanReevaluationThreshold =
evictionPlanReevaluationThreshold;
}
public boolean isActive() {
@@ -235,7 +237,7 @@ public final class ColumnSweepPlanner {
}
private void resetPlanIfNeeded() {
- if (numberOfCloudRequests < REEVALUATE_PLAN_THRESHOLD) {
+ if (numberOfCloudRequests < evictionPlanReevaluationThreshold) {
return;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/utils/LSMColumnBTreeUtil.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/utils/LSMColumnBTreeUtil.java
index 6335acd21a..04b49846d5 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/utils/LSMColumnBTreeUtil.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/utils/LSMColumnBTreeUtil.java
@@ -76,6 +76,7 @@ public class LSMColumnBTreeUtil {
IColumnManager columnManager =
columnManagerFactory.createColumnManager();
IColumnIndexDiskCacheManager diskCacheManager = diskCacheEnabled
? new
CloudColumnIndexDiskCacheManager(columnManager.getNumberOfPrimaryKeys(),
+
diskCacheService.getEvictionPlanReevaluationThreshold(),
columnManager.getMergeColumnProjector(),
diskCacheService.getPhysicalDrive())
: NoOpColumnIndexDiskCacheManager.INSTANCE;
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/test/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlannerTest.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/test/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlannerTest.java
index a5a87c48fb..e4b3449af7 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/test/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlannerTest.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/test/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/ColumnSweepPlannerTest.java
@@ -38,6 +38,7 @@ import it.unimi.dsi.fastutil.ints.IntSet;
public class ColumnSweepPlannerTest {
private static final int MAX_MEGA_LEAF_NODE_SIZE = getIntSizeInBytes(10,
StorageUtil.StorageUnit.MEGABYTE);
+ private static final int REEVALUATE_PLAN_THRESHOLD = 50;
private static final Random RANDOM = new Random(0);
private final DummySweepClock clock = new DummySweepClock();
@@ -46,7 +47,7 @@ public class ColumnSweepPlannerTest {
int numberOfPrimaryKeys = 1;
int numberOfColumns = numberOfPrimaryKeys + 10;
int[] columnSizes = createNormalColumnSizes(numberOfPrimaryKeys,
numberOfColumns);
- ColumnSweepPlanner planner = new
ColumnSweepPlanner(numberOfPrimaryKeys, clock);
+ ColumnSweepPlanner planner = new
ColumnSweepPlanner(numberOfPrimaryKeys, REEVALUATE_PLAN_THRESHOLD, clock);
IntList projectedColumns = new IntArrayList();
DummyColumnProjectionInfo info = new
DummyColumnProjectionInfo(numberOfPrimaryKeys, QUERY, projectedColumns);
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/IDiskCacheMonitoringService.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/IDiskCacheMonitoringService.java
index 4151c77fe5..94974638ad 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/IDiskCacheMonitoringService.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/IDiskCacheMonitoringService.java
@@ -62,4 +62,9 @@ public interface IDiskCacheMonitoringService {
* @return physical drive
*/
IPhysicalDrive getPhysicalDrive();
+
+ /**
+ * @return threshold for re-evaluation of eviction plan
+ */
+ int getEvictionPlanReevaluationThreshold();
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/NoOpDiskCacheMonitoringService.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/NoOpDiskCacheMonitoringService.java
index 5cbf5cb5c4..ad153fea10 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/NoOpDiskCacheMonitoringService.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/NoOpDiskCacheMonitoringService.java
@@ -62,4 +62,9 @@ public final class NoOpDiskCacheMonitoringService implements
IDiskCacheMonitorin
public IPhysicalDrive getPhysicalDrive() {
return DummyPhysicalDrive.INSTANCE;
}
+
+ @Override
+ public int getEvictionPlanReevaluationThreshold() {
+ return 0;
+ }
}