Skip to content

Commit 7a124f7

Browse files
authored
Fixed usePrefixPath and table descriptions cache (#81)
2 parents 95def8f + 9ca7288 commit 7a124f7

15 files changed

+324
-237
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
* QueryService is enabled by default
44

5+
## 2.2.13 ##
6+
7+
* Fixed usePrefixPath for preparing of YQL statements
8+
59
## 2.2.12 ##
610

711
* Added option usePrefixPath

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,22 @@ Specify the YDB JDBC driver in the dependencies:
2626
<dependency>
2727
<groupId>tech.ydb.jdbc</groupId>
2828
<artifactId>ydb-jdbc-driver</artifactId>
29+
<<<<<<< HEAD
2930
<version>2.3.0</version>
31+
=======
32+
<version>2.2.13</version>
33+
>>>>>>> bugfix
3034
</dependency>
3135

3236
<!-- Shaded version with included dependencies -->
3337
<dependency>
3438
<groupId>tech.ydb.jdbc</groupId>
3539
<artifactId>ydb-jdbc-driver-shaded</artifactId>
40+
<<<<<<< HEAD
3641
<version>2.3.0</version>
42+
=======
43+
<version>2.2.13</version>
44+
>>>>>>> bugfix
3745
</dependency>
3846
</dependencies>
3947
```

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public final class YdbConst {
9191
public static final String CANNOT_LOAD_DATA_FROM_IS = "Unable to load data from input stream: ";
9292
public static final String CANNOT_LOAD_DATA_FROM_READER = "Unable to load data from reader: ";
9393
public static final String STATEMENT_IS_NOT_A_BATCH = "Statement cannot be executed as batch statement: ";
94+
public static final String UNABLE_PREPARE_STATEMENT = "Cannot prepare statement: ";
9495
public static final String MULTI_TYPES_IN_ONE_QUERY = "Query cannot contain expressions with different types: ";
9596
public static final String SCAN_QUERY_INSIDE_TRANSACTION = "Scan query cannot be executed inside active "
9697
+ "transaction. This behavior may be changed by property scanQueryTxMode";
Lines changed: 14 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,34 @@
11
package tech.ydb.jdbc;
22

3-
import java.util.ArrayList;
4-
import java.util.Date;
5-
import java.util.List;
6-
import java.util.Objects;
7-
import java.util.concurrent.atomic.AtomicLong;
8-
import java.util.logging.Level;
9-
import java.util.logging.Logger;
3+
4+
import tech.ydb.jdbc.impl.YdbTracerImpl;
105

116

127

138
/**
149
*
1510
* @author Aleksandr Gorshenin
1611
*/
17-
public class YdbTracer {
18-
private static final Logger LOGGER = Logger.getLogger(YdbTracer.class.getName());
19-
private static final ThreadLocal<YdbTracer> LOCAL = new ThreadLocal<>();
20-
private static final AtomicLong ANONYMOUS_COUNTER = new AtomicLong(0);
21-
22-
private final Date startDate = new Date();
23-
private final long startedAt = System.currentTimeMillis();
24-
private final List<Record> records = new ArrayList<>();
25-
26-
private String txID = null;
27-
private String label = null;
28-
private boolean isMarked = false;
29-
private boolean isClosed = false;
30-
31-
private class Record {
32-
private final long executedAt = System.currentTimeMillis();
33-
private final String message;
34-
private final boolean isRequest;
35-
36-
Record(String message, boolean isRequest) {
37-
this.message = message;
38-
this.isRequest = isRequest;
39-
}
12+
public interface YdbTracer {
13+
static void clear() {
14+
YdbTracerImpl.clear();
4015
}
4116

42-
public static void clear() {
43-
LOCAL.remove();
17+
static YdbTracer current() {
18+
return YdbTracerImpl.current();
4419
}
4520

46-
public static YdbTracer current() {
47-
YdbTracer tracer = LOCAL.get();
48-
if (tracer == null || tracer.isClosed) {
49-
tracer = new YdbTracer();
50-
LOCAL.set(tracer);
51-
}
52-
53-
return tracer;
54-
}
55-
56-
public void trace(String message) {
57-
records.add(new Record(message, false));
58-
}
59-
60-
public void traceRequest(String message) {
61-
records.add(new Record(message, true));
62-
}
63-
64-
public void setId(String id) {
65-
if (!Objects.equals(id, txID)) {
66-
this.txID = id;
67-
trace("set-id " + id);
68-
}
69-
}
70-
71-
public void markToPrint() {
72-
if (!isMarked) {
73-
this.isMarked = true;
74-
trace("markToPrint");
75-
}
76-
}
77-
78-
public void markToPrint(String label) {
79-
if (!isMarked) {
80-
this.isMarked = true;
81-
this.label = label;
82-
trace("markToPrint " + label);
83-
}
84-
}
21+
void setId(String id);
8522

86-
public void close() {
87-
isClosed = true;
23+
void trace(String message);
8824

89-
LOCAL.remove();
25+
void query(String queryText);
9026

91-
final Level level = isMarked ? Level.INFO : Level.FINE;
92-
if (!LOGGER.isLoggable(level) || records.isEmpty()) {
93-
return;
94-
}
27+
void markToPrint(String label);
9528

96-
long finishedAt = System.currentTimeMillis();
97-
long requestsTime = 0;
29+
void close();
9830

99-
String id = txID != null ? txID : "anonymous-" + ANONYMOUS_COUNTER.incrementAndGet();
100-
String traceID = label == null ? id : label + "-" + id;
101-
LOGGER.log(level, "Trace[{0}] started at {1}", new Object[] {traceID, startDate});
102-
long last = startedAt;
103-
long requestsCount = 0;
104-
boolean lastIsRequest = false;
105-
for (Record record: records) {
106-
if (record.isRequest) {
107-
requestsCount++;
108-
lastIsRequest = true;
109-
if (record.message != null) {
110-
LOGGER.log(level, "Query[{0}]: {1}", new Object[] {traceID, record.message.replaceAll("\\s", " ")});
111-
}
112-
} else {
113-
long ms = record.executedAt - last;
114-
if (lastIsRequest) {
115-
requestsTime += ms;
116-
lastIsRequest = false;
117-
}
118-
LOGGER.log(level, "Trace[{0}] {1} ms {2}", new Object[] {traceID, ms, record.message});
119-
last = record.executedAt;
120-
}
121-
}
122-
LOGGER.log(level, "Trace[{0}] finished in {1} ms, {2} requests take {3} ms", new Object[] {
123-
traceID, finishedAt - startedAt, requestsCount, requestsTime
124-
});
31+
default void markToPring() {
32+
markToPrint(null);
12533
}
12634
}

jdbc/src/main/java/tech/ydb/jdbc/context/BaseYdbExecutor.java

Lines changed: 17 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -80,26 +80,6 @@ public void ensureOpened() throws SQLException {
8080
}
8181
}
8282

83-
@Override
84-
public YdbTracer trace(String message) {
85-
if (!traceEnabled) {
86-
return null;
87-
}
88-
YdbTracer tracer = YdbTracer.current();
89-
tracer.trace(message);
90-
return tracer;
91-
}
92-
93-
protected YdbTracer traceRequest(String type, String message) {
94-
if (!traceEnabled) {
95-
return null;
96-
}
97-
YdbTracer tracer = YdbTracer.current();
98-
tracer.trace("--> " + type);
99-
tracer.traceRequest(message);
100-
return tracer;
101-
}
102-
10383
@Override
10484
public YdbQueryResult executeSchemeQuery(YdbStatement statement, YdbQuery query) throws SQLException {
10585
ensureOpened();
@@ -109,14 +89,16 @@ public YdbQueryResult executeSchemeQuery(YdbStatement statement, YdbQuery query)
10989
YdbValidator validator = statement.getValidator();
11090

11191
// Scheme query does not affect transactions or result sets
112-
YdbTracer tracer = traceRequest("scheme query", yql);
92+
YdbTracer tracer = ctx.getTracer();
93+
tracer.trace("--> scheme query");
94+
tracer.query(yql);
11395

11496
ExecuteSchemeQuerySettings settings = ctx.withDefaultTimeout(new ExecuteSchemeQuerySettings());
11597
validator.execute(QueryType.SCHEME_QUERY + " >>\n" + yql, tracer,
11698
() -> retryCtx.supplyStatus(session -> session.executeSchemeQuery(yql, settings))
11799
);
118100

119-
if (tracer != null && !isInsideTransaction()) {
101+
if (!isInsideTransaction()) {
120102
tracer.close();
121103
}
122104

@@ -130,12 +112,15 @@ public YdbQueryResult executeBulkUpsert(YdbStatement statement, YdbQuery query,
130112

131113
String yql = prefixPragma + query.getPreparedYql();
132114
YdbValidator validator = statement.getValidator();
133-
YdbTracer tracer = traceRequest("bulk upsert", yql);
115+
YdbTracer tracer = statement.getConnection().getCtx().getTracer();
116+
tracer.trace("--> bulk upsert");
117+
tracer.query(yql);
118+
134119
validator.execute(QueryType.BULK_QUERY + " >>\n" + yql, tracer,
135120
() -> retryCtx.supplyStatus(session -> session.executeBulkUpsert(tablePath, rows))
136121
);
137122

138-
if (tracer != null && !isInsideTransaction()) {
123+
if (!isInsideTransaction()) {
139124
tracer.close();
140125
}
141126

@@ -156,10 +141,12 @@ public YdbQueryResult executeScanQuery(YdbStatement statement, YdbQuery query, S
156141
.build();
157142
String msg = QueryType.SCAN_QUERY + " >>\n" + yql;
158143

159-
final YdbTracer tracer = traceRequest("scan query", yql);
160-
final Session session = createNewTableSession(validator);
144+
YdbTracer tracer = ctx.getTracer();
145+
tracer.trace("--> scan query");
146+
tracer.query(yql);
161147

162-
StreamQueryResult lazy = validator.call(msg, null, () -> {
148+
final Session session = createNewTableSession(validator);
149+
StreamQueryResult lazy = validator.call(msg, () -> {
163150
final CompletableFuture<Result<StreamQueryResult>> future = new CompletableFuture<>();
164151
final GrpcReadStream<ResultSetReader> stream = session.executeScanQuery(yql, params, settings);
165152
final StreamQueryResult result = new StreamQueryResult(msg, statement, query, stream::cancel);
@@ -173,22 +160,15 @@ public YdbQueryResult executeScanQuery(YdbStatement statement, YdbQuery query, S
173160
if (th != null) {
174161
result.onStreamFinished(th);
175162
future.completeExceptionally(th);
176-
177-
if (tracer != null) {
178-
tracer.trace("<-- " + th.getMessage());
179-
tracer.close();
180-
}
163+
tracer.trace("<-- " + th.getMessage());
181164
}
182165
if (st != null) {
183166
validator.addStatusIssues(st);
184167
result.onStreamFinished(st);
185168
future.complete(st.isSuccess() ? Result.success(result) : Result.fail(st));
186-
187-
if (tracer != null) {
188-
tracer.trace("<-- " + st.toString());
189-
tracer.close();
190-
}
169+
tracer.trace("<-- " + st.toString());
191170
}
171+
tracer.close();
192172
});
193173

194174
return future;

0 commit comments

Comments
 (0)