You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by "spetz (via GitHub)" <gi...@apache.org> on 2026/10/24 20:32:31 UTC

[PR] feat(sdk): send a raw request to a chosen replica [iggy]

spetz opened a new pull request, #4639:
URL: https://github.com/apache/iggy/pull/4639

   A client could not read the state of one particular node. Each node
   keeps its own stream, topic and system stats, but every official SDK
   sends a raw request, and every typed command other than the five
   partition commands, to the metadata primary. The client discovers the
   roster and keeps a link per replica, yet the choice of link stays
   internal. Tools, dashboards and tests could read only the metadata
   primary, and a client could not spread reads that any node answers.
   
   Add one function per SDK that sends a raw request to the replica id
   that cluster metadata names. Rust gains
   `IggyClient::send_binary_request_to_replica` and
   `BinaryTransport::send_raw_to_replica,` Node.js
   `sendBinaryRequestToReplica` and a replica option on `sendCommand`, Go
   `SendBinaryRequestToReplica`, Java `sendBinaryRequestToReplica` on the
   async, blocking and HTTP clients, C# `SendBinaryRequestToReplicaAsync`,
   Swift `sendRawRequest(code:payload:replica:)`, and the Python, C++ and
   PHP bindings expose the Rust method.
   
   The request travels on that replica's link with the session's metadata
   watermark, so the replica answers after it applied the metadata the
   client saw. Replicated commands, polls and session control fail with
   `InvalidCommand` before anything is sent. An id the roster does not name
   after one roster read fails with `InvalidIdentifier`. A lost link or
   `TransientNotAccepted` retries the same replica until the deadline, and
   `NotPrimary` is returned rather than re-routed, because the caller chose
   the node. HTTP has no raw binary path and returns `FeatureUnavailable`,
   as the existing raw request does.
   
   A new function keeps every existing caller compiling, and the trait
   method has a default so external `BinaryTransport` implementations do
   too. Reusing `InvalidIdentifier` avoids a new code in every SDK's error
   table. No command code, wire format or server behavior changes.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] feat(sdk): send a raw request to a chosen replica [iggy]

Posted by "mmodzelewski (via GitHub)" <gi...@apache.org>.
mmodzelewski merged PR #4639:
URL: https://github.com/apache/iggy/pull/4639


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] feat(sdk): send a raw request to a chosen replica [iggy]

Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on code in PR #4639:
URL: https://github.com/apache/iggy/pull/4639#discussion_r4368496404


##########
core/sdk/src/driver.rs:
##########
@@ -252,6 +254,21 @@ impl OperationDriver {
         .await
     }
 
