Added support of the read locks (#1655)

Closes #1059.
This commit is contained in:
Tigran Babloyan
2023-01-27 22:45:22 +04:00
committed by GitHub
parent ef9d3ff0fc
commit b83da70073
7 changed files with 164 additions and 20 deletions

View File

@@ -35,6 +35,8 @@ import java.util.List;
import java.util.Set;
import java.util.UUID;
import com.couchbase.client.core.error.TimeoutException;
import com.couchbase.client.core.retry.RetryReason;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -80,6 +82,28 @@ class CouchbaseTemplateKeyValueIntegrationTests extends JavaIntegrationTests {
couchbaseTemplate.removeByQuery(User.class).withConsistency(QueryScanConsistency.REQUEST_PLUS).all();
}
@Test
void findByIdWithLock() {
try {
User user = new User(UUID.randomUUID().toString(), "user1", "user1");
couchbaseTemplate.upsertById(User.class).one(user);
User foundUser = couchbaseTemplate.findById(User.class).withLock(Duration.ofSeconds(2)).one(user.getId());
user.setVersion(foundUser.getVersion());// version will have changed
assertEquals(user, foundUser);
TimeoutException exception = assertThrows(TimeoutException.class, () ->
couchbaseTemplate.upsertById(User.class).one(user)
);
assertTrue(exception.retryReasons().contains(RetryReason.KV_LOCKED), "should have been locked");
} finally {
sleepSecs(2);
couchbaseTemplate.removeByQuery(User.class).withConsistency(QueryScanConsistency.REQUEST_PLUS).all();
}
}
@Test
void findByIdWithExpiry() {
try {

View File

@@ -36,6 +36,8 @@ import java.util.List;
import java.util.Set;
import java.util.UUID;
import com.couchbase.client.core.error.TimeoutException;
import com.couchbase.client.core.retry.RetryReason;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -114,6 +116,29 @@ class ReactiveCouchbaseTemplateKeyValueIntegrationTests extends JavaIntegrationT
}
@Test
void findByIdWithLock() {
try {
User user = new User(UUID.randomUUID().toString(), "user1", "user1");
reactiveCouchbaseTemplate.upsertById(User.class).one(user).block();
User foundUser = reactiveCouchbaseTemplate.findById(User.class).withLock(Duration.ofSeconds(2))
.one(user.getId()).block();
user.setVersion(foundUser.getVersion());// version will have changed
assertEquals(user, foundUser);
TimeoutException exception = assertThrows(TimeoutException.class, () ->
reactiveCouchbaseTemplate.upsertById(User.class).one(user).block()
);
assertTrue(exception.retryReasons().contains(RetryReason.KV_LOCKED), "should have been locked");
} finally {
sleepSecs(2);
reactiveCouchbaseTemplate.removeByQuery(User.class).withConsistency(REQUEST_PLUS).all().collectList().block();
}
}
@Test
void upsertAndFindById() {
User user = new User(UUID.randomUUID().toString(), "firstname", "lastname");