Skip to content

Commit dd69a90

Browse files
committed
Merge remote-tracking branch 'datastax/3.x'
2 parents 10480cc + 7854029 commit dd69a90

File tree

7 files changed

+78
-15
lines changed

7 files changed

+78
-15
lines changed

changelog/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
- [improvement] JAVA-1980: Use covariant return types in RemoteEndpointAwareJdkSSLOptions.Builder methods.
77
- [documentation] JAVA-2062: Document frozen collection preference with Mapper.
88
- [bug] JAVA-2071: Fix NPE in ArrayBackedRow.toString().
9+
- [bug] JAVA-2070: Call onRemove instead of onDown when rack and/or DC information changes for a host.
10+
- [improvement] JAVA-1256: Log parameters of BuiltStatement in QueryLogger.
11+
- [documentation] JAVA-2074: Document preference for LZ4 over Snappy.
12+
- [bug] JAVA-1612: Include netty-common jar in binary tarball.
913

1014

1115
### 3.6.0

driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ private static void updateLocationInfo(
671671
// policy.
672672
// For that, we remove and re-add the node against the policy. Not the most elegant, and assumes
673673
// that the policy will update correctly, but in practice this should work.
674-
if (!isInitialConnection) cluster.loadBalancingPolicy().onDown(host);
674+
if (!isInitialConnection) cluster.loadBalancingPolicy().onRemove(host);
675675
host.setLocationInfo(datacenter, rack);
676676
if (!isInitialConnection) cluster.loadBalancingPolicy().onAdd(host);
677677
}

driver-core/src/main/java/com/datastax/driver/core/QueryLogger.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static java.util.concurrent.TimeUnit.NANOSECONDS;
1919

20+
import com.datastax.driver.core.querybuilder.BuiltStatement;
2021
import com.google.common.annotations.VisibleForTesting;
2122
import java.nio.ByteBuffer;
2223
import java.util.Iterator;
@@ -704,6 +705,8 @@ protected void logQuery(Statement statement, Exception exception, Logger logger,
704705
remaining = appendParameters((SimpleStatement) inner, params, remaining);
705706
}
706707
}
708+
} else if (statement instanceof BuiltStatement) {
709+
appendParameters((BuiltStatement) statement, params, maxLoggedParameters);
707710
}
708711
if (params.length() > 0) params.append("]");
709712
logger.trace(message + params, exception);
@@ -865,6 +868,38 @@ protected String parameterValueAsString(Object value) {
865868
return valueStr;
866869
}
867870

