Skip to content

Commit 218810b

Browse files
committed
updated logic to make sure lockHint get propagated only for ReadWriteTransaction
1 parent 9b9e098 commit 218810b

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ ResultSet readInternalWithOptions(
951951
} else if (defaultDirectedReadOptions != null) {
952952
builder.setDirectedReadOptions(defaultDirectedReadOptions);
953953
}
954-
if (readOptions.hasLockHint()) {
954+
if (readOptions.hasLockHint() && !isReadOnly()) {
955955
builder.setLockHint(readOptions.lockHint());
956956
}
957957
final int prefetchChunks =

google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1757,7 +1757,7 @@ public void testExecuteReadWithOrderByOption() {
17571757
}
17581758

17591759
@Test
1760-
public void testExecuteReadWithLockHintOption() {
1760+
public void testUnsupportedTransactionWithLockHintOption() {
17611761
DatabaseClient client =
17621762
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
17631763
try (ResultSet resultSet =
@@ -1771,6 +1771,32 @@ public void testExecuteReadWithLockHintOption() {
17711771
consumeResults(resultSet);
17721772
}
17731773

1774+
List<ReadRequest> requests = mockSpanner.getRequestsOfType(ReadRequest.class);
1775+
assertThat(requests).hasSize(1);
1776+
ReadRequest request = requests.get(0);
1777+
// lock hint is only supported in ReadWriteTransaction
1778+
assertEquals(LockHint.LOCK_HINT_UNSPECIFIED, request.getLockHint());
1779+
}
1780+
1781+
@Test
1782+
public void testReadWriteTransactionWithLockHint() {
1783+
DatabaseClient client =
1784+
spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
1785+
1786+
TransactionRunner runner = client.readWriteTransaction();
1787+
runner.run(
1788+
transaction -> {
1789+
try (ResultSet resultSet =
1790+
transaction.read(
1791+
READ_TABLE_NAME,
1792+
KeySet.singleKey(Key.of(1L)),
1793+
READ_COLUMN_NAMES,
1794+
Options.lockHint(RpcLockHint.EXCLUSIVE))) {
1795+
consumeResults(resultSet);
1796+
}
1797+
return null;
1798+
});
1799+
17741800
List<ReadRequest> requests = mockSpanner.getRequestsOfType(ReadRequest.class);
17751801
assertThat(requests).hasSize(1);
17761802
ReadRequest request = requests.get(0);

google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,9 +409,9 @@ public void testReadOptionsWithLockHintEquality() {
409409
Options.fromReadOptions(Options.lockHint(RpcLockHint.SHARED));
410410
assertEquals(optionsWithSharedLockHint1, optionsWithSharedLockHint2);
411411

412-
Options optionsWithExclusiveLockOrder =
412+
Options optionsWithExclusiveLock =
413413
Options.fromReadOptions(Options.lockHint(RpcLockHint.EXCLUSIVE));
414-
assertNotEquals(optionsWithSharedLockHint1, optionsWithExclusiveLockOrder);
414+
assertNotEquals(optionsWithSharedLockHint1, optionsWithExclusiveLock);
415415
}
416416

417417
@Test

0 commit comments

Comments
 (0)