Skip to content

Commit b016faf

Browse files
committed
Refactor test framework to return transactionId control flags to client
The test framework client now receives statement executing results with `clearTransactionId` and `startTransactionId` flags embedded.
1 parent 3b6bec0 commit b016faf

File tree

16 files changed

+99
-16
lines changed

16 files changed

+99
-16
lines changed

presto-elasticsearch/src/test/java/com/facebook/presto/elasticsearch/ElasticsearchLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void addResults(QueryStatusInfo statusInfo, QueryData data)
119119
}
120120

121121
@Override
122-
public Void build(Map<String, String> setSessionProperties, Set<String> resetSessionProperties)
122+
public Void build(Map<String, String> setSessionProperties, Set<String> resetSessionProperties, String startTransactionId, boolean clearTransactionId)
123123
{
124124
return null;
125125
}

presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergDistributedQueries.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ public void testDescribeOutputNamedAndUnnamed()
115115
assertEqualsIgnoreOrder(actual, expected);
116116
}
117117

118+
@Override
119+
public void testClearTransactionId()
120+
{
121+
// Catalog iceberg only supports writes using autocommit
122+
}
123+
118124
/**
119125
* Increased the optimizer timeout from 15000ms to 25000ms
120126
*/

presto-kafka/src/test/java/com/facebook/presto/kafka/util/KafkaLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public void addResults(QueryStatusInfo statusInfo, QueryData data)
120120
}
121121

122122
@Override
123-
public Void build(Map<String, String> setSessionProperties, Set<String> resetSessionProperties)
123+
public Void build(Map<String, String> setSessionProperties, Set<String> resetSessionProperties, String startTransactionId, boolean clearTransactionId)
124124
{
125125
return null;
126126
}

presto-main-base/src/main/java/com/facebook/presto/testing/MaterializedResult.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.facebook.presto.common.PageBuilder;
1919
import com.facebook.presto.common.block.Block;
2020
import com.facebook.presto.common.block.BlockBuilder;
21+
import com.facebook.presto.common.transaction.TransactionId;
2122
import com.facebook.presto.common.type.ArrayType;
2223
import com.facebook.presto.common.type.CharType;
2324
import com.facebook.presto.common.type.MapType;
@@ -99,11 +100,13 @@ public class MaterializedResult
99100
private final Set<String> resetSessionProperties;
100101
private final Optional<String> updateType;
101102
private final OptionalLong updateCount;
103+
private final Optional<TransactionId> startedTransactionId;
104+
private final boolean clearTransactionId;
102105
private final List<PrestoWarning> warnings;
103106

104107
public MaterializedResult(List<MaterializedRow> rows, List<? extends Type> types)
105108
{
106-
this(rows, types, ImmutableMap.of(), ImmutableSet.of(), Optional.empty(), OptionalLong.empty(), ImmutableList.of());
109+
this(rows, types, ImmutableMap.of(), ImmutableSet.of(), Optional.empty(), OptionalLong.empty(), Optional.empty(), false, ImmutableList.of());
107110
}
108111