871+
protected int appendParameters(BuiltStatement statement, StringBuilder buffer, int remaining) {
872+
if (remaining == 0) {
873+
return 0;
874+
}
875+
int numberOfParameters =
876+
statement.getValues(protocolVersion(), cluster.getConfiguration().getCodecRegistry())
877+
.length;
878+
if (numberOfParameters > 0) {
879+
int numberOfLoggedParameters;
880+
if (remaining == -1) {
881+
numberOfLoggedParameters = numberOfParameters;
882+
} else {
883+
numberOfLoggedParameters = remaining > numberOfParameters ? numberOfParameters : remaining;
884+
remaining -= numberOfLoggedParameters;
885+
}
886+
887+
for (int i = 0; i < numberOfLoggedParameters; i++) {
888+
if (buffer.length() == 0) {
889+
buffer.append(" [");
890+
} else {
891+
buffer.append(", ");
892+
}
893+
894+
buffer.append(parameterValueAsString(statement.getObject(i)));
895+
}
896+
if (numberOfLoggedParameters < numberOfParameters) {
897+
buffer.append(FURTHER_PARAMS_OMITTED);
898+
}
899+
}
900+
return remaining;
901+
}
902+
868903
private ProtocolVersion protocolVersion() {
869904
// Since the QueryLogger can be registered before the Cluster was initialized, we can't retrieve
870905
// it at construction time. Cache it field at first use (a volatile field is good enough since

driver-core/src/test/java/com/datastax/driver/core/QueryLoggerTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
import static com.datastax.driver.core.QueryLogger.TRUNCATED_OUTPUT;
2626
import static com.datastax.driver.core.TestUtils.getFixedValue;
2727
import static com.datastax.driver.core.TestUtils.ipOfNode;
28+
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
29+
import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
30+
import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
2831
import static org.apache.log4j.Level.DEBUG;
2932
import static org.apache.log4j.Level.INFO;
3033
import static org.apache.log4j.Level.TRACE;
@@ -33,6 +36,7 @@
3336

3437
import com.datastax.driver.core.StatementWrapperTest.CustomStatement;
3538
import com.datastax.driver.core.exceptions.DriverException;
39+
import com.datastax.driver.core.querybuilder.BuiltStatement;
3640
import com.datastax.driver.core.utils.CassandraVersion;
3741
import com.google.common.base.Function;
3842
import com.google.common.base.Joiner;
@@ -63,9 +67,9 @@ public class QueryLoggerTest extends CCMTestsSupport {
6367
private List<Object> values;
6468
private String assignments;
6569

66-
private Logger normal = Logger.getLogger(NORMAL_LOGGER.getName());
67-
private Logger slow = Logger.getLogger(SLOW_LOGGER.getName());
68-
private Logger error = Logger.getLogger(ERROR_LOGGER.getName());
70+
private final Logger normal = Logger.getLogger(NORMAL_LOGGER.getName());
71+
private final Logger slow = Logger.getLogger(SLOW_LOGGER.getName());
72+
private final Logger error = Logger.getLogger(ERROR_LOGGER.getName());
6973

7074
private MemoryAppender normalAppender;
7175
private MemoryAppender slowAppender;
@@ -461,6 +465,23 @@ public void should_log_non_null_positional_parameter_bound_statements() throws E
461465
.contains("c_text:'foo'");
462466
}
463467

468+
@Test(groups = "short")
469+
@CassandraVersion("2.0.0")
470+
public void should_log_non_null_parameters_built_statements() throws Exception {
471+
// given
472+
normal.setLevel(TRACE);
473+
queryLogger = QueryLogger.builder().build();
474+
cluster().register(queryLogger);
475+
476+
// when
477+
BuiltStatement update = update("test").with(set("c_text", "foo")).where(eq("pk", 42));
478+
session().execute(update);
479+
480+
// then
481+
String line = normalAppender.waitAndGet(10000);
482+
assertThat(line).contains("['foo']");
483+
}
484+
464485
@Test(groups = "short")
465486
@CassandraVersion("2.0.0")
466487
public void should_log_non_null_positional_parameter_simple_statements() throws Exception {

driver-dist/src/assembly/binary-tarball.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
<!-- platform-dependent -->
4646
<exclude>io.netty:netty-transport-native-epoll:*</exclude>
4747
</excludes>
48-
<useTransitiveFiltering>true</useTransitiveFiltering>
4948
</dependencySet>
5049
</dependencySets>
5150
</binaries>

manual/compression/README.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@ will likely be beneficial when you have larger payloads.
1212

1313
Two algorithms are available:
1414
[LZ4](https://github.com/jpountz/lz4-java) and
15-
[Snappy](https://code.google.com/p/snappy/).
15+
[Snappy](https://code.google.com/p/snappy/). The LZ4 implementation is a good
16+
first choice; it offers fallback implementations in case native libraries fail
17+
to load and
18+
[benchmarks](http://java-performance.info/performance-general-compression/)
19+
suggest that it offers better performance and compression ratios over Snappy.
1620
Both rely on third-party libraries, declared by the driver as *optional*
17-
dependencies. So If you use a build tool like Maven, you'll need to
18-
declare an explicit dependency to pull the appropriate library in your
19-
application's classpath. Then you configure compression at driver
20-
startup.
21+
dependencies. So if you use a build tool like Maven, you'll need to declare an
22+
explicit dependency to pull the appropriate library in your application's
23+
classpath. Then you configure compression at driver startup.
2124

2225
### LZ4
2326

manual/native_protocol/README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ Cassandra when the first connection is established. Both sides are
1616
backward-compatible with older versions:
1717

1818
<table border="1" style="text-align:center; width:100%;margin-bottom:1em;">
19-
<tr><td>&nbsp;</td><td>Cassandra: 1.2.x<br/>(DSE 3.2)</td><td>2.0.x<br/>(DSE 4.0 to 4.6)</td><td>2.1.x<br/>(DSE 4.7)</td><td>2.2.x</td><td>3.0.x</td></tr>
20-
<tr><td>Driver: 1.0.x</td> <td>v1</td> <td>v1</td> <td>v1</td> <td>v1</td> <td>Unsupported <i>(1)</i></td> </tr>
21-
<tr><td>2.0.x to 2.1.1</td> <td>v1</td> <td>v2</td> <td>v2</td> <td>v2</td> <td>Unsupported <i>(1)</i></td> </tr>
22-
<tr><td>2.1.2 to 2.1.x</td> <td>v1</td> <td>v2</td> <td>v3</td> <td>v3</td> <td>Unsupported <i>(2)</i></td> </tr>
23-
<tr><td>3.x</td> <td>v1</td> <td>v2</td> <td>v3</td> <td>v4</td> <td>v4</td> </tr>
19+
<tr><th>Driver Version</th><th>Cassandra: 1.2.x<br/>(DSE 3.2)</th><th>2.0.x<br/>(DSE 4.0 to 4.6)
20+
</th><th>2.1.x<br/>(DSE 4.7)</th><th>2.2.x</th><th>3.0.x &amp; 3.x<br/>(DSE 5.0+)</th></tr>
21+
<tr><th>1.0.x</th> <td>v1</td> <td>v1</td> <td>v1</td> <td>v1</td> <td>Unsupported <i>(1)</i></td> </tr>
22+
<tr><th>2.0.x to 2.1.1</th> <td>v1</td> <td>v2</td> <td>v2</td> <td>v2</td> <td>Unsupported <i>(1)</i></td> </tr>
23+
<tr><th>2.1.2 to 2.1.x</th> <td>v1</td> <td>v2</td> <td>v3</td> <td>v3</td> <td>Unsupported <i>(2)</i></td> </tr>
24+
<tr><th>3.x</th> <td>v1</td> <td>v2</td> <td>v3</td> <td>v4</td> <td>v4</td> </tr>
2425
</table>
2526

2627
*(1) Cassandra 3.0 does not support protocol versions v1 and v2*

0 commit comments

Comments
 (0)