private synchronized OSSClient createStsOssClient()

in src/main/java/org/elasticsearch/aliyun/oss/service/OssStorageClient.java [297:337]


    private synchronized OSSClient createStsOssClient(RepositoryMetaData repositoryMetaData)
        throws CreateStsOssClientException {
        if (isStsTokenExpired() || isTokenWillExpired()) {
            try {
                if (null == repositoryMetaData) {
                    throw new IOException("repositoryMetaData is null");
                }
                String ecsRamRole = OssClientSettings.ECS_RAM_ROLE.get(repositoryMetaData.settings()).toString();
                String endpoint = OssRepository.getSetting(OssClientSettings.ENDPOINT, repositoryMetaData);

                String fullECSMetaDataServiceUrl = ECS_METADATA_SERVICE + ecsRamRole;
                Response response = HttpClientHelper.httpRequest(fullECSMetaDataServiceUrl);
                if (!response.isSuccessful()) {
                    throw new IOException("ECS meta service server error");
                }
                String jsonStringResponse = response.body().string();
                JSONObject jsonObjectResponse = JSON.parseObject(jsonStringResponse);
                String accessKeyId = jsonObjectResponse.getString(ACCESS_KEY_ID);
                String accessKeySecret = jsonObjectResponse.getString(ACCESS_KEY_SECRET);
                String securityToken = jsonObjectResponse.getString(SECURITY_TOKEN);
                stsTokenExpiration = DateHelper.convertStringToDate(jsonObjectResponse.getString(EXPIRATION));
                try {
                    readWriteLock.writeLock().lock();
                    if (null != this.client) {
                        this.client.shutdown();
                    }
                    this.client = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken,
                        extractClientConfiguration(repositoryMetaData));
                } finally {
                    readWriteLock.writeLock().unlock();
                }
                response.close();
            } catch (IOException e) {
                logger.error("create stsOssClient exception", e);
                throw new CreateStsOssClientException(e);
            }
            return this.client;
        } else {
            return this.client;
        }
    }