This is an automated email from the ASF dual-hosted git repository. maedhroz pushed a commit to branch cassandra-5.0 in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 1bec8b99ca0810f90851d7a95bac2dbbf0bbea80 Merge: 37f6a5de20 f378f92030 Author: Caleb Rackliffe <calebrackli...@gmail.com> AuthorDate: Tue Jul 2 14:18:57 2024 -0500 Merge branch 'cassandra-4.1' into cassandra-5.0 * cassandra-4.1: UnsupportedOperationException when reducing scope for LCS compactions CHANGES.txt | 1 + .../db/compaction/LeveledCompactionTask.java | 2 +- .../test/LeveledCompactionTaskTest.java | 94 ++++++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) diff --cc CHANGES.txt index 71dd1ab1ab,cdceaa802d..56e6cbd4a5 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -49,12 -17,8 +49,13 @@@ Merged from 4.1 * Fix hints delivery for a node going down repeatedly (CASSANDRA-19495) * Do not go to disk for reading hints file sizes (CASSANDRA-19477) * Fix system_views.settings to handle array types (CASSANDRA-19475) + * Memoize Cassandra verion and add a backoff interval for failed schema pulls (CASSANDRA-18902) + * Fix StackOverflowError on ALTER after many previous schema changes (CASSANDRA-19166) Merged from 4.0: + * UnsupportedOperationException when reducing scope for LCS compactions (CASSANDRA-19704) + * Make LWT conditions behavior on frozen and non-frozen columns consistent for null column values (CASSANDRA-19637) + * Add timeout specifically for bootstrapping nodes (CASSANDRA-15439) + * Bring Redhat packge dirs/ownership/perms in line with Debian package (CASSANDRA-19565) * Make nodetool import congruent with the documentation by not relying on the folder structure of the imported SSTable files (CASSANDRA-19401) * IR may leak SSTables with pending repair when coming from streaming (CASSANDRA-19182) * Streaming exception race creates corrupt transaction log files that prevent restart (CASSANDRA-18736) diff --cc test/distributed/org/apache/cassandra/distributed/test/LeveledCompactionTaskTest.java index 0000000000,dccad716e2..d89f3c0079 mode 000000,100644..100644 --- a/test/distributed/org/apache/cassandra/distributed/test/LeveledCompactionTaskTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/LeveledCompactionTaskTest.java @@@ -1,0 -1,92 +1,94 @@@ + /* + * 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.cassandra.distributed.test; + + import java.io.IOException; ++import java.nio.file.FileStore; ++import java.util.Map; + + import org.junit.Test; + + import net.bytebuddy.ByteBuddy; + import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; + import net.bytebuddy.implementation.MethodDelegation; + import org.apache.cassandra.db.Directories; + import org.apache.cassandra.db.Keyspace; + import org.apache.cassandra.distributed.Cluster; + import org.apache.cassandra.distributed.api.ConsistencyLevel; + + import static net.bytebuddy.matcher.ElementMatchers.named; + import static net.bytebuddy.matcher.ElementMatchers.takesArguments; + import static org.junit.Assert.fail; + + public class LeveledCompactionTaskTest extends TestBaseImpl + { + @Test + public void testBuildCompactionCandidatesForAvailableDiskSpace() throws IOException + { + try (Cluster cluster = init(builder().withNodes(1) + .withConfig(config -> config.set("autocompaction_on_startup_enabled", false)) + .withInstanceInitializer(BB::install).start())) + { + cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl (id int primary key) WITH compaction = {'class':'LeveledCompactionStrategy', 'enabled':'false'}")); + for (int i = 0; i < 100; i++) + { + cluster.coordinator(1).execute(withKeyspace("INSERT INTO %s.tbl (id) VALUES (?)"), ConsistencyLevel.ALL, i); + if (i % 10 == 0) + cluster.get(1).flush(KEYSPACE); + } + cluster.get(1).flush(KEYSPACE); + cluster.setUncaughtExceptionsFilter((exception) -> exception.getMessage() != null && exception.getMessage().contains("Not enough space for compaction")); + + cluster.get(1).runOnInstance(() -> { + BB.hasDiskSpaceResult = false; + try + { + Keyspace.open(KEYSPACE).getColumnFamilyStore("tbl").enableAutoCompaction(true); + fail("This should fail, but only due to having no disk space"); + } + catch (Exception e) + { + if (!(e.getMessage() != null && e.getMessage().contains("Not enough space for compaction"))) + throw e; + } + }); + } + } + + public static class BB + { + static volatile boolean hasDiskSpaceResult = true; + + @SuppressWarnings("resource") + public static void install(ClassLoader cl, int id) + { + new ByteBuddy().rebase(Directories.class) - .method(named("hasAvailableDiskSpace").and(takesArguments(2))) ++ .method(named("hasDiskSpaceForCompactionsAndStreams").and(takesArguments(2))) + .intercept(MethodDelegation.to(BB.class)) + .make() + .load(cl, ClassLoadingStrategy.Default.INJECTION); + } + + @SuppressWarnings("unused") - public static boolean hasAvailableDiskSpace(long estimatedSSTables, long expectedTotalWriteSize) ++ public static boolean hasDiskSpaceForCompactionsAndStreams(Map<FileStore, Long> totalToWrite) + { + return hasDiskSpaceResult; + } + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org