Skip to content

Commit 30fd564

Browse files
authored
Merge pull request #1366 from glbrntt/gb-update-async-await
Merge tag '1.7.1' into 1.7.1-async-await
2 parents 09ae808 + cda57c5 commit 30fd564

21 files changed

+397
-47
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ on:
33
push:
44
branches: [main]
55
pull_request:
6-
branches: [main, 1.6.0-async-await]
6+
branches: [main, 1.7.1-async-await]
77
jobs:
88
preflight:
99
name: License Header and Formatting Checks

CGRPCZlib.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Pod::Spec.new do |s|
22

33
s.name = 'CGRPCZlib'
44
s.module_name = 'CGRPCZlib'
5-
s.version = '1.5.0'
5+
s.version = '1.6.0'
66
s.license = { :type => 'Apache 2.0', :file => 'LICENSE' }
77
s.summary = 'Compression library that provides in-memory compression and decompression functions'
88
s.homepage = 'https://www.grpc.io'

Package.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ let packageDependencies: [Package.Dependency] = [
3636
),
3737
.package(
3838
url: "https://github.com/apple/swift-nio-http2.git",
39-
from: "1.18.2"
39+
from: "1.19.2"
4040
),
4141
.package(
4242
url: "https://github.com/apple/swift-nio-transport-services.git",
@@ -232,6 +232,7 @@ extension Target {
232232
name: "GRPCPerformanceTests",
233233
dependencies: [
234234
.grpc,
235+
.grpcSampleData,
235236
.nioCore,
236237
.nioEmbedded,
237238
.nioPosix,

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,15 @@ the following line to your `Podfile`:
130130
```ruby
131131
pod 'gRPC-Swift-Plugins'
132132
```
133-
134133
The plugins are available in the `Pods/gRPC-Swift-Plugins/` folder afterwards.
135134

135+
#### Homebrew
136+
137+
The plugins are available from [homebrew](https://brew.sh) and can be installed with:
138+
```bash
139+
$ brew install swift-protobuf grpc-swift
140+
```
141+
136142
## Examples
137143

138144
gRPC Swift has a number of tutorials and examples available. They are split

Sources/GRPC/CallOptions.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ extension CallOptions {
133133
self.source = source
134134
}
135135

136+
@usableFromInline
136137
internal func requestID() -> String? {
137138
switch self.source {
138139
case .none:

Sources/GRPC/ConnectionManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ internal final class ConnectionManager {
591591
])
592592

593593
case .connecting:
594-
self.invalidState()
594+
self.connectionFailed(withError: error)
595595

596596
case var .active(state):
597597
state.error = error

Sources/GRPC/ConnectionPool/PooledChannel.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ internal final class PooledChannel: GRPCChannel {
132132
callOptions: CallOptions,
133133
interceptors: [ClientInterceptor<Request, Response>]
134134
) -> Call<Request, Response> where Request: Message, Response: Message {
135+
var callOptions = callOptions
136+
if let requestID = callOptions.requestIDProvider.requestID() {
137+
callOptions.applyRequestID(requestID)
138+
}
139+
135140
let (stream, eventLoop) = self._makeStreamChannel(callOptions: callOptions)
136141

137142
return Call(
@@ -157,6 +162,11 @@ internal final class PooledChannel: GRPCChannel {
157162
callOptions: CallOptions,
158163
interceptors: [ClientInterceptor<Request, Response>]
159164
) -> Call<Request, Response> where Request: GRPCPayload, Response: GRPCPayload {
165+
var callOptions = callOptions
166+
if let requestID = callOptions.requestIDProvider.requestID() {
167+
callOptions.applyRequestID(requestID)
168+
}
169+
160170
let (stream, eventLoop) = self._makeStreamChannel(callOptions: callOptions)
161171

162172
return Call(
@@ -192,3 +202,14 @@ internal final class PooledChannel: GRPCChannel {
192202
self._pool.shutdown(mode: .graceful(deadline), promise: promise)
193203
}
194204
}
205+
206+
extension CallOptions {
207+
@usableFromInline
208+
mutating func applyRequestID(_ requestID: String) {
209+
self.logger[metadataKey: MetadataKey.requestID] = "\(requestID)"
210+
// Add the request ID header too.
211+
if let requestIDHeader = self.requestIDHeader {
212+
self.customMetadata.add(name: requestIDHeader, value: requestID)
213+
}
214+
}
215+
}

Sources/GRPC/GRPCStatus.swift

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,15 @@ public struct GRPCStatus: Error {
105105
/// status code. Use `GRPCStatus.isOk` or check the code directly.
106106
public static let ok = GRPCStatus(code: .ok, message: nil)
107107
/// "Internal server error" status.
108-
public static let processingError = GRPCStatus(
109-
code: .internalError,
110-
message: "unknown error processing request"
111-
)
108+
public static let processingError = Self.processingError(cause: nil)
109+
110+
public static func processingError(cause: Error?) -> GRPCStatus {
111+
return GRPCStatus(
112+
code: .internalError,
113+
message: "unknown error processing request",
114+
cause: cause
115+
)
116+
}
112117
}
113118

114119
extension GRPCStatus: Equatable {
@@ -119,9 +124,14 @@ extension GRPCStatus: Equatable {
119124

120125
extension GRPCStatus: CustomStringConvertible {
121126
public var description: String {
122-
if let message = message {
127+
switch (self.message, self.cause) {
128+
case let (.some(message), .some(cause)):
129+
return "\(self.code): \(message), cause: \(cause)"
130+
case let (.some(message), .none):
123131
return "\(self.code): \(message)"
124-
} else {
132+
case let (.none, .some(cause)):
133+
return "\(self.code), cause: \(cause)"
134+
case (.none, .none):
125135
return "\(self.code)"
126136
}
127137
}

Sources/GRPC/Interceptor/ClientTransport.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ extension ClientTransport {
850850
promise: EventLoopPromise<Void>?
851851
) {
852852
self.callEventLoop.assertInEventLoop()
853-
self.logger.debug("buffering request part", metadata: [
853+
self.logger.trace("buffering request part", metadata: [
854854
"request_part": "\(part.name)",
855855
"call_state": self.stateForLogging,
856856
])
@@ -868,7 +868,7 @@ extension ClientTransport {
868868
// Save any flushing until we're done writing.
869869
var shouldFlush = false
870870

871-
self.logger.debug("unbuffering request parts", metadata: [
871+
self.logger.trace("unbuffering request parts", metadata: [
872872
"request_parts": "\(self.writeBuffer.count)",
873873
])
874874

@@ -878,7 +878,7 @@ extension ClientTransport {
878878
while self.state.isUnbuffering, !self.writeBuffer.isEmpty {
879879
// Pull out as many writes as possible.
880880
while let write = self.writeBuffer.popFirst() {
881-
self.logger.debug("unbuffering request part", metadata: [
881+
self.logger.trace("unbuffering request part", metadata: [
882882
"request_part": "\(write.request.name)",
883883
])
884884

@@ -897,7 +897,7 @@ extension ClientTransport {
897897
}
898898

899899
if self.writeBuffer.isEmpty {
900-
self.logger.debug("request buffer drained")
900+
self.logger.trace("request buffer drained")
901901
} else {
902902
self.logger.notice("unbuffering aborted", metadata: ["call_state": self.stateForLogging])
903903
}
@@ -914,7 +914,7 @@ extension ClientTransport {
914914
/// Fails any promises that come with buffered writes with `error`.
915915
/// - Parameter error: The `Error` to fail promises with.
916916
private func failBufferedWrites(with error: Error) {
917-
self.logger.debug("failing buffered writes", metadata: ["call_state": self.stateForLogging])
917+
self.logger.trace("failing buffered writes", metadata: ["call_state": self.stateForLogging])
918918

919919
while let write = self.writeBuffer.popFirst() {
920920
write.promise?.fail(error)

Sources/GRPC/ServerErrorProcessor.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal enum ServerErrorProcessor {
4444
trailers = [:]
4545
} else {
4646
// Eh... well, we don't what status to use. Use a generic one.
47-
status = .processingError
47+
status = .processingError(cause: error)
4848
trailers = [:]
4949
}
5050

@@ -84,7 +84,7 @@ internal enum ServerErrorProcessor {
8484
mergedTrailers = trailers
8585
} else {
8686
// Eh... well, we don't what status to use. Use a generic one.
87-
status = .processingError
87+
status = .processingError(cause: error)
8888
mergedTrailers = trailers
8989
}
9090

0 commit comments

Comments
 (0)