Skip to content

Commit 9a71f01

Browse files
authored
ISO format dates in painless script to avoid date transformer issue (#196)
* ISO format dates in painless script to avoid date transformer issue cannot write time value xcontent for unknown value of type class java.util.Date
1 parent 993b837 commit 9a71f01

File tree

4 files changed

+22
-6
lines changed

4 files changed

+22
-6
lines changed

maestro-app/src/main/java/bio/overture/maestro/app/infra/adapter/outbound/indexing/elasticsearch/AnalysisCentricElasticSearchAdapter.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.fasterxml.jackson.databind.ObjectMapper;
1616
import com.fasterxml.jackson.databind.ObjectWriter;
1717
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
18+
import com.fasterxml.jackson.databind.util.StdDateFormat;
1819
import io.github.resilience4j.retry.Retry;
1920
import io.github.resilience4j.retry.RetryConfig;
2021
import java.io.IOException;
@@ -146,16 +147,15 @@ private List<AnalysisCentricDocument> getAnalysisCentricDocuments(
146147
private UpdateRequest mapAnalysisToUpsertRepositoryQuery(
147148
AnalysisCentricDocument analysisCentricDocument) {
148149
val mapper = new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
149-
150150
val paramsBuilder = new HashMap<String, Object>();
151151
paramsBuilder.put(
152152
"repository",
153153
mapper.convertValue(analysisCentricDocument.getRepositories().get(0), Map.class));
154154
paramsBuilder.put("analysis_state", analysisCentricDocument.getAnalysisState());
155-
paramsBuilder.put("updated_at", analysisCentricDocument.getUpdatedAt());
155+
paramsBuilder.put("updated_at", getDateIso(analysisCentricDocument.getUpdatedAt()));
156156
if (analysisCentricDocument.getPublishedAt()
157157
!= null) { // Nullable as may not have been published
158-
paramsBuilder.put("published_at", analysisCentricDocument.getPublishedAt());
158+
paramsBuilder.put("published_at", getDateIso(analysisCentricDocument.getPublishedAt()));
159159
}
160160

161161
val parameters = unmodifiableMap(paramsBuilder);

maestro-app/src/main/java/bio/overture/maestro/app/infra/adapter/outbound/indexing/elasticsearch/ElasticSearchConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ CommandLineRunner analysisElasticsearchBootstrapper(AnalysisCentricElasticSearch
7272
return (args) -> adapter.initialize();
7373
}
7474

75-
@Bean
75+
@Bean("ES_CLIENT")
7676
RestHighLevelClient client(ApplicationProperties properties) {
7777
val httpHostArrayList =
7878
new ArrayList<HttpHost>(

maestro-app/src/main/java/bio/overture/maestro/app/infra/adapter/outbound/indexing/elasticsearch/FileCentricElasticSearchAdapter.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -266,14 +266,21 @@ private List<FileCentricDocument> getFileCentricDocuments(
266266
private UpdateRequest mapFileToUpsertRepositoryQuery(FileCentricDocument fileCentricDocument) {
267267
val mapper = new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
268268

269+
// this ISO date format is added because in one instance where maestro was deployed
270+
// an error to transform java.util.date was raised:
271+
// cannot write time value xcontent for unknown value of type class java.util.Date
272+
// there seem to be a class loader issue that cannot load the date transfomers in
273+
// org.elasticsearch.common.xcontent.XContentBuilder
274+
// root cause not found.
269275
val paramsBuilder = new HashMap<String, Object>();
270276
paramsBuilder.put(
271277
"repository", mapper.convertValue(fileCentricDocument.getRepositories().get(0), Map.class));
272278
paramsBuilder.put("analysis_state", fileCentricDocument.getAnalysis().getAnalysisState());
273-
paramsBuilder.put("updated_at", fileCentricDocument.getAnalysis().getUpdatedAt());
279+
paramsBuilder.put("updated_at", getDateIso(fileCentricDocument.getAnalysis().getUpdatedAt()));
274280
if (fileCentricDocument.getAnalysis().getPublishedAt()
275281
!= null) { // Nullable as may not have been published
276-
paramsBuilder.put("published_at", fileCentricDocument.getAnalysis().getPublishedAt());
282+
paramsBuilder.put(
283+
"published_at", getDateIso(fileCentricDocument.getAnalysis().getPublishedAt()));
277284
}
278285

279286
val parameters = unmodifiableMap(paramsBuilder);

maestro-app/src/main/java/bio/overture/maestro/app/infra/adapter/outbound/indexing/elasticsearch/SearchAdapterHelper.java

+9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import io.github.resilience4j.retry.RetryConfig;
88
import io.vavr.control.Try;
99
import java.io.IOException;
10+
import java.text.DateFormat;
11+
import java.text.SimpleDateFormat;
1012
import java.time.Duration;
1113
import java.util.*;
1214
import java.util.function.Function;
@@ -234,4 +236,11 @@ private static UpdateRequest prepareUpdate(UpdateRequest req) {
234236
Assert.notNull(req.id(), "No Id define for Query");
235237
return req;
236238
}
239+
240+
static String getDateIso(Date date)
241+
{
242+
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
243+
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
244+
return dateFormat.format(date);
245+
}
237246
}

0 commit comments

Comments
 (0)