diff --git a/java/src/main/java/com/logicalclocks/hsfs/Feature.java b/java/src/main/java/com/logicalclocks/hsfs/Feature.java index d074289ae9..8ce182250d 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/Feature.java +++ b/java/src/main/java/com/logicalclocks/hsfs/Feature.java @@ -27,25 +27,32 @@ @AllArgsConstructor @NoArgsConstructor public class Feature { - @Getter @Setter + @Getter + @Setter private String name; - @Getter @Setter + @Getter + @Setter private String type; - @Getter @Setter + @Getter + @Setter private String onlineType; - @Getter @Setter + @Getter + @Setter private String description; - @Getter @Setter + @Getter + @Setter private Boolean primary; - @Getter @Setter + @Getter + @Setter private Boolean partition; - @Getter @Setter + @Getter + @Setter private String defaultValue; public Feature(@NonNull String name) { diff --git a/java/src/main/java/com/logicalclocks/hsfs/FeatureGroup.java b/java/src/main/java/com/logicalclocks/hsfs/FeatureGroup.java index 42932ce405..baf002e8ae 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/FeatureGroup.java +++ b/java/src/main/java/com/logicalclocks/hsfs/FeatureGroup.java @@ -42,31 +42,39 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class FeatureGroup extends FeatureGroupBase { - @Getter @Setter + @Getter + @Setter private Boolean onlineEnabled; - @Getter @Setter + @Getter + @Setter private String type = "cachedFeaturegroupDTO"; - @Getter @Setter + @Getter + @Setter private TimeTravelFormat timeTravelFormat = TimeTravelFormat.HUDI; - @Getter @Setter + @Getter + @Setter protected String location; - @Getter @Setter + @Getter + @Setter @JsonProperty("descStatsEnabled") private Boolean statisticsEnabled; - @Getter @Setter + @Getter + @Setter @JsonProperty("featHistEnabled") private Boolean histograms; - @Getter @Setter + @Getter + @Setter @JsonProperty("featCorrEnabled") private Boolean correlations; - @Getter @Setter + @Getter + @Setter private List statisticColumns; @JsonIgnore @@ -113,11 +121,11 @@ public Dataset read(boolean online) throws FeatureStoreException, IOExcepti return selectAll().read(online); } - public Dataset read(Map readOptions) throws FeatureStoreException, IOException { + public Dataset read(Map readOptions) throws FeatureStoreException, IOException { return read(false, null); } - public Dataset read(boolean online, Map readOptions) throws FeatureStoreException, IOException { + public Dataset read(boolean online, Map readOptions) throws FeatureStoreException, IOException { return selectAll().read(online, readOptions); } @@ -142,7 +150,7 @@ public Dataset read(String wallclockTime) throws FeatureStoreException, IOE * @throws FeatureStoreException * @throws IOException */ - public Dataset read(String wallclockTime, Map readOptions) + public Dataset read(String wallclockTime, Map readOptions) throws FeatureStoreException, IOException { return selectAll().asOf(wallclockTime).read(false, readOptions); } @@ -151,7 +159,7 @@ public Dataset read(String wallclockTime, Map readOptions) * Reads changes that occurred between specified points in time. * * @param wallclockStartTime start date. - * @param wallclockEndTime end date. + * @param wallclockEndTime end date. * @return DataFrame. * @throws FeatureStoreException * @throws IOException @@ -165,12 +173,12 @@ public Dataset readChanges(String wallclockStartTime, String wallclockEndTi * Reads changes that occurred between specified points in time. * * @param wallclockStartTime start date. - * @param wallclockEndTime end date. + * @param wallclockEndTime end date. * @return DataFrame. * @throws FeatureStoreException * @throws IOException */ - public Dataset readChanges(String wallclockStartTime, String wallclockEndTime, Map readOptions) + public Dataset readChanges(String wallclockStartTime, String wallclockEndTime, Map readOptions) throws FeatureStoreException, IOException { return selectAll().pullChanges(wallclockStartTime, wallclockEndTime).read(false, readOptions); } @@ -210,7 +218,7 @@ public void insert(Dataset featureData, boolean overwrite) throws IOExcepti public void insert(Dataset featureData, Storage storage, boolean overwrite) throws IOException, FeatureStoreException { - insert(featureData, storage, overwrite, null, null); + insert(featureData, storage, overwrite, null, null); } public void insert(Dataset featureData, boolean overwrite, Map writeOptions) @@ -222,7 +230,7 @@ public void insert(Dataset featureData, boolean overwrite, Map featureData, Map wri /** * Return commit details. + * * @throws FeatureStoreException * @throws IOException */ - public Map> commitDetails() throws IOException, FeatureStoreException { + public Map> commitDetails() throws IOException, FeatureStoreException { return featureGroupEngine.commitDetails(this, null); } /** * Return commit details. + * * @param limit number of commits to return. * @throws FeatureStoreException * @throws IOException */ - public Map> commitDetails(Integer limit) throws IOException, FeatureStoreException { + public Map> commitDetails(Integer limit) throws IOException, FeatureStoreException { return featureGroupEngine.commitDetails(this, limit); } diff --git a/java/src/main/java/com/logicalclocks/hsfs/FeatureGroupCommit.java b/java/src/main/java/com/logicalclocks/hsfs/FeatureGroupCommit.java index 3b482845c9..1f284d72f0 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/FeatureGroupCommit.java +++ b/java/src/main/java/com/logicalclocks/hsfs/FeatureGroupCommit.java @@ -28,15 +28,20 @@ @AllArgsConstructor @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) -public class FeatureGroupCommit extends RestDto { - @Getter @Setter +public class FeatureGroupCommit extends RestDto { + @Getter + @Setter private Long commitID; - @Getter @Setter + @Getter + @Setter private String commitDateString; - @Getter @Setter + @Getter + @Setter private Long rowsInserted; - @Getter @Setter + @Getter + @Setter private Long rowsUpdated; - @Getter @Setter + @Getter + @Setter private Long rowsDeleted; } diff --git a/java/src/main/java/com/logicalclocks/hsfs/FeatureStore.java b/java/src/main/java/com/logicalclocks/hsfs/FeatureStore.java index 147b9c2602..4353bd91e9 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/FeatureStore.java +++ b/java/src/main/java/com/logicalclocks/hsfs/FeatureStore.java @@ -33,15 +33,18 @@ public class FeatureStore { - @Getter @Setter + @Getter + @Setter @JsonProperty("featurestoreId") private Integer id; - @Getter @Setter + @Getter + @Setter @JsonProperty("featurestoreName") private String name; - @Getter @Setter + @Getter + @Setter private Integer projectId; private FeatureGroupApi featureGroupApi; @@ -61,7 +64,7 @@ public FeatureStore() throws FeatureStoreException { /** * Get a feature group object from the feature store. * - * @param name the name of the feature group + * @param name the name of the feature group * @param version the version of the feature group * @return FeatureGroup * @throws FeatureStoreException @@ -89,7 +92,7 @@ public FeatureGroup getFeatureGroup(String name) throws FeatureStoreException, I /** * Get a on-demand feature group object from the feature store. * - * @param name the name of the feature group + * @param name the name of the feature group * @param version the version of the feature group * @return OnDemandFeatureGroup * @throws FeatureStoreException @@ -141,11 +144,11 @@ public TrainingDataset.TrainingDatasetBuilder createTrainingDataset() { return TrainingDataset.builder() .featureStore(this); } - + /** * Get a training dataset object from the selected feature store. * - * @param name name of the training dataset + * @param name name of the training dataset * @param version version to get * @return TrainingDataset * @throws FeatureStoreException diff --git a/java/src/main/java/com/logicalclocks/hsfs/FsQuery.java b/java/src/main/java/com/logicalclocks/hsfs/FsQuery.java index 7d2a5fccab..8734e3030a 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/FsQuery.java +++ b/java/src/main/java/com/logicalclocks/hsfs/FsQuery.java @@ -28,21 +28,25 @@ @AllArgsConstructor @NoArgsConstructor public class FsQuery { - @Getter @Setter + @Getter + @Setter private String query; - @Getter @Setter + @Getter + @Setter private String queryOnline; - @Getter @Setter + @Getter + @Setter private List onDemandFeatureGroups; - @Getter @Setter + @Getter + @Setter private List hudiCachedFeatureGroups; public void removeNewLines() { query = query.replace("\n", " "); - queryOnline = queryOnline.replace("\n", " "); + queryOnline = queryOnline.replace("\n", " "); } public String getStorageQuery(Storage storage) throws FeatureStoreException { diff --git a/java/src/main/java/com/logicalclocks/hsfs/HopsworksConnection.java b/java/src/main/java/com/logicalclocks/hsfs/HopsworksConnection.java index 05453f18bf..1bd2ea2855 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/HopsworksConnection.java +++ b/java/src/main/java/com/logicalclocks/hsfs/HopsworksConnection.java @@ -73,7 +73,7 @@ public class HopsworksConnection implements Closeable { public HopsworksConnection(String host, int port, String project, Region region, SecretStore secretStore, boolean hostnameVerification, String trustStorePath, String certPath, String apiKeyFilePath, String apiKeyValue) - throws IOException, FeatureStoreException { + throws IOException, FeatureStoreException { this.host = host; this.port = port; this.project = project; diff --git a/java/src/main/java/com/logicalclocks/hsfs/HudiFeatureGroupAlias.java b/java/src/main/java/com/logicalclocks/hsfs/HudiFeatureGroupAlias.java index 8157e46190..edbdf7ed66 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/HudiFeatureGroupAlias.java +++ b/java/src/main/java/com/logicalclocks/hsfs/HudiFeatureGroupAlias.java @@ -25,15 +25,19 @@ @NoArgsConstructor public class HudiFeatureGroupAlias { - @Getter @Setter + @Getter + @Setter private String alias; - @Getter @Setter + @Getter + @Setter private FeatureGroup featureGroup; - @Getter @Setter + @Getter + @Setter private Long leftFeatureGroupStartTimestamp; - @Getter @Setter + @Getter + @Setter private Long leftFeatureGroupEndTimestamp; } diff --git a/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroup.java b/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroup.java index a4f5753cd6..aadddf3903 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroup.java +++ b/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroup.java @@ -34,13 +34,16 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class OnDemandFeatureGroup extends FeatureGroupBase { - @Getter @Setter + @Getter + @Setter private StorageConnector storageConnector; - @Getter @Setter + @Getter + @Setter private String query; - @Getter @Setter + @Getter + @Setter private String type = "onDemandFeaturegroupDTO"; private OnDemandFeatureGroupEngine onDemandFeatureGroupEngine = new OnDemandFeatureGroupEngine(); diff --git a/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroupAlias.java b/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroupAlias.java index 0f7e16c822..0eab157321 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroupAlias.java +++ b/java/src/main/java/com/logicalclocks/hsfs/OnDemandFeatureGroupAlias.java @@ -25,9 +25,11 @@ @NoArgsConstructor public class OnDemandFeatureGroupAlias { - @Getter @Setter + @Getter + @Setter private OnDemandFeatureGroup onDemandFeatureGroup; - @Getter @Setter + @Getter + @Setter private String alias; } diff --git a/java/src/main/java/com/logicalclocks/hsfs/Project.java b/java/src/main/java/com/logicalclocks/hsfs/Project.java index 860f374184..a73050d695 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/Project.java +++ b/java/src/main/java/com/logicalclocks/hsfs/Project.java @@ -23,11 +23,14 @@ @NoArgsConstructor public class Project { - @Getter @Setter + @Getter + @Setter private Integer projectId; - @Getter @Setter + @Getter + @Setter private String projectName; - @Getter @Setter + @Getter + @Setter private String owner; public Project(Integer projectId) { diff --git a/java/src/main/java/com/logicalclocks/hsfs/Split.java b/java/src/main/java/com/logicalclocks/hsfs/Split.java index f5c4cd5247..2b570548ba 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/Split.java +++ b/java/src/main/java/com/logicalclocks/hsfs/Split.java @@ -24,9 +24,11 @@ @AllArgsConstructor @NoArgsConstructor public class Split { - @Getter @Setter + @Getter + @Setter private String name; - @Getter @Setter + @Getter + @Setter private Float percentage; } diff --git a/java/src/main/java/com/logicalclocks/hsfs/StorageConnector.java b/java/src/main/java/com/logicalclocks/hsfs/StorageConnector.java index 4223634e15..e926136477 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/StorageConnector.java +++ b/java/src/main/java/com/logicalclocks/hsfs/StorageConnector.java @@ -34,34 +34,44 @@ @ToString public class StorageConnector { - @Getter @Setter + @Getter + @Setter private Integer id; - @Getter @Setter + @Getter + @Setter private String name; - @Getter @Setter + @Getter + @Setter private String accessKey; - @Getter @Setter + @Getter + @Setter private String secretKey; - - @Getter @Setter + + @Getter + @Setter private String serverEncryptionAlgorithm; - - @Getter @Setter + + @Getter + @Setter private String serverEncryptionKey; - - @Getter @Setter + + @Getter + @Setter private String bucket; - @Getter @Setter + @Getter + @Setter private String connectionString; - @Getter @Setter + @Getter + @Setter private String arguments; - @Getter @Setter + @Getter + @Setter private StorageConnectorType storageConnectorType; public Map getSparkOptions() throws FeatureStoreException { diff --git a/java/src/main/java/com/logicalclocks/hsfs/TimeTravelFormat.java b/java/src/main/java/com/logicalclocks/hsfs/TimeTravelFormat.java index 210b0c031a..738385e2f6 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/TimeTravelFormat.java +++ b/java/src/main/java/com/logicalclocks/hsfs/TimeTravelFormat.java @@ -17,6 +17,6 @@ package com.logicalclocks.hsfs; public enum TimeTravelFormat { - NONE, - HUDI + NONE, + HUDI } diff --git a/java/src/main/java/com/logicalclocks/hsfs/TrainingDataset.java b/java/src/main/java/com/logicalclocks/hsfs/TrainingDataset.java index e67990c363..3186c40877 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/TrainingDataset.java +++ b/java/src/main/java/com/logicalclocks/hsfs/TrainingDataset.java @@ -38,64 +38,82 @@ @NoArgsConstructor public class TrainingDataset { - @Getter @Setter + @Getter + @Setter private Integer id; - @Getter @Setter + @Getter + @Setter private String name; - @Getter @Setter + @Getter + @Setter private Integer version; - @Getter @Setter + @Getter + @Setter private String description; - @Getter @Setter + @Getter + @Setter private DataFormat dataFormat; - @Getter @Setter + @Getter + @Setter private TrainingDatasetType trainingDatasetType = TrainingDatasetType.HOPSFS_TRAINING_DATASET; - @Getter @Setter + @Getter + @Setter private List features; - @Getter @Setter + @Getter + @Setter @JsonIgnore private FeatureStore featureStore; - @Getter @Setter + @Getter + @Setter private Integer storageConnectorId; - @Getter @Setter + @Getter + @Setter @JsonIgnore private StorageConnector storageConnector; - @Getter @Setter + @Getter + @Setter private String location; - @Getter @Setter + @Getter + @Setter private Long seed; - @Getter @Setter + @Getter + @Setter private List splits; - @Getter @Setter + @Getter + @Setter @JsonIgnore private Boolean statisticsEnabled = true; - @Getter @Setter + @Getter + @Setter @JsonIgnore private Boolean histograms; - @Getter @Setter + @Getter + @Setter @JsonIgnore private Boolean correlations; - @Getter @Setter + @Getter + @Setter @JsonIgnore private List statisticColumns; - @Getter @Setter + @Getter + @Setter @JsonProperty("queryDTO") private Query queryInt; @@ -161,7 +179,7 @@ public void save(Dataset dataset) throws FeatureStoreException, IOException /** * Create the training dataset based on the content of the feature store query. * - * @param query the query to save as training dataset + * @param query the query to save as training dataset * @param writeOptions options to pass to the Spark write operation * @throws FeatureStoreException * @throws IOException @@ -174,7 +192,7 @@ public void save(Query query, Map writeOptions) throws FeatureSt /** * Create the training dataset based on the content of the dataset. * - * @param dataset the dataset to save as training dataset + * @param dataset the dataset to save as training dataset * @param writeOptions options to pass to the Spark write operation * @throws FeatureStoreException * @throws IOException @@ -190,7 +208,7 @@ public void save(Dataset dataset, Map writeOptions) /** * Insert the content of the feature store query in the training dataset. * - * @param query the query to write as training dataset + * @param query the query to write as training dataset * @param overwrite true to overwrite the current content of the training dataset * @throws FeatureStoreException * @throws IOException @@ -202,7 +220,7 @@ public void insert(Query query, boolean overwrite) throws FeatureStoreException, /** * Insert the content of the dataset in the training dataset. * - * @param dataset the dataset to write as training dataset + * @param dataset the dataset to write as training dataset * @param overwrite true to overwrite the current content of the training dataset * @throws FeatureStoreException * @throws IOException @@ -214,8 +232,8 @@ public void insert(Dataset dataset, boolean overwrite) throws FeatureStoreE /** * Insert the content of the feature store query in the training dataset. * - * @param query the query to execute to generate the training dataset - * @param overwrite true to overwrite the current content of the training dataset + * @param query the query to execute to generate the training dataset + * @param overwrite true to overwrite the current content of the training dataset * @param writeOptions options to pass to the Spark write operation * @throws FeatureStoreException * @throws IOException @@ -230,8 +248,8 @@ public void insert(Query query, boolean overwrite, Map writeOpti /** * Insert the content of the dataset in the training dataset. * - * @param dataset the spark dataframe to write as training dataset - * @param overwrite true to overwrite the current content of the training dataset + * @param dataset the spark dataframe to write as training dataset + * @param overwrite true to overwrite the current content of the training dataset * @param writeOptions options to pass to the Spark write operation * @throws FeatureStoreException * @throws IOException @@ -276,7 +294,7 @@ public Dataset read(String split) { /** * Read a single split from the training dataset. * - * @param split the split name + * @param split the split name * @param readOptions options to pass to the Spark read operation * @return */ @@ -346,7 +364,7 @@ public void addTag(String name) throws FeatureStoreException, IOException { /** * Add name/value tag to the training dataset. * - * @param name name of the tag + * @param name name of the tag * @param value value of the tag * @throws FeatureStoreException * @throws IOException @@ -392,7 +410,7 @@ public void deleteTag(String name) throws FeatureStoreException, IOException { } @JsonIgnore - public String getQuery() throws FeatureStoreException, IOException { + public String getQuery() throws FeatureStoreException, IOException { return getQuery(Storage.ONLINE, false); } @@ -414,6 +432,6 @@ public String getQuery(Storage storage, boolean withLabel) throws FeatureStoreEx @JsonIgnore public List getLabel() { return features.stream().filter(TrainingDatasetFeature::getLabel).map(TrainingDatasetFeature::getName).collect( - Collectors.toList()); + Collectors.toList()); } } diff --git a/java/src/main/java/com/logicalclocks/hsfs/TrainingDatasetFeature.java b/java/src/main/java/com/logicalclocks/hsfs/TrainingDatasetFeature.java index 1b70bef4a9..60b2d03db7 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/TrainingDatasetFeature.java +++ b/java/src/main/java/com/logicalclocks/hsfs/TrainingDatasetFeature.java @@ -25,19 +25,24 @@ @NoArgsConstructor @AllArgsConstructor public class TrainingDatasetFeature { - @Getter @Setter + @Getter + @Setter private String name; - @Getter @Setter + @Getter + @Setter private String type; - @Getter @Setter + @Getter + @Setter private FeatureGroup featureGroup; - @Getter @Setter + @Getter + @Setter private Integer index; - @Getter @Setter + @Getter + @Setter private Boolean label = false; @Builder diff --git a/java/src/main/java/com/logicalclocks/hsfs/engine/FeatureGroupEngine.java b/java/src/main/java/com/logicalclocks/hsfs/engine/FeatureGroupEngine.java index 91df2ea6a5..d347d11884 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/engine/FeatureGroupEngine.java +++ b/java/src/main/java/com/logicalclocks/hsfs/engine/FeatureGroupEngine.java @@ -103,9 +103,9 @@ public void saveFeatureGroup(FeatureGroup featureGroup, Dataset dataset, Li featureGroup.setHistograms(apiFG.getHistograms()); // Write the dataframe - saveDataframe(featureGroup, dataset, null, SaveMode.Append, - featureGroup.getTimeTravelFormat() == TimeTravelFormat.HUDI - ? HudiOperationType.BULK_INSERT : null, writeOptions); + saveDataframe(featureGroup, dataset, null, SaveMode.Append, + featureGroup.getTimeTravelFormat() == TimeTravelFormat.HUDI + ? HudiOperationType.BULK_INSERT : null, writeOptions); } public void saveDataframe(FeatureGroup featureGroup, Dataset dataset, Storage storage, @@ -113,7 +113,7 @@ public void saveDataframe(FeatureGroup featureGroup, Dataset dataset, Stora throws IOException, FeatureStoreException { if (!featureGroup.getOnlineEnabled() && storage == Storage.ONLINE) { throw new FeatureStoreException("Online storage is not enabled for this feature group. Set `online=false` to " - + "write to the offline storage."); + + "write to the offline storage."); } else if (storage == Storage.OFFLINE || !featureGroup.getOnlineEnabled()) { saveOfflineDataframe(featureGroup, dataset, saveMode, operation, writeOptions); } else if (storage == Storage.ONLINE) { @@ -166,13 +166,13 @@ public void updateStatisticsConfig(FeatureGroup featureGroup) throws FeatureStor featureGroup.setHistograms(apiFG.getHistograms()); } - public Map> commitDetails(FeatureGroup featureGroup, Integer limit) + public Map> commitDetails(FeatureGroup featureGroup, Integer limit) throws IOException, FeatureStoreException { List featureGroupCommits = featureGroupApi.commitDetails(featureGroup, limit); if (featureGroupCommits == null) { throw new FeatureStoreException("There are no commit details available for this Feature group"); } - Map> commitDetails = new HashMap>(); + Map> commitDetails = new HashMap>(); for (FeatureGroupCommit featureGroupCommit : featureGroupCommits) { commitDetails.put(featureGroupCommit.getCommitID().toString(), new HashMap() {{ put("committedOn", hudiEngine.timeStampToHudiFormat(featureGroupCommit.getCommitID())); diff --git a/java/src/main/java/com/logicalclocks/hsfs/engine/HudiEngine.java b/java/src/main/java/com/logicalclocks/hsfs/engine/HudiEngine.java index 046ead22d9..c84ac3272a 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/engine/HudiEngine.java +++ b/java/src/main/java/com/logicalclocks/hsfs/engine/HudiEngine.java @@ -74,10 +74,10 @@ public class HudiEngine { private static final String HUDI_QUERY_TYPE_OPT_KEY = "hoodie.datasource.query.type"; private static final String HUDI_QUERY_TYPE_INCREMENTAL_OPT_VAL = "incremental"; private static final String HUDI_BEGIN_INSTANTTIME_OPT_KEY = "hoodie.datasource.read.begin.instanttime"; - private static final String HUDI_END_INSTANTTIME_OPT_KEY = "hoodie.datasource.read.end.instanttime"; + private static final String HUDI_END_INSTANTTIME_OPT_KEY = "hoodie.datasource.read.end.instanttime"; private static final String PAYLOAD_CLASS_OPT_KEY = "hoodie.datasource.write.payload.class"; - private static final String PAYLOAD_CLASS_OPT_VAL = "org.apache.hudi.common.model.EmptyHoodieRecordPayload"; + private static final String PAYLOAD_CLASS_OPT_VAL = "org.apache.hudi.common.model.EmptyHoodieRecordPayload"; private Utils utils = new Utils(); private FeatureGroupApi featureGroupApi = new FeatureGroupApi(); @@ -122,7 +122,7 @@ public FeatureGroupCommit deleteRecord(SparkSession sparkSession, FeatureGroup f } public void registerTemporaryTable(SparkSession sparkSession, FeatureGroup featureGroup, String alias, - Long startTimestamp, Long endTimestamp, Map readOptions) { + Long startTimestamp, Long endTimestamp, Map readOptions) { Map hudiArgs = setupHudiReadOpts(startTimestamp, endTimestamp, readOptions); sparkSession.read() .format(HUDI_SPARK_FORMAT) @@ -137,7 +137,7 @@ private FeatureGroupCommit getLastCommitMetadata(SparkSession sparkSession, Stri fgCommitMetadata.setCommitDateString(commitTimeline.lastInstant().get().getTimestamp()); byte[] commitsToReturn = commitTimeline.getInstantDetails(commitTimeline.lastInstant().get()).get(); - HoodieCommitMetadata commitMetadata = HoodieCommitMetadata.fromBytes(commitsToReturn,HoodieCommitMetadata.class); + HoodieCommitMetadata commitMetadata = HoodieCommitMetadata.fromBytes(commitsToReturn, HoodieCommitMetadata.class); fgCommitMetadata.setRowsUpdated(commitMetadata.fetchTotalUpdateRecordsWritten()); fgCommitMetadata.setRowsInserted(commitMetadata.fetchTotalInsertRecordsWritten()); fgCommitMetadata.setRowsDeleted(commitMetadata.getTotalRecordsDeleted()); @@ -182,7 +182,7 @@ private Map setupHudiWriteOpts(FeatureGroup featureGroup, HudiOp hudiArgs.put(HUDI_HIVE_SYNC_DB, featureGroup.getFeatureStore().getName()); hudiArgs.put(HIVE_AUTO_CREATE_DATABASE_OPT_KEY, HIVE_AUTO_CREATE_DATABASE_OPT_VAL); - hudiArgs.put(HUDI_TABLE_OPERATION,operation.getValue()); + hudiArgs.put(HUDI_TABLE_OPERATION, operation.getValue()); // Overwrite with user provided options if any if (writeOptions != null && !writeOptions.isEmpty()) { diff --git a/java/src/main/java/com/logicalclocks/hsfs/engine/SparkEngine.java b/java/src/main/java/com/logicalclocks/hsfs/engine/SparkEngine.java index 6ee4a1424b..8fdbd83277 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/engine/SparkEngine.java +++ b/java/src/main/java/com/logicalclocks/hsfs/engine/SparkEngine.java @@ -94,7 +94,7 @@ public void registerOnDemandTemporaryTable(String query, StorageConnector storag public void registerHudiTemporaryTable(FeatureGroup featureGroup, String alias, Long leftFeaturegroupStartTimestamp, Long leftFeaturegroupEndTimestamp, Map readOptions) { - hudiEngine.registerTemporaryTable(sparkSession, featureGroup, alias, + hudiEngine.registerTemporaryTable(sparkSession, featureGroup, alias, leftFeaturegroupStartTimestamp, leftFeaturegroupEndTimestamp, readOptions); } @@ -136,7 +136,7 @@ private void configureS3Connector(StorageConnector storageConnector) { * @param saveMode */ public void write(TrainingDataset trainingDataset, Dataset dataset, - Map writeOptions, SaveMode saveMode) { + Map writeOptions, SaveMode saveMode) { if (trainingDataset.getStorageConnector() != null) { SparkEngine.getInstance().configureConnector(trainingDataset.getStorageConnector()); @@ -223,6 +223,7 @@ public Map getReadOptions(Map providedOptions, D /** * Write multiple training dataset splits and name them. + * * @param datasets * @param dataFormat * @param writeOptions @@ -245,7 +246,7 @@ private void writeSplits(Dataset[] datasets, DataFormat dataFormat, Map dataset, DataFormat dataFormat, Map writeOptions, SaveMode saveMode, String path) { @@ -277,8 +278,8 @@ public Dataset read(DataFormat dataFormat, Map readOptions, * @throws FeatureStoreException */ public Map getOnlineOptions(Map providedWriteOptions, - FeatureGroup featureGroup, - StorageConnector storageConnector) throws FeatureStoreException { + FeatureGroup featureGroup, + StorageConnector storageConnector) throws FeatureStoreException { Map writeOptions = storageConnector.getSparkOptions(); writeOptions.put(Constants.JDBC_TABLE, utils.getFgName(featureGroup)); @@ -311,22 +312,22 @@ public void writeOfflineDataframe(FeatureGroup featureGroup, Dataset datase throws IOException, FeatureStoreException { if (featureGroup.getTimeTravelFormat() == TimeTravelFormat.HUDI) { - hudiEngine.saveHudiFeatureGroup(sparkSession,featureGroup, dataset, saveMode, operation, writeOptions); + hudiEngine.saveHudiFeatureGroup(sparkSession, featureGroup, dataset, saveMode, operation, writeOptions); } else { - writeSparkDataset(featureGroup, dataset, saveMode, writeOptions); + writeSparkDataset(featureGroup, dataset, saveMode, writeOptions); } } private void writeSparkDataset(FeatureGroup featureGroup, Dataset dataset, - SaveMode saveMode, Map writeOptions) { + SaveMode saveMode, Map writeOptions) { dataset - .write() - .format(Constants.HIVE_FORMAT) - .mode(saveMode) - // write options cannot be null - .options(writeOptions == null ? new HashMap<>() : writeOptions) - .partitionBy(utils.getPartitionColumns(featureGroup)) - .saveAsTable(utils.getTableName(featureGroup)); + .write() + .format(Constants.HIVE_FORMAT) + .mode(saveMode) + // write options cannot be null + .options(writeOptions == null ? new HashMap<>() : writeOptions) + .partitionBy(utils.getPartitionColumns(featureGroup)) + .saveAsTable(utils.getTableName(featureGroup)); } public String profile(Dataset df, List restrictToColumns, Boolean correlation, Boolean histogram) { diff --git a/java/src/main/java/com/logicalclocks/hsfs/engine/StatisticsEngine.java b/java/src/main/java/com/logicalclocks/hsfs/engine/StatisticsEngine.java index 31dab32bd5..d7a4950c29 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/engine/StatisticsEngine.java +++ b/java/src/main/java/com/logicalclocks/hsfs/engine/StatisticsEngine.java @@ -45,20 +45,20 @@ public StatisticsEngine(EntityEndpointType entityType) { public Statistics computeStatistics(TrainingDataset trainingDataset, Dataset dataFrame) throws FeatureStoreException, IOException { return statisticsApi.post(trainingDataset, computeStatistics(dataFrame, trainingDataset.getStatisticColumns(), - trainingDataset.getHistograms(), trainingDataset.getCorrelations())); + trainingDataset.getHistograms(), trainingDataset.getCorrelations())); } public Statistics computeStatistics(FeatureGroup featureGroup, Dataset dataFrame) throws FeatureStoreException, IOException { return statisticsApi.post(featureGroup, computeStatistics(dataFrame, featureGroup.getStatisticColumns(), - featureGroup.getHistograms(), featureGroup.getCorrelations())); + featureGroup.getHistograms(), featureGroup.getCorrelations())); } private Statistics computeStatistics(Dataset dataFrame, List statisticColumns, Boolean histograms, Boolean correlations) throws FeatureStoreException { if (dataFrame.isEmpty()) { throw new FeatureStoreException("There is no data in the entity that you are trying to compute statistics for. A " - + "possible cause might be that you inserted only data to the online storage of a feature group."); + + "possible cause might be that you inserted only data to the online storage of a feature group."); } String commitTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); String content = SparkEngine.getInstance().profile(dataFrame, statisticColumns, histograms, correlations); diff --git a/java/src/main/java/com/logicalclocks/hsfs/engine/TrainingDatasetEngine.java b/java/src/main/java/com/logicalclocks/hsfs/engine/TrainingDatasetEngine.java index 74ea447347..984f008ab9 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/engine/TrainingDatasetEngine.java +++ b/java/src/main/java/com/logicalclocks/hsfs/engine/TrainingDatasetEngine.java @@ -67,7 +67,7 @@ public void save(TrainingDataset trainingDataset, Dataset dataset, Map dataset, List new StructField(f.getName(), // What should we do about the nullables new CatalystSqlParser(null).parseDataType(f.getType()), true, Metadata.empty()) - ).toArray(StructField[]::new)); + ).toArray(StructField[]::new)); if (!dataset.schema().equals(tdStructType)) { throw new FeatureStoreException("The Dataframe schema: " + dataset.schema() diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupApi.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupApi.java index 00ffb51edd..702bcc0c33 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupApi.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupApi.java @@ -218,7 +218,7 @@ public List commitDetails(FeatureGroup featureGroupBase, Int .set("projectId", featureGroupBase.getFeatureStore().getProjectId()) .set("fsId", featureGroupBase.getFeatureStore().getId()) .set("fgId", featureGroupBase.getId()) - .set("sort_by","committed_on:desc") + .set("sort_by", "committed_on:desc") .set("offset", 0) .set("limit", limit) .expand(); diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupBase.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupBase.java index 0723d5d7c6..bb8cc5e5e7 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupBase.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureGroupBase.java @@ -35,22 +35,28 @@ @NoArgsConstructor public class FeatureGroupBase { - @Getter @Setter + @Getter + @Setter protected Integer id; - @Getter @Setter + @Getter + @Setter protected FeatureStore featureStore; - @Getter @Setter + @Getter + @Setter protected String name; - @Getter @Setter + @Getter + @Setter protected Integer version; - @Getter @Setter + @Getter + @Setter protected String description; - @Getter @Setter + @Getter + @Setter protected List features; @Getter @@ -73,7 +79,7 @@ public Query selectFeatures(List features) throws FeatureStoreException public Query select(List features) throws FeatureStoreException, IOException { // Create a feature object for each string feature given by the user. // For the query building each feature need only the name set. - List featureObjList = features.stream().map(Feature::new).collect(Collectors.toList()); + List featureObjList = features.stream().map(Feature::new).collect(Collectors.toList()); return selectFeatures(featureObjList); } @@ -99,7 +105,7 @@ public void addTag(String name) throws FeatureStoreException, IOException { /** * Add name/value tag to the feature group. * - * @param name name of the tag + * @param name name of the tag * @param value value of the tag * @throws FeatureStoreException * @throws IOException diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureStoreApi.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureStoreApi.java index 089513e14c..c905b30b39 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureStoreApi.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/FeatureStoreApi.java @@ -28,8 +28,8 @@ public class FeatureStoreApi { public static final String FEATURE_STORE_SERVICE_PATH = "/featurestores"; - public static final String FEATURE_STORE_PATH = FEATURE_STORE_SERVICE_PATH + "{/fsId}"; - public static final String FEATURE_STORE_NAME_PATH = FEATURE_STORE_SERVICE_PATH + "{/fsName}"; + public static final String FEATURE_STORE_PATH = FEATURE_STORE_SERVICE_PATH + "{/fsId}"; + public static final String FEATURE_STORE_NAME_PATH = FEATURE_STORE_SERVICE_PATH + "{/fsName}"; private static final Logger LOGGER = LoggerFactory.getLogger(FeatureStoreApi.class); diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksClient.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksClient.java index cb925b9224..f0752096a8 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksClient.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksClient.java @@ -104,11 +104,14 @@ public HopsworksClient(HopsworksHttpClient hopsworksHttpClient) { @AllArgsConstructor @NoArgsConstructor private static class HopsworksErrorClass { - @Getter @Setter + @Getter + @Setter private Integer errorCode; - @Getter @Setter + @Getter + @Setter private String usrMsg; - @Getter @Setter + @Getter + @Setter private String devMsg; @Override diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksExternalClient.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksExternalClient.java index b9b18a9293..e8d4dbcf54 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksExternalClient.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksExternalClient.java @@ -74,23 +74,23 @@ public class HopsworksExternalClient implements HopsworksHttpClient { public HopsworksExternalClient(String host, int port, String apiKeyFilepath, boolean hostnameVerification, String trustStorePath) - throws IOException, FeatureStoreException, KeyStoreException, CertificateException, - NoSuchAlgorithmException, KeyManagementException { + throws IOException, FeatureStoreException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, KeyManagementException { this(host, port, null, null, hostnameVerification, trustStorePath, apiKeyFilepath, null); } public HopsworksExternalClient(String host, int port, boolean hostnameVerification, String trustStorePath, Region region, SecretStore secretStore) - throws IOException, FeatureStoreException, KeyStoreException, CertificateException, - NoSuchAlgorithmException, KeyManagementException { + throws IOException, FeatureStoreException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, KeyManagementException { this(host, port, region, secretStore, hostnameVerification, trustStorePath, null, null); } public HopsworksExternalClient(String host, int port, boolean hostnameVerification, String trustStorePath, String apiKeyValue) - throws IOException, FeatureStoreException, KeyStoreException, CertificateException, - NoSuchAlgorithmException, KeyManagementException { + throws IOException, FeatureStoreException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, KeyManagementException { this(host, port, null, null, hostnameVerification, trustStorePath, null, apiKeyValue); } @@ -100,10 +100,10 @@ public HopsworksExternalClient(CloseableHttpClient httpClient, HttpHost httpHost } HopsworksExternalClient(String host, int port, Region region, - SecretStore secretStore, boolean hostnameVerification, - String trustStorePath, String apiKeyFilepath, String apiKeyValue) - throws IOException, FeatureStoreException, KeyStoreException, CertificateException, - NoSuchAlgorithmException, KeyManagementException { + SecretStore secretStore, boolean hostnameVerification, + String trustStorePath, String apiKeyFilepath, String apiKeyValue) + throws IOException, FeatureStoreException, KeyStoreException, CertificateException, + NoSuchAlgorithmException, KeyManagementException { httpHost = new HttpHost(host, port, "https"); @@ -113,9 +113,9 @@ public HopsworksExternalClient(CloseableHttpClient httpClient, HttpHost httpHost connectionPool.setDefaultMaxPerRoute(10); httpClient = HttpClients.custom() - .setConnectionManager(connectionPool) - .setKeepAliveStrategy((httpResponse, httpContext) -> 30 * 1000) - .build(); + .setConnectionManager(connectionPool) + .setKeepAliveStrategy((httpResponse, httpContext) -> 30 * 1000) + .build(); if (!Strings.isNullOrEmpty(apiKeyValue)) { this.apiKey = apiKeyValue; @@ -157,6 +157,7 @@ private Registry createConnectionFactory(HttpHost httpH * - AWS Parameter store * - AWS Secrets manager * - FIle on the local file system + * * @param secretStore * @param region * @param apiKeyFilepath diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksInternalClient.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksInternalClient.java index c6826c2721..56f77fa343 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksInternalClient.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/HopsworksInternalClient.java @@ -78,9 +78,9 @@ public HopsworksInternalClient() throws IOException, KeyStoreException, Certific connectionPool.setDefaultMaxPerRoute(10); httpClient = HttpClients.custom() - .setConnectionManager(connectionPool) - .setKeepAliveStrategy((httpResponse, httpContext) -> 30 * 1000) - .build(); + .setConnectionManager(connectionPool) + .setKeepAliveStrategy((httpResponse, httpContext) -> 30 * 1000) + .build(); refreshJwt(); } diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/Join.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/Join.java index 00c277d5cb..cce0e6b80b 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/Join.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/Join.java @@ -25,17 +25,22 @@ public class Join { - @Getter @Setter + @Getter + @Setter private Query query; - @Getter @Setter + @Getter + @Setter private List on; - @Getter @Setter + @Getter + @Setter private List leftOn; - @Getter @Setter + @Getter + @Setter private List rightOn; - @Getter @Setter + @Getter + @Setter private JoinType joinType; public Join(Query query, JoinType joinType) { diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/Query.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/Query.java index 111975d250..7544a0b75c 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/Query.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/Query.java @@ -44,16 +44,21 @@ public class Query { private static final Logger LOGGER = LoggerFactory.getLogger(FeatureGroup.class); - @Getter @Setter + @Getter + @Setter private FeatureGroupBase leftFeatureGroup; - @Getter @Setter + @Getter + @Setter private List leftFeatures; - @Getter @Setter + @Getter + @Setter private String leftFeatureGroupStartTime; - @Getter @Setter + @Getter + @Setter private String leftFeatureGroupEndTime; - @Getter @Setter + @Getter + @Setter private List joins = new ArrayList<>(); private QueryConstructorApi queryConstructorApi; @@ -136,7 +141,7 @@ public Query asOf(String wallclockTime) { * Reads changes that occurred between specified points in time. * * @param wallclockStartTime start date. - * @param wallclockEndTime end date. + * @param wallclockEndTime end date. * @return Query * @throws FeatureStoreException * @throws IOException @@ -155,7 +160,7 @@ public Dataset read(boolean online) throws FeatureStoreException, IOExcepti return read(online, null); } - public Dataset read(boolean online, Map readOptions) throws FeatureStoreException, IOException { + public Dataset read(boolean online, Map readOptions) throws FeatureStoreException, IOException { FsQuery fsQuery = queryConstructorApi.constructQuery(leftFeatureGroup.getFeatureStore(), this); if (online) { @@ -210,7 +215,7 @@ private void registerOnDemandFeatureGroups(List onDem } private void registerHudiFeatureGroups(List hudiFeatureGroups, - Map readOptions) { + Map readOptions) { for (HudiFeatureGroupAlias hudiFeatureGroupAlias : hudiFeatureGroups) { String alias = hudiFeatureGroupAlias.getAlias(); FeatureGroup featureGroup = hudiFeatureGroupAlias.getFeatureGroup(); diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/Statistics.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/Statistics.java index 8159645054..e43dcc492a 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/Statistics.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/Statistics.java @@ -27,9 +27,11 @@ @AllArgsConstructor public class Statistics extends RestDto { - @Getter @Setter + @Getter + @Setter private String commitTime; - @Getter @Setter + @Getter + @Setter private String content; } diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/StatisticsApi.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/StatisticsApi.java index d20c293248..2e01a25ce1 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/StatisticsApi.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/StatisticsApi.java @@ -50,13 +50,13 @@ public StatisticsApi(@NonNull EntityEndpointType entityType) { public Statistics post(FeatureGroup featureGroup, Statistics statistics) throws FeatureStoreException, IOException { return post(featureGroup.getFeatureStore().getProjectId(), featureGroup.getFeatureStore().getId(), - featureGroup.getId(), statistics); + featureGroup.getId(), statistics); } public Statistics post(TrainingDataset trainingDataset, Statistics statistics) throws FeatureStoreException, IOException { return post(trainingDataset.getFeatureStore().getProjectId(), trainingDataset.getFeatureStore().getId(), - trainingDataset.getId(), statistics); + trainingDataset.getId(), statistics); } private Statistics post(Integer projectId, Integer featurestoreId, Integer entityId, Statistics statistics) @@ -84,12 +84,12 @@ private Statistics post(Integer projectId, Integer featurestoreId, Integer entit public Statistics get(FeatureGroup featureGroup, String commitTime) throws FeatureStoreException, IOException { return get(featureGroup.getFeatureStore().getProjectId(), featureGroup.getFeatureStore().getId(), - featureGroup.getId(), commitTime); + featureGroup.getId(), commitTime); } public Statistics get(TrainingDataset trainingDataset, String commitTime) throws FeatureStoreException, IOException { return get(trainingDataset.getFeatureStore().getProjectId(), trainingDataset.getFeatureStore().getId(), - trainingDataset.getId(), commitTime); + trainingDataset.getId(), commitTime); } private Statistics get(Integer projectId, Integer featurestoreId, Integer entityId, String commitTime) @@ -121,12 +121,12 @@ private Statistics get(Integer projectId, Integer featurestoreId, Integer entity public Statistics getLast(FeatureGroup featureGroup) throws FeatureStoreException, IOException { return getLast(featureGroup.getFeatureStore().getProjectId(), featureGroup.getFeatureStore().getId(), - featureGroup.getId()); + featureGroup.getId()); } public Statistics getLast(TrainingDataset trainingDataset) throws FeatureStoreException, IOException { return getLast(trainingDataset.getFeatureStore().getProjectId(), trainingDataset.getFeatureStore().getId(), - trainingDataset.getId()); + trainingDataset.getId()); } private Statistics getLast(Integer projectId, Integer featurestoreId, Integer entityId) diff --git a/java/src/main/java/com/logicalclocks/hsfs/metadata/StorageConnectorApi.java b/java/src/main/java/com/logicalclocks/hsfs/metadata/StorageConnectorApi.java index a1925667b5..b46fe36c0b 100644 --- a/java/src/main/java/com/logicalclocks/hsfs/metadata/StorageConnectorApi.java +++ b/java/src/main/java/com/logicalclocks/hsfs/metadata/StorageConnectorApi.java @@ -72,9 +72,9 @@ public StorageConnector getOnlineStorageConnector(FeatureStore featureStore) .expand(); LOGGER.info("Sending metadata request: " + uri); - StorageConnector[] storageConnectors = hopsworksClient.handleRequest(new HttpGet(uri), StorageConnector[].class); + StorageConnector[] storageConnectors = hopsworksClient.handleRequest(new HttpGet(uri), StorageConnector[].class); return Arrays.stream(storageConnectors).filter(s -> s.getName().contains(ONLINE_FEATURE_STORE_CONNECTOR_SUFFIX)) - .findFirst() - .orElseThrow(() -> new FeatureStoreException("Could not find online storage connector")); + .findFirst() + .orElseThrow(() -> new FeatureStoreException("Could not find online storage connector")); } }