diff --git a/manifests/zcloud-prod2/hpautoscaler.yaml b/manifests/zcloud-prod2/hpautoscaler.yaml index 479a9a642..a8177268d 100644 --- a/manifests/zcloud-prod2/hpautoscaler.yaml +++ b/manifests/zcloud-prod2/hpautoscaler.yaml @@ -4,4 +4,5 @@ metadata: name: delta-sharing-server-hpa namespace: default spec: + minReplicas: 3 maxReplicas: 8 diff --git a/server/src/main/resources/logback.xml b/server/src/main/resources/logback.xml index 8972ea1dc..37a0a8db8 100644 --- a/server/src/main/resources/logback.xml +++ b/server/src/main/resources/logback.xml @@ -7,6 +7,11 @@ + + + diff --git a/server/src/main/scala/io/delta/sharing/server/DeltaSharingService.scala b/server/src/main/scala/io/delta/sharing/server/DeltaSharingService.scala index 65640d78f..cbcd00cfe 100644 --- a/server/src/main/scala/io/delta/sharing/server/DeltaSharingService.scala +++ b/server/src/main/scala/io/delta/sharing/server/DeltaSharingService.scala @@ -1252,6 +1252,7 @@ object DeltaSharingService { .defaultHostname(serverConfig.getHost) .disableDateHeader() .disableServerHeader() + .idleTimeout(java.time.Duration.ofSeconds(serverConfig.idleTimeoutSeconds)) .requestTimeout(java.time.Duration.ofSeconds(serverConfig.requestTimeoutSeconds)) .annotatedService(serverConfig.endpoint, service: Any) if (serverConfig.ssl == null) { diff --git a/server/src/main/scala/io/delta/sharing/server/config/ServerConfig.scala b/server/src/main/scala/io/delta/sharing/server/config/ServerConfig.scala index f1a6b2811..e7949c303 100644 --- a/server/src/main/scala/io/delta/sharing/server/config/ServerConfig.scala +++ b/server/src/main/scala/io/delta/sharing/server/config/ServerConfig.scala @@ -68,6 +68,10 @@ case class ServerConfig( @BeanProperty var refreshTokenTtlMs: Int, // Whether to emit performance/timing log lines for table queries and CDF requests. @BeanProperty var perfLoggingEnabled: Boolean, + // The idle connection timeout in seconds. Connections idle for longer than this are closed. + // Should be greater than the proxy's IdleConnTimeout to avoid stale-connection EOF errors. + // Set to 0 to use Armeria's built-in default (15 seconds). + @BeanProperty var idleTimeoutSeconds: Long, // Access logging configuration for tracking share data egress via structured logs. @BeanProperty var accessLogging: AccessLoggingConfig ) extends ConfigItem { @@ -94,6 +98,7 @@ case class ServerConfig( queryTablePageTokenTtlMs = 259200000, // 3 days refreshTokenTtlMs = 3600000, // 1 hour perfLoggingEnabled = true, + idleTimeoutSeconds = 120, accessLogging = null ) }