Skip to content

Commit fc8d9f0

Browse files
authored
Updated YdbTracer, added gettiong of current tx state (#131)
2 parents 5cef58b + 4d375f3 commit fc8d9f0

File tree

5 files changed

+93
-22
lines changed

5 files changed

+93
-22
lines changed

jdbc/src/main/java/tech/ydb/jdbc/YdbTracer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package tech.ydb.jdbc;
22

3+
import java.time.Instant;
4+
import java.util.List;
5+
36
import tech.ydb.jdbc.impl.YdbTracerImpl;
47

58

@@ -17,6 +20,9 @@ static void clear() {
1720
YdbTracerImpl.clear();
1821
}
1922

23+
Instant getTxStartedAt();
24+
List<String> getTxRequests();
25+
2026
void setId(String id);
2127

2228
void trace(String message);
@@ -27,6 +33,7 @@ static void clear() {
2733

2834
void close();
2935

36+
@Deprecated
3037
default void markToPrint() {
3138
markToPrint(null);
3239
}

jdbc/src/main/java/tech/ydb/jdbc/impl/YdbTracerImpl.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package tech.ydb.jdbc.impl;
22

3+
import java.time.Instant;
34
import java.util.ArrayList;
4-
import java.util.Date;
5+
import java.util.Collections;
56
import java.util.List;
67
import java.util.Objects;
78
import java.util.concurrent.atomic.AtomicLong;
89
import java.util.logging.Level;
910
import java.util.logging.Logger;
11+
import java.util.stream.Collectors;
1012

1113
import tech.ydb.jdbc.YdbTracer;
1214

@@ -31,7 +33,7 @@ private class Record {
3133
}
3234

3335
private class Tx {
34-
private final Date startDate = new Date();
36+
private final Instant startDate = Instant.now();
3537
private final long startedAt = System.currentTimeMillis();
3638
private final List<Record> records = new ArrayList<>();
3739

@@ -119,6 +121,18 @@ public void query(String queryText) {
119121
ensureOpen().records.add(new Record(queryText, true));
120122
}
121123

124+
@Override
125+
public Instant getTxStartedAt() {
126+
return tx == null ? null : tx.startDate;
127+
}
128+
129+
@Override
130+
public List<String> getTxRequests() {
131+
return tx == null ? Collections.emptyList() : tx.records.stream()
132+
.filter(r -> r.isRequest).map(r -> r.message)
133+
.collect(Collectors.toList());
134+
}
135+
122136
@Override
123137
public void setId(String id) {
124138
Tx local = ensureOpen();
@@ -145,4 +159,6 @@ public void close() {
145159
tx = null;
146160
}
147161
}
162+
163+
148164
}

jdbc/src/main/java/tech/ydb/jdbc/impl/YdbTracerNone.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package tech.ydb.jdbc.impl;
22

3+
import java.time.Instant;
4+
import java.util.Collections;
5+
import java.util.List;
6+
37
import tech.ydb.jdbc.YdbTracer;
48

59
/**
@@ -22,8 +26,15 @@ public void close() { }
2226
public void markToPrint(String label) { }
2327

2428
@Override
25-
public void markToPrint() { }
29+
public void setId(String id) { }
2630

2731
@Override
28-
public void setId(String id) { }
32+
public Instant getTxStartedAt() {
33+
return Instant.MIN;
34+
}
35+
36+
@Override
37+
public List<String> getTxRequests() {
38+
return Collections.emptyList();
39+
}
2940
}

jdbc/src/test/java/tech/ydb/jdbc/YdbDriverIntegrationTest.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import java.sql.Connection;
44
import java.sql.Driver;
55
import java.sql.DriverManager;
6+
import java.sql.ResultSet;
67
import java.sql.SQLException;
8+
import java.sql.Statement;
79
import java.util.ArrayDeque;
810
import java.util.ArrayList;
911
import java.util.Deque;
@@ -302,4 +304,55 @@ private void assertFixedSessionPool(String arg, String value, int poolSize) thro
302304
Assertions.assertEquals(poolSize, ctx.getTableClient().sessionPoolStats().getMaxSize());
303305
}
304306
}
307+
308+
@Test
309+
public void txTracerTest() throws SQLException {
310+
// Disabled tx tracer
311+
try (Connection conn = DriverManager.getConnection(jdbcURL.withArg("enableTxTracer", "false").build())) {
312+
conn.setAutoCommit(false);
313+
314+
Assertions.assertNull(YdbTracer.current().getTxStartedAt());
315+
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
316+
317+
try (Statement st = conn.createStatement()) {
318+
try (ResultSet rs = st.executeQuery("SELECT 1 + 2;")) {
319+
Assertions.assertTrue(rs.next());
320+
}
321+
}
322+
323+
Assertions.assertNull(YdbTracer.current().getTxStartedAt());
324+
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
325+
326+
conn.commit();
327+
328+
Assertions.assertNull(YdbTracer.current().getTxStartedAt());
329+
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
330+
}
331+
332+
try (Connection conn = DriverManager.getConnection(jdbcURL.withArg("enableTxTracer", "true").build())) {
333+
conn.setAutoCommit(false);
334+
335+
Assertions.assertNull(YdbTracer.current().getTxStartedAt());
336+
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
337+
338+
try (Statement st = conn.createStatement()) {
339+
try (ResultSet rs = st.executeQuery("SELECT 1 + 2;")) {
340+
Assertions.assertTrue(rs.next());
341+
}
342+
}
343+
344+
Assertions.assertNotNull(YdbTracer.current().getTxStartedAt());
345+
Assertions.assertEquals(1, YdbTracer.current().getTxRequests().size());
346+
Assertions.assertEquals("SELECT 1 + 2;", YdbTracer.current().getTxRequests().get(0));
347+
348+
conn.commit();
349+
350+
Assertions.assertNull(YdbTracer.current().getTxStartedAt());
351+
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
352+
353+
YdbTracer.current().markToPrint("test-tx");
354+
Assertions.assertNotNull(YdbTracer.current().getTxStartedAt());
355+
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
356+
}
357+
}
305358
}

jdbc/src/test/java/tech/ydb/jdbc/impl/helper/TestTxTracer.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,22 @@
44

55
import org.junit.jupiter.api.Assertions;
66

7-
import tech.ydb.jdbc.YdbTracer;
7+
import tech.ydb.jdbc.impl.YdbTracerNone;
88

99
/**
1010
*
1111
* @author Aleksandr Gorshenin
1212
*/
13-
public class TestTxTracer implements YdbTracer {
13+
public class TestTxTracer extends YdbTracerNone {
1414
private volatile String lastQuery;
1515
private final AtomicInteger counter = new AtomicInteger(0);
1616

17-
@Override
18-
public void setId(String id) {
19-
}
20-
21-
@Override
22-
public void trace(String message) {
23-
}
24-
2517
@Override
2618
public void query(String queryText) {
2719
counter.incrementAndGet();
2820
lastQuery = queryText;
2921
}
3022

31-
@Override
32-
public void markToPrint(String label) {
33-
}
34-
35-
@Override
36-
public void close() {
37-
}
38-
3923
public String getQueryText() {
4024
return lastQuery;
4125
}

0 commit comments

Comments
 (0)