Skip to content

Commit

Permalink
RequestSender is non-throwing
Browse files Browse the repository at this point in the history
  • Loading branch information
Vladislav Alekseev committed Oct 2, 2019
1 parent 87bd9d0 commit 73556ee
Show file tree
Hide file tree
Showing 25 changed files with 60 additions and 37 deletions.
6 changes: 3 additions & 3 deletions Sources/DistWorker/DistWorker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public final class DistWorker: SchedulerDelegate {
didFetchAnalyticsConfiguration: @escaping (AnalyticsConfiguration) throws -> (),
completion: @escaping () -> ()
) throws {
try workerRegisterer.registerWithServer(
workerRegisterer.registerWithServer(
workerId: workerId,
callbackQueue: callbackQueue
) { [weak self] result in
Expand Down Expand Up @@ -116,7 +116,7 @@ public final class DistWorker: SchedulerDelegate {
}

private func reportAliveness() throws {
try reportAliveSender.reportAlive(
reportAliveSender.reportAlive(
bucketIdsBeingProcessedProvider: currentlyBeingProcessedBucketsTracker.bucketIdsBeingProcessed,
workerId: workerId,
requestSignature: try requestSignature.dematerialize(),
Expand Down Expand Up @@ -248,7 +248,7 @@ public final class DistWorker: SchedulerDelegate {
return requestId
}

try bucketResultSender.send(
bucketResultSender.send(
testingResult: testingResult,
requestId: requestId,
workerId: workerId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public final class LocalQueueServerRunner {
}

private func ensureQueueWithMatchingVersionIsNotRunning(version: Version) throws {
let portToQueueServerVersion = try remotePortDeterminer.queryPortAndQueueServerVersion(timeout: 10)
let portToQueueServerVersion = remotePortDeterminer.queryPortAndQueueServerVersion(timeout: 10)

try portToQueueServerVersion.forEach { (item: (key: Int, value: Version)) in
if item.value == version {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ public protocol BucketResultSender {
requestSignature: RequestSignature,
callbackQueue: DispatchQueue,
completion: @escaping (Either<BucketId, Error>) -> ()
) throws
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public final class BucketResultSenderImpl: BucketResultSender {
requestSignature: RequestSignature,
callbackQueue: DispatchQueue,
completion: @escaping (Either<BucketId, Error>) -> ()
) throws {
try requestSender.sendRequestWithCallback(
) {
requestSender.sendRequestWithCallback(
pathWithSlash: RESTMethod.bucketResult.withPrependingSlash,
payload: PushBucketResultRequest(
workerId: workerId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ public protocol QueueServerVersionFetcher {
func fetchQueueServerVersion(
callbackQueue: DispatchQueue,
completion: @escaping (Either<Version, Error>) -> Void
) throws
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ public final class QueueServerVersionFetcherImpl: QueueServerVersionFetcher {
public func fetchQueueServerVersion(
callbackQueue: DispatchQueue,
completion: @escaping (Either<Version, Error>) -> Void
) throws {
try requestSender.sendRequestWithCallback(
) {
requestSender.sendRequestWithCallback(
pathWithSlash: RESTMethod.queueVersion.withPrependingSlash,
payload: QueueVersionRequest(),
callbackQueue: callbackQueue,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ public protocol ReportAliveSender {
requestSignature: RequestSignature,
callbackQueue: DispatchQueue,
completion: @escaping (Either<ReportAliveResponse, Error>) -> ()
) throws
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public final class ReportAliveSenderImpl: ReportAliveSender {
requestSignature: RequestSignature,
callbackQueue: DispatchQueue,
completion: @escaping (Either<ReportAliveResponse, Error>) -> ()
) throws {
try requestSender.sendRequestWithCallback(
) {
requestSender.sendRequestWithCallback(
pathWithSlash: RESTMethod.reportAlive.withPrependingSlash,
payload: ReportAliveRequest(
workerId: workerId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ public protocol WorkerRegisterer {
workerId: WorkerId,
callbackQueue: DispatchQueue,
completion: @escaping (Either<WorkerConfiguration, Error>) -> Void
) throws
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ public final class WorkerRegistererImpl: WorkerRegisterer {
workerId: WorkerId,
callbackQueue: DispatchQueue,
completion: @escaping (Either<WorkerConfiguration, Error>) -> Void
) throws {
try requestSender.sendRequestWithCallback(
) {
requestSender.sendRequestWithCallback(
pathWithSlash: RESTMethod.registerWorker.withPrependingSlash,
payload: RegisterWorkerRequest(workerId: workerId),
callbackQueue: callbackQueue,
Expand Down
2 changes: 1 addition & 1 deletion Sources/RemotePortDeterminer/RemotePortDeterminer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ import Foundation
import Version

public protocol RemotePortDeterminer {
func queryPortAndQueueServerVersion(timeout: TimeInterval) throws -> [Int: Version]
func queryPortAndQueueServerVersion(timeout: TimeInterval) -> [Int: Version]
}
4 changes: 2 additions & 2 deletions Sources/RemotePortDeterminer/RemoteQueuePortScanner.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public final class RemoteQueuePortScanner: RemotePortDeterminer {
self.requestSenderProvider = requestSenderProvider
}

public func queryPortAndQueueServerVersion(timeout: TimeInterval) throws -> [Int: Version] {
public func queryPortAndQueueServerVersion(timeout: TimeInterval) -> [Int: Version] {
let group = DispatchGroup()

let portToVersion = AtomicValue<[Int: Version]>([:])
Expand All @@ -38,7 +38,7 @@ public final class RemoteQueuePortScanner: RemotePortDeterminer {
)
)

try queueServerVersionFetcher.fetchQueueServerVersion(
queueServerVersionFetcher.fetchQueueServerVersion(
callbackQueue: workQueue
) { (result: Either<Version, Error>) in
if let version = try? result.dematerialize() {
Expand Down
2 changes: 1 addition & 1 deletion Sources/RemoteQueue/RemoteQueueDetector.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public final class RemoteQueueDetector {

public func findSuitableRemoteRunningQueuePorts(timeout: TimeInterval) throws -> Set<Int> {
let localVersion = try localQueueClientVersionProvider.version()
let availableQueues = try remotePortDeterminer.queryPortAndQueueServerVersion(timeout: timeout)
let availableQueues = remotePortDeterminer.queryPortAndQueueServerVersion(timeout: timeout)
let ports = availableQueues
.filter { keyValue -> Bool in keyValue.value == localVersion }
.map { $0.key }
Expand Down
2 changes: 1 addition & 1 deletion Sources/RequestSender/RequestSender.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public protocol RequestSender {
payload: Payload,
callbackQueue: DispatchQueue,
callback: @escaping (Either<Response, RequestSenderError>) -> ()
) throws where Payload : Encodable, Response : Decodable
) where Payload : Encodable, Response : Decodable

func close()
}
3 changes: 3 additions & 0 deletions Sources/RequestSender/RequestSenderError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public enum RequestSenderError: Error, CustomStringConvertible {
case parseError(Error, Data)
case sessionIsClosed(URL)
case unableToCreateUrl(URLComponents)
case cannotIssueRequest(Error)

public var description: String {
switch self {
Expand All @@ -24,6 +25,8 @@ public enum RequestSenderError: Error, CustomStringConvertible {
return "Cannot send request to '\(url)' because session is closed"
case .unableToCreateUrl(let components):
return "Unable to convert components to url: \(components)"
case .cannotIssueRequest(let error):
return "Failed to issue request: \(error)"
}
}
}
20 changes: 20 additions & 0 deletions Sources/RequestSender/RequestSenderImpl.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,26 @@ public final class RequestSenderImpl: RequestSender {
payload: Payload,
callbackQueue: DispatchQueue,
callback: @escaping (Either<Response, RequestSenderError>) -> ()
) where Payload : Encodable, Response : Decodable {
do {
try sendRequest(
pathWithSlash: pathWithSlash,
payload: payload,
callbackQueue: callbackQueue,
callback: callback
)
} catch {
callbackQueue.async {
callback(.error(.cannotIssueRequest(error)))
}
}
}

private func sendRequest<Payload, Response>(
pathWithSlash: String,
payload: Payload,
callbackQueue: DispatchQueue,
callback: @escaping (Either<Response, RequestSenderError>) -> ()
) throws where Payload : Encodable, Response : Decodable {
let url = try createUrl(pathWithSlash: pathWithSlash)

Expand Down
4 changes: 2 additions & 2 deletions Tests/QueueClientTests/BucketResultSenderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ final class BucketResultSenderTests: XCTestCase {
)

let callbackExpectation = expectation(description: "callback should be called")
try sender.send(
sender.send(
testingResult: testingResult,
requestId: "request id",
workerId: "worker id",
Expand All @@ -44,7 +44,7 @@ final class BucketResultSenderTests: XCTestCase {
)

let callbackExpectation = expectation(description: "callback should be called")
try sender.send(
sender.send(
testingResult: testingResult,
requestId: "request id",
workerId: "worker id",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ final class QueueServerVersionFetcherTests: XCTestCase {
)

let completionHandlerCalledExpectation = expectation(description: "Completion handler has been called")
try fetcher.fetchQueueServerVersion(
fetcher.fetchQueueServerVersion(
callbackQueue: callbackQueue
) { (result: Either<Version, Error>) in
XCTAssertEqual(
Expand Down
2 changes: 1 addition & 1 deletion Tests/QueueClientTests/ReportAliveSenderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ final class ReportAliveSenderTests: XCTestCase {
}

let completionHandlerCalledExpectation = expectation(description: "Completion handler has been called")
try reportAliveSender.reportAlive(
reportAliveSender.reportAlive(
bucketIdsBeingProcessedProvider: provider(),
workerId: "worker id",
requestSignature: RequestSignature(value: "signature"),
Expand Down
2 changes: 1 addition & 1 deletion Tests/QueueClientTests/WorkerRegistererImplTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ final class WorkerRegistererImplTests: XCTestCase {

var result: Either<WorkerConfiguration, Error>?

try workerRegisterer.registerWithServer(
workerRegisterer.registerWithServer(
workerId: workerId,
callbackQueue: callbackQueue
) { localResult in
Expand Down
8 changes: 4 additions & 4 deletions Tests/QueueServerTests/QueueHTTPRESTServerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ final class QueueHTTPRESTServerTests: XCTestCase {

let expectation = self.expectation(description: "registerWithServer completion is called")

try workerRegisterer.registerWithServer(
workerRegisterer.registerWithServer(
workerId: workerId,
callbackQueue: callbackQueue
) { result in
Expand Down Expand Up @@ -173,7 +173,7 @@ final class QueueHTTPRESTServerTests: XCTestCase {
)

let callbackExpectation = expectation(description: "result sender callback has been invoked")
try resultSender.send(
resultSender.send(
testingResult: testingResult,
requestId: requestId,
workerId: workerId,
Expand Down Expand Up @@ -220,7 +220,7 @@ final class QueueHTTPRESTServerTests: XCTestCase {

let resultHasBeenProcessedExpectation = expectation(description: "Report alive sender completion handler invoked")

try reportAlivenessSender.reportAlive(
reportAlivenessSender.reportAlive(
bucketIdsBeingProcessedProvider: Set(),
workerId: workerId,
requestSignature: expectedRequestSignature,
Expand Down Expand Up @@ -266,7 +266,7 @@ final class QueueHTTPRESTServerTests: XCTestCase {
)

let requestFinishedExpectation = expectation(description: "Request processed")
try fetcher.fetchQueueServerVersion(
fetcher.fetchQueueServerVersion(
callbackQueue: callbackQueue
) { result in
XCTAssertEqual(
Expand Down
4 changes: 2 additions & 2 deletions Tests/QueueServerTests/QueueServerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ final class QueueServerTests: XCTestCase {
var actualResults = [JobResults]()

_ = try runSyncronously { [callbackQueue, workerId] completion in
try workerRegisterer.registerWithServer(
workerRegisterer.registerWithServer(
workerId: workerId,
callbackQueue: callbackQueue
) { _ in
Expand Down Expand Up @@ -152,7 +152,7 @@ final class QueueServerTests: XCTestCase {
)

let response: Either<BucketId, Error> = try runSyncronously { [callbackQueue, workerId, requestSignature] completion in
try resultSender.send(
resultSender.send(
testingResult: testingResult,
requestId: "request",
workerId: workerId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ final class RemoteQueuePortScannerTests: XCTestCase {
portRange: 12000...12005,
requestSenderProvider: requestSenderProvider
)
let result = try scanner.queryPortAndQueueServerVersion(timeout: 10.0)
let result = scanner.queryPortAndQueueServerVersion(timeout: 10.0)
XCTAssertEqual(result, [:])
}

Expand All @@ -39,7 +39,7 @@ final class RemoteQueuePortScannerTests: XCTestCase {
portRange: port...port,
requestSenderProvider: requestSenderProvider
)
let result = try scanner.queryPortAndQueueServerVersion(timeout: 10.0)
let result = scanner.queryPortAndQueueServerVersion(timeout: 10.0)
XCTAssertEqual(result, [port: expectedVersion])
}
}
2 changes: 1 addition & 1 deletion Tests/RequestSenderTestHelpers/FakeRequestSender.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public final class FakeRequestSender: RequestSender {
payload: Payload,
callbackQueue: DispatchQueue,
callback: @escaping (Either<Response, RequestSenderError>) -> ()
) throws where Payload : Encodable, Response : Decodable {
) where Payload : Encodable, Response : Decodable {
if let result = result {
callbackQueue.async { callback(Either.left(result as! Response)) }
} else if let requestSenderError = requestSenderError {
Expand Down
4 changes: 2 additions & 2 deletions Tests/RequestSenderTests/RequestSenderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ final class RequestSenderTests: XCTestCase {
)

let callbackCalled = expectation(description: "callback has been called")
try sender.sendRequestWithCallback(
sender.sendRequestWithCallback(
pathWithSlash: "/",
payload: ["foo": "bar"],
callbackQueue: callbackQueue,
Expand All @@ -41,7 +41,7 @@ final class RequestSenderTests: XCTestCase {
)

let callbackCalled = expectation(description: "callback has been called")
try sender.sendRequestWithCallback(
sender.sendRequestWithCallback(
pathWithSlash: "/",
payload: ["foo": "bar"],
callbackQueue: callbackQueue,
Expand Down

0 comments on commit 73556ee

Please sign in to comment.