109112
public MaterializedResult(
@@ -113,6 +116,8 @@ public MaterializedResult(
113116
Set<String> resetSessionProperties,
114117
Optional<String> updateType,
115118
OptionalLong updateCount,
119+
Optional<TransactionId> startedTransactionId,
120+
boolean clearTransactionId,
116121
List<PrestoWarning> warnings)
117122
{
118123
this.rows = ImmutableList.copyOf(requireNonNull(rows, "rows is null"));
@@ -121,6 +126,8 @@ public MaterializedResult(
121126
this.resetSessionProperties = ImmutableSet.copyOf(requireNonNull(resetSessionProperties, "resetSessionProperties is null"));
122127
this.updateType = requireNonNull(updateType, "updateType is null");
123128
this.updateCount = requireNonNull(updateCount, "updateCount is null");
129+
this.startedTransactionId = requireNonNull(startedTransactionId, "startedTransactionId is null");
130+
this.clearTransactionId = clearTransactionId;
124131
this.warnings = requireNonNull(warnings, "warnings is null");
125132
}
126133

@@ -165,6 +172,16 @@ public OptionalLong getUpdateCount()
165172
return updateCount;
166173
}
167174

175+
public Optional<TransactionId> getStartedTransactionId()
176+
{
177+
return startedTransactionId;
178+
}
179+
180+
public boolean isClearTransactionId()
181+
{
182+
return clearTransactionId;
183+
}
184+
168185
public List<PrestoWarning> getWarnings()
169186
{
170187
return warnings;
@@ -185,13 +202,15 @@ public boolean equals(Object obj)
185202
Objects.equals(setSessionProperties, o.setSessionProperties) &&
186203
Objects.equals(resetSessionProperties, o.resetSessionProperties) &&
187204
Objects.equals(updateType, o.updateType) &&
188-
Objects.equals(updateCount, o.updateCount);
205+
Objects.equals(updateCount, o.updateCount) &&
206+
Objects.equals(startedTransactionId, o.startedTransactionId) &&
207+
Objects.equals(clearTransactionId, o.clearTransactionId);
189208
}
190209

191210
@Override
192211
public int hashCode()
193212
{
194-
return Objects.hash(rows, types, setSessionProperties, resetSessionProperties, updateType, updateCount);
213+
return Objects.hash(rows, types, setSessionProperties, resetSessionProperties, updateType, updateCount, startedTransactionId, clearTransactionId);
195214
}
196215

197216
@Override
@@ -204,6 +223,8 @@ public String toString()
204223
.add("resetSessionProperties", resetSessionProperties)
205224
.add("updateType", updateType.orElse(null))
206225
.add("updateCount", updateCount.isPresent() ? updateCount.getAsLong() : null)
226+
.add("startedTransactionId", startedTransactionId.orElse(null))
227+
.add("clearTransactionId", clearTransactionId)
207228
.omitNullValues()
208229
.toString();
209230
}
@@ -360,6 +381,8 @@ public MaterializedResult toTestTypes()
360381
resetSessionProperties,
361382
updateType,
362383
updateCount,
384+
startedTransactionId,
385+
clearTransactionId,
363386
warnings);
364387
}
365388

presto-native-execution/src/test/java/com/facebook/presto/nativeworker/AbstractTestNativeGeneralQueries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1211,7 +1211,7 @@ public void testSetSessionJavaWorkerSessionProperty()
12111211
"MaterializedResult{rows=[[true]], " +
12121212
"types=[boolean], " +
12131213
"setSessionProperties={distinct_aggregation_spill_enabled=false}, " +
1214-
"resetSessionProperties=[], updateType=SET SESSION}");
1214+
"resetSessionProperties=[], updateType=SET SESSION, clearTransactionId=false}");
12151215
}
12161216

12171217
@Test

presto-native-sidecar-plugin/src/test/java/com/facebook/presto/sidecar/TestNativeSidecarPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public void testSetNativeWorkerSessionProperty()
155155
"MaterializedResult{rows=[[true]], " +
156156
"types=[boolean], " +
157157
"setSessionProperties={driver_cpu_time_slice_limit_ms=500}, " +
158-
"resetSessionProperties=[], updateType=SET SESSION}");
158+
"resetSessionProperties=[], updateType=SET SESSION, clearTransactionId=false}");
159159
}
160160

161161
@Test

presto-redis/src/test/java/com/facebook/presto/redis/util/RedisLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void addResults(QueryStatusInfo statusInfo, QueryData data)
143143
}
144144

145145
@Override
146-
public Void build(Map<String, String> setSessionProperties, Set<String> resetSessionProperties)
146+
public Void build(Map<String, String> setSessionProperties, Set<String> resetSessionProperties, String startTransactionId, boolean clearTransactionId)
147147
{
148148
return null;
149149
}

presto-singlestore/src/test/java/com/facebook/presto/plugin/singlestore/TestSingleStoreDistributedQueries.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,12 @@ public void testDescribeOutputNamedAndUnnamed()
183183
// this connector uses a non-canonical type for varchar columns in tpch
184184
}
185185

186+
@Override
187+
public void testClearTransactionId()
188+
{
189+
// Catalog singlestore only supports writes using autocommit
190+
}
191+
186192
@Override
187193
public void testInsert()
188194
{

presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,8 @@ private MaterializedResult executeWithStrategies(
594594
ImmutableSet.of(),
595595
p.getUpdateType(),
596596
getOnlyElement(getOnlyElement(rows).getFields()) == null ? OptionalLong.empty() : OptionalLong.of((Long) getOnlyElement(getOnlyElement(rows).getFields())),
597+
Optional.empty(),
598+
false,
597599
ImmutableList.of());
598600
}
599601
}
@@ -606,6 +608,8 @@ else if (execution instanceof PrestoSparkAccessControlCheckerExecution) {
606608
ImmutableSet.of(),
607609
Optional.empty(),
608610
OptionalLong.empty(),
611+
Optional.empty(),
612+
false,
609613
ImmutableList.of());
610614
}
611615
else {
@@ -616,6 +620,8 @@ else if (execution instanceof PrestoSparkAccessControlCheckerExecution) {
616620
ImmutableSet.of(),
617621
Optional.empty(),
618622
OptionalLong.empty(),
623+
Optional.empty(),
624+
false,
619625
ImmutableList.of());
620626
}
621627
}

presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestDistributedQueries.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,41 @@ public void testCreateTable()
249249
assertFalse(getQueryRunner().tableExists(getSession(), "test_create_like"));
250250
}
251251

252+
@Test
253+
public void testClearTransactionId()
254+
{
255+
assertUpdate("create table test_clear_transaction_id_table(a int, b varchar)");
256+
assertUpdate("insert into test_clear_transaction_id_table values(1, '1001'), (2, '1002')", 2);
257+
Session session = getQueryRunner().getDefaultSession();
258+
String defaultCatalog = session.getCatalog().get();
259+
transaction(getQueryRunner().getTransactionManager(), getQueryRunner().getAccessControl())
260+
.execute(Session.builder(session)
261+
.setIdentity(new Identity("admin",
262+
Optional.empty(),
263+
ImmutableMap.of(defaultCatalog, new SelectedRole(ROLE, Optional.of("admin"))),
264+
ImmutableMap.of(),
265+
ImmutableMap.of(),
266+
Optional.empty(),
267+
Optional.empty()))
268+
.build(),
269+
txnSession -> {
270+
MaterializedResult result = computeActual(txnSession, "select * from test_clear_transaction_id_table");
271+
assertEquals(result.getRowCount(), 2);
272+
assertFalse(result.isClearTransactionId());
273+
274+
result = computeActual(txnSession, "insert into test_clear_transaction_id_table values(1, '1001'), (2, '1002')");
275+
assertEquals(result.getOnlyValue(), 2L);
276+
assertFalse(result.isClearTransactionId());
277+
278+
// `Rollback` executes successfully, and the client gets a flag `clearTransactionId = true`
279+
result = computeActual(txnSession, "rollback");
280+
assertTrue(result.isClearTransactionId());
281+
});
282+
283+
assertQuery("select * from test_clear_transaction_id_table", "values(1, '1001'), (2, '1002')");
284+
assertUpdate("drop table if exists test_clear_transaction_id_table");
285+
}
286+
252287
@Test
253288
public void testNonAutoCommitTransactionWithFailAndRollback()
254289
{
@@ -276,7 +311,8 @@ public void testNonAutoCommitTransactionWithFailAndRollback()
276311
assertQueryFails(txnSession, "create table test_table(a int, b varchar)", "Current transaction is aborted, commands ignored until end of transaction block");
277312

278313
// execute `rollback` successfully
279-
assertUpdate(txnSession, "rollback");
314+
MaterializedResult result = computeActual(txnSession, "rollback");
315+
assertTrue(result.isClearTransactionId());
280316
});
281317

282318
assertQuery("select count(*) from test_non_autocommit_table", "values(0)");

0 commit comments

Comments
 (0)