• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

grpc / grpc-java / #19899

03 Jul 2025 06:14AM CUT coverage: 88.52% (-0.02%) from 88.541%
#19899

push

github

web-flow
core: grpc-timeout should always be positive (#12201)

PROTOCOL-HTTP2.md specifies "TimeoutValue → {positive integer as ASCII
string of at most 8 digits}". Zero is not positive, so it should be
avoided. So make sure timeouts are at least 1 nanosecond instead of 0
nanoseconds.

grpc-go recently began disallowing zero timeouts in
https://github.com/grpc/grpc-go/pull/8290 which caused a regression as
grpc-java can generate such timeouts. Apparently no gRPC implementation
had previously been checking for zero timeouts.

Instead of changing the max(0) to max(1) everywhere, just move the max
handling into TimeoutMarshaller, since every caller of TIMEOUT_KEY was
doing the same max() handling.

Before fd8fd517d (in 2016!), grpc-java actually behaved correctly, as it
failed RPCs with timeouts "<= 0". The commit changed the handling to the
max(0) handling we see now.

b/427338711

34643 of 39136 relevant lines covered (88.52%)

0.89 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/../netty/src/main/java/io/grpc/netty/InsecureFromHttp1ChannelCredentials.java
1
/*
2
 * Copyright 2020 The gRPC Authors
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16

17
package io.grpc.netty;
18

19
import io.grpc.ChannelCredentials;
20
import io.grpc.ExperimentalApi;
21

22
/** An insecure credential that upgrades from HTTP/1 to HTTP/2. */
23
@ExperimentalApi("There is no plan to make this API stable, given transport API instability")
24
public final class InsecureFromHttp1ChannelCredentials {
25
  private InsecureFromHttp1ChannelCredentials() {}
26

27
  /** Creates an insecure credential that will upgrade from HTTP/1 to HTTP/2. */
28
  public static ChannelCredentials create() {
29
    return NettyChannelCredentials.create(ProtocolNegotiators.plaintextUpgradeClientFactory());
×
30
  }
31
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc