Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions jdbc/src/main/java/tech/ydb/jdbc/YdbTracer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package tech.ydb.jdbc;

import java.time.Instant;
import java.util.List;

import tech.ydb.jdbc.impl.YdbTracerImpl;


Expand All @@ -17,6 +20,9 @@ static void clear() {
YdbTracerImpl.clear();
}

Instant getTxStartedAt();
List<String> getTxRequests();

void setId(String id);

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

void close();

@Deprecated
default void markToPrint() {
markToPrint(null);
}
Expand Down
20 changes: 18 additions & 2 deletions jdbc/src/main/java/tech/ydb/jdbc/impl/YdbTracerImpl.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package tech.ydb.jdbc.impl;

import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;

import tech.ydb.jdbc.YdbTracer;

Expand All @@ -31,7 +33,7 @@ private class Record {
}

private class Tx {
private final Date startDate = new Date();
private final Instant startDate = Instant.now();
private final long startedAt = System.currentTimeMillis();
private final List<Record> records = new ArrayList<>();

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

@Override
public Instant getTxStartedAt() {
return tx == null ? null : tx.startDate;
}

@Override
public List<String> getTxRequests() {
return tx == null ? Collections.emptyList() : tx.records.stream()
.filter(r -> r.isRequest).map(r -> r.message)
.collect(Collectors.toList());
}

@Override
public void setId(String id) {
Tx local = ensureOpen();
Expand All @@ -145,4 +159,6 @@ public void close() {
tx = null;
}
}


}
15 changes: 13 additions & 2 deletions jdbc/src/main/java/tech/ydb/jdbc/impl/YdbTracerNone.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package tech.ydb.jdbc.impl;

import java.time.Instant;
import java.util.Collections;
import java.util.List;

import tech.ydb.jdbc.YdbTracer;

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

@Override
public void markToPrint() { }
public void setId(String id) { }

@Override
public void setId(String id) { }
public Instant getTxStartedAt() {
return Instant.MIN;
}

@Override
public List<String> getTxRequests() {
return Collections.emptyList();
}
}
53 changes: 53 additions & 0 deletions jdbc/src/test/java/tech/ydb/jdbc/YdbDriverIntegrationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
Expand Down Expand Up @@ -302,4 +304,55 @@ private void assertFixedSessionPool(String arg, String value, int poolSize) thro
Assertions.assertEquals(poolSize, ctx.getTableClient().sessionPoolStats().getMaxSize());
}
}

@Test
public void txTracerTest() throws SQLException {
// Disabled tx tracer
try (Connection conn = DriverManager.getConnection(jdbcURL.withArg("enableTxTracer", "false").build())) {
conn.setAutoCommit(false);

Assertions.assertNull(YdbTracer.current().getTxStartedAt());
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());

try (Statement st = conn.createStatement()) {
try (ResultSet rs = st.executeQuery("SELECT 1 + 2;")) {
Assertions.assertTrue(rs.next());
}
}

Assertions.assertNull(YdbTracer.current().getTxStartedAt());
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());

conn.commit();

Assertions.assertNull(YdbTracer.current().getTxStartedAt());
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
}

try (Connection conn = DriverManager.getConnection(jdbcURL.withArg("enableTxTracer", "true").build())) {
conn.setAutoCommit(false);

Assertions.assertNull(YdbTracer.current().getTxStartedAt());
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());

try (Statement st = conn.createStatement()) {
try (ResultSet rs = st.executeQuery("SELECT 1 + 2;")) {
Assertions.assertTrue(rs.next());
}
}

Assertions.assertNotNull(YdbTracer.current().getTxStartedAt());
Assertions.assertEquals(1, YdbTracer.current().getTxRequests().size());
Assertions.assertEquals("SELECT 1 + 2;", YdbTracer.current().getTxRequests().get(0));

conn.commit();

Assertions.assertNull(YdbTracer.current().getTxStartedAt());
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());

YdbTracer.current().markToPrint("test-tx");
Assertions.assertNotNull(YdbTracer.current().getTxStartedAt());
Assertions.assertTrue(YdbTracer.current().getTxRequests().isEmpty());
}
}
}
20 changes: 2 additions & 18 deletions jdbc/src/test/java/tech/ydb/jdbc/impl/helper/TestTxTracer.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,22 @@

import org.junit.jupiter.api.Assertions;

import tech.ydb.jdbc.YdbTracer;
import tech.ydb.jdbc.impl.YdbTracerNone;

/**
*
* @author Aleksandr Gorshenin
*/
public class TestTxTracer implements YdbTracer {
public class TestTxTracer extends YdbTracerNone {
private volatile String lastQuery;
private final AtomicInteger counter = new AtomicInteger(0);

@Override
public void setId(String id) {
}

@Override
public void trace(String message) {
}

@Override
public void query(String queryText) {
counter.incrementAndGet();
lastQuery = queryText;
}

@Override
public void markToPrint(String label) {
}

@Override
public void close() {
}

public String getQueryText() {
return lastQuery;
}
Expand Down