Remove unnecessary read-lock

The corresponding files are atomically moved at their places once fully downloaded, no need for locks here.
This commit is contained in:
Alexandre Archambault 2016-03-04 00:48:48 +01:00
parent ff20ab3623
commit 2ac4e83391
1 changed files with 16 additions and 32 deletions

View File

@ -483,42 +483,26 @@ object Cache {
FileError.ChecksumFormatError(sumType, sumFile).left FileError.ChecksumFormatError(sumType, sumFile).left
case Some(sum) => case Some(sum) =>
val f = new File(artifact0.url)
val md = MessageDigest.getInstance(sumType) val md = MessageDigest.getInstance(sumType)
val f = new File(artifact0.url)
val is = new FileInputStream(f) val is = new FileInputStream(f)
val res = try { try withContent(is, md.update(_, 0, _))
var lock: FileLock = null finally is.close()
try {
lock = is.getChannel.tryLock(0L, Long.MaxValue, true)
if (lock == null)
FileError.Locked(f).left
else {
withContent(is, md.update(_, 0, _))
().right
}
}
catch {
case e: OverlappingFileLockException =>
FileError.Locked(f).left
}
finally if (lock != null) lock.release()
} finally is.close()
res.flatMap { _ => val digest = md.digest()
val digest = md.digest() val calculatedSum = new BigInteger(1, digest)
val calculatedSum = new BigInteger(1, digest)
if (sum == calculatedSum) if (sum == calculatedSum)
().right ().right
else else
FileError.WrongChecksum( FileError.WrongChecksum(
sumType, sumType,
calculatedSum.toString(16), calculatedSum.toString(16),
sum.toString(16), sum.toString(16),
artifact0.url, artifact0.url,
sumFile sumFile
).left ).left
}
} }
} }