- 
                Notifications
    You must be signed in to change notification settings 
- Fork 179
feat: Http2ClientProtocolConfig and GrpcClientProtocolConfig in internal proto #21785
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 4 commits
72816cc
              1499a8e
              876ae4e
              6a2a22d
              f8552a9
              34cdc3c
              23d876e
              e8aea24
              333cc5e
              4082270
              938f016
              53248c9
              d6b6b36
              a60f194
              edf6e63
              File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
|  | @@ -25,6 +25,8 @@ | |
| import com.hedera.pbj.runtime.io.buffer.Bytes; | ||
| import edu.umd.cs.findbugs.annotations.NonNull; | ||
| import edu.umd.cs.findbugs.annotations.Nullable; | ||
| import io.helidon.webclient.grpc.GrpcClientProtocolConfig; | ||
| import io.helidon.webclient.http2.Http2ClientProtocolConfig; | ||
| import java.io.IOException; | ||
| import java.io.UncheckedIOException; | ||
| import java.net.InetAddress; | ||
|  | @@ -39,6 +41,7 @@ | |
| import java.nio.file.WatchService; | ||
| import java.time.Duration; | ||
| import java.time.Instant; | ||
| import java.time.format.DateTimeParseException; | ||
| import java.util.ArrayList; | ||
| import java.util.Iterator; | ||
| import java.util.List; | ||
|  | @@ -110,6 +113,9 @@ | |
| * startup from the configuration file(s) on disk. | ||
| */ | ||
| private final List<BlockNodeConfig> availableBlockNodes = new ArrayList<>(); | ||
|  | ||
| private Map<BlockNodeConfig, Http2ClientProtocolConfig> http2ClientProtocolConfigs = new ConcurrentHashMap<>(); | ||
|          | ||
| private Map<BlockNodeConfig, GrpcClientProtocolConfig> grpcClientProtocolConfigs = new ConcurrentHashMap<>(); | ||
| /** | ||
| * Flag that indicates if this connection manager is active or not. In this case, being active means it is actively | ||
| * processing blocks and attempting to send them to a block node. | ||
|  | @@ -298,11 +304,9 @@ | |
|  | ||
| final byte[] jsonConfig = Files.readAllBytes(configPath); | ||
| final BlockNodeConnectionInfo protoConfig = BlockNodeConnectionInfo.JSON.parse(Bytes.wrap(jsonConfig)); | ||
|  | ||
| // Convert proto config to internal config objects | ||
| return protoConfig.nodes().stream() | ||
| .map(node -> new BlockNodeConfig(node.address(), node.port(), node.priority())) | ||
| .toList(); | ||
| extractOptionalHttp2ClientProtocolConfig(protoConfig); | ||
| extractOptionalGrpcClientProtocolConfig(protoConfig); | ||
| return protoConfig.nodes(); | ||
| } catch (final IOException | ParseException e) { | ||
| logWithContext( | ||
| logger, | ||
|  | @@ -314,6 +318,97 @@ | |
| } | ||
| } | ||
|  | ||
| private void extractOptionalHttp2ClientProtocolConfig(BlockNodeConnectionInfo protoConfig) { | ||
| for (BlockNodeConfig config : protoConfig.nodes()) { | ||
| if (config.hasHttp2ClientProtocolConfig()) { | ||
| com.hedera.node.internal.network.Http2ClientProtocolConfig protocolConfig = | ||
| config.http2ClientProtocolConfig(); | ||
| Http2ClientProtocolConfig.Builder builder = Http2ClientProtocolConfig.builder(); | ||
| if (protocolConfig != null) { | ||
| if (protocolConfig.flowControlBlockTimeout() != null) { | ||
| try { | ||
| Duration flowControlBlockTimeout = Duration.parse(protocolConfig.flowControlBlockTimeout()); | ||
| builder.flowControlBlockTimeout(flowControlBlockTimeout); | ||
| } catch (DateTimeParseException e) { | ||
| logger.info( | ||
| Check warning on line 333 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| "Unable to parse Http2ClientProtocolConfig flowControlBlockTimeout: {}", | ||
| protocolConfig.flowControlBlockTimeout()); | ||
| Check warning on line 335 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| } | ||
| } | ||
| if (protocolConfig.initialWindowSize() != null) { | ||
| builder.initialWindowSize(protocolConfig.initialWindowSize()); | ||
| } | ||
| if (protocolConfig.maxFrameSize() != null) { | ||
| builder.maxFrameSize(protocolConfig.maxFrameSize()); | ||
| } | ||
| if (protocolConfig.maxHeaderListSize() != null) { | ||
| builder.maxHeaderListSize(protocolConfig.maxHeaderListSize()); | ||
| } | ||
| if (protocolConfig.name() != null) { | ||
| builder.name(protocolConfig.name()); | ||
| } | ||
| if (protocolConfig.ping() != null) { | ||
| builder.ping(protocolConfig.ping()); | ||
| } | ||
| if (protocolConfig.pingTimeout() != null) { | ||
| try { | ||
| Duration pingTimeout = Duration.parse(protocolConfig.pingTimeout()); | ||
| builder.pingTimeout(pingTimeout); | ||
| } catch (DateTimeParseException e) { | ||
| logger.info( | ||
| Check warning on line 358 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| "Unable to parse Http2ClientProtocolConfig pingTimeout: {}", | ||
| protocolConfig.pingTimeout()); | ||
| Check warning on line 360 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| } | ||
| } | ||
| if (protocolConfig.priorKnowledge() != null) { | ||
| builder.priorKnowledge(protocolConfig.priorKnowledge()); | ||
| } | ||
| } | ||
| http2ClientProtocolConfigs.put(config, builder.build()); | ||
| } | ||
| } | ||
| } | ||
|  | ||
| private void extractOptionalGrpcClientProtocolConfig(BlockNodeConnectionInfo protoConfig) { | ||
| for (BlockNodeConfig config : protoConfig.nodes()) { | ||
| if (config.hasGrpcClientProtocolConfig()) { | ||
| com.hedera.node.internal.network.GrpcClientProtocolConfig protocolConfig = | ||
| config.grpcClientProtocolConfig(); | ||
| GrpcClientProtocolConfig.Builder builder = GrpcClientProtocolConfig.builder(); | ||
| if (protocolConfig != null) { | ||
| if (protocolConfig.abortPollTimeExpired() != null) { | ||
| builder.abortPollTimeExpired(protocolConfig.abortPollTimeExpired()); | ||
| } | ||
| if (protocolConfig.heartbeatPeriod() != null) { | ||
| try { | ||
| builder.heartbeatPeriod(Duration.parse(protocolConfig.heartbeatPeriod())); | ||
| } catch (DateTimeParseException e) { | ||
| logger.info( | ||
| Check warning on line 386 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| "Unable to parse GrpcClientProtocolConfig heartbeatPeriod: {}", | ||
| protocolConfig.heartbeatPeriod()); | ||
| Check warning on line 388 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| } | ||
| } | ||
| if (protocolConfig.initBufferSize() != null) { | ||
| builder.initBufferSize(protocolConfig.initBufferSize()); | ||
| } | ||
| if (protocolConfig.name() != null) { | ||
| builder.name(protocolConfig.name()); | ||
| } | ||
| if (protocolConfig.pollWaitTime() != null) { | ||
| try { | ||
| builder.pollWaitTime(Duration.parse(protocolConfig.pollWaitTime())); | ||
| } catch (DateTimeParseException e) { | ||
| logger.info( | ||
| Check warning on line 401 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| "Unable to parse GrpcClientProtocolConfig pollWaitTime: {}", | ||
| protocolConfig.pollWaitTime()); | ||
| Check warning on line 403 in hedera-node/hedera-app/src/main/java/com/hedera/node/app/blocks/impl/streaming/BlockNodeConnectionManager.java 
     | ||
| } | ||
| } | ||
| } | ||
| grpcClientProtocolConfigs.put(config, builder.build()); | ||
| } | ||
| } | ||
| } | ||
|  | ||
| /** | ||
| * Checks if there is only one block node configured. | ||
| * @return whether there is only one block node configured | ||
|  | @@ -516,6 +611,7 @@ | |
| activeConnectionRef.set(null); | ||
| nodeStats.clear(); | ||
| availableBlockNodes.clear(); | ||
| http2ClientProtocolConfigs.clear(); | ||
| } | ||
|  | ||
| private void closeAllConnections() { | ||
|  | @@ -1433,4 +1529,20 @@ | |
|  | ||
| return result; | ||
| } | ||
|  | ||
| /** | ||
| * Gets the HTTP/2 client protocol configurations for all block nodes. | ||
| * @return a map of BlockNodeConfig to Http2ClientProtocolConfig | ||
| */ | ||
| public Map<BlockNodeConfig, Http2ClientProtocolConfig> getHttp2ClientProtocolConfigs() { | ||
| return http2ClientProtocolConfigs; | ||
| } | ||
|  | ||
| /** | ||
| * Gets the gRPC client protocol configurations for all block nodes. | ||
| * @return a map of BlockNodeConfig to GrpcClientProtocolConfig | ||
| */ | ||
| public Map<BlockNodeConfig, GrpcClientProtocolConfig> getGrpcClientProtocolConfigs() { | ||
| return grpcClientProtocolConfigs; | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.