Skip to content

Commit ba04d57

Browse files
committed
Acquire http resources only when starting http servers
1 parent de0f75e commit ba04d57

1 file changed

Lines changed: 26 additions & 13 deletions

File tree

src/main/kotlin/io/github/sgtsilvio/gradle/oci/internal/dsl/OciRegistriesImpl.kt

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import reactor.netty.DisposableServer
4040
import reactor.netty.http.server.HttpServer
4141
import reactor.netty.http.server.HttpServerRequest
4242
import reactor.netty.http.server.HttpServerResponse
43+
import reactor.netty.resources.LoopResources
4344
import java.net.InetSocketAddress
4445
import java.net.URI
4546
import java.util.function.BiFunction
@@ -158,8 +159,6 @@ internal abstract class OciRegistriesService : BuildService<BuildServiceParamete
158159
lateinit var imageMapping: OciImageMappingImpl
159160
private var isStarted = false
160161
private val httpServers = mutableListOf<DisposableServer>()
161-
private val loopResources = OciLoopResources.acquire()
162-
private val imageMetadataRegistry = OciImageMetadataRegistry(OciRegistryApi(OciRegistryHttpClient.acquire()))
163162

164163
fun init(
165164
registries: NamedDomainObjectList<OciRegistry>,
@@ -177,27 +176,38 @@ internal abstract class OciRegistriesService : BuildService<BuildServiceParamete
177176
}
178177
isStarted = true
179178
if (registries.isNotEmpty()) {
180-
startRedirectServer(repositoryPort.get())
179+
val loopResources = OciLoopResources.acquire()
180+
startRedirectServer(repositoryPort.get(), loopResources)
181+
val imageMetadataRegistry = OciImageMetadataRegistry(OciRegistryApi(OciRegistryHttpClient.acquire()))
181182
val imageMappingData = imageMapping.getData()
182183
for (registry in registries) {
183-
startRegistryServer(registry, imageMappingData)
184+
startRegistryServer(registry, loopResources, imageMetadataRegistry, imageMappingData)
184185
}
185186
}
186187
}
187188

188-
private fun startRedirectServer(port: Int) {
189+
private fun startRedirectServer(port: Int, loopResources: LoopResources) {
189190
try {
190-
startHttpServer(port) { request, response ->
191+
startHttpServer(port, loopResources) { request, response ->
191192
val redirectPort = request.requestHeaders()[PORT_HTTP_HEADER_NAME]
192193
response.sendRedirect("http://localhost:" + redirectPort + request.uri())
193194
}
194195
} catch (_: ChannelBindException) {
195196
}
196197
}
197198

198-
private fun startRegistryServer(registry: OciRegistry, imageMappingData: OciImageMappingData) {
199+
private fun startRegistryServer(
200+
registry: OciRegistry,
201+
loopResources: LoopResources,
202+
imageMetadataRegistry: OciImageMetadataRegistry,
203+
imageMappingData: OciImageMappingData,
204+
) {
199205
val credentials = registry.credentials.orNull?.let { Credentials(it.username!!, it.password!!) }
200-
val port = startHttpServer(0, OciRepositoryHandler(imageMetadataRegistry, imageMappingData, credentials)).port()
206+
val port = startHttpServer(
207+
0,
208+
loopResources,
209+
OciRepositoryHandler(imageMetadataRegistry, imageMappingData, credentials),
210+
).port()
201211
registry.repository.credentials(HttpHeaderCredentials::class) {
202212
name = PORT_HTTP_HEADER_NAME
203213
value = port.toString()
@@ -209,6 +219,7 @@ internal abstract class OciRegistriesService : BuildService<BuildServiceParamete
209219

210220
private fun startHttpServer(
211221
port: Int,
222+
loopResources: LoopResources,
212223
handler: BiFunction<in HttpServerRequest, in HttpServerResponse, out Publisher<Void>>,
213224
): DisposableServer {
214225
return try {
@@ -228,12 +239,14 @@ internal abstract class OciRegistriesService : BuildService<BuildServiceParamete
228239
}
229240

230241
final override fun close() {
231-
for (httpServer in httpServers) {
232-
httpServer.disposeNow()
242+
if (httpServers.isNotEmpty()) {
243+
for (httpServer in httpServers) {
244+
httpServer.disposeNow()
245+
}
246+
httpServers.clear()
247+
OciRegistryHttpClient.release()
248+
OciLoopResources.release()
233249
}
234-
httpServers.clear()
235-
OciRegistryHttpClient.release()
236-
OciLoopResources.release()
237250
}
238251
}
239252

0 commit comments

Comments
 (0)