+    /// Sends a non-replicated request to replica `replica_id` and returns its
+    /// reply. Writes and polls go through the routing of their own kind.
+    pub(crate) async fn send_to_replica(
+        &self,
+        code: u32,
+        payload: Bytes,
+        replica_id: u8,
+    ) -> Result<Bytes, IggyError> {
+        if operation_for_code(code) != Operation::NonReplicated || code == POLL_MESSAGES_CODE {

Review Comment:
   warning: `send_to_replica()` accepts `GET_CONSUMER_OFFSET_CODE`, but the call carries incarnation zero and the server refuses it with `HistoryUnavailable`. Reject `GET_CONSUMER_OFFSET_CODE` here as `POLL_MESSAGES_CODE` is rejected.



##########
foreign/node/src/client/client.socket.ts:
##########
@@ -1330,6 +1365,11 @@ const partitionRoute = (command: number, payload: Buffer): PartitionTarget | und
   return { query, key: query.toString('hex') };
 };
 
+/** A command the caller may send to a replica it chooses: non-replicated, not a poll, not session control. */
+const isReplicaCommand = (command: number): boolean =>
+  !isLoginCommand(command) && command !== LOGOUT.code && command !== COMMAND_CODE.PollMessages &&

Review Comment:
   warning: `isReplicaCommand()` misses `LoginRegister` and `LoginRegisterWithAccessToken`, so `sendCommand(..., { replica })` sends these session-control codes and the encoder turns them into a Register frame. Reject both codes here, as `sendBinaryRequestToReplica()` does.



##########
core/sdk/src/driver.rs:
##########
@@ -639,6 +684,8 @@ impl OperationDriver {
                 self.refresh(call, hop, Failure::Refused).await;
                 Err(Next::Pause)
             }
+            // The caller chose the replica, so its refusal is the answer.
+            IggyError::NotPrimary if call.replica.is_some() => Err(Next::Fail(error)),

Review Comment:
   warning: A chosen-replica call that lost a link after sending ends with `TransientNotCommitted`, not the `NotPrimary` or `TransientNotAccepted` that `send_binary_request_to_replica` documents. `Call::end` retains the keyless ticket on uncertainty, so the replica's refusal never reaches the caller. Return the refusal for a chosen-replica call, or document `TransientNotCommitted`.



##########
core/sdk/src/links/replicas.rs:
##########
@@ -404,6 +404,11 @@ impl ReplicaLinks {
             .ok_or(IggyError::NotConnected)
     }
 
+    /// Whether the last roster names replica `id`.

Review Comment:
   nit: `has_replica()` tests for a link slot, not whether the roster names the id. A roster node without a port for this transport therefore reads as unnamed and yields `InvalidIdentifier`. Make the doc say that the check covers only nodes with a link slot.



##########
foreign/csharp/Iggy_SDK/IggyClient/IIggyClient.cs:
##########
@@ -73,6 +73,26 @@ public interface IIggyClient : IIggyPublisher, IIggyStream, IIggyTopic, IIggyCon
     /// <returns>A task that represents the asynchronous operation and returns the raw response payload bytes.</returns>
     Task<byte[]> SendBinaryRequestAsync(uint code, byte[] payload, CancellationToken token = default);
 
+    /// <summary>
+    ///     Sends a command code with a payload to the replica with the given id and returns its raw response bytes.
+    /// </summary>
+    /// <remarks>
+    ///     The replica id is the one that cluster metadata names for the node. Every node answers non-replicated
+    ///     commands such as GetStats from its own state, so this reads the state of the chosen node. The request carries
+    ///     the metadata watermark of the session. Replicated commands, PollMessages and session-control codes are
+    ///     rejected with an invalid-command error before anything is sent. An id that cluster metadata does not name
+    ///     after one read of it fails with an invalid-identifier error. A replica that cannot be reached, or that answers
+    ///     with TransientNotAccepted, is asked again until the request timeout. Any other refusal, NotPrimary included, is
+    ///     returned and never sent to another replica. HTTP clients report that this operation is unavailable.
+    /// </remarks>
+    /// <param name="replicaId">The replica id that cluster metadata names.</param>
+    /// <param name="code">The numeric command code to send.</param>
+    /// <param name="payload">The request payload.</param>
+    /// <param name="token">The cancellation token to cancel the operation.</param>
+    /// <returns>A task that represents the asynchronous operation and returns the raw response payload bytes.</returns>
+    Task<byte[]> SendBinaryRequestToReplicaAsync(byte replicaId, uint code, byte[] payload,

Review Comment:
   nit: C# and Java take `replicaId` before `code`, and Go does the same, while the other six bindings take it after `payload`. Java types both parameters as `int`, and C# and Go accept swapped literals, so a swap compiles. Move `replicaId` after `payload` in all three.



##########
foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.PollRouting.cs:
##########
@@ -303,6 +304,31 @@ private async Task<IMemoryOwner<byte>> RunClientOperationAsync(int code, ReadOnl
                         }
                         connection = primary;
                     }
+                    else if (replica is { } chosen)
+                    {
+                        if (await FindReadyReplicaAsync(chosen, cancellation.Token) is not { } ready)
+                        {
+                            bool known;
+                            lock (_pollRoutingGate)
+                            {
+                                known = _replicaLinks.ContainsKey(chosen);
+                            }
+                            if (!known && rosterRead)
+                            {
+                                throw VsrError.Exception(VsrError.INVALID_IDENTIFIER,
+                                    $"Cluster metadata names no replica {chosen}.");
+                            }
+                            if (!known)
+                            {
+                                rosterRead = true;
+                                await RefreshPartitionRosterAsync(deadline, cancellation.Token);
+                                continue;
+                            }
+                            await Task.Delay(PollRoutingRetryDelay(routingRetries++, Random.Shared.NextDouble()), cancellation.Token);

Review Comment:
   nit: A raw request to a known replica that never becomes ready ends with the poll-specific `The primary poll was not admitted.` message. Raise a replica-specific `TransientNotAccepted` message on this path.



##########
foreign/go/client/tcp/tcp_driver.go:
##########
@@ -262,6 +262,15 @@ func (c *IggyTcpClient) driveOperation(ctx context.Context, operation *pendingOp
 					link = c.links.replica(route.primary)
 				}
 			}
+		} else if operation.replica != nil {
+			link = c.links.replica(*operation.replica)
+			if link == nil && !c.links.contains(*operation.replica) {
+				if rosterRefreshed {
+					return nil, ierror.ErrInvalidIdentifier
+				}
+				rosterRefreshed = c.refreshRoster(ctx, nil) == nil

Review Comment:
   warning: The Go driver waits up to 50 ms for an unknown replica id, then returns `ErrTransientNotAccepted` instead of `ErrInvalidIdentifier` when the context ends first. Return `ErrInvalidIdentifier` as soon as the refresh succeeds and the roster lacks the replica.



##########
foreign/node/src/wire/command-set.ts:
##########
@@ -274,4 +274,35 @@ export abstract class CommandAPI extends AbstractAPI {
     );
     return response.length <= 1 ? Buffer.alloc(0) : response.data;
   }
+
+  /**
+   * Sends a command code with a payload to the replica with the given id, as
+   * the cluster metadata names it, and returns the raw response payload. Every
+   * node answers non-replicated commands such as GetStats from its own state.
+   * Replicated commands, polls and session-control codes are rejected with an
+   * invalid-command error, and a replica id the cluster metadata does not name
+   * with an invalid-identifier error. A `NotPrimary` refusal is returned and
+   * not retried on another replica.
+   *
+   * @param code - Command code to send
+   * @param payload - Raw command payload
+   * @param replica - Replica id, as the cluster metadata names it
+   * @returns Raw response payload
+   */
+  async sendBinaryRequestToReplica(
+    code: number,
+    payload: Buffer,
+    replica: number
+  ): Promise<Buffer> {
+    if (SESSION_CONTROL_CODES.has(code))
+      throw responseError(code, INVALID_COMMAND_ERROR_CODE);
+
+    const snapshot = Buffer.from(payload);

Review Comment:
   simplification: `sendBinaryRequestToReplica()` repeats the body of `sendBinaryRequest()` except for the `replica` option. Simpler: one private helper that takes `SendCommandOptions`. Saves: about 8 lines.



##########
foreign/go/client/tcp/tcp_core.go:
##########
@@ -383,6 +383,33 @@ func (c *IggyTcpClient) SendBinaryRequest(ctx context.Context, code uint32, payl
 	return c.do(ctx, rawRequest{code: command.Code(code), payload: payload})
 }
 
+// SendBinaryRequestToReplica sends a command code and payload to the replica with id
+// replicaID and returns that replica's raw response body. Session-control codes,
+// replicated commands and polls return ierror.ErrInvalidCommand without writing to the
+// connection. A replica the roster does not name, after one roster read, returns
+// ierror.ErrInvalidIdentifier. The replica's own refusal, such as ierror.ErrNotPrimary,
+// is returned as it is.
+func (c *IggyTcpClient) SendBinaryRequestToReplica(ctx context.Context, replicaID uint8, code uint32, payload []byte) ([]byte, error) {

Review Comment:
   simplification: `SendBinaryRequestToReplica()` repeats the pooled-buffer and frame-append code of `doCaptured()`. Simpler: give `doCaptured()` a `replica *uint8` parameter and reuse it. Saves: about 13 lines.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] feat(sdk): send a raw request to a chosen replica [iggy]

Posted by "codecov[bot] (via GitHub)" <gi...@apache.org>.
codecov[bot] commented on PR #4639:
URL: https://github.com/apache/iggy/pull/4639#issuecomment-6389458145

   ## [Codecov](https://app.codecov.io/gh/apache/iggy/pull/4639?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :x: Patch coverage is `75.77197%` with `102 lines` in your changes missing coverage. Please review.
   :white_check_mark: Project coverage is 70.48%. Comparing base ([`bfc805c`](https://app.codecov.io/gh/apache/iggy/commit/bfc805c27701b1ffbd623dc2fa978783be8584fe?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`318178a`](https://app.codecov.io/gh/apache/iggy/commit/318178a7f9bfc0ae106e2de8a9cbe935125afcb6?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   
   | [Files with missing lines](https://app.codecov.io/gh/apache/iggy/pull/4639?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Patch % | Lines |
   |---|---|---|
   | [core/sdk/src/driver.rs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fdriver.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL2RyaXZlci5ycw==) | 42.53% | [76 Missing and 1 partial :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...a/org/apache/iggy/client/async/tcp/PollRouter.java](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fjava%2Fjava-sdk%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Figgy%2Fclient%2Fasync%2Ftcp%2FPollRouter.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9qYXZhL2phdmEtc2RrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9pZ2d5L2NsaWVudC9hc3luYy90Y3AvUG9sbFJvdXRlci5qYXZh) | 79.54% | [5 Missing and 4 partials :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [foreign/node/src/client/client.socket.ts](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fnode%2Fsrc%2Fclient%2Fclient.socket.ts&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9ub2RlL3NyYy9jbGllbnQvY2xpZW50LnNvY2tldC50cw==) | 86.04% | [6 Missing :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [foreign/go/client/tcp/tcp\_core.go](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fgo%2Fclient%2Ftcp%2Ftcp_core.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9nby9jbGllbnQvdGNwL3RjcF9jb3JlLmdv) | 76.47% | [2 Missing and 2 partials :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [core/common/src/traits/binary\_transport.rs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=core%2Fcommon%2Fsrc%2Ftraits%2Fbinary_transport.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9jb21tb24vc3JjL3RyYWl0cy9iaW5hcnlfdHJhbnNwb3J0LnJz) | 0.00% | [2 Missing :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...ache/iggy/client/async/tcp/AsyncIggyTcpClient.java](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fjava%2Fjava-sdk%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Figgy%2Fclient%2Fasync%2Ftcp%2FAsyncIggyTcpClient.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9qYXZhL2phdmEtc2RrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9pZ2d5L2NsaWVudC9hc3luYy90Y3AvQXN5bmNJZ2d5VGNwQ2xpZW50LmphdmE=) | 88.88% | [1 Missing and 1 partial :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [core/sdk/src/clients/client.rs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fclients%2Fclient.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL2NsaWVudHMvY2xpZW50LnJz) | 90.90% | [1 Missing :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [...SDK/IggyClient/Implementations/TcpMessageStream.cs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fcsharp%2FIggy_SDK%2FIggyClient%2FImplementations%2FTcpMessageStream.cs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9jc2hhcnAvSWdneV9TREsvSWdneUNsaWVudC9JbXBsZW1lbnRhdGlvbnMvVGNwTWVzc2FnZVN0cmVhbS5jcw==) | 90.00% | [0 Missing and 1 partial :warning: ](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   > :exclamation:  There is a different number of reports uploaded between BASE (bfc805c) and HEAD (318178a). Click for more details.
   > 
   > <details><summary>HEAD has 2 uploads less than BASE</summary>
   >
   >| Flag | BASE (bfc805c) | HEAD (318178a) |
   >|------|------|------|
   >|rust|4|2|
   ></details>
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@              Coverage Diff              @@
   ##             master    #4639       +/-   ##
   =============================================
   - Coverage     90.77%   70.48%   -20.29%     
   - Complexity     2965     2988       +23     
   =============================================
     Files          1459     1459               
     Lines        347741   348135      +394     
     Branches     292546   292726      +180     
   =============================================
   - Hits         315651   245393    -70258     
   - Misses        25451    96091    +70640     
   - Partials       6639     6651       +12     
   ```
   
   | [Components](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=components&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [Rust Core](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `67.56% <47.01%> (-24.53%)` | :arrow_down: |
   | [Java SDK](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `77.77% <82.81%> (+0.03%)` | :arrow_up: |
   | [C# SDK](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `83.58% <97.29%> (-0.03%)` | :arrow_down: |
   | [Python SDK](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `85.69% <100.00%> (+0.04%)` | :arrow_up: |
   | [PHP SDK](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `90.67% <100.00%> (+0.07%)` | :arrow_up: |
   | [Node SDK](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `96.44% <92.85%> (-0.02%)` | :arrow_down: |
   | [Go SDK](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `70.01% <86.66%> (+0.07%)` | :arrow_up: |
   | [C++ SDK](https://app.codecov.io/gh/apache/iggy/pull/4639/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `85.51% <100.00%> (+0.06%)` | :arrow_up: |
   
   | [Files with missing lines](https://app.codecov.io/gh/apache/iggy/pull/4639?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [core/sdk/src/binary/mod.rs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Fbinary%2Fmod.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL2JpbmFyeS9tb2QucnM=) | `93.50% <100.00%> (+0.08%)` | :arrow_up: |
   | [core/sdk/src/links/replicas.rs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=core%2Fsdk%2Fsrc%2Flinks%2Freplicas.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Y29yZS9zZGsvc3JjL2xpbmtzL3JlcGxpY2FzLnJz) | `74.70% <100.00%> (-21.57%)` | :arrow_down: |
   | [foreign/cpp/src/client.rs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fcpp%2Fsrc%2Fclient.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9jcHAvc3JjL2NsaWVudC5ycw==) | `87.47% <100.00%> (+0.18%)` | :arrow_up: |
   | [foreign/cpp/src/lib.rs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fcpp%2Fsrc%2Flib.rs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9jcHAvc3JjL2xpYi5ycw==) | `100.00% <ø> (ø)` | |
   | [foreign/csharp/Iggy\_SDK/IggyClient/IIggyClient.cs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fcsharp%2FIggy_SDK%2FIggyClient%2FIIggyClient.cs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9jc2hhcnAvSWdneV9TREsvSWdneUNsaWVudC9JSWdneUNsaWVudC5jcw==) | `0.00% <ø> (ø)` | |
   | [...DK/IggyClient/Implementations/HttpMessageStream.cs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fcsharp%2FIggy_SDK%2FIggyClient%2FImplementations%2FHttpMessageStream.cs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9jc2hhcnAvSWdneV9TREsvSWdneUNsaWVudC9JbXBsZW1lbnRhdGlvbnMvSHR0cE1lc3NhZ2VTdHJlYW0uY3M=) | `79.35% <100.00%> (+0.06%)` | :arrow_up: |
   | [...nt/Implementations/TcpMessageStream.PollRouting.cs](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fcsharp%2FIggy_SDK%2FIggyClient%2FImplementations%2FTcpMessageStream.PollRouting.cs&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9jc2hhcnAvSWdneV9TREsvSWdneUNsaWVudC9JbXBsZW1lbnRhdGlvbnMvVGNwTWVzc2FnZVN0cmVhbS5Qb2xsUm91dGluZy5jcw==) | `88.01% <100.00%> (+0.35%)` | :arrow_up: |
   | [foreign/go/client/tcp/tcp\_driver.go](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fgo%2Fclient%2Ftcp%2Ftcp_driver.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9nby9jbGllbnQvdGNwL3RjcF9kcml2ZXIuZ28=) | `85.06% <100.00%> (+0.73%)` | :arrow_up: |
   | [foreign/go/client/tcp/tcp\_pending.go](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fgo%2Fclient%2Ftcp%2Ftcp_pending.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9nby9jbGllbnQvdGNwL3RjcF9wZW5kaW5nLmdv) | `97.10% <ø> (ø)` | |
   | [...ache/iggy/client/blocking/http/IggyHttpClient.java](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree&filepath=foreign%2Fjava%2Fjava-sdk%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Figgy%2Fclient%2Fblocking%2Fhttp%2FIggyHttpClient.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Zm9yZWlnbi9qYXZhL2phdmEtc2RrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9pZ2d5L2NsaWVudC9ibG9ja2luZy9odHRwL0lnZ3lIdHRwQ2xpZW50LmphdmE=) | `90.00% <100.00%> (+0.25%)` | :arrow_up: |
   | ... and [14 more](https://app.codecov.io/gh/apache/iggy/pull/4639?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | |
   
   ... and [563 files with indirect coverage changes](https://app.codecov.io/gh/apache/iggy/pull/4639/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   </details>
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] feat(sdk): send a raw request to a chosen replica [iggy]

Posted by "hubcio (via GitHub)" <gi...@apache.org>.
hubcio commented on PR #4639:
URL: https://github.com/apache/iggy/pull/4639#issuecomment-6389262421

   /skill team-review


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] feat(sdk): send a raw request to a chosen replica [iggy]

Posted by "spetz (via GitHub)" <gi...@apache.org>.
spetz commented on PR #4639:
URL: https://github.com/apache/iggy/pull/4639#issuecomment-6389690884

   /ready


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@iggy.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org