Skip to content

Commit 991addd

Browse files
Merge pull request #152 from OpenElements/configure-request-timeout
requestTimeout for connect can be configured
2 parents 5915bae + 6ac1fb9 commit 991addd

File tree

8 files changed

+50
-3
lines changed

8 files changed

+50
-3
lines changed

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/config/HieroConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.hedera.hashgraph.sdk.Client;
55
import com.openelements.hiero.base.HieroContext;
66
import com.openelements.hiero.base.data.Account;
7+
import java.time.Duration;
78
import java.util.List;
89
import java.util.Map;
910
import java.util.Optional;
@@ -64,6 +65,10 @@ public interface HieroConfig {
6465
@NonNull
6566
Optional<String> relayUrl();
6667

68+
default Optional<Duration> getRequestTimeout() {
69+
return Optional.empty();
70+
}
71+
6772
/**
6873
* Creates a Hiero context. Calling this method multiple times will return a new instance each time.
6974
*
@@ -100,6 +105,7 @@ default Client createClient() {
100105
final List<String> mirrorNodeAddresses = getMirrorNodeAddresses().stream().collect(Collectors.toList());
101106
client.setMirrorNetwork(mirrorNodeAddresses);
102107
client.setOperator(getOperatorAccount().accountId(), getOperatorAccount().privateKey());
108+
getRequestTimeout().ifPresent(client::setRequestTimeout);
103109
return client;
104110
} catch (final Exception e) {
105111
throw new IllegalArgumentException("Can not create client for custom network", e);

hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/config/HieroTestContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public HieroTestContext() {
4949
final PrivateKey privateKey = PrivateKey.fromString(hieroPrivateKeyByEnv);
5050
final PublicKey publicKey = privateKey.getPublicKey();
5151
operationalAccount = new Account(accountId, publicKey, privateKey);
52-
52+
5353
final NetworkSettings networkSettings = NetworkSettings.forIdentifier(hieroNetwork)
5454
.orElseThrow(() -> new IllegalStateException("ENV 'HEDERA_NETWORK' is set to '" + hieroNetwork
5555
+ "' but no network settings are available for this network."));

hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/HieroNetworkConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
@Dependent
1515
public class HieroNetworkConfiguration {
1616

17+
@ConfigProperty(name = "name")
1718
private Optional<String> name;
1819

1920
@Inject
@@ -23,6 +24,12 @@ public class HieroNetworkConfiguration {
2324
@ConfigProperty(name = "mirrornode")
2425
private Optional<String> mirrornode;
2526

27+
private Optional<Long> requestTimeoutInMs;
28+
29+
public Optional<Long> getRequestTimeoutInMs() {
30+
return requestTimeoutInMs;
31+
}
32+
2633
public Optional<String> getName() {
2734
return name;
2835
}

hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/HieroOperatorConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class HieroOperatorConfiguration {
1010
private String accountId;
1111

1212
private String privateKey;
13-
13+
1414
public String getAccountId() {
1515
return accountId;
1616
}

hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/implementation/HieroConfigImpl.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.openelements.hiero.base.data.Account;
99
import com.openelements.hiero.microprofile.HieroNetworkConfiguration;
1010
import com.openelements.hiero.microprofile.HieroOperatorConfiguration;
11+
import java.time.Duration;
1112
import java.util.Collections;
1213
import java.util.Objects;
1314
import java.util.Optional;
@@ -32,6 +33,8 @@ public class HieroConfigImpl implements HieroConfig {
3233

3334
private final String relayUrl;
3435

36+
private final Long requestTimeoutInMs;
37+
3538
public HieroConfigImpl(@NonNull final HieroOperatorConfiguration configuration,
3639
@NonNull final HieroNetworkConfiguration networkConfiguration) {
3740
Objects.requireNonNull(configuration, "configuration must not be null");
@@ -40,7 +43,7 @@ public HieroConfigImpl(@NonNull final HieroOperatorConfiguration configuration,
4043
final AccountId operatorAccountId = AccountId.fromString(configuration.getAccountId());
4144
final PrivateKey operatorPrivateKey = PrivateKey.fromString(configuration.getPrivateKey());
4245
operatorAccount = Account.of(operatorAccountId, operatorPrivateKey);
43-
46+
requestTimeoutInMs = networkConfiguration.getRequestTimeoutInMs().orElse(null);
4447
final Optional<NetworkSettings> networkSettings = networkConfiguration.getName()
4548
.map(name -> NetworkSettings.forIdentifier(name))
4649
.map(settings -> settings.orElse(null));
@@ -60,6 +63,11 @@ public HieroConfigImpl(@NonNull final HieroOperatorConfiguration configuration,
6063
}
6164
}
6265

66+
@Override
67+
public Optional<Duration> getRequestTimeout() {
68+
return Optional.ofNullable(requestTimeoutInMs).map(Duration::ofMillis);
69+
}
70+
6371
@Override
6472
public @NonNull Account getOperatorAccount() {
6573
return operatorAccount;

hiero-enterprise-microprofile/src/test/java/com/openelements/hiero/microprofile/test/TestConfigSource.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ public TestConfigSource() {
4242
properties.put("hiero.network.name", dotenv.get("hiero.network.name"));
4343
}
4444

45+
dotenv.entries().stream()
46+
.filter(e -> !e.getKey().equals("hiero.accountId"))
47+
.filter(e -> !e.getKey().equals("hiero.privateKey"))
48+
.filter(e -> !e.getKey().equals("hiero.network.name"))
49+
.forEach(e -> properties.put(e.getKey(), e.getValue()));
50+
4551
properties.forEach((k, v) -> log.info("CONFIG: '" + k + "'->'" + v + "'"));
4652
}
4753

hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroConfigImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.openelements.hiero.base.config.HieroConfig;
77
import com.openelements.hiero.base.config.NetworkSettings;
88
import com.openelements.hiero.base.data.Account;
9+
import java.time.Duration;
910
import java.util.Collections;
1011
import java.util.List;
1112
import java.util.Objects;
@@ -28,6 +29,8 @@ public class HieroConfigImpl implements HieroConfig {
2829

2930
private final String relayUrl;
3031

32+
private final Duration requestTimeout;
33+
3134
public HieroConfigImpl(@NonNull final HieroProperties properties) {
3235
Objects.requireNonNull(properties, "properties must not be null");
3336

@@ -38,6 +41,8 @@ public HieroConfigImpl(@NonNull final HieroProperties properties) {
3841
final PrivateKey operatorPrivateKey = parsePrivateKey(properties.getPrivateKey());
3942

4043
operatorAccount = Account.of(operatorAccountId, operatorPrivateKey);
44+
requestTimeout = Optional.ofNullable(properties.getNetwork().getRequestTimeoutInMs())
45+
.map(timeout -> Duration.ofMillis(timeout)).orElse(null);
4146

4247
final Optional<NetworkSettings> networkSettings = NetworkSettings.forIdentifier(
4348
properties.getNetwork().getName());
@@ -115,4 +120,9 @@ public Set<ConsensusNode> getConsensusNodes() {
115120
public @NonNull Optional<String> relayUrl() {
116121
return Optional.ofNullable(relayUrl);
117122
}
123+
124+
@Override
125+
public Optional<Duration> getRequestTimeout() {
126+
return Optional.ofNullable(requestTimeout);
127+
}
118128
}

hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroNetworkProperties.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public class HieroNetworkProperties {
2525
*/
2626
private String mirrorNode;
2727

28+
private Long requestTimeoutInMs;
29+
2830
public String getName() {
2931
return name;
3032
}
@@ -48,4 +50,12 @@ public List<HieroNode> getNodes() {
4850
public void setNodes(List<HieroNode> nodes) {
4951
this.nodes = nodes;
5052
}
53+
54+
public Long getRequestTimeoutInMs() {
55+
return requestTimeoutInMs;
56+
}
57+
58+
public void setRequestTimeoutInMs(Long requestTimeoutInMs) {
59+
this.requestTimeoutInMs = requestTimeoutInMs;
60+
}
5161
}

0 commit comments

Comments
 (0)