huaweicloud / huaweicloud-sdk-java-obs

The OBS SDK for Java, which is used for accessing Object Storage Service
Other
131 stars 116 forks source link

okhttp3.internal.platform.Platform log 警告: A connection to https://xxx.myhuaweicloud.com/ was leaked #153

Closed SheepPP closed 1 month ago

SheepPP commented 2 months ago

升级3.24.3版本后,控制台打印,连接泄漏了。 5月 17, 2024 2:40:08 上午 okhttp3.internal.platform.Platform log 警告: A connection to https://xxx.myhuaweicloud.com/ was leaked. Did you forget to close a response body? To see where this was allocated, set the OkHttpClient logger level to FINE: Logger.getLogger(OkHttpClient.class.getName()).setLevel(Level.FINE);

image

public abstract class ObsObjectBaseService extends ObsBucketAdvanceService { private static final ILogger log = LoggerBuilder.getLogger(ObsObjectBaseService.class); protected boolean doesObjectExistImpl(GetObjectMetadataRequest request) throws ServiceException { Map<String, String> headers = new HashMap<>(); this.transSseCHeaders(request.getSseCHeader(), headers, this.getIHeaders(request.getBucketName())); this.transRequestPaymentHeaders(request, headers, this.getIHeaders(request.getBucketName())); Map<String, String> params = new HashMap<>(); if (request.getVersionId() != null) { params.put(ObsRequestParams.VERSION_ID, request.getVersionId()); } boolean doesObjectExist = false; try { Response response = performRestHead(request.getBucketName(), request.getObjectKey(), params, headers, request.getUserHeaders(), request.isEncodeHeaders()); if (200 == response.code()) { doesObjectExist = true; } } catch (ServiceException ex) { if (!(404 == ex.getResponseCode())) { throw ex; } } return doesObjectExist; } ..... }

doesObjectExist这个接口没有close response body。请排查是否还有其他接口有同类型的问题。

zzq996 commented 1 month ago

getObject是返回一个可读取的流由于下载数据,下载完后需要手动close,doesObjectExist这个是head请求,没有body体,不需要close