make ELF.cascade accept an optional promise (#757)
* Make EventLoopFuture.cascade and cascadeFailure accept an optional promise Motivation: fixes #756 Modifications: Change EventLoopFuture.cascade to func cascade(promise: EventLoopPromise<T>?) Result: EventLoopFuture.cascade can be called without needing to check if the promise is nil
This commit is contained in:
parent
f50230aeba
commit
f7357e66ab
|
@ -802,9 +802,7 @@ class BaseSocketChannel<T: BaseSocket>: SelectableChannel, ChannelCore {
|
|||
registerPromise.futureResult.whenFailure { (_: Error) in
|
||||
self.close(promise: nil)
|
||||
}
|
||||
if let promise = promise {
|
||||
registerPromise.futureResult.cascadeFailure(promise: promise)
|
||||
}
|
||||
registerPromise.futureResult.cascadeFailure(promise: promise)
|
||||
|
||||
if self.lifecycleManager.isPreRegistered {
|
||||
// we expect kqueue/epoll registration to always succeed which is basically true, except for errors that
|
||||
|
|
|
@ -395,9 +395,7 @@ public final class ChannelPipeline: ChannelInvoker {
|
|||
self.remove0(ctx: ctx, promise: promise)
|
||||
}
|
||||
|
||||
if let promise = promise {
|
||||
contextFuture.cascadeFailure(promise: promise)
|
||||
}
|
||||
contextFuture.cascadeFailure(promise: promise)
|
||||
}
|
||||
|
||||
/// Remove a `ChannelHandler` from the `ChannelPipeline`.
|
||||
|
@ -412,9 +410,7 @@ public final class ChannelPipeline: ChannelInvoker {
|
|||
self.remove0(ctx: ctx, promise: promise)
|
||||
}
|
||||
|
||||
if let promise = promise {
|
||||
contextFuture.cascadeFailure(promise: promise)
|
||||
}
|
||||
contextFuture.cascadeFailure(promise: promise)
|
||||
}
|
||||
|
||||
/// Remove a `ChannelHandler` from the `ChannelPipeline`.
|
||||
|
|
|
@ -749,7 +749,8 @@ extension EventLoopFuture {
|
|||
///
|
||||
/// - parameters:
|
||||
/// - promise: The `EventLoopPromise` to fulfill with the results of this future.
|
||||
public func cascade(promise: EventLoopPromise<T>) {
|
||||
public func cascade(promise: EventLoopPromise<T>?) {
|
||||
guard let promise = promise else { return }
|
||||
_whenCompleteWithValue { v in
|
||||
switch v {
|
||||
case .failure(let err):
|
||||
|
@ -769,7 +770,8 @@ extension EventLoopFuture {
|
|||
///
|
||||
/// - parameters:
|
||||
/// - promise: The `EventLoopPromise` to fulfill with the results of this future.
|
||||
public func cascadeFailure<U>(promise: EventLoopPromise<U>) {
|
||||
public func cascadeFailure<U>(promise: EventLoopPromise<U>?) {
|
||||
guard let promise = promise else { return }
|
||||
self.whenFailure { err in
|
||||
promise.fail(error: err)
|
||||
}
|
||||
|
|
|
@ -124,11 +124,11 @@ public final class HTTPResponseCompressor: ChannelDuplexHandler {
|
|||
responseHead.headers.replaceOrAdd(name: "Content-Encoding", value: algorithm!.rawValue)
|
||||
initializeEncoder(encoding: algorithm!)
|
||||
pendingResponse.bufferResponseHead(responseHead)
|
||||
chainPromise(promise)
|
||||
pendingWritePromise.futureResult.cascade(promise: promise)
|
||||
case .body(let body):
|
||||
if algorithm != nil {
|
||||
pendingResponse.bufferBodyPart(body)
|
||||
chainPromise(promise)
|
||||
pendingWritePromise.futureResult.cascade(promise: promise)
|
||||
} else {
|
||||
ctx.write(data, promise: promise)
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ public final class HTTPResponseCompressor: ChannelDuplexHandler {
|
|||
}
|
||||
|
||||
pendingResponse.bufferResponseEnd(httpData)
|
||||
chainPromise(promise)
|
||||
pendingWritePromise.futureResult.cascade(promise: promise)
|
||||
emitPendingWrites(ctx: ctx)
|
||||
algorithm = nil
|
||||
deinitializeEncoder()
|
||||
|
@ -212,12 +212,6 @@ public final class HTTPResponseCompressor: ChannelDuplexHandler {
|
|||
deflateEnd(&stream)
|
||||
}
|
||||
|
||||
private func chainPromise(_ promise: EventLoopPromise<Void>?) {
|
||||
if let promise = promise {
|
||||
pendingWritePromise.futureResult.cascade(promise: promise)
|
||||
}
|
||||
}
|
||||
|
||||
/// Emits all pending buffered writes to the network, optionally compressing the
|
||||
/// data. Resets the pending write buffer and promise.
|
||||
///
|
||||
|
|
|
@ -315,7 +315,7 @@ public final class HTTPServerPipelineHandler: ChannelDuplexHandler {
|
|||
case .quiescingLastRequestEndReceived:
|
||||
ctx.write(data).then {
|
||||
ctx.close()
|
||||
}.cascade(promise: promise ?? ctx.channel.eventLoop.makePromise())
|
||||
}.cascade(promise: promise)
|
||||
case .acceptingEvents, .quiescingWaitingForRequestEnd:
|
||||
ctx.write(data, promise: promise)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue