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;
}
}