Skip to content

NIO 2 #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jun 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ let package = Package(
.library(name: "SwiftDataLoader", targets: ["SwiftDataLoader"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-nio.git", from: "1.13.2"),
.package(url: "https://github.com/apple/swift-nio.git", from: "2.0.0"),
],
targets: [
.target(name: "SwiftDataLoader", dependencies: ["NIO"]),
.testTarget(name: "SwiftDataLoaderTests", dependencies: ["SwiftDataLoader"]),
],
swiftLanguageVersions: [.v3, .v4, .v4_2, .version("5")]
swiftLanguageVersions: [.v5]
)
19 changes: 0 additions & 19 deletions [email protected]

This file was deleted.

19 changes: 0 additions & 19 deletions [email protected]

This file was deleted.

50 changes: 25 additions & 25 deletions Sources/SwiftDataLoader/DataLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,19 @@ final public class DataLoader<Key: Hashable, Value> {
return cachedFuture
}

let promise: EventLoopPromise<Value> = eventLoop.next().newPromise()
let promise: EventLoopPromise<Value> = eventLoop.next().makePromise()

if options.batchingEnabled {
queue.append((key: key, promise: promise))
} else {
_ = try batchLoadFunction([key]).map { results in
if results.isEmpty {
promise.fail(error: DataLoaderError.noValueForKey("Did not return value for key: \(key)"))
promise.fail(DataLoaderError.noValueForKey("Did not return value for key: \(key)"))
} else {
let result = results[0]
switch result {
case .success(let value): promise.succeed(result: value)
case .failure(let error): promise.fail(error: error)
case .success(let value): promise.succeed(value)
case .failure(let error): promise.fail(error)
}
}
}
Expand All @@ -66,9 +66,9 @@ final public class DataLoader<Key: Hashable, Value> {
}

public func loadMany(keys: [Key], on eventLoop: EventLoopGroup) throws -> EventLoopFuture<[Value]> {
guard !keys.isEmpty else { return eventLoop.next().newSucceededFuture(result: []) }
guard !keys.isEmpty else { return eventLoop.next().makeSucceededFuture([]) }

let promise: EventLoopPromise<[Value]> = eventLoop.next().newPromise()
let promise: EventLoopPromise<[Value]> = eventLoop.next().makePromise()

var result = [Value]()

Expand All @@ -79,7 +79,7 @@ final public class DataLoader<Key: Hashable, Value> {
result.append(value)

if result.count == keys.count {
promise.succeed(result: result)
promise.succeed(result)
}
}
}
Expand All @@ -102,8 +102,8 @@ final public class DataLoader<Key: Hashable, Value> {
let cacheKey = options.cacheKeyFunction?(key) ?? key

if futureCache[cacheKey] == nil {
let promise: EventLoopPromise<Value> = eventLoop.next().newPromise()
promise.succeed(result: value)
let promise: EventLoopPromise<Value> = eventLoop.next().makePromise()
promise.succeed(value)

futureCache[cacheKey] = promise.futureResult
}
Expand All @@ -112,33 +112,33 @@ final public class DataLoader<Key: Hashable, Value> {
}

// MARK: - Private
private func dispatchQueueBatch(queue: LoaderQueue<Key, Value>, on eventLoop: EventLoopGroup) throws { //}-> EventLoopFuture<[Value]> {
private func dispatchQueueBatch(queue: LoaderQueue<Key, Value>, on eventLoop: EventLoopGroup) throws {
let keys = queue.map { $0.key }

if keys.isEmpty {
return //eventLoop.next().newSucceededFuture(result: [])
return
}

// Step through the values, resolving or rejecting each Promise in the
// loaded queue.
_ = try batchLoadFunction(keys)
.thenThrowing { values in
if values.count != keys.count {
throw DataLoaderError.typeError("The function did not return an array of the same length as the array of keys. \nKeys count: \(keys.count)\nValues count: \(values.count)")
}
.flatMapThrowing { values in
if values.count != keys.count {
throw DataLoaderError.typeError("The function did not return an array of the same length as the array of keys. \nKeys count: \(keys.count)\nValues count: \(values.count)")
}

for entry in queue.enumerated() {
let result = values[entry.offset]
for entry in queue.enumerated() {
let result = values[entry.offset]

switch result {
case .failure(let error): entry.element.promise.fail(error: error)
case .success(let value): entry.element.promise.succeed(result: value)
switch result {
case .failure(let error): entry.element.promise.fail(error)
case .success(let value): entry.element.promise.succeed(value)
}
}
}
}
.mapIfError{ error in
self.failedDispatch(queue: queue, error: error)
}
.recover { error in
self.failedDispatch(queue: queue, error: error)
}
}

public func dispatchQueue(on eventLoop: EventLoopGroup) throws {
Expand All @@ -163,7 +163,7 @@ final public class DataLoader<Key: Hashable, Value> {
private func failedDispatch(queue: LoaderQueue<Key, Value>, error: Error) {
queue.forEach { (key, promise) in
_ = clear(key: key)
promise.fail(error: error)
promise.fail(error)
}
}
}
8 changes: 4 additions & 4 deletions Tests/SwiftDataLoaderTests/DataLoaderAbuseTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class DataLoaderAbuseTests: XCTestCase {
}

let identityLoader = DataLoader<Int, Int>(options: DataLoaderOptions(batchingEnabled: false)) { keys in
eventLoopGroup.next().newSucceededFuture(result: [])
eventLoopGroup.next().makeSucceededFuture([])
}

let value = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand All @@ -37,7 +37,7 @@ class DataLoaderAbuseTests: XCTestCase {
}

let identityLoader = DataLoader<Int, Int>(options: DataLoaderOptions()) { keys in
eventLoopGroup.next().newSucceededFuture(result: [])
eventLoopGroup.next().makeSucceededFuture([])
}

let value = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand All @@ -64,7 +64,7 @@ class DataLoaderAbuseTests: XCTestCase {
}
}

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand Down Expand Up @@ -94,7 +94,7 @@ class DataLoaderAbuseTests: XCTestCase {
}
}

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand Down
22 changes: 11 additions & 11 deletions Tests/SwiftDataLoaderTests/DataLoaderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ final class DataLoaderTests: XCTestCase {
let identityLoader = DataLoader<Int, Int>(options: DataLoaderOptions(batchingEnabled: false)) { keys in
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand All @@ -36,7 +36,7 @@ final class DataLoaderTests: XCTestCase {
let identityLoader = DataLoader<Int, Int>() { keys in
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let values = try identityLoader.loadMany(keys: [1, 2], on: eventLoopGroup)
Expand All @@ -63,7 +63,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand All @@ -90,7 +90,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand Down Expand Up @@ -119,7 +119,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: 1, on: eventLoopGroup)
Expand All @@ -146,7 +146,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: "A", on: eventLoopGroup)
Expand Down Expand Up @@ -193,7 +193,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: "A", on: eventLoopGroup)
Expand Down Expand Up @@ -230,7 +230,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

let value1 = try identityLoader.load(key: "A", on: eventLoopGroup)
Expand Down Expand Up @@ -267,7 +267,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

_ = identityLoader.prime(key: "A", value: "A", on: eventLoopGroup)
Expand Down Expand Up @@ -295,7 +295,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

_ = identityLoader.prime(key: "A", value: "X", on: eventLoopGroup)
Expand Down Expand Up @@ -335,7 +335,7 @@ final class DataLoaderTests: XCTestCase {
loadCalls.append(keys)
let results = keys.map { DataLoaderFutureValue.success($0) }

return eventLoopGroup.next().newSucceededFuture(result: results)
return eventLoopGroup.next().makeSucceededFuture(results)
}

_ = identityLoader.prime(key: "A", value: "X", on: eventLoopGroup)
Expand Down
20 changes: 7 additions & 13 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,21 @@ jobs:
strategy:
maxParallel: 10
matrix:
swift420:
containerImage: norionomura/swift:42
swift421:
containerImage: norionomura/swift:421
swift500:
containerImage: apple/swift:5
container: $[ variables['containerImage'] ]
steps:
- script: swift test --parallel
displayName: swift test

- job: Xcode
pool:
vmImage: 'macOS 10.13'
vmImage: 'macOS 10.14'
strategy:
maxParallel: 10
matrix:
xcode10:
DEVELOPER_DIR: /Applications/Xcode_10.app
xcode101:
DEVELOPER_DIR: /Applications/Xcode_10.1.app
xcode102:
DEVELOPER_DIR: /Applications/Xcode_10.2.app
steps:
- script: swift package generate-xcodeproj
displayName: Generate Xcode project file
Expand All @@ -45,14 +41,12 @@ jobs:

- job: SwiftPM
pool:
vmImage: 'macOS 10.13'
vmImage: 'macOS 10.14'
strategy:
maxParallel: 10
matrix:
xcode10:
DEVELOPER_DIR: /Applications/Xcode_10.app
xcode101:
DEVELOPER_DIR: /Applications/Xcode_10.1.app
DEVELOPER_DIR: /Applications/Xcode_10.2.app
steps:
- script: xcodebuild -version
displayName: xcodebuild -version
Expand Down