Jiwon Park created SPARK-56276:
----------------------------------
Summary: Fix file descriptor leak in SparkAppResourceSpecFactory
Key: SPARK-56276
URL: https://issues.apache.org/jira/browse/SPARK-56276
Project: Spark
Issue Type: Improvement
Components: Kubernetes
Affects Versions: kubernetes-operator-0.9.0
Reporter: Jiwon Park
In {{SparkAppResourceSpecFactory.createLocalFileForPodTemplateSpec()}},
{{FileOutputStream}} and {{OutputStreamWriter}} are opened without
try-with-resources:
{code:java}
FileOutputStream fileStream = new FileOutputStream(tmpFile);
OutputStreamWriter writer = new OutputStreamWriter(fileStream, "UTF-8");
writer.write(ModelUtils.asJsonString(ModelUtils.getPodFromTemplateSpec(podTemplateSpec)));
writer.close();
{code}
If {{writer.write()}} or {{ModelUtils.asJsonString()}} throws an exception,
{{writer.close()}} is never reached and the file descriptors remain open. In
long-running operator deployments this can gradually exhaust the OS file
descriptor limit.
Additionally, {{deleteLocalFileFromPathKey()}} catches {{Throwable}}, which
swallows JVM-level errors such as {{OutOfMemoryError}} and
{{VirtualMachineError}}. Only {{SecurityException}} can actually be thrown by
{{File.delete()}}.
*Fix:* Wrap the writer in a try-with-resources block so it is always closed,
replace the {{\"UTF-8\"}} string literal with {{StandardCharsets.UTF_8}}, and
narrow the catch clause from {{Throwable}} to {{SecurityException}}.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]