- CompactBlockValidationOperation wrapped to Task
This commit is contained in:
parent
be24044b51
commit
29f159845d
|
@ -22,7 +22,9 @@ class CompactBlockValidationOperation: ZcashOperation {
|
||||||
private var cacheDb: URL
|
private var cacheDb: URL
|
||||||
private var dataDb: URL
|
private var dataDb: URL
|
||||||
private var network: NetworkType
|
private var network: NetworkType
|
||||||
|
private var cancelableTask: Task<Void, Error>?
|
||||||
|
private var done = false
|
||||||
|
|
||||||
init(
|
init(
|
||||||
rustWelding: ZcashRustBackendWelding.Type,
|
rustWelding: ZcashRustBackendWelding.Type,
|
||||||
cacheDb: URL,
|
cacheDb: URL,
|
||||||
|
@ -44,23 +46,40 @@ class CompactBlockValidationOperation: ZcashOperation {
|
||||||
|
|
||||||
self.startedHandler?()
|
self.startedHandler?()
|
||||||
|
|
||||||
let result = self.rustBackend.validateCombinedChain(dbCache: cacheDb, dbData: dataDb, networkType: self.network)
|
cancelableTask = Task {
|
||||||
|
let result = self.rustBackend.validateCombinedChain(dbCache: cacheDb, dbData: dataDb, networkType: self.network)
|
||||||
switch result {
|
|
||||||
case 0:
|
|
||||||
let error = CompactBlockValidationError.failedWithError(rustBackend.lastError())
|
|
||||||
self.error = error
|
|
||||||
LoggerProxy.debug("block scanning failed with error: \(String(describing: self.error))")
|
|
||||||
self.fail(error: error)
|
|
||||||
|
|
||||||
case ZcashRustBackendWeldingConstants.validChain:
|
switch result {
|
||||||
break
|
case 0:
|
||||||
|
let error = CompactBlockValidationError.failedWithError(rustBackend.lastError())
|
||||||
default:
|
self.error = error
|
||||||
let error = CompactBlockValidationError.validationFailed(height: BlockHeight(result))
|
LoggerProxy.debug("block scanning failed with error: \(String(describing: self.error))")
|
||||||
self.error = error
|
self.fail(error: error)
|
||||||
LoggerProxy.debug("block scanning failed with error: \(String(describing: self.error))")
|
|
||||||
self.fail(error: error)
|
case ZcashRustBackendWeldingConstants.validChain:
|
||||||
|
self.done = true
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
let error = CompactBlockValidationError.validationFailed(height: BlockHeight(result))
|
||||||
|
self.error = error
|
||||||
|
LoggerProxy.debug("block scanning failed with error: \(String(describing: self.error))")
|
||||||
|
self.fail(error: error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while !done && !isCancelled {
|
||||||
|
sleep(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func fail(error: Error? = nil) {
|
||||||
|
self.cancelableTask?.cancel()
|
||||||
|
super.fail(error: error)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func cancel() {
|
||||||
|
self.cancelableTask?.cancel()
|
||||||
|
super.cancel()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue