in server/src/jetbrains/buildServer/sharedResources/server/runtime/LocksStorageImpl.java [123:151]
public void store(@NotNull final BuildPromotion buildPromotion,
@NotNull final Map<Lock, String> takenLocks) {
if (!takenLocks.isEmpty()) {
withLock(buildPromotionLock(buildPromotion), () -> {
final Collection<String> serializedStrings = new ArrayList<>();
final Map<String, Lock> locksToStore = new HashMap<>();
takenLocks.forEach((lock, value) -> {
serializedStrings.add(serializeTakenLock(lock, value));
locksToStore.put(lock.getName(), Lock.createFrom(lock, value));
});
try {
final File artifact = new File(buildPromotion.getArtifactsDirectory(), FILE_PATH);
if (FileUtil.createParentDirs(artifact)) {
FileUtil.writeFile(artifact, StringUtil.join(serializedStrings, "\n"), MY_ENCODING);
withLock(myGlobalLock::writeLock, () -> {
myLocksCache.put(buildPromotion, locksToStore);
existsSet.add(buildPromotion.getId());
return null;
});
} else {
log.warn("Failed to create parent dirs for file with taken locks for build {" + buildPromotion + "}");
}
} catch (IOException e) {
log.warn("Failed to store taken locks for build [" + buildPromotion + "]; Message is: " + e.getMessage());
}
return null;
});
}
}