From 5b3a9a1de389480bec8b6b14b60562fc7a9ad0f6 Mon Sep 17 00:00:00 2001 From: "gaamox@tutanota.com" Date: Mon, 14 Jun 2021 13:18:12 -0500 Subject: [PATCH] Enable resilience as part of the default specification --- .../java/org/knowm/xchange/okex/v5/Okex.java | 5 +++-- .../xchange/okex/v5/OkexAuthenticated.java | 21 ++++++++++--------- .../knowm/xchange/okex/v5/OkexExchange.java | 5 +++++ .../okex/v5/OkexExchangeIntegrationTest.java | 8 +++---- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/Okex.java b/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/Okex.java index eebb5850e4f..f840786c2b6 100644 --- a/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/Okex.java +++ b/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/Okex.java @@ -20,12 +20,13 @@ @Path("/api/v5") @Produces(APPLICATION_JSON) public interface Okex { - String instrumentsPath = "/public/instruments"; + String instrumentsPath = "/public/instruments"; // Stated as 20 req/2 sec + // To avoid 429s, actual req/second may need to be lowered! Map> publicPathRateLimits = new HashMap>() { { - put(instrumentsPath, Arrays.asList(20, 2)); // e.g. 20 requests per 2 seconds + put(instrumentsPath, Arrays.asList(8, 1)); } }; diff --git a/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexAuthenticated.java b/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexAuthenticated.java index e45c6bde5d0..086f3549684 100644 --- a/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexAuthenticated.java +++ b/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexAuthenticated.java @@ -29,20 +29,21 @@ @Path("/api/v5") @Produces(MediaType.APPLICATION_JSON) public interface OkexAuthenticated extends Okex { - String balancePath = "/account/balance"; - String currenciesPath = "/asset/currencies"; - String pendingOrdersPath = "/trade/orders-pending"; - String placeOrderPath = "/trade/order"; - String placeBatchOrderPath = "/trade/batch-orders"; - String cancelOrderPath = "/trade/cancel-order"; - String cancelBatchOrderPath = "trade/cancel-batch-orders"; - String amendOrderPath = "trade/amend-order"; - String amendBatchOrderPath = "trade/amend-batch-orders"; + String balancePath = "/account/balance"; // Stated as 10 req/2 sec + String currenciesPath = "/asset/currencies"; // Stated as 6 req/sec + String pendingOrdersPath = "/trade/orders-pending"; // Stated as 20 req/2 sec + String placeOrderPath = "/trade/order"; // Stated as 60 req/2 sec + String placeBatchOrderPath = "/trade/batch-orders"; // Stated as 300 req/2 sec + String cancelOrderPath = "/trade/cancel-order"; // Stated as 60 req/2 sec + String cancelBatchOrderPath = "trade/cancel-batch-orders"; // Stated as 300 req/2 sec + String amendOrderPath = "trade/amend-order"; // Stated as 60 req/2 sec + String amendBatchOrderPath = "trade/amend-batch-orders"; // Stated as 300 req/2 sec + // To avoid 429s, actual req/second may need to be lowered! Map> privatePathRateLimits = new HashMap>() { { - put(balancePath, Arrays.asList(6, 1)); + put(balancePath, Arrays.asList(5, 1)); put(currenciesPath, Arrays.asList(6, 1)); put(pendingOrdersPath, Arrays.asList(20, 2)); put(placeOrderPath, Arrays.asList(60, 2)); diff --git a/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexExchange.java b/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexExchange.java index 88e3a9a6caa..3805ba872c8 100644 --- a/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexExchange.java +++ b/xchange-okex/src/main/java/org/knowm/xchange/okex/v5/OkexExchange.java @@ -68,6 +68,11 @@ public ExchangeSpecification getDefaultExchangeSpecification() { exchangeSpecification.setExchangeName("Okex"); exchangeSpecification.setExchangeDescription("Okex Exchange"); + ExchangeSpecification.ResilienceSpecification resilienceSpec = new ExchangeSpecification.ResilienceSpecification(); + resilienceSpec.setRetryEnabled(true); + resilienceSpec.setRateLimiterEnabled(true); + exchangeSpecification.setResilience(resilienceSpec); + exchangeSpecification.setExchangeSpecificParametersItem(Parameters.PARAM_USE_AWS, false); exchangeSpecification.setExchangeSpecificParametersItem( Parameters.PARAM_AWS_SSL_URI, "https://aws.okex.com"); diff --git a/xchange-okex/src/test/java/org/knowm/xchange/okex/v5/OkexExchangeIntegrationTest.java b/xchange-okex/src/test/java/org/knowm/xchange/okex/v5/OkexExchangeIntegrationTest.java index b3593bf9f2f..4ffd4626d39 100644 --- a/xchange-okex/src/test/java/org/knowm/xchange/okex/v5/OkexExchangeIntegrationTest.java +++ b/xchange-okex/src/test/java/org/knowm/xchange/okex/v5/OkexExchangeIntegrationTest.java @@ -23,20 +23,20 @@ @Slf4j public class OkexExchangeIntegrationTest { + //Enter your authentication details here to run private endpoint tests private static final String API_KEY = ""; private static final String SECRET_KEY = ""; private static final String PASSPHRASE = ""; @Test public void testCreateExchangeShouldApplyDefaultSpecification() throws Exception { - ExchangeSpecification spec = - ExchangeFactory.INSTANCE - .createExchange(OkexExchange.class) - .getDefaultExchangeSpecification(); + ExchangeSpecification spec = new OkexExchange().getDefaultExchangeSpecification(); final Exchange exchange = ExchangeFactory.INSTANCE.createExchange(spec); assertThat(exchange.getExchangeSpecification().getSslUri()).isEqualTo("https://www.okex.com"); assertThat(exchange.getExchangeSpecification().getHost()).isEqualTo("okex.com"); + assertThat(exchange.getExchangeSpecification().getResilience().isRateLimiterEnabled()).isEqualTo(true); + assertThat(exchange.getExchangeSpecification().getResilience().isRetryEnabled()).isEqualTo(true); } @Test