From 5ac566ffc9739a8d9612acb23a089897e3168f8a Mon Sep 17 00:00:00 2001 From: Prashant Bhagat Date: Mon, 19 Feb 2018 15:41:08 +0530 Subject: [PATCH 1/5] Fixes Avoiding string concat in for loop. Fixing null pointer exception in CoalescingStrategies --- src/java/org/apache/cassandra/concurrent/Stage.java | 6 +++--- .../org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java | 8 ++++---- .../org/apache/cassandra/utils/CoalescingStrategies.java | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/java/org/apache/cassandra/concurrent/Stage.java b/src/java/org/apache/cassandra/concurrent/Stage.java index ccb156501e40..b2a7238f9a3b 100644 --- a/src/java/org/apache/cassandra/concurrent/Stage.java +++ b/src/java/org/apache/cassandra/concurrent/Stage.java @@ -73,11 +73,11 @@ public String getJmxType() public String getJmxName() { - String name = ""; + StringBuilder name = new StringBuilder(); for (String word : toString().split("_")) { - name += word.substring(0, 1) + word.substring(1).toLowerCase(); + name.append(word.substring(0, 1).append(word.substring(1).toLowerCase())); } - return name + "Stage"; + return name.toString() + "Stage"; } } diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java index d2a0d86ba084..247ad806e480 100644 --- a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java +++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java @@ -474,14 +474,14 @@ private ByteBuffer getPartitionKey(Map keyColumns) */ private String appendKeyWhereClauses(String cqlQuery) { - String keyWhereClause = ""; + StringBuilder keyWhereClause = new StringBuilder(); for (ColumnMetadata partitionKey : partitionKeyColumns) - keyWhereClause += String.format("%s = ?", keyWhereClause.isEmpty() ? quote(partitionKey.getName()) : (" AND " + quote(partitionKey.getName()))); + keyWhereClause.append(String.format("%s = ?", keyWhereClause.isEmpty() ? quote(partitionKey.getName()) : (" AND " + quote(partitionKey.getName())))); for (ColumnMetadata clusterColumn : clusterColumns) - keyWhereClause += " AND " + quote(clusterColumn.getName()) + " = ?"; + keyWhereClause.append(" AND ").append(quote(clusterColumn.getName())).append(" = ?"); - return cqlQuery + " WHERE " + keyWhereClause; + return cqlQuery + " WHERE " + keyWhereClause.toString(); } /** Quoting for working with uppercase */ diff --git a/src/java/org/apache/cassandra/utils/CoalescingStrategies.java b/src/java/org/apache/cassandra/utils/CoalescingStrategies.java index 6ff91e320295..24b86d66c593 100644 --- a/src/java/org/apache/cassandra/utils/CoalescingStrategies.java +++ b/src/java/org/apache/cassandra/utils/CoalescingStrategies.java @@ -146,7 +146,7 @@ protected AbstractCoalescingStrategy(Logger logger, String displayName) { File outFile = File.createTempFile("coalescing_" + this.displayName + "_", ".log", new File(DEBUG_COALESCING_PATH)); rasTemp = new RandomAccessFile(outFile, "rw"); - logBufferTemp = ras.getChannel().map(MapMode.READ_WRITE, 0, Integer.MAX_VALUE); + logBufferTemp = rasTemp.getChannel().map(MapMode.READ_WRITE, 0, Integer.MAX_VALUE); logBufferTemp.putLong(0); } catch (Exception e) From bbb1acf256c3dac88d89d0495fd93bec27b97646 Mon Sep 17 00:00:00 2001 From: Prashant Bhagat Date: Wed, 21 Feb 2018 16:32:37 +0530 Subject: [PATCH 2/5] added missing closing bracket --- src/java/org/apache/cassandra/concurrent/Stage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/org/apache/cassandra/concurrent/Stage.java b/src/java/org/apache/cassandra/concurrent/Stage.java index b2a7238f9a3b..ba948664ccd2 100644 --- a/src/java/org/apache/cassandra/concurrent/Stage.java +++ b/src/java/org/apache/cassandra/concurrent/Stage.java @@ -76,7 +76,7 @@ public String getJmxName() StringBuilder name = new StringBuilder(); for (String word : toString().split("_")) { - name.append(word.substring(0, 1).append(word.substring(1).toLowerCase())); + name.append(word.substring(0, 1)).append(word.substring(1).toLowerCase())); } return name.toString() + "Stage"; } From 21a4a39285ead0802a3112d541d5f9c59ca0b445 Mon Sep 17 00:00:00 2001 From: Prashant Bhagat Date: Wed, 21 Feb 2018 16:38:16 +0530 Subject: [PATCH 3/5] added missing closing bracket added missing closing bracket --- src/java/org/apache/cassandra/concurrent/Stage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/org/apache/cassandra/concurrent/Stage.java b/src/java/org/apache/cassandra/concurrent/Stage.java index ba948664ccd2..38bd02dd90de 100644 --- a/src/java/org/apache/cassandra/concurrent/Stage.java +++ b/src/java/org/apache/cassandra/concurrent/Stage.java @@ -76,7 +76,7 @@ public String getJmxName() StringBuilder name = new StringBuilder(); for (String word : toString().split("_")) { - name.append(word.substring(0, 1)).append(word.substring(1).toLowerCase())); + name.append(word.substring(0, 1)).append(word.substring(1).toLowerCase()); } return name.toString() + "Stage"; } From a7337ff1151e8d3757df139270f6a7d7f08a3984 Mon Sep 17 00:00:00 2001 From: Prashant Bhagat Date: Wed, 21 Feb 2018 16:43:11 +0530 Subject: [PATCH 4/5] fixing Syntax error Syntax error --- src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java index 247ad806e480..b7e7006698e8 100644 --- a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java +++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java @@ -477,7 +477,7 @@ private String appendKeyWhereClauses(String cqlQuery) StringBuilder keyWhereClause = new StringBuilder(); for (ColumnMetadata partitionKey : partitionKeyColumns) - keyWhereClause.append(String.format("%s = ?", keyWhereClause.isEmpty() ? quote(partitionKey.getName()) : (" AND " + quote(partitionKey.getName())))); + keyWhereClause.append(String.format("%s = ?", keyWhereClause.length() == 0 ? quote(partitionKey.getName()) : (" AND " + quote(partitionKey.getName())))); for (ColumnMetadata clusterColumn : clusterColumns) keyWhereClause.append(" AND ").append(quote(clusterColumn.getName())).append(" = ?"); From d210249aadba233da159fd296dbe5f7df928cc7d Mon Sep 17 00:00:00 2001 From: Prashant Bhagat Date: Fri, 23 Feb 2018 12:54:36 +0530 Subject: [PATCH 5/5] Code improvements improved few equals implementation avoiding auto boxing using Integer.parseInt --- .../apache/cassandra/cache/ChunkCache.java | 4 ++- .../apache/cassandra/db/marshal/UserType.java | 26 +++++++++++++++---- .../io/sstable/IndexSummaryBuilder.java | 2 +- .../apache/cassandra/io/sstable/SSTable.java | 2 +- .../org/apache/cassandra/schema/Types.java | 9 ++++++- .../serializers/BooleanSerializer.java | 2 +- .../OffsetAwareConfigurationLoader.java | 2 +- .../cassandra/cql3/ViewFilteringTest.java | 2 +- .../org/apache/cassandra/db/ColumnsTest.java | 1 - .../org/apache/cassandra/db/NameSortTest.java | 2 +- .../cassandra/db/RangeTombstoneListTest.java | 4 +-- .../db/marshal/SimpleDateTypeTest.java | 2 +- .../io/util/NIODataInputStreamTest.java | 2 +- .../cassandra/service/QueryPagerTest.java | 2 +- .../cassandra/transport/DataTypeTest.java | 6 ++--- 15 files changed, 46 insertions(+), 22 deletions(-) diff --git a/src/java/org/apache/cassandra/cache/ChunkCache.java b/src/java/org/apache/cassandra/cache/ChunkCache.java index 9284377e6acf..4abe243f399e 100644 --- a/src/java/org/apache/cassandra/cache/ChunkCache.java +++ b/src/java/org/apache/cassandra/cache/ChunkCache.java @@ -79,7 +79,9 @@ public boolean equals(Object obj) return true; if (obj == null) return false; - + if (!(obj instanceof Key)) + return false; + Key other = (Key) obj; return (position == other.position) && file.getClass() == other.file.getClass() diff --git a/src/java/org/apache/cassandra/db/marshal/UserType.java b/src/java/org/apache/cassandra/db/marshal/UserType.java index 6149e94244d0..5b24163076f2 100644 --- a/src/java/org/apache/cassandra/db/marshal/UserType.java +++ b/src/java/org/apache/cassandra/db/marshal/UserType.java @@ -18,24 +18,36 @@ package org.apache.cassandra.db.marshal; import java.nio.ByteBuffer; -import java.util.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import com.google.common.base.Objects; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import org.apache.cassandra.cql3.*; +import org.apache.cassandra.cql3.CQL3Type; +import org.apache.cassandra.cql3.ColumnIdentifier; +import org.apache.cassandra.cql3.Constants; +import org.apache.cassandra.cql3.FieldIdentifier; +import org.apache.cassandra.cql3.Json; +import org.apache.cassandra.cql3.Term; +import org.apache.cassandra.cql3.UserTypes; import org.apache.cassandra.db.rows.Cell; import org.apache.cassandra.db.rows.CellPath; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.SyntaxException; import org.apache.cassandra.serializers.MarshalException; -import org.apache.cassandra.transport.ProtocolVersion; import org.apache.cassandra.serializers.TypeSerializer; import org.apache.cassandra.serializers.UserTypeSerializer; +import org.apache.cassandra.transport.ProtocolVersion; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.Pair; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * A user defined type. @@ -339,6 +351,10 @@ public boolean equals(Object o) @Override public boolean equals(Object o, boolean ignoreFreezing) { + if (this == o) + { + return true; + } if(!(o instanceof UserType)) return false; diff --git a/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java b/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java index e3006b3aa12b..3f15ed87129e 100644 --- a/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java +++ b/src/java/org/apache/cassandra/io/sstable/IndexSummaryBuilder.java @@ -39,7 +39,7 @@ public class IndexSummaryBuilder implements AutoCloseable private static final Logger logger = LoggerFactory.getLogger(IndexSummaryBuilder.class); static final String defaultExpectedKeySizeName = Config.PROPERTY_PREFIX + "index_summary_expected_key_size"; - static long defaultExpectedKeySize = Long.valueOf(System.getProperty(defaultExpectedKeySizeName, "64")); + static long defaultExpectedKeySize = Long.parseLong(System.getProperty(defaultExpectedKeySizeName, "64")); // the offset in the keys memory region to look for a given summary boundary private final SafeMemoryWriter offsets; diff --git a/src/java/org/apache/cassandra/io/sstable/SSTable.java b/src/java/org/apache/cassandra/io/sstable/SSTable.java index 40f822363241..c3fe4f290ce2 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTable.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTable.java @@ -64,7 +64,7 @@ public abstract class SSTable public static final int TOMBSTONE_HISTOGRAM_BIN_SIZE = 100; public static final int TOMBSTONE_HISTOGRAM_SPOOL_SIZE = 100000; - public static final int TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS = Integer.valueOf(System.getProperty("cassandra.streaminghistogram.roundseconds", "60")); + public static final int TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS = Integer.parseInt(System.getProperty("cassandra.streaminghistogram.roundseconds", "60")); public final Descriptor descriptor; protected final Set components; diff --git a/src/java/org/apache/cassandra/schema/Types.java b/src/java/org/apache/cassandra/schema/Types.java index 0bdf7cf8846e..7890b76d1c1a 100644 --- a/src/java/org/apache/cassandra/schema/Types.java +++ b/src/java/org/apache/cassandra/schema/Types.java @@ -325,7 +325,14 @@ public int hashCode() @Override public boolean equals(Object other) { - return name.equals(((RawUDT) other).name); + if (this == other) + return true; + if (other == null) + return false; + if (!(other instanceof RawUDT)) + return false; + RawUDT otherUDT = (RawUDT)other; + return name.equals(otherUDT.name); } } } diff --git a/src/java/org/apache/cassandra/serializers/BooleanSerializer.java b/src/java/org/apache/cassandra/serializers/BooleanSerializer.java index 0d6580ea7f3c..1e0d66d8b660 100644 --- a/src/java/org/apache/cassandra/serializers/BooleanSerializer.java +++ b/src/java/org/apache/cassandra/serializers/BooleanSerializer.java @@ -31,7 +31,7 @@ public class BooleanSerializer implements TypeSerializer public Boolean deserialize(ByteBuffer bytes) { if (bytes == null || bytes.remaining() == 0) - return null; + return false; byte value = bytes.get(bytes.position()); return value != 0; diff --git a/test/unit/org/apache/cassandra/OffsetAwareConfigurationLoader.java b/test/unit/org/apache/cassandra/OffsetAwareConfigurationLoader.java index d06caba2d090..bfa3936a2ce9 100644 --- a/test/unit/org/apache/cassandra/OffsetAwareConfigurationLoader.java +++ b/test/unit/org/apache/cassandra/OffsetAwareConfigurationLoader.java @@ -44,7 +44,7 @@ public OffsetAwareConfigurationLoader() if (offsetStr == null) throw new RuntimeException("offset property is not set: "+OFFSET_PROPERTY); - offset = Integer.valueOf(offsetStr); + offset = Integer.parseInt(offsetStr); assert offset >= 0; } diff --git a/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java b/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java index f2d8f2ab44bd..afc3cacb350a 100644 --- a/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java +++ b/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java @@ -51,7 +51,7 @@ public static void startup() } @AfterClass - public static void TearDown() + public static void tearDown() { System.setProperty("cassandra.mv.allow_filtering_nonkey_columns_unsafe", "false"); } diff --git a/test/unit/org/apache/cassandra/db/ColumnsTest.java b/test/unit/org/apache/cassandra/db/ColumnsTest.java index ae0bbd8e728b..9095c4be0970 100644 --- a/test/unit/org/apache/cassandra/db/ColumnsTest.java +++ b/test/unit/org/apache/cassandra/db/ColumnsTest.java @@ -89,7 +89,6 @@ private void testContainsWithoutAndMergeTo(ColumnsCheck input) private void assertSubset(Columns superset, Columns subset) { - Assert.assertTrue(superset.containsAll(superset)); Assert.assertTrue(superset.containsAll(subset)); Assert.assertFalse(subset.containsAll(superset)); } diff --git a/test/unit/org/apache/cassandra/db/NameSortTest.java b/test/unit/org/apache/cassandra/db/NameSortTest.java index 0b00f40ea2b1..a9514e8f54d7 100644 --- a/test/unit/org/apache/cassandra/db/NameSortTest.java +++ b/test/unit/org/apache/cassandra/db/NameSortTest.java @@ -98,7 +98,7 @@ private void validateNameSort(ColumnFamilyStore cfs) throws IOException { if (r.getCell(cd) == null) continue; - int cellVal = Integer.valueOf(cd.name.toString().substring(cd.name.toString().length() - 1)); + int cellVal = Integer.parseInt(cd.name.toString().substring(cd.name.toString().length() - 1)); String expected = cellVal % 2 == 0 ? "a" : "b"; assertEquals(expected, ByteBufferUtil.string(r.getCell(cd).value())); } diff --git a/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java b/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java index d3dc8358757f..7dd17c0023c6 100644 --- a/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java +++ b/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java @@ -585,10 +585,10 @@ private static RangeTombstone rangeFromString(String range) Matcher matcher = Pattern.compile("([\\[(])(\\d+), (\\d+)([)\\]])@(\\d+)").matcher(range.trim()); matcher.matches(); boolean isOpenInclusive = matcher.group(1).equals("["); - int start = Integer.valueOf(matcher.group(2)); + int start = Integer.parseInt(matcher.group(2)); int end = Integer.valueOf(matcher.group(3)); boolean isCloseInclusive = matcher.group(4).equals("]"); - long timestamp = Long.valueOf(matcher.group(5)); + long timestamp = Long.parseLong(matcher.group(5)); return rt(start, isOpenInclusive, end, isCloseInclusive, timestamp); } diff --git a/test/unit/org/apache/cassandra/db/marshal/SimpleDateTypeTest.java b/test/unit/org/apache/cassandra/db/marshal/SimpleDateTypeTest.java index 5c9ed4e2250f..b9e43ced90c1 100644 --- a/test/unit/org/apache/cassandra/db/marshal/SimpleDateTypeTest.java +++ b/test/unit/org/apache/cassandra/db/marshal/SimpleDateTypeTest.java @@ -26,7 +26,7 @@ public class SimpleDateTypeTest { - @Test public void TestComparison() + @Test public void testComparison() { ByteBuffer d1 = SimpleDateType.instance.fromString("1970-01-05"); ByteBuffer d2 = SimpleDateSerializer.instance.serialize(makeUnsigned(4)); diff --git a/test/unit/org/apache/cassandra/io/util/NIODataInputStreamTest.java b/test/unit/org/apache/cassandra/io/util/NIODataInputStreamTest.java index 7b91ccb12e53..5749278c29b6 100644 --- a/test/unit/org/apache/cassandra/io/util/NIODataInputStreamTest.java +++ b/test/unit/org/apache/cassandra/io/util/NIODataInputStreamTest.java @@ -97,7 +97,7 @@ class DummyChannel implements ReadableByteChannel @Override public boolean isOpen() { - return isOpen(); + return isOpen; } @Override diff --git a/test/unit/org/apache/cassandra/service/QueryPagerTest.java b/test/unit/org/apache/cassandra/service/QueryPagerTest.java index 56bf59c06b25..38d2e8702415 100644 --- a/test/unit/org/apache/cassandra/service/QueryPagerTest.java +++ b/test/unit/org/apache/cassandra/service/QueryPagerTest.java @@ -430,7 +430,7 @@ public void rangeSliceQueryTest(boolean testPagingState, ProtocolVersion protoco } @Test - public void SliceQueryWithTombstoneTest() throws Exception + public void sliceQueryWithTombstoneTest() throws Exception { // Testing for the bug of #6748 String keyspace = "cql_keyspace"; diff --git a/test/unit/org/apache/cassandra/transport/DataTypeTest.java b/test/unit/org/apache/cassandra/transport/DataTypeTest.java index a8b535a422e2..a22582ee004c 100644 --- a/test/unit/org/apache/cassandra/transport/DataTypeTest.java +++ b/test/unit/org/apache/cassandra/transport/DataTypeTest.java @@ -37,7 +37,7 @@ public class DataTypeTest { @Test - public void TestSimpleDataTypeSerialization() + public void testSimpleDataTypeSerialization() { for (DataType type : DataType.values()) { @@ -51,7 +51,7 @@ public void TestSimpleDataTypeSerialization() } @Test - public void TestListDataTypeSerialization() + public void testListDataTypeSerialization() { DataType type = DataType.LIST; Pair options = Pair.create(type, (Object)LongType.instance); @@ -60,7 +60,7 @@ public void TestListDataTypeSerialization() } @Test - public void TestMapDataTypeSerialization() + public void testMapDataTypeSerialization() { DataType type = DataType.MAP; List value = new ArrayList<>();