- CompactBlockBatchScanningOperation operation's main reimplemented to be Task based [472] CompactBlockBatchScanningOperation to async cleanup [472] CompactBlockBatchScanningOperation to async (505) - CompactBlockBatchScanningOperation wrapped to Task
This commit is contained in:
parent
87f50a796c
commit
7b90e598ad
|
@ -194,10 +194,11 @@ class CompactBlockBatchDownloadOperation: ZcashOperation {
|
|||
override var isAsynchronous: Bool { false }
|
||||
|
||||
private var batch: Int
|
||||
private var done = false
|
||||
private var maxRetries: Int
|
||||
private var storage: CompactBlockStorage
|
||||
private var service: LightWalletService
|
||||
private var cancelable: CancellableCall?
|
||||
private var cancelableTask: Task<Void, Error>?
|
||||
private var startHeight: BlockHeight
|
||||
private var targetHeight: BlockHeight
|
||||
|
||||
|
@ -229,8 +230,10 @@ class CompactBlockBatchDownloadOperation: ZcashOperation {
|
|||
return
|
||||
}
|
||||
self.startedHandler?()
|
||||
|
||||
cancelableTask = Task {
|
||||
do {
|
||||
let localDownloadedHeight = try self.storage.latestHeight()
|
||||
let localDownloadedHeight = try await self.storage.latestHeightAsync()
|
||||
|
||||
if localDownloadedHeight != BlockHeight.empty() && localDownloadedHeight > startHeight {
|
||||
LoggerProxy.warn("provided startHeight (\(startHeight)) differs from local latest downloaded height (\(localDownloadedHeight))")
|
||||
|
@ -257,7 +260,12 @@ class CompactBlockBatchDownloadOperation: ZcashOperation {
|
|||
|
||||
repeat {
|
||||
do {
|
||||
let blocks = try service.blockRange(range)
|
||||
let stream: AsyncThrowingStream<ZcashCompactBlock, Error> = service.blockRange(range)
|
||||
|
||||
var blocks: [ZcashCompactBlock] = []
|
||||
for try await compactBlock in stream {
|
||||
blocks.append(compactBlock)
|
||||
}
|
||||
try storage.insert(blocks)
|
||||
success = true
|
||||
} catch {
|
||||
|
@ -283,18 +291,24 @@ class CompactBlockBatchDownloadOperation: ZcashOperation {
|
|||
|
||||
currentHeight = range.upperBound + 1
|
||||
}
|
||||
self.done = true
|
||||
} catch {
|
||||
self.fail(error: error)
|
||||
}
|
||||
}
|
||||
|
||||
while !done && !isCancelled {
|
||||
sleep(1)
|
||||
}
|
||||
}
|
||||
|
||||
override func fail(error: Error? = nil) {
|
||||
self.cancelable?.cancel()
|
||||
self.cancelableTask?.cancel()
|
||||
super.fail(error: error)
|
||||
}
|
||||
|
||||
override func cancel() {
|
||||
self.cancelable?.cancel()
|
||||
self.cancelableTask?.cancel()
|
||||
super.cancel()
|
||||
}
|
||||
|
||||
|
|
|
@ -125,6 +125,8 @@ class CompactBlockBatchScanningOperation: ZcashOperation {
|
|||
private var blockRange: CompactBlockRange
|
||||
private var transactionRepository: TransactionRepository
|
||||
private var network: NetworkType
|
||||
private var cancelableTask: Task<Void, Error>?
|
||||
private var done = false
|
||||
|
||||
private weak var progressDelegate: CompactBlockProgressDelegate?
|
||||
|
||||
|
@ -157,6 +159,7 @@ class CompactBlockBatchScanningOperation: ZcashOperation {
|
|||
|
||||
self.startedHandler?()
|
||||
|
||||
cancelableTask = Task {
|
||||
do {
|
||||
if batchSize == 0 {
|
||||
let scanStartTime = Date()
|
||||
|
@ -224,15 +227,26 @@ class CompactBlockBatchScanningOperation: ZcashOperation {
|
|||
LoggerProxy.debug("Scanned \(heightCount) blocks in \(seconds) seconds")
|
||||
}
|
||||
} while !self.isCancelled && scannedNewBlocks && lastScannedHeight < targetScanHeight
|
||||
self.done = true
|
||||
}
|
||||
} catch {
|
||||
scanFailed(error)
|
||||
}
|
||||
}
|
||||
|
||||
while !done && !isCancelled {
|
||||
sleep(1)
|
||||
}
|
||||
}
|
||||
|
||||
func scanFailed(_ error: Error) {
|
||||
self.error = error
|
||||
self.cancelableTask?.cancel()
|
||||
LoggerProxy.debug("block scanning failed with error: \(String(describing: self.error))")
|
||||
self.fail()
|
||||
super.fail(error: error)
|
||||
}
|
||||
|
||||
override func cancel() {
|
||||
self.cancelableTask?.cancel()
|
||||
super.cancel()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue