From 9f9cb4f57e9246ccc2b75bc6f05d2dfe6c2a6b4b Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 11 Sep 2020 22:46:39 +0300 Subject: [PATCH] [Gradle, JS] Parallelize requests --- .../gradle/targets/js/VersionFetcher.kt | 48 +++++++++---------- .../generators/gradle/targets/js/main.kt | 18 +++---- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/VersionFetcher.kt b/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/VersionFetcher.kt index 5526dd60b4e..a51c267947d 100644 --- a/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/VersionFetcher.kt +++ b/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/VersionFetcher.kt @@ -9,43 +9,39 @@ import com.google.gson.Gson import io.ktor.client.* import io.ktor.client.request.* import kotlinx.coroutines.async -import kotlinx.coroutines.withContext +import kotlinx.coroutines.coroutineScope import java.io.UnsupportedEncodingException import java.net.URLEncoder import java.nio.charset.StandardCharsets -import kotlin.coroutines.CoroutineContext -class VersionFetcher( - private val coroutineContext: CoroutineContext -) : AutoCloseable { +class VersionFetcher : AutoCloseable { private val client = HttpClient() suspend fun fetch(): List { - return npmPackages - .map { fetchPackageInformationAsync(it) } - .map { fetched -> - val (packageName, value) = fetched.await() - val fetchedPackageInformation = Gson().fromJson(value, FetchedPackageInformation::class.java) - PackageInformation( - packageName, - fetchedPackageInformation.versions.keys - ) - } + return coroutineScope { + npmPackages + .map { async { fetchPackageInformationAsync(it) } } + .map { fetched -> + val (packageName, value) = fetched.await() + val fetchedPackageInformation = Gson().fromJson(value, FetchedPackageInformation::class.java) + PackageInformation( + packageName, + fetchedPackageInformation.versions.keys + ) + } + } } - private suspend fun fetchPackageInformationAsync(packageName: String) = - withContext(coroutineContext) { - val packagePath = - if (packageName.startsWith("@")) - "@" + encodeURIComponent(packageName) - else - encodeURIComponent(packageName) + private suspend fun fetchPackageInformationAsync(packageName: String): Pair { + val packagePath = + if (packageName.startsWith("@")) + "@" + encodeURIComponent(packageName) + else + encodeURIComponent(packageName) - async { - packageName to client.get("http://registry.npmjs.org/$packagePath") - } - } + return (packageName to client.get("http://registry.npmjs.org/$packagePath")) + } override fun close() { client.close() diff --git a/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/main.kt b/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/main.kt index 5307aa3433b..85549e70449 100644 --- a/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/main.kt +++ b/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/targets/js/main.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.generators.gradle.targets.js import kotlinx.coroutines.runBlocking import org.apache.velocity.VelocityContext -import org.apache.velocity.app.Velocity import org.apache.velocity.app.VelocityEngine import org.apache.velocity.runtime.RuntimeConstants.RESOURCE_LOADER import java.io.File @@ -35,18 +34,19 @@ fun main() { val template = velocityEngine.getTemplate("$fileName.vm") - runBlocking { - val packages = VersionFetcher(coroutineContext).use { + val packages = VersionFetcher().use { + runBlocking { it.fetch() } - findLastVersions(packages) - .also { - context.put("dependencies", it) - } + } - targetFile.writer().use { - template.merge(context, it) + findLastVersions(packages) + .also { + context.put("dependencies", it) } + + targetFile.writer().use { + template.merge(context, it) } }