Skip to content

Commit 7b546a0

Browse files
authored
[FSTORE-697] handle timezones in validation report timestamp (#1301)
1 parent c6a47b1 commit 7b546a0

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

hopsworks-api/src/main/java/io/hops/hopsworks/api/featurestore/datavalidationv2/results/ValidationResultBuilder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import javax.ejb.TransactionAttribute;
3030
import javax.ejb.TransactionAttributeType;
3131
import javax.ws.rs.core.UriInfo;
32+
33+
import java.util.TimeZone;
3234
import java.util.stream.Collectors;
3335
import java.text.SimpleDateFormat;
3436
import org.json.JSONObject;
@@ -70,7 +72,9 @@ public ValidationResultDTO build(UriInfo uriInfo, Project project,
7072
metaJson.put("ingestionResult", validationResult.getIngestionResult());
7173
// Same validation string as in validationController to parse time provided by GE
7274
String formatDateString = "yyyy-MM-dd'T'hh:mm:ss.SSSSSSX";
73-
String validationTime = new SimpleDateFormat(formatDateString).format(validationResult.getValidationTime());
75+
SimpleDateFormat isoFormat = new SimpleDateFormat(formatDateString);
76+
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
77+
String validationTime = isoFormat.format(validationResult.getValidationTime());
7478
metaJson.put("validationTime", validationTime);
7579
dto.setMeta(metaJson.toString());
7680
dto.setValidationTime(validationTime);

hopsworks-common/src/main/java/io/hops/hopsworks/common/featurestore/datavalidationv2/reports/ValidationReportController.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import java.util.List;
6969
import java.util.Optional;
7070
import java.util.Set;
71+
import java.util.TimeZone;
7172
import java.util.logging.Level;
7273
import java.util.logging.Logger;
7374

@@ -263,7 +264,9 @@ public ValidationReport convertReportDTOToPersistent(Users user, Featuregroup fe
263264
JSONObject reportMeta = new JSONObject(reportDTO.getMeta());
264265
String validationTimeString = reportMeta.getString("validation_time");
265266
String formatDateString = "yyyyMMdd'T'HHmmss.SSS";
266-
validationTime = new SimpleDateFormat(formatDateString).parse(
267+
SimpleDateFormat isoFormat = new SimpleDateFormat(formatDateString);
268+
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
269+
validationTime = isoFormat.parse(
267270
validationTimeString.substring(0, validationTimeString.length() - 4));
268271
} catch (JSONException | ParseException exception) {
269272
validationTime = new Date();
@@ -311,16 +314,16 @@ private Inode registerValidationReportToDisk(Users user, Featuregroup featuregro
311314
udfso.mkdir(reportDirPath.toString());
312315
}
313316
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HHmmss");
317+
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
314318
String fileName = String.format("validation_report_%s.json", formatter.format(validationTime));
315319
Path reportPath = new Path(reportDirPath, fileName);
316320
if (udfso.exists(reportPath)) {
317321
throw new FeaturestoreException(RESTCodes.FeaturestoreErrorCode.ERROR_SAVING_ON_DISK_VALIDATION_REPORT,
318322
Level.SEVERE, String.format("Validation report with file name %s already exists.", fileName));
319323
}
320324
udfso.create(reportPath, reportJSON.toString());
321-
Inode inode = inodeController.getInodeAtPath(reportPath.toString());
322-
323-
return inode;
325+
326+
return inodeController.getInodeAtPath(reportPath.toString());
324327
} catch (DatasetException | HopsSecurityException | IOException e) {
325328
throw new FeaturestoreException(RESTCodes.FeaturestoreErrorCode.ERROR_SAVING_ON_DISK_VALIDATION_REPORT,
326329
Level.WARNING, e.getMessage());

0 commit comments

Comments
 (0)