use of com.couchbase.client.core.error.RateLimitedException in project couchbase-jvm-clients by couchbase.
the class RateLimitingIntegrationTest method queryRateLimitEgress.
@Test
@IgnoreWhen(missesCapabilities = Capabilities.QUERY)
void queryRateLimitEgress() throws Exception {
String username = "queryRateLimitEgress";
Limits limits = new Limits();
limits.queryLimits = new QueryLimits(10000, 10000, 10, 1);
createRateLimitedUser(username, limits);
Cluster cluster = createTestCluster(username);
try {
cluster.waitUntilReady(Duration.ofSeconds(10));
String content = repeatString(1024 * 1024, "a");
Collection collection = cluster.bucket(config().bucketname()).defaultCollection();
collection.upsert("key1", content, UpsertOptions.upsertOptions().timeout(Duration.ofSeconds(5)));
RateLimitedException ex = assertThrows(RateLimitedException.class, () -> {
for (int i = 0; i < 50; i++) {
cluster.query("SELECT * FROM `" + config().bucketname() + "` USE KEYS [\"key1\"]", QueryOptions.queryOptions().timeout(Duration.ofSeconds(15)));
}
});
assertTrue(ex.getMessage().contains("User has exceeded results size limit"));
} finally {
cluster.disconnect();
adminCluster.users().dropUser(username);
}
}
use of com.couchbase.client.core.error.RateLimitedException in project couchbase-jvm-clients by couchbase.
the class RateLimitingIntegrationTest method clusterManagerRateLimitConcurrentRequests.
@Test
void clusterManagerRateLimitConcurrentRequests() throws Exception {
String username = "clusterManagerRateLimitConcurrentRequests";
Limits limits = new Limits();
limits.clusterManagerLimits = new ClusterManagerLimits(1, 10, 10);
createRateLimitedUser(username, limits);
Cluster cluster = createTestCluster(username);
try {
cluster.waitUntilReady(Duration.ofSeconds(10));
RateLimitedException ex = assertThrows(RateLimitedException.class, () -> Flux.range(0, 10).flatMap(i -> cluster.reactive().buckets().getAllBuckets()).blockLast());
assertTrue(ex.getMessage().contains("Limit(s) exceeded [num_concurrent_requests]"));
} finally {
cluster.disconnect();
adminCluster.users().dropUser(username);
}
}
use of com.couchbase.client.core.error.RateLimitedException in project couchbase-jvm-clients by couchbase.
the class RateLimitingIntegrationTest method queryRateLimitConcurrentRequests.
@Test
@IgnoreWhen(missesCapabilities = Capabilities.QUERY)
void queryRateLimitConcurrentRequests() throws Exception {
String username = "queryRateLimitConcurrentRequests";
Limits limits = new Limits();
limits.queryLimits = new QueryLimits(1, 100, 10, 10);
createRateLimitedUser(username, limits);
Cluster cluster = createTestCluster(username);
try {
cluster.waitUntilReady(Duration.ofSeconds(10));
RateLimitedException ex = assertThrows(RateLimitedException.class, () -> Flux.range(0, 50).flatMap(i -> cluster.reactive().query("select 1=1")).blockLast());
assertTrue(ex.getMessage().contains("User has more requests running than allowed"));
} finally {
cluster.disconnect();
adminCluster.users().dropUser(username);
}
}
use of com.couchbase.client.core.error.RateLimitedException in project couchbase-jvm-clients by couchbase.
the class RateLimitingIntegrationTest method searchRateLimitMaxIngress.
@Test
@IgnoreWhen(missesCapabilities = Capabilities.SEARCH)
void searchRateLimitMaxIngress() throws Exception {
String username = "searchRateLimitIngress";
Limits limits = new Limits();
limits.searchLimits = new SearchLimits(10, 100, 1, 10);
createRateLimitedUser(username, limits);
adminCluster.searchIndexes().upsertIndex(new SearchIndex("ratelimits-ingress", config().bucketname()));
Cluster cluster = createTestCluster(username);
try {
cluster.waitUntilReady(Duration.ofSeconds(10));
String content = repeatString(1024 * 1024, "a");
RateLimitedException ex = assertThrows(RateLimitedException.class, () -> {
for (int i = 0; i < 10; i++) {
try {
SearchResult res = cluster.searchQuery("ratelimits-ingress", QueryStringQuery.match(content), SearchOptions.searchOptions().timeout(Duration.ofSeconds(10)).limit(1));
} catch (TimeoutException e) {
// continue
} catch (CouchbaseException e) {
if (e.getMessage().contains("no planPIndexes")) {
continue;
}
throw e;
}
}
});
assertTrue(ex.getMessage().contains("ingress_mib_per_min"));
} finally {
cluster.disconnect();
adminCluster.users().dropUser(username);
adminCluster.searchIndexes().dropIndex("ratelimits-ingress");
}
}
use of com.couchbase.client.core.error.RateLimitedException in project couchbase-jvm-clients by couchbase.
the class RateLimitingIntegrationTest method searchRateLimitMaxCommands.
@Test
@IgnoreWhen(missesCapabilities = Capabilities.SEARCH)
void searchRateLimitMaxCommands() throws Exception {
String username = "searchRateLimit";
Limits limits = new Limits();
limits.searchLimits = new SearchLimits(10, 1, 10, 10);
createRateLimitedUser(username, limits);
adminCluster.searchIndexes().upsertIndex(new SearchIndex("ratelimits", config().bucketname()));
Cluster cluster = createTestCluster(username);
try {
cluster.waitUntilReady(Duration.ofSeconds(10));
RateLimitedException ex = assertThrows(RateLimitedException.class, () -> {
for (int i = 0; i < 50; i++) {
try {
cluster.searchQuery("ratelimits", QueryStringQuery.queryString("a"), SearchOptions.searchOptions().timeout(Duration.ofSeconds(1)));
} catch (TimeoutException e) {
// continue
} catch (CouchbaseException e) {
if (e.getMessage().contains("no planPIndexes")) {
continue;
}
throw e;
}
}
});
assertTrue(ex.getMessage().contains("num_queries_per_min"));
} finally {
cluster.disconnect();
adminCluster.users().dropUser(username);
adminCluster.searchIndexes().dropIndex("ratelimits");
}
}
Aggregations