From 12dc2818b4dd5f403aaf1cadb0388c2c92738c34 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Wed, 19 Oct 2022 10:12:51 +0300 Subject: [PATCH 01/10] DE Proxy - use ProcessingState classification for saving sync time in DS connector Signed-off-by: Alexandra Bucur --- .../event/DataEngineEventHeader.java | 3 +- .../dataengine/event/DataEngineEventType.java | 21 +-- .../event/DataEngineRegistrationEvent.java | 16 +- .../event/ProcessingStateEvent.java | 38 +++++ .../dataengine/ffdc/DataEngineErrorCode.java | 8 +- ...twareServerCapability.java => Engine.java} | 4 +- .../dataengine/model/ProcessingState.java | 4 + .../DataEngineRegistrationRequestBody.java | 14 +- .../rest/ProcessingStateRequestBody.java | 4 + .../dataengine/client/DataEngineClient.java | 26 ++- .../client/DataEngineEventClient.java | 30 +++- .../client/DataEngineRESTClient.java | 37 +++- .../admin/DataEngineServicesInstance.java | 6 +- .../handlers/DataEngineEventTypeHandler.java | 2 +- .../DataEngineFolderHierarchyHandler.java | 6 +- .../handlers/DataEnginePortHandler.java | 2 +- .../handlers/DataEngineProcessHandler.java | 2 +- .../DataEngineRegistrationHandler.java | 160 ++++++++++-------- .../DataEngineRelationalDataHandler.java | 2 +- .../handlers/DataEngineTopicHandler.java | 2 +- .../listeners/DataEngineInTopicListener.java | 3 + .../processors/DataEngineEventProcessor.java | 21 ++- .../service/DataEngineRESTServices.java | 50 ++++-- .../server/spring/DataEngineResource.java | 26 ++- .../connectors/DataEngineConnectorBase.java | 6 + .../connectors/DataEngineInterface.java | 17 +- .../processor/DataEngineProxyService.java | 52 +++--- 27 files changed, 393 insertions(+), 169 deletions(-) create mode 100644 open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java rename open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/{SoftwareServerCapability.java => Engine.java} (96%) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java index 7b131b730c1..0a0d15b0adf 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java @@ -43,7 +43,8 @@ @JsonSubTypes.Type(value = RelationalTableEvent.class, name = "RelationalTableEvent"), @JsonSubTypes.Type(value = DataFileEvent.class, name = "DataFileEvent"), @JsonSubTypes.Type(value = TopicEvent.class, name = "TopicEvent"), - @JsonSubTypes.Type(value = EventTypeEvent.class, name = "EventTypeEvent") + @JsonSubTypes.Type(value = EventTypeEvent.class, name = "EventTypeEvent"), + @JsonSubTypes.Type(value = ProcessingStateEvent.class, name = "ProcessingStateEvent") }) @Getter @Setter diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventType.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventType.java index 098ba5de964..8b55edf8bf4 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventType.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventType.java @@ -32,17 +32,17 @@ public enum DataEngineEventType implements Serializable { DATA_ENGINE_REGISTRATION_EVENT (1, "DataEngineRegistrationEvent", "An event that register a data engine as external source."), LINEAGE_MAPPINGS_EVENT (2, "LineageMappingsEvent", "An event that add or update lineage mappings."), PORT_ALIAS_EVENT (3, "PortAliasEvent", "An event that add or update port alias"), - PORT_IMPLEMENTATION_EVENT (4, "PortImplementationEvent", "An event that create or update port implementations."), - SCHEMA_TYPE_EVENT (5, "SchemaTypeEvent", "An event that create or update schema types."), + PORT_IMPLEMENTATION_EVENT (4, "PortImplementationEvent", "An event that creates or updates port implementations."), + SCHEMA_TYPE_EVENT (5, "SchemaTypeEvent", "An event that creates or updates schema types."), PROCESS_HIERARCHY_EVENT (6, "ProcessHierarchyEvent", "An event to setup a process hierarchy."), DELETE_DATA_ENGINE_EVENT (7, "DeleteDataEngineEvent", "An event that deletes an external data engine."), DELETE_SCHEMA_TYPE_EVENT (8, "DeleteSchemaTypeEvent", "An event that deletes a schema type."), DELETE_PORT_IMPLEMENTATION_EVENT (9, "DeletePortImplementationEvent", "An event that deletes a port implementation."), DELETE_PORT_ALIAS_EVENT (10, "DeletePortAliasesEvent", "An event that deletes a port alias."), - DATABASE_EVENT (11, "DatabaseEvent", "An event that create or update databases."), - DATABASE_SCHEMA_EVENT (12, "DatabaseSchemaEvent", "An event that create or update database schemas."), - RELATIONAL_TABLE_EVENT (13, "RelationalTableEvent", "An event that create or update relational tables."), - DATA_FILE_EVENT (14, "DataFileEvent", "An event that create or update data files."), + DATABASE_EVENT (11, "DatabaseEvent", "An event that creates or updates databases."), + DATABASE_SCHEMA_EVENT (12, "DatabaseSchemaEvent", "An event that creates or updates database schemas."), + RELATIONAL_TABLE_EVENT (13, "RelationalTableEvent", "An event that creates or updates relational tables."), + DATA_FILE_EVENT (14, "DataFileEvent", "An event that creates or updates data files."), DELETE_DATABASE_EVENT (15, "DeleteDatabaseEvent", "An event that deletes a database."), DELETE_DATABASE_SCHEMA_EVENT (16, "DeleteDatabaseSchemaEvent", "An event that deletes a database schema."), DELETE_RELATIONAL_TABLE_EVENT (17, "DeleteRelationalTableEvent", "An event that deletes a relational table."), @@ -50,12 +50,13 @@ public enum DataEngineEventType implements Serializable { DELETE_FOLDER_EVENT (19, "DeleteFolderEvent", "An event that deletes a folder."), DELETE_CONNECTION_EVENT (20, "DeleteConnectionEvent", "An event that deletes a connection."), DELETE_ENDPOINT_EVENT (21, "DeleteEndpointEvent", "An event that deletes an endpoint."), - PROCESS_EVENT (22, "ProcessEvent", "An event that create or update a process."), + PROCESS_EVENT (22, "ProcessEvent", "An event that creates or updates a process."), DELETE_PROCESS_EVENT (23, "DeleteProcessEvent", "An event that deletes a process."), - TOPIC_EVENT (24, "TopicEvent", "An event that create or update topics."), - EVENT_TYPE_EVENT (25, "EventTypeEvent", "An event that create or update event types."), + TOPIC_EVENT (24, "TopicEvent", "An event that creates or updates topics."), + EVENT_TYPE_EVENT (25, "EventTypeEvent", "An event that creates or updates event types."), DELETE_TOPIC_EVENT (26, "DeleteTopicEvent", "An event that deletes a topic."), - DELETE_EVENT_TYPE_EVENT (27, "DeleteEventTypeEvent", "An event that deletes an event type."); + DELETE_EVENT_TYPE_EVENT (27, "DeleteEventTypeEvent", "An event that deletes an event type."), + PROCESSING_STATE_TYPE_EVENT (28, "ProcessingStateEvent", "An event that creates or updates the processing state classification of an engine."); @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java index 0351800aa04..6eb58d001ec 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java @@ -9,13 +9,13 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; /** - * The Data engine registration event for registering external source as software server capability. + * The Data engine registration event for registering external source as engine. */ @JsonAutoDetect(getterVisibility = PUBLIC_ONLY, setterVisibility = PUBLIC_ONLY, fieldVisibility = NONE) @JsonInclude(JsonInclude.Include.NON_NULL) @@ -27,14 +27,14 @@ public class DataEngineRegistrationEvent extends DataEngineEventHeader { /** - * Software server capability + * Engine * -- GETTER -- - * Gets the software server capability - * @return the software server capability + * Gets the engine + * @return the engine * -- SETTER -- - * Sets the software server capability - * @param softwareServerCapability the software server capability + * Sets the engine + * @param engine the engine */ - private SoftwareServerCapability softwareServerCapability; + private Engine engine; } diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java new file mode 100644 index 00000000000..e9aedac9669 --- /dev/null +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright Contributors to the ODPi Egeria project. */ +package org.odpi.openmetadata.accessservices.dataengine.event; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.odpi.openmetadata.accessservices.dataengine.model.ProcessingState; + +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; + +@JsonAutoDetect(getterVisibility = PUBLIC_ONLY, setterVisibility = PUBLIC_ONLY, fieldVisibility = NONE) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProcessingStateEvent extends DataEngineEventHeader { + + /** + * The processing state. + * + * -- GETTER -- + * Return the processing state + * + * @return processing state + * -- SETTER -- + * Set up the processing state + * @param processingState processing state + */ + private ProcessingState processingState; +} diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/ffdc/DataEngineErrorCode.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/ffdc/DataEngineErrorCode.java index 706e99fd03c..d7dcb80a4d1 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/ffdc/DataEngineErrorCode.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/ffdc/DataEngineErrorCode.java @@ -85,10 +85,10 @@ public enum DataEngineErrorCode implements ExceptionMessageSet { "Topic with qualifiedName {0} was not found", "The system is unable to create a new event type attached to a topic", "Correct the code in the caller to provide the correct topic qualified name."), - SOFTWARE_SERVER_CAPABILITY_NOT_FOUND(400, "OMAS-DATA-ENGINE-400-012", - "Software Server Capability with qualifiedName {0} was not found", - "The system is unable to find the searched Software Server Capability", - "Correct the code in the caller to provide the correct Software Server Capability qualified name."); + ENGINE_NOT_FOUND(400, "OMAS-DATA-ENGINE-400-012", + "Engine with qualifiedName {0} was not found", + "The system is unable to find the searched Engine", + "Correct the code in the caller to provide the correct Engine qualified name."); private static final long serialVersionUID = 1L; diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/SoftwareServerCapability.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/Engine.java similarity index 96% rename from open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/SoftwareServerCapability.java rename to open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/Engine.java index 3610a486f87..cba67e22527 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/SoftwareServerCapability.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/Engine.java @@ -19,7 +19,7 @@ import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; /** - * The type Software server capability. + * The type Engine. */ @JsonAutoDetect(getterVisibility = PUBLIC_ONLY, setterVisibility = PUBLIC_ONLY, fieldVisibility = NONE) @JsonInclude(JsonInclude.Include.NON_NULL) @@ -28,7 +28,7 @@ @ToString @Getter @Setter -public class SoftwareServerCapability implements Serializable { +public class Engine implements Serializable { @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/ProcessingState.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/ProcessingState.java index fac72fcae7f..ce5511a0c6f 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/ProcessingState.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/model/ProcessingState.java @@ -7,8 +7,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @@ -27,6 +29,8 @@ @ToString(callSuper = true) @Getter @Setter +@AllArgsConstructor +@NoArgsConstructor public class ProcessingState extends Referenceable { @Getter(AccessLevel.NONE) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/DataEngineRegistrationRequestBody.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/DataEngineRegistrationRequestBody.java index 8908e3563d3..22b76f950fd 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/DataEngineRegistrationRequestBody.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/DataEngineRegistrationRequestBody.java @@ -10,7 +10,7 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; @@ -25,15 +25,15 @@ public class DataEngineRegistrationRequestBody extends DataEngineOMASAPIRequestBody { /** - * Software server capability + * Engine * -- GETTER -- - * Gets the software server capability - * @return the software server capability + * Gets the engine + * @return the engine * -- SETTER -- - * Sets the software server capability - * @param softwareServerCapability the software server capability + * Sets the engine + * @param engine the engine */ @JsonProperty("dataEngine") - private SoftwareServerCapability softwareServerCapability; + private Engine engine; } \ No newline at end of file diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/ProcessingStateRequestBody.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/ProcessingStateRequestBody.java index 9fb9c08a5c6..289e25c858b 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/ProcessingStateRequestBody.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/rest/ProcessingStateRequestBody.java @@ -6,8 +6,10 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import org.odpi.openmetadata.accessservices.dataengine.model.ProcessingState; @@ -22,6 +24,8 @@ @Setter @EqualsAndHashCode(callSuper = true) @ToString +@NoArgsConstructor +@AllArgsConstructor public class ProcessingStateRequestBody extends DataEngineOMASAPIRequestBody { private static final long serialVersionUID = 1L; diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineClient.java b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineClient.java index 087a978ec15..50f5e1ba82e 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineClient.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineClient.java @@ -13,7 +13,7 @@ import org.odpi.openmetadata.accessservices.dataengine.model.ProcessHierarchy; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalTable; import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.model.Topic; import org.odpi.openmetadata.accessservices.dataengine.rest.FindRequestBody; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDListResponse; @@ -24,6 +24,7 @@ import org.odpi.openmetadata.repositoryservices.ffdc.exception.FunctionNotSupportedException; import java.util.List; +import java.util.Map; /** * DataEngineClient provides the client-side interface for a data engine tool to create processes with ports, @@ -68,10 +69,10 @@ void deleteProcess(String userId, String qualifiedName, String guid) throws Inva /** - * Create or update the software server capability entity + * Create or update the engine entity * - * @param userId the name of the calling user - * @param softwareServerCapability the software server capability bean + * @param userId the name of the calling user + * @param engine the engine bean * * @return unique identifier of the server in the repository * @@ -80,7 +81,7 @@ void deleteProcess(String userId, String qualifiedName, String guid) throws Inva * @throws PropertyServerException problem accessing the property server * @throws ConnectorCheckedException problem with the underlying connector (if used) */ - String createExternalDataEngine(String userId, SoftwareServerCapability softwareServerCapability) throws InvalidParameterException, + String createExternalDataEngine(String userId, Engine engine) throws InvalidParameterException, UserNotAuthorizedException, PropertyServerException, ConnectorCheckedException; @@ -540,4 +541,19 @@ void deleteEventType(String userId, String qualifiedName, String guid) throws In PropertyServerException, UserNotAuthorizedException, ConnectorCheckedException; + + /** + * Create or update the engine's processing state classification with the provided properties + * @param userId the name of the calling user + * @param properties properties of the processing state + */ + void upsertProcessingState(String userId, Map properties) throws PropertyServerException, + InvalidParameterException, UserNotAuthorizedException, ConnectorCheckedException; + + /** + * Get the engine's processing state classification's properties + * + * @param userId the name of the calling user + */ + public Map getProcessingState(String userId) throws PropertyServerException; } diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineEventClient.java b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineEventClient.java index 3c7d1ccc728..f61869d9430 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineEventClient.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineEventClient.java @@ -15,6 +15,7 @@ import org.odpi.openmetadata.accessservices.dataengine.event.PortImplementationEvent; import org.odpi.openmetadata.accessservices.dataengine.event.ProcessEvent; import org.odpi.openmetadata.accessservices.dataengine.event.ProcessHierarchyEvent; +import org.odpi.openmetadata.accessservices.dataengine.event.ProcessingStateEvent; import org.odpi.openmetadata.accessservices.dataengine.event.RelationalTableEvent; import org.odpi.openmetadata.accessservices.dataengine.event.SchemaTypeEvent; import org.odpi.openmetadata.accessservices.dataengine.event.TopicEvent; @@ -29,9 +30,10 @@ import org.odpi.openmetadata.accessservices.dataengine.model.PortImplementation; import org.odpi.openmetadata.accessservices.dataengine.model.Process; import org.odpi.openmetadata.accessservices.dataengine.model.ProcessHierarchy; +import org.odpi.openmetadata.accessservices.dataengine.model.ProcessingState; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalTable; import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.model.Topic; import org.odpi.openmetadata.accessservices.dataengine.rest.FindRequestBody; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDListResponse; @@ -40,6 +42,7 @@ import org.odpi.openmetadata.repositoryservices.ffdc.exception.FunctionNotSupportedException; import java.util.List; +import java.util.Map; /*** @@ -103,13 +106,13 @@ public void deleteProcess(String userId, String qualifiedName, String guid) thro * @throws ConnectorCheckedException problem with the underlying connector (if used) */ @Override - public String createExternalDataEngine(String userId, SoftwareServerCapability softwareServerCapability) throws InvalidParameterException, + public String createExternalDataEngine(String userId, Engine engine) throws InvalidParameterException, ConnectorCheckedException { DataEngineRegistrationEvent event = new DataEngineRegistrationEvent(); event.setUserId(userId); event.setExternalSourceName(externalSource); event.setDataEngineEventType(DataEngineEventType.DATA_ENGINE_REGISTRATION_EVENT); - event.setSoftwareServerCapability(softwareServerCapability); + event.setEngine(engine); topicConnector.sendEvent(event); @@ -507,6 +510,27 @@ public void deleteEventType(String userId, String qualifiedName, String guid) th topicConnector.sendEvent(event); } + @Override + public void upsertProcessingState(String userId, Map properties) throws InvalidParameterException, ConnectorCheckedException { + + ProcessingState processingState = new ProcessingState(properties); + + ProcessingStateEvent event = new ProcessingStateEvent(); + + event.setUserId(userId); + event.setExternalSourceName(externalSource); + event.setDataEngineEventType(DataEngineEventType.PROCESSING_STATE_TYPE_EVENT); + event.setProcessingState(processingState); + + topicConnector.sendEvent(event); + } + + @Override + public Map getProcessingState(String userId) { + //async interaction + return null; + } + private DeleteEvent getDeleteEvent(String userId, String qualifiedName, String guid) { DeleteEvent event = new DeleteEvent(); event.setUserId(userId); diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java index c31ed290eef..8b3ead224d8 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java @@ -12,9 +12,10 @@ import org.odpi.openmetadata.accessservices.dataengine.model.PortImplementation; import org.odpi.openmetadata.accessservices.dataengine.model.Process; import org.odpi.openmetadata.accessservices.dataengine.model.ProcessHierarchy; +import org.odpi.openmetadata.accessservices.dataengine.model.ProcessingState; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalTable; import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.model.Topic; import org.odpi.openmetadata.accessservices.dataengine.rest.DataEngineOMASAPIRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.DataEngineRegistrationRequestBody; @@ -29,12 +30,14 @@ import org.odpi.openmetadata.accessservices.dataengine.rest.PortImplementationRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessHierarchyRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessRequestBody; +import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessingStateRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.RelationalTableRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.SchemaTypeRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.TopicRequestBody; import org.odpi.openmetadata.commonservices.ffdc.InvalidParameterHandler; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDListResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDResponse; +import org.odpi.openmetadata.commonservices.ffdc.rest.PropertiesResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.VoidResponse; import org.odpi.openmetadata.commonservices.ocf.metadatamanagement.client.OCFRESTClient; import org.odpi.openmetadata.frameworks.connectors.ffdc.ConnectorCheckedException; @@ -43,6 +46,8 @@ import org.odpi.openmetadata.frameworks.connectors.ffdc.UserNotAuthorizedException; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * The Data Engine Open Metadata Access Service (OMAS) provides an interface for data engine tools to create @@ -67,6 +72,7 @@ public class DataEngineRESTClient extends OCFRESTClient implements DataEngineCli private static final String FIND_URL_TEMPLATE = DATA_ENGINE_PATH + "find"; private static final String TOPIC_URL_TEMPLATE = DATA_ENGINE_PATH + "topics"; private static final String EVENT_TYPE_URL_TEMPLATE = DATA_ENGINE_PATH + "event-types"; + private static final String PROCESSING_STATE_URL_TEMPLATE = DATA_ENGINE_PATH + "processing-state"; private static final String PROCESS_METHOD_NAME = "createOrUpdateProcess"; private static final String PROCESS_DELETE_METHOD_NAME = "deleteProcess"; @@ -180,7 +186,7 @@ public void deleteProcess(String userId, String qualifiedName, String guid) thro * {@inheritDoc} */ @Override - public String createExternalDataEngine(String userId, SoftwareServerCapability softwareServerCapability) throws + public String createExternalDataEngine(String userId, Engine engine) throws InvalidParameterException, UserNotAuthorizedException, PropertyServerException { @@ -188,7 +194,7 @@ public String createExternalDataEngine(String userId, SoftwareServerCapability s invalidParameterHandler.validateUserId(userId, EXTERNAL_DATA_ENGINE_METHOD_NAME); DataEngineRegistrationRequestBody requestBody = new DataEngineRegistrationRequestBody(); - requestBody.setSoftwareServerCapability(softwareServerCapability); + requestBody.setEngine(engine); return callGUIDPostRESTCall(userId, EXTERNAL_DATA_ENGINE_METHOD_NAME, DATA_ENGINE_REGISTRATION_URL_TEMPLATE, requestBody); } @@ -559,6 +565,31 @@ public void deleteEventType(String userId, String qualifiedName, String guid) th callVoidDeleteRESTCall(userId, EVENT_TYPE_DELETE_METHOD_NAME, EVENT_TYPE_URL_TEMPLATE, requestBody); } + @Override + public void upsertProcessingState(String userId, Map properties) throws PropertyServerException, + InvalidParameterException, UserNotAuthorizedException { + String methodName = "upsertProcessingState"; + + ProcessingState processingState = new ProcessingState(properties); + + ProcessingStateRequestBody requestBody = new ProcessingStateRequestBody(processingState); + requestBody.setExternalSourceName(externalSourceName); + + callVoidPostRESTCall(userId, methodName, PROCESSING_STATE_URL_TEMPLATE, requestBody); + } + + @Override + public Map getProcessingState(String userId) throws PropertyServerException { + String methodName = "getProcessingState"; + + PropertiesResponse restResult = this.callGetRESTCall(methodName, PropertiesResponse.class, + serverPlatformRootURL + PROCESSING_STATE_URL_TEMPLATE, serverName, userId, externalSourceName); + + return restResult.getProperties().entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> (Long) e.getValue())); + } + private void callVoidPostRESTCall(String userId, String methodName, String urlTemplate, DataEngineOMASAPIRequestBody requestBody, Object... params) throws PropertyServerException, InvalidParameterException, UserNotAuthorizedException { super.callVoidPostRESTCall(methodName, serverPlatformRootURL + urlTemplate, requestBody, serverName, userId, params); diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/admin/DataEngineServicesInstance.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/admin/DataEngineServicesInstance.java index 34c97a870fc..d3346bb0734 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/admin/DataEngineServicesInstance.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/admin/DataEngineServicesInstance.java @@ -12,6 +12,7 @@ import org.odpi.openmetadata.accessservices.dataengine.model.Database; import org.odpi.openmetadata.accessservices.dataengine.model.DatabaseSchema; import org.odpi.openmetadata.accessservices.dataengine.model.Endpoint; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.model.EventType; import org.odpi.openmetadata.accessservices.dataengine.model.FileFolder; import org.odpi.openmetadata.accessservices.dataengine.model.Port; @@ -20,7 +21,6 @@ import org.odpi.openmetadata.accessservices.dataengine.model.RelationalColumn; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalTable; import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; import org.odpi.openmetadata.accessservices.dataengine.model.Topic; import org.odpi.openmetadata.accessservices.dataengine.server.converters.CollectionCoverter; import org.odpi.openmetadata.accessservices.dataengine.server.converters.ConnectionConverter; @@ -294,9 +294,9 @@ public class DataEngineServicesInstance extends OMASServiceInstance { serviceName, serverName, invalidParameterHandler, repositoryHandler, repositoryHelper, localServerUserId, securityVerifier, supportedZones, defaultZones, publishZones, auditLog); - final SoftwareCapabilityHandler softwareServerCapabilityHandler = + final SoftwareCapabilityHandler softwareServerCapabilityHandler = new SoftwareCapabilityHandler<>(new DatabaseTableConverter<>(repositoryHelper, serviceName, serverName), - SoftwareServerCapability.class, serviceName, serverName, invalidParameterHandler, repositoryHandler, + Engine.class, serviceName, serverName, invalidParameterHandler, repositoryHandler, repositoryHelper, localServerUserId, securityVerifier, supportedZones, defaultZones, publishZones, auditLog); final AssetHandler topicHandler = new AssetHandler<>(new TopicConverter<>(repositoryHelper, serviceName, serverName), diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineEventTypeHandler.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineEventTypeHandler.java index c3c58ab8417..fed09dd37ad 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineEventTypeHandler.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineEventTypeHandler.java @@ -44,7 +44,7 @@ public class DataEngineEventTypeHandler { * @param invalidParameterHandler handler for managing parameter errors * @param eventTypeHandler provides utilities specific for manipulating event type entities * @param dataEngineCommonHandler provides utilities for manipulating entities - * @param dataEngineRegistrationHandler provides utilities for software server capability entities + * @param dataEngineRegistrationHandler provides utilities for engine entities * @param dataEngineSchemaAttributeHandler provides utilities specific for schema attribute entities */ public DataEngineEventTypeHandler(InvalidParameterHandler invalidParameterHandler, EventTypeHandler eventTypeHandler, diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineFolderHierarchyHandler.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineFolderHierarchyHandler.java index 52ab9fc9164..7073b055e0a 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineFolderHierarchyHandler.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineFolderHierarchyHandler.java @@ -69,7 +69,7 @@ public DataEngineFolderHierarchyHandler(InvalidParameterHandler invalidParameter } /** - * Construct the folder structure in which a data file is stored all the way to the SoftwareServerCapability. Care is + * Construct the folder structure in which a data file is stored all the way to the Engine. Care is * taken to maintain uniqueness of the relationship NestedFile that is between the file and the first folder. * * @param fileGuid data file guid @@ -177,10 +177,10 @@ private String upsertFolder(String externalSourceGuid, String externalSourceName /** * Extracts each folder path and builds FileFolders, with the qualified name of the form * '::'. The order is important, meaning the first folder is the one containing the file - * and the last one the root, and used in creating the folder hierarchy structure al the way to the SoftwareServerCapability + * and the last one the root, and used in creating the folder hierarchy structure al the way to the Engine * * @param pathName file path - * @param externalSourceName name of SoftwareServerCapability + * @param externalSourceName name of Engine * @param methodName method name * * @return list of FileFolders diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEnginePortHandler.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEnginePortHandler.java index 921485a0b9d..ade635f6a62 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEnginePortHandler.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEnginePortHandler.java @@ -61,7 +61,7 @@ public class DataEnginePortHandler { * @param repositoryHelper provides utilities for manipulating the repository services objects * @param dataEngineCommonHandler provides utilities for manipulating entities * @param portHandler provides utilities for manipulating the repository services ports - * @param registrationHandler provides utilities for manipulating software server capability entities + * @param registrationHandler provides utilities for manipulating engine entities */ public DataEnginePortHandler(String serviceName, String serverName, InvalidParameterHandler invalidParameterHandler, OMRSRepositoryHelper repositoryHelper, DataEngineCommonHandler dataEngineCommonHandler, diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineProcessHandler.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineProcessHandler.java index c413fd3570a..1de9c26587f 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineProcessHandler.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineProcessHandler.java @@ -61,7 +61,7 @@ public class DataEngineProcessHandler { * @param repositoryHelper provides utilities for manipulating the repository services objects * @param assetHandler provides utilities for manipulating the repository services assets * @param dataEngineCommonHandler provides utilities for manipulating entities - * @param registrationHandler provides utilities for manipulating software server capability entities + * @param registrationHandler provides utilities for manipulating engine entities **/ public DataEngineProcessHandler(String serviceName, String serverName, InvalidParameterHandler invalidParameterHandler, OMRSRepositoryHelper repositoryHelper, AssetHandler assetHandler, diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandler.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandler.java index d7e300a5439..dbccdc92f5b 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandler.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandler.java @@ -5,7 +5,7 @@ import org.odpi.openmetadata.accessservices.dataengine.ffdc.DataEngineErrorCode; import org.odpi.openmetadata.accessservices.dataengine.model.DeleteSemantic; import org.odpi.openmetadata.accessservices.dataengine.model.ProcessingState; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.server.builders.ExternalDataEnginePropertiesBuilder; import org.odpi.openmetadata.accessservices.dataengine.server.mappers.CommonMapper; import org.odpi.openmetadata.accessservices.dataengine.server.service.ClockService; @@ -36,8 +36,8 @@ import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.PROCESSING_STATE_CLASSIFICATION_TYPE_NAME; /** - * DataEngineRegistrationHandler manages SoftwareServerCapability objects from external data engines. It runs - * server-side in the DataEngine OMAS and creates software server capability entities through the + * DataEngineRegistrationHandler manages Engine objects from external data engines. It runs + * server-side in the DataEngine OMAS and creates engine entities through the * SoftwareCapabilityHandler. */ public class DataEngineRegistrationHandler { @@ -47,23 +47,23 @@ public class DataEngineRegistrationHandler { private final String serviceName; private final String serverName; private final OMRSRepositoryHelper repositoryHelper; - private final SoftwareCapabilityHandler softwareServerCapabilityHandler; + private final SoftwareCapabilityHandler softwareServerCapabilityHandler; private final InvalidParameterHandler invalidParameterHandler; private final ClockService clockService; /** * Construct the handler information needed to interact with the repository services * - * @param serviceName name of this service - * @param serverName name of the local server - * @param invalidParameterHandler handler for managing parameter errors - * @param repositoryHelper provides utilities for manipulating the repository services objects - * @param softwareServerCapabilityHandler handler for the creation of SoftwareServerCapability objects + * @param serviceName name of this service + * @param serverName name of the local server + * @param invalidParameterHandler handler for managing parameter errors + * @param repositoryHelper provides utilities for manipulating the repository services objects + * @param softwareServerCapabilityHandler handler for the creation of engine objects */ public DataEngineRegistrationHandler(String serviceName, String serverName, InvalidParameterHandler invalidParameterHandler, OMRSRepositoryHelper repositoryHelper, - SoftwareCapabilityHandler softwareServerCapabilityHandler, + SoftwareCapabilityHandler softwareServerCapabilityHandler, ClockService clockService) { this.serviceName = serviceName; this.serverName = serverName; @@ -74,25 +74,23 @@ public DataEngineRegistrationHandler(String serviceName, String serverName, } /** - * Create the software server capability entity from an external data engine - * - * @param userId the name of the calling user - * @param softwareServerCapability the entity of external data engine + * Create the engine entity from an external data engine * + * @param userId the name of the calling user + * @param engine the entity of external data engine * @return unique identifier of the external data engine in the repository - * * @throws InvalidParameterException the bean properties are invalid * @throws UserNotAuthorizedException user not authorized to issue this request * @throws PropertyServerException problem accessing the property server */ - public String upsertExternalDataEngine(String userId, SoftwareServerCapability softwareServerCapability) throws InvalidParameterException, - UserNotAuthorizedException, - PropertyServerException { + public String upsertExternalDataEngine(String userId, Engine engine) throws InvalidParameterException, + UserNotAuthorizedException, + PropertyServerException { final String methodName = "upsertExternalDataEngine"; invalidParameterHandler.validateUserId(userId, methodName); - String externalEngineName = softwareServerCapability.getQualifiedName(); + String externalEngineName = engine.getQualifiedName(); invalidParameterHandler.validateName(externalEngineName, QUALIFIED_NAME_PROPERTY_NAME, methodName); @@ -101,13 +99,13 @@ public String upsertExternalDataEngine(String userId, SoftwareServerCapability s String externalEngineGUID = getExternalDataEngine(userId, externalEngineName); if (externalEngineGUID == null) { externalEngineGUID = softwareServerCapabilityHandler.createSoftwareCapability(userId, null, - null, entityTypeDef.getName(), null, externalEngineName, - softwareServerCapability.getName(), softwareServerCapability.getDescription(), softwareServerCapability.getEngineType(), - softwareServerCapability.getEngineVersion(), softwareServerCapability.getPatchLevel(), softwareServerCapability.getSource(), - softwareServerCapability.getAdditionalProperties(), null, null, null, + null, entityTypeDef.getName(), null, externalEngineName, + engine.getName(), engine.getDescription(), engine.getEngineType(), + engine.getEngineVersion(), engine.getPatchLevel(), engine.getSource(), + engine.getAdditionalProperties(), null, null, null, null, false, false, clockService.getNow(), methodName); } else { - ExternalDataEnginePropertiesBuilder builder = getExternalDataEnginePropertiesBuilder(softwareServerCapability); + ExternalDataEnginePropertiesBuilder builder = getExternalDataEnginePropertiesBuilder(engine); InstanceProperties properties = builder.getInstanceProperties(methodName); softwareServerCapabilityHandler.updateBeanInRepository(userId, externalEngineGUID, externalEngineName, externalEngineGUID, @@ -118,19 +116,17 @@ public String upsertExternalDataEngine(String userId, SoftwareServerCapability s } /** - * Return the guid of a software server capability entity from an external data engine + * Return the guid of an engine entity from an external data engine * * @param userId identifier of calling user * @param qualifiedName qualified name of the external data engine - * * @return the guid of the external data engine - * * @throws InvalidParameterException one of the parameters is null or invalid * @throws UserNotAuthorizedException user not authorized to issue this request * @throws PropertyServerException problem retrieving the discovery engine definition */ public String getExternalDataEngine(String userId, String qualifiedName) throws InvalidParameterException, UserNotAuthorizedException, - PropertyServerException { + PropertyServerException { final String methodName = "getExternalDataEngineByQualifiedName"; invalidParameterHandler.validateUserId(userId, methodName); @@ -149,43 +145,78 @@ public String getExternalDataEngine(String userId, String qualifiedName) throws } public void removeExternalDataEngine(String userId, String qualifiedName, String externalSourceName, DeleteSemantic deleteSemantic) throws - FunctionNotSupportedException { + FunctionNotSupportedException { final String methodName = "removeExternalDataEngine"; throw new FunctionNotSupportedException(OMRSErrorCode.METHOD_NOT_IMPLEMENTED.getMessageDefinition(methodName, this.getClass().getName(), serverName), this.getClass().getName(), methodName); } - ExternalDataEnginePropertiesBuilder getExternalDataEnginePropertiesBuilder(SoftwareServerCapability softwareServerCapability) { - return new ExternalDataEnginePropertiesBuilder(softwareServerCapability.getQualifiedName(), - softwareServerCapability.getName(), softwareServerCapability.getDescription(), softwareServerCapability.getEngineType(), - softwareServerCapability.getEngineVersion(), softwareServerCapability.getPatchLevel(), softwareServerCapability.getSource(), - softwareServerCapability.getAdditionalProperties(), repositoryHelper, serviceName, serverName); + ExternalDataEnginePropertiesBuilder getExternalDataEnginePropertiesBuilder(Engine engine) { + return new ExternalDataEnginePropertiesBuilder(engine.getQualifiedName(), + engine.getName(), engine.getDescription(), engine.getEngineType(), + engine.getEngineVersion(), engine.getPatchLevel(), engine.getSource(), + engine.getAdditionalProperties(), repositoryHelper, serviceName, serverName); } - public void createDataEngineClassification(String userId, ProcessingState processingState, String externalSourceName) throws - InvalidParameterException, - UserNotAuthorizedException, - PropertyServerException { - final String methodName = "createDataEngineClassification"; + public void upsertProcessingStateClassification(String userId, ProcessingState processingState, String externalSourceName) + throws InvalidParameterException, UserNotAuthorizedException, PropertyServerException { + final String methodName = "upsertProcessingStateClassification"; invalidParameterHandler.validateUserId(userId, methodName); String externalSourceGUID = this.getExternalDataEngine(userId, externalSourceName); - if (externalSourceGUID == null) { - ExceptionMessageDefinition messageDefinition = DataEngineErrorCode.SOFTWARE_SERVER_CAPABILITY_NOT_FOUND.getMessageDefinition(externalSourceName); - throw new InvalidParameterException(messageDefinition, this.getClass().getName(), methodName, EXTERNAL_ENGINE_PARAMETER_NAME); - } + validateExternalDataEngine(externalSourceName, methodName, externalSourceGUID); + + EntityDetail retrievedEntity = getDataEngineEntity(userId, externalSourceName, methodName); //Check if the entity has this classification and if it does then merge the syncDatesByKey + Map newSyncDatesByKey = updateSyncDatesByKey(processingState, retrievedEntity); + + if (newSyncDatesByKey.isEmpty()) { + newSyncDatesByKey = processingState.getSyncDatesByKey(); + } + + InstanceProperties instanceProperties = new InstanceProperties(); + instanceProperties = repositoryHelper.addLongMapPropertyToInstance(null, instanceProperties, SYNC_DATES_BY_KEY, + newSyncDatesByKey, methodName); + + softwareServerCapabilityHandler.setClassificationInRepository(userId, null, null, + externalSourceGUID, EXTERNAL_ENGINE_PARAMETER_NAME, ENGINE_TYPE_NAME, PROCESSING_STATE_CLASSIFICATION_TYPE_GUID, + PROCESSING_STATE_CLASSIFICATION_TYPE_NAME, instanceProperties, true, false, + false, clockService.getNow(), methodName); + } + + public ProcessingState getProcessingStateClassification(String userId, String externalSourceName) + throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException { + final String methodName = "getProcessingStateClassification"; + invalidParameterHandler.validateUserId(userId, methodName); + + String externalSourceGUID = this.getExternalDataEngine(userId, externalSourceName); + validateExternalDataEngine(externalSourceName, methodName, externalSourceGUID); + + EntityDetail engineEntity = getDataEngineEntity(userId, externalSourceName, methodName); + + Map syncDatesByKey = getSyncDatesByKey(engineEntity); + return new ProcessingState(syncDatesByKey); + } + private EntityDetail getDataEngineEntity(String userId, String externalSourceName, String methodName) throws InvalidParameterException, UserNotAuthorizedException, PropertyServerException { TypeDef entityTypeDef = repositoryHelper.getTypeDefByName(userId, ENGINE_TYPE_NAME); - EntityDetail retrievedEntity = softwareServerCapabilityHandler.getEntityByValue(userId, externalSourceName, CommonMapper.QUALIFIED_NAME_PROPERTY_NAME, + return softwareServerCapabilityHandler.getEntityByValue(userId, externalSourceName, CommonMapper.QUALIFIED_NAME_PROPERTY_NAME, entityTypeDef.getGUID(), entityTypeDef.getName(), Collections.singletonList(CommonMapper.QUALIFIED_NAME_PROPERTY_NAME), - false, false, null, methodName); + false, false, clockService.getNow(), methodName); + } - Map newSyncDatesByKey = new HashMap<>(); + private void validateExternalDataEngine(String externalSourceName, String methodName, String externalSourceGUID) throws InvalidParameterException { + if (externalSourceGUID == null) { + ExceptionMessageDefinition messageDefinition = DataEngineErrorCode.ENGINE_NOT_FOUND.getMessageDefinition(externalSourceName); + throw new InvalidParameterException(messageDefinition, this.getClass().getName(), methodName, EXTERNAL_ENGINE_PARAMETER_NAME); + } + } + private Map updateSyncDatesByKey(ProcessingState processingState, EntityDetail retrievedEntity) { + Map newSyncDatesByKey = new HashMap<>(); if (retrievedEntity.getClassifications() != null) { for (Classification classification : retrievedEntity.getClassifications()) { if (classification != null && classification.getName().equals(PROCESSING_STATE_CLASSIFICATION_TYPE_NAME)) { @@ -198,28 +229,23 @@ public void createDataEngineClassification(String userId, ProcessingState proces } } } + return newSyncDatesByKey; + } - if (newSyncDatesByKey.isEmpty()) { - newSyncDatesByKey = processingState.getSyncDatesByKey(); + private Map getSyncDatesByKey(EntityDetail retrievedEntity) { + Map newSyncDatesByKey = new HashMap<>(); + if (retrievedEntity.getClassifications() != null) { + for (Classification classification : retrievedEntity.getClassifications()) { + if (classification != null && classification.getName().equals(PROCESSING_STATE_CLASSIFICATION_TYPE_NAME)) { + MapPropertyValue syncDatesByKey = (MapPropertyValue) classification.getProperties().getPropertyValue(SYNC_DATES_BY_KEY); + for (Map.Entry entry : syncDatesByKey.getMapValues().getInstanceProperties().entrySet()) { + newSyncDatesByKey.put(entry.getKey().toString(), + ((Long) ((PrimitivePropertyValue) entry.getValue()).getPrimitiveValue()).longValue()); + } + } + } } - - InstanceProperties instanceProperties = new InstanceProperties(); - instanceProperties = repositoryHelper.addLongMapPropertyToInstance(null, instanceProperties, SYNC_DATES_BY_KEY, - newSyncDatesByKey, methodName); - - softwareServerCapabilityHandler.setClassificationInRepository(userId, - null, - null, - externalSourceGUID, - EXTERNAL_ENGINE_PARAMETER_NAME, - ENGINE_TYPE_NAME, - PROCESSING_STATE_CLASSIFICATION_TYPE_GUID, - PROCESSING_STATE_CLASSIFICATION_TYPE_NAME, - instanceProperties, - true, - false, - false, - null, - methodName); + return newSyncDatesByKey; } + } \ No newline at end of file diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRelationalDataHandler.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRelationalDataHandler.java index ab0ecac5f79..c0823695abc 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRelationalDataHandler.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRelationalDataHandler.java @@ -64,7 +64,7 @@ public class DataEngineRelationalDataHandler { * @param relationalDataHandler provides utilities for manipulating the repository services assets * @param databaseSchemaAssetHandler provides utilities for manipulating database schema assets * @param dataEngineCommonHandler provides utilities for manipulating entities - * @param registrationHandler creates software server capability entities + * @param registrationHandler creates engine entities * @param dataEngineConnectionAndEndpointHandler provides utilities specific for manipulating Connections and Endpoints **/ public DataEngineRelationalDataHandler(String serviceName, String serverName, InvalidParameterHandler invalidParameterHandler, diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineTopicHandler.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineTopicHandler.java index 4239e90b087..9bacb51eee3 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineTopicHandler.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineTopicHandler.java @@ -43,7 +43,7 @@ public class DataEngineTopicHandler { * @param invalidParameterHandler handler for managing parameter errors * @param topicHandler provides utilities specific for manipulating topic entities * @param dataEngineCommonHandler provides utilities for manipulating entities - * @param dataEngineRegistrationHandler provides utilities for software server capability entities + * @param dataEngineRegistrationHandler provides utilities for engine entities */ public DataEngineTopicHandler(InvalidParameterHandler invalidParameterHandler, AssetHandler topicHandler, DataEngineRegistrationHandler dataEngineRegistrationHandler, diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/listeners/DataEngineInTopicListener.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/listeners/DataEngineInTopicListener.java index 82a6cb9f0cc..8d33dc205f2 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/listeners/DataEngineInTopicListener.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/listeners/DataEngineInTopicListener.java @@ -135,6 +135,9 @@ public void processEvent(String dataEngineEvent) { case DELETE_EVENT_TYPE_EVENT: dataEngineEventProcessor.processDeleteEventTypeEvent(dataEngineEvent); break; + case PROCESSING_STATE_TYPE_EVENT: + dataEngineEventProcessor.processProcessingStateEvent(dataEngineEvent); + break; default: log.debug("Ignored instance event - unknown event type"); break; diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/processors/DataEngineEventProcessor.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/processors/DataEngineEventProcessor.java index dd2b18d1d43..27b9911d280 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/processors/DataEngineEventProcessor.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/processors/DataEngineEventProcessor.java @@ -17,6 +17,7 @@ import org.odpi.openmetadata.accessservices.dataengine.event.PortImplementationEvent; import org.odpi.openmetadata.accessservices.dataengine.event.ProcessEvent; import org.odpi.openmetadata.accessservices.dataengine.event.ProcessHierarchyEvent; +import org.odpi.openmetadata.accessservices.dataengine.event.ProcessingStateEvent; import org.odpi.openmetadata.accessservices.dataengine.event.RelationalTableEvent; import org.odpi.openmetadata.accessservices.dataengine.event.SchemaTypeEvent; import org.odpi.openmetadata.accessservices.dataengine.event.TopicEvent; @@ -82,7 +83,7 @@ public void processDataEngineRegistrationEvent(String dataEngineEvent) { try { DataEngineRegistrationEvent dataEngineRegistrationEvent = OBJECT_MAPPER.readValue(dataEngineEvent, DataEngineRegistrationEvent.class); dataEngineRESTServices.createExternalDataEngine(dataEngineRegistrationEvent.getUserId(), serverName, - dataEngineRegistrationEvent.getSoftwareServerCapability()); + dataEngineRegistrationEvent.getEngine()); } catch (JsonProcessingException | UserNotAuthorizedException | PropertyServerException | InvalidParameterException e) { logException(dataEngineEvent, methodName, e); @@ -580,6 +581,24 @@ public void processDeleteEventTypeEvent(String dataEngineEvent) { } } + /** + * Process a {@link ProcessingStateEvent} for deleting an event type + * + * @param dataEngineEvent the event to be processed + */ + public void processProcessingStateEvent(String dataEngineEvent) { + final String methodName = "processProcessingStateEvent"; + log.trace(DEBUG_MESSAGE_METHOD, methodName); + try { + ProcessingStateEvent event = OBJECT_MAPPER.readValue(dataEngineEvent, ProcessingStateEvent.class); + + dataEngineRESTServices.upsertProcessingState(event.getUserId(), serverName, event.getProcessingState(), + event.getExternalSourceName()); + } catch (JsonProcessingException e) { + logException(dataEngineEvent, methodName, e); + } + } + private void deletePort(String dataEngineEvent, String methodName, String portType) { log.trace(DEBUG_MESSAGE_METHOD, methodName); try { diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServices.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServices.java index efa9392e0d1..b63b5a6d623 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServices.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServices.java @@ -12,6 +12,7 @@ import org.odpi.openmetadata.accessservices.dataengine.model.Database; import org.odpi.openmetadata.accessservices.dataengine.model.DatabaseSchema; import org.odpi.openmetadata.accessservices.dataengine.model.DeleteSemantic; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.model.EventType; import org.odpi.openmetadata.accessservices.dataengine.model.LineageMapping; import org.odpi.openmetadata.accessservices.dataengine.model.ParentProcess; @@ -24,7 +25,6 @@ import org.odpi.openmetadata.accessservices.dataengine.model.Referenceable; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalTable; import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; import org.odpi.openmetadata.accessservices.dataengine.model.Topic; import org.odpi.openmetadata.accessservices.dataengine.model.UpdateSemantic; import org.odpi.openmetadata.accessservices.dataengine.rest.DataEngineOMASAPIRequestBody; @@ -62,6 +62,7 @@ import org.odpi.openmetadata.commonservices.ffdc.rest.FFDCResponseBase; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDListResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDResponse; +import org.odpi.openmetadata.commonservices.ffdc.rest.PropertiesResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.VoidResponse; import org.odpi.openmetadata.commonservices.ocf.metadatamanagement.rest.ConnectionResponse; import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; @@ -99,7 +100,6 @@ import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.PORT_ALIAS_TYPE_NAME; import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.PORT_IMPLEMENTATION_TYPE_NAME; import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.PORT_TYPE_NAME; -import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.PROCESSING_STATE_CLASSIFICATION_TYPE_NAME; import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.PROCESS_TYPE_NAME; import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.QUALIFIED_NAME_PROPERTY_NAME; import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.QUOTE_CHARACTER_PROPERTY_NAME; @@ -140,6 +140,7 @@ public class DataEngineRESTServices { public static final String EXTERNAL_SOURCE_NAME_PARAMETER_NAME = "externalSourceName"; public static final String UPSERT_METHOD_CALLS_FOR = "Method {} will take longer. Inside it, upsert method will be called for: {} and/or {}"; public static final String TOPIC_PARAMETER_NAME = "topic"; + public static final String PROCESSING_STATE = "processingState"; private static final String EVENT_TYPE_PARAMETER_NAME = "eventType"; private static final String TOPIC_QUALIFIED_NAME_PARAMETER_NAME = "topicQualifiedName"; @@ -147,7 +148,7 @@ public class DataEngineRESTServices { private final DataEngineInstanceHandler instanceHandler = new DataEngineInstanceHandler(); /** - * Create the external data engine as software server capability entity + * Create the external data engine as engine entity * * @param serverName name of server instance to call * @param userId the name of the calling user @@ -166,7 +167,7 @@ public GUIDResponse createExternalDataEngine(String serverName, String userId, restExceptionHandler.handleNoRequestBody(userId, methodName, serverName); return response; } - response.setGUID(createExternalDataEngine(userId, serverName, requestBody.getSoftwareServerCapability())); + response.setGUID(createExternalDataEngine(userId, serverName, requestBody.getEngine())); } catch (Exception error) { restExceptionHandler.captureExceptions(response, error, methodName); } @@ -182,7 +183,7 @@ public GUIDResponse createExternalDataEngine(String serverName, String userId, * @param userId identifier of calling user * @param qualifiedName qualified name of the external data engine * - * @return the unique identifier from a software server capability definition for an external data engine + * @return the unique identifier from an engine definition for an external data engine */ public GUIDResponse getExternalDataEngine(String serverName, String userId, String qualifiedName) { final String methodName = "getExternalDataEngineByQualifiedName"; @@ -758,11 +759,11 @@ public String upsertPortImplementation(String userId, String serverName, PortImp } /** - * Create the external data engine as software server capability entity + * Create the external data engine as engine entity * - * @param userId the name of the calling user - * @param serverName name of server instance to call - * @param softwareServerCapability the software server values + * @param userId the name of the calling user + * @param serverName name of server instance to call + * @param engine the engine values * * @return he unique identifier (guid) of the created external data engine * @@ -770,24 +771,24 @@ public String upsertPortImplementation(String userId, String serverName, PortImp * @throws UserNotAuthorizedException user not authorized to issue this request * @throws PropertyServerException problem accessing the property server */ - public String createExternalDataEngine(String userId, String serverName, SoftwareServerCapability softwareServerCapability) throws + public String createExternalDataEngine(String userId, String serverName, Engine engine) throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException { final String methodName = "createExternalDataEngine"; - log.debug(DEBUG_MESSAGE_METHOD_DETAILS, methodName, softwareServerCapability); + log.debug(DEBUG_MESSAGE_METHOD_DETAILS, methodName, engine); - if (softwareServerCapability == null) { + if (engine == null) { return null; } DataEngineRegistrationHandler handler = instanceHandler.getRegistrationHandler(userId, serverName, methodName); - String softwareServerCapabilityGUID = handler.upsertExternalDataEngine(userId, softwareServerCapability); + String externalDataEngineGUID = handler.upsertExternalDataEngine(userId, engine); - log.info(EXTERNAL_ENGINE_WAS_REGISTERED, softwareServerCapability.getQualifiedName(), softwareServerCapabilityGUID); - return softwareServerCapabilityGUID; + log.info(EXTERNAL_ENGINE_WAS_REGISTERED, engine.getQualifiedName(), externalDataEngineGUID); + return externalDataEngineGUID; } /** @@ -2192,7 +2193,7 @@ public VoidResponse upsertProcessingState(String userId, String serverName, Proc ProcessingState processingState = processingStateRequestBody.getProcessingState(); if (processingState == null) { - restExceptionHandler.handleMissingValue("processingState", methodName); + restExceptionHandler.handleMissingValue(PROCESSING_STATE, methodName); return response; } return upsertProcessingState(userId, serverName, processingState, processingStateRequestBody.getExternalSourceName()); @@ -2202,6 +2203,21 @@ public VoidResponse upsertProcessingState(String userId, String serverName, Proc return response; } + public PropertiesResponse getProcessingState(String userId, String serverName, String externalSourceName) { + final String methodName = "getProcessingState"; + + PropertiesResponse response = new PropertiesResponse(); + try { + DataEngineRegistrationHandler handler = instanceHandler.getRegistrationHandler(userId, serverName, methodName); + ProcessingState processingState = handler.getProcessingStateClassification(userId, externalSourceName); + Map properties = new HashMap<>(processingState.getSyncDatesByKey()); + response.setProperties(properties); + } catch (Exception error) { + restExceptionHandler.captureExceptions(response, error, methodName); + } + return response; + } + /** * Create or update the ProcessingState with provided map of critical elements and sync states * @@ -2217,7 +2233,7 @@ public VoidResponse upsertProcessingState(String userId, String serverName, Proc VoidResponse response = new VoidResponse(); try { DataEngineRegistrationHandler handler = instanceHandler.getRegistrationHandler(userId, serverName, methodName); - handler.createDataEngineClassification(userId, processingState, externalSourceName); + handler.upsertProcessingStateClassification(userId, processingState, externalSourceName); } catch (Exception error) { restExceptionHandler.captureExceptions(response, error, methodName); } diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResource.java b/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResource.java index 03e25faf2b1..fa273d413c3 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResource.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResource.java @@ -23,6 +23,7 @@ import org.odpi.openmetadata.accessservices.dataengine.server.service.DataEngineRESTServices; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDListResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDResponse; +import org.odpi.openmetadata.commonservices.ffdc.rest.PropertiesResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.VoidResponse; import org.odpi.openmetadata.commonservices.ocf.metadatamanagement.rest.ConnectionResponse; import org.springframework.web.bind.annotation.DeleteMapping; @@ -31,6 +32,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import static org.odpi.openmetadata.commonservices.generichandlers.OpenMetadataAPIMapper.PORT_ALIAS_TYPE_NAME; @@ -59,13 +61,13 @@ public DataEngineResource() { } /** - * Register external data engine as source of metadata by creating a software server capability entity + * Register external data engine as source of metadata by creating an engine entity * * @param serverName name of server instance to call * @param userId the name of the calling user * @param requestBody properties of the entity * - * @return unique identifier of the software server capability + * @return unique identifier of the engine */ @PostMapping(path = "/registration") public GUIDResponse createExternalDataEngine(@PathVariable("serverName") String serverName, @@ -75,13 +77,13 @@ public GUIDResponse createExternalDataEngine(@PathVariable("serverName") String } /** - * Return the unique identifier of an external data engine from a software server capability definition. + * Return the unique identifier of an external data engine from an engine definition. * * @param serverName name of server instance to call * @param userId identifier of calling user - * @param qualifiedName qualified name of the software server capability + * @param qualifiedName qualified name of the engine * - * @return unique identified of the software server capability + * @return unique identified of the engine */ @GetMapping(path = "/registration/{qualifiedName}") public GUIDResponse getExternalDataEngineByQualifiedName(@PathVariable String serverName, @@ -558,4 +560,18 @@ public VoidResponse upsertProcessingState(@PathVariable("userId") String userId, return restAPI.upsertProcessingState(userId, serverName, requestBody); } + /** + * Get the data engine's processing state classification properties + * + * @param serverName name of server instance to call + * @param userId the name of the calling user + * @return PropertiesResponse response + */ + @GetMapping(path = "/processing-state") + public PropertiesResponse getProcessingState(@PathVariable("userId") String userId, + @PathVariable("serverName") String serverName, + @RequestParam("dataEngine") String externalSourceName) { + return restAPI.getProcessingState(userId, serverName, externalSourceName); + } + } diff --git a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineConnectorBase.java b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineConnectorBase.java index 9ce00de1afc..7bdbe30d7f4 100644 --- a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineConnectorBase.java +++ b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineConnectorBase.java @@ -38,6 +38,12 @@ public abstract class DataEngineConnectorBase extends ConnectorBase implements D @Override public boolean requiresPolling() { return true; } + @Override + public String getProcessingStateSyncKey() { + log.warn("DataEngineConnectorBase::getProcessingStateSyncKey() is not overridden (unimplemented)."); + return null; + } + /** * Retrieve the date and time at which changes were last synchronized. * diff --git a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineInterface.java b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineInterface.java index b304fe9e1da..446d20d93a4 100644 --- a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineInterface.java +++ b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-connector/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/connectors/DataEngineInterface.java @@ -5,11 +5,13 @@ */ package org.odpi.openmetadata.governanceservers.dataengineproxy.connectors; -import org.odpi.openmetadata.accessservices.dataengine.model.*; +import org.odpi.openmetadata.accessservices.dataengine.model.LineageMapping; import org.odpi.openmetadata.accessservices.dataengine.model.Process; -import org.odpi.openmetadata.frameworks.connectors.ffdc.ConnectionCheckedException; +import org.odpi.openmetadata.accessservices.dataengine.model.ProcessHierarchy; +import org.odpi.openmetadata.accessservices.dataengine.model.Referenceable; +import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.frameworks.connectors.ffdc.ConnectorCheckedException; -import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; import java.util.Date; @@ -25,7 +27,7 @@ public interface DataEngineInterface { * * @return SoftwareCapability */ - SoftwareServerCapability getDataEngineDetails(); + Engine getDataEngineDetails(); /** * Indicates whether the data engine requires polling (true) or is capable of notifying of changes on its own @@ -35,6 +37,13 @@ public interface DataEngineInterface { */ boolean requiresPolling(); + /** + * Gets processing state sync key. + * + * @return the processing state sync key + */ + String getProcessingStateSyncKey(); + /** * Retrieve the date and time at which changes were last synchronized. * diff --git a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java index 937070a056b..d9225351da5 100644 --- a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java +++ b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java @@ -3,6 +3,7 @@ package org.odpi.openmetadata.governanceservers.dataengineproxy.processor; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.odpi.openmetadata.accessservices.dataengine.client.DataEngineClient; import org.odpi.openmetadata.accessservices.dataengine.model.DataFile; import org.odpi.openmetadata.accessservices.dataengine.model.Database; @@ -11,7 +12,7 @@ import org.odpi.openmetadata.accessservices.dataengine.model.ProcessHierarchy; import org.odpi.openmetadata.accessservices.dataengine.model.Referenceable; import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.adminservices.configuration.properties.DataEngineProxyConfig; import org.odpi.openmetadata.frameworks.connectors.ffdc.ConnectorCheckedException; import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; @@ -27,6 +28,7 @@ import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -35,11 +37,11 @@ */ public class DataEngineProxyService implements Runnable { - private OMRSAuditLog auditLog; - private DataEngineProxyConfig dataEngineProxyConfig; - private DataEngineClient dataEngineOMASClient; - private DataEngineConnectorBase connector; - private String userId; + private final OMRSAuditLog auditLog; + private final DataEngineProxyConfig dataEngineProxyConfig; + private final DataEngineClient dataEngineOMASClient; + private final DataEngineConnectorBase connector; + private final String userId; private final AtomicBoolean running = new AtomicBoolean(false); @@ -50,7 +52,7 @@ public void initialize() throws ConnectorCheckedException, UserNotAuthorizedExce // Retrieve the base information from the connector if (connector != null) { - SoftwareServerCapability dataEngineDetails = connector.getDataEngineDetails(); + Engine dataEngineDetails = connector.getDataEngineDetails(); dataEngineOMASClient.createExternalDataEngine(userId, dataEngineDetails); dataEngineOMASClient.setExternalSourceName(dataEngineDetails.getQualifiedName()); if (connector.requiresPolling()) { @@ -98,25 +100,14 @@ public void run() { running.set(true); while (running.get()) { try { - - // Start with the last change synchronization date and time - Date changesLastSynced = connector.getChangesLastSynced(); - - // Then look for the oldest change available in the Data Engine since that time - Date oldestSinceSync = connector.getOldestChangeSince(changesLastSynced); Date changesCutoff = new Date(); - if (oldestSinceSync == null) { - // If there were no changes since the last sync time, default to the last sync time - oldestSinceSync = changesLastSynced; - } else { - // If there are any changes since that last sync time, calculate a batch window from that oldest - // change to the maximum amount of time to include in a batch + Date oldestSinceSync = getProcessingState(); + if(oldestSinceSync != null) { long window = oldestSinceSync.getTime() + (dataEngineProxyConfig.getBatchWindowInSeconds() * 1000L); long now = changesCutoff.getTime(); // We will look for changes up to that batch window size or the current moment, whichever is sooner changesCutoff = new Date(Math.min(window, now)); } - ensureSourceNameIsSet(); this.auditLog.logMessage(methodName, @@ -133,7 +124,7 @@ public void run() { upsertLineageMappings(oldestSinceSync, changesCutoff); // Update the timestamp at which changes were last synced - connector.setChangesLastSynced(changesCutoff); + upsertProcessingState(changesCutoff); // Sleep for the poll interval before continuing with the next poll sleep(); @@ -162,6 +153,8 @@ public void load() { upsertProcessHierarchies(now, now); upsertLineageMappings(now, now); + upsertProcessingState(now); + } catch (PropertyServerException | UserNotAuthorizedException | InvalidParameterException | ConnectorCheckedException e) { this.auditLog.logException(methodName, DataEngineProxyAuditCode.RUNTIME_EXCEPTION.getMessageDefinition(), e); } @@ -173,6 +166,23 @@ public void pollProcessChanges(String processId) { * */ } + private void upsertProcessingState(Date changesCutoff) throws PropertyServerException, InvalidParameterException, UserNotAuthorizedException, ConnectorCheckedException { + String processingStateKey = connector.getProcessingStateSyncKey(); + Map properties = Collections.singletonMap(processingStateKey, changesCutoff.getTime()); + dataEngineOMASClient.upsertProcessingState(userId, properties); + } + + private Date getProcessingState() throws PropertyServerException { + String processingStateKey = connector.getProcessingStateSyncKey(); + + Map processingState = dataEngineOMASClient.getProcessingState(userId); + if(MapUtils.isNotEmpty(processingState)) { + Long lastSync = processingState.get(processingStateKey); + return new Date(lastSync); + } + return null; + } + /** * Sleep until the next polling interval comes. */ From fa6288bce709fb1301e9222152cb2e536185b0f7 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Wed, 19 Oct 2022 10:13:18 +0300 Subject: [PATCH 02/10] Change JCL over SLF4J back to previous version Signed-off-by: Alexandra Bucur --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8f4db9777b9..3e87f7d0e5b 100644 --- a/pom.xml +++ b/pom.xml @@ -208,6 +208,7 @@ 2.2.3 1.9.4 4.8.149 + 1.7.36 3.0.13 0.10.2 2.1.12 @@ -3231,7 +3232,7 @@ org.slf4j jcl-over-slf4j - ${slf4j.version} + ${jcl-over-slf4j.version} From 483ccebb26447c74c8d3cd28550626562c3a622b Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Wed, 19 Oct 2022 10:13:54 +0300 Subject: [PATCH 03/10] DE - Documentation and collections for engine refactoring and processing state classification Signed-off-by: Alexandra Bucur --- ...ne-asset_endpoints.postman_collection.json | 59 ++++++++++++++++++- ...-lineage_examples.postman_collection.json} | 11 ++-- .../events/DataEngine_upsert_events.txt | 2 +- .../data-engine/docs/scenarios/README.md | 4 +- .../scenarios/lookup-registration-tool.md | 2 +- .../docs/scenarios/register-external-tool.md | 2 +- .../README.md | 2 +- 7 files changed, 68 insertions(+), 14 deletions(-) rename open-metadata-implementation/access-services/data-engine/docs/samples/collections/{DataEngine-topics-lienage_examples.postman_collection.json => DataEngine-topics-lineage_examples.postman_collection.json} (98%) diff --git a/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-asset_endpoints.postman_collection.json b/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-asset_endpoints.postman_collection.json index 7ad041fbf0d..380aa81923d 100644 --- a/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-asset_endpoints.postman_collection.json +++ b/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-asset_endpoints.postman_collection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "8099fb01-9085-42ff-8560-049eb7c9a8d4", + "_postman_id": "09b88582-5fe0-4192-886d-3234ba2b936d", "name": "DataEngine - asset endpoints", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -3282,6 +3282,63 @@ } }, "response": [] + }, + { + "name": "10.2 Get Processing State Classification", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "username", + "value": "demo", + "type": "string" + }, + { + "key": "password", + "value": "demo", + "type": "string" + }, + { + "key": "showPassword", + "value": false, + "type": "boolean" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Content-Type", + "name": "Content-Type", + "type": "text", + "value": "application/json" + } + ], + "url": { + "raw": "{{base-url}}/servers/{{server-id}}/open-metadata/access-services/data-engine/users/{{user-id}}/processing-state?dataEngine=(organization)=Company::(project)=ExternalDataPlatform", + "host": [ + "{{base-url}}" + ], + "path": [ + "servers", + "{{server-id}}", + "open-metadata", + "access-services", + "data-engine", + "users", + "{{user-id}}", + "processing-state" + ], + "query": [ + { + "key": "dataEngine", + "value": "(organization)=Company::(project)=ExternalDataPlatform" + } + ] + } + }, + "response": [] } ] } \ No newline at end of file diff --git a/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-topics-lienage_examples.postman_collection.json b/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-topics-lineage_examples.postman_collection.json similarity index 98% rename from open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-topics-lienage_examples.postman_collection.json rename to open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-topics-lineage_examples.postman_collection.json index 4e32b1f61b0..3434b953074 100644 --- a/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-topics-lienage_examples.postman_collection.json +++ b/open-metadata-implementation/access-services/data-engine/docs/samples/collections/DataEngine-topics-lineage_examples.postman_collection.json @@ -1,7 +1,7 @@ { "info": { "_postman_id": "489e39b7-720b-4c6e-9a0d-0dcbfebde4ad", - "name": "Data Engine - Topics lienage examples", + "name": "Data Engine - Topics lineage examples", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ @@ -256,8 +256,7 @@ "{{user-id}}", "processes" ] - }, - "description": "Create a SoftwareServerCapability entity to represent the Asset Manager." + } }, "response": [] }, @@ -297,8 +296,7 @@ "{{user-id}}", "lineage-mappings" ] - }, - "description": "Create a SoftwareServerCapability entity to represent the Asset Manager." + } }, "response": [] }, @@ -393,8 +391,7 @@ "{{user-id}}", "lineage-mappings" ] - }, - "description": "Create a SoftwareServerCapability entity to represent the Asset Manager." + } }, "response": [] }, diff --git a/open-metadata-implementation/access-services/data-engine/docs/samples/events/DataEngine_upsert_events.txt b/open-metadata-implementation/access-services/data-engine/docs/samples/events/DataEngine_upsert_events.txt index 44aa48b847b..17689d2fc29 100644 --- a/open-metadata-implementation/access-services/data-engine/docs/samples/events/DataEngine_upsert_events.txt +++ b/open-metadata-implementation/access-services/data-engine/docs/samples/events/DataEngine_upsert_events.txt @@ -1,4 +1,4 @@ -{"class":"DataEngineRegistrationEvent","eventVersionId":1,"dataEngineEventType":"DATA_ENGINE_REGISTRATION_EVENT","userId":"OMAGServer","softwareServerCapability":{"qualifiedName":"(organization)=Company::(project)=ExternalDataPlatform","displayName":"ExternalDataEngine","description":"Requesting to register external data engine capability","engineType":"DataEngine","engineVersion":"1","enginePatchLevel":"1","vendor":"Company","version":"1","source":"source"}} +{"class":"DataEngineRegistrationEvent","eventVersionId":1,"dataEngineEventType":"DATA_ENGINE_REGISTRATION_EVENT","userId":"OMAGServer","engine":{"qualifiedName":"(organization)=Company::(project)=ExternalDataPlatform","displayName":"ExternalDataEngine","description":"Requesting to register external data engine capability","engineType":"DataEngine","engineVersion":"1","enginePatchLevel":"1","vendor":"Company","version":"1","source":"source"}} {"class":"SchemaTypeEvent","eventVersionId":1,"dataEngineEventType":"SCHEMA_TYPE_EVENT","userId":"OMAGServer","externalSourceName":"(organization)=Company::(project)=ExternalDataPlatform","schema":{"qualifiedName":"extern:virtual:asset","displayName":"EMPLOYEE","columns":[{"qualifiedName":"extern:virtual:asset:schema-attribute-1","displayName":"DEPT","elementPosition":0},{"qualifiedName":"extern:virtual:asset:schema-attribute-2","displayName":"EMPSTATUS","elementPosition":0}]}} {"class":"DataFileEvent","eventVersionId":1,"dataEngineEventType":"DATA_FILE_EVENT","userId":"OMAGServer","externalSourceName":"(organization)=Company::(project)=ExternalDataPlatform","file":{"fileType":"CSVFile","qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=names.csv","displayName":"names.csv","pathName":"/data/files/minimal/names.csv","networkAddress":"localhost","additionalProperties":{"include_for_business_lineage":true,"path":"/data/files/minimal","store_type":"Local"},"columns":[{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=names.csv::(data_file_record)=names::(data_file_field)=Id","displayName":"Id","additionalProperties":{"odbc_type":"BIGINT"},"allowDuplicates":true,"deprecated":false,"nullable":false,"position":1,"minCardinality":1,"maxCardinality":1},{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=names.csv::(data_file_record)=names::(data_file_field)=First","displayName":"First","additionalProperties":{"odbc_type":"VARCHAR"},"allowDuplicates":true,"deprecated":false,"nullable":true,"position":2,"minCardinality":0,"maxCardinality":1},{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=names.csv::(data_file_record)=names::(data_file_field)=Last","displayName":"Last","additionalProperties":{"odbc_type":"VARCHAR"},"allowDuplicates":true,"deprecated":false,"nullable":true,"position":3,"minCardinality":0,"maxCardinality":1},{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=names.csv::(data_file_record)=names::(data_file_field)=Location","displayName":"Location","additionalProperties":{"odbc_type":"VARCHAR"},"allowDuplicates":true,"deprecated":false,"nullable":false,"position":4,"minCardinality":1,"maxCardinality":1}]}} {"class":"DataFileEvent","eventVersionId":1,"dataEngineEventType":"DATA_FILE_EVENT","userId":"OMAGServer","externalSourceName":"(organization)=Company::(project)=ExternalDataPlatform","file":{"fileType":"CSVFile","qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=emplname.csv","displayName":"emplname.csv","pathName":"/data/files/minimal/emplname.csv","networkAddress":"localhost","additionalProperties":{"include_for_business_lineage":true,"path":"/data/files/minimal","store_type":"Local"},"columns":[{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=emplname.csv::(data_file_record)=emplname::(data_file_field)=EMPID","displayName":"EMPID","additionalProperties":{"odbc_type":"BIGINT"},"allowDuplicates":true,"deprecated":false,"nullable":false,"position":1,"minCardinality":1,"maxCardinality":1},{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=emplname.csv::(data_file_record)=emplname::(data_file_field)=FNAME","displayName":"FNAME","additionalProperties":{"odbc_type":"VARCHAR"},"allowDuplicates":true,"deprecated":false,"nullable":true,"position":2,"minCardinality":0,"maxCardinality":1},{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=emplname.csv::(data_file_record)=emplname::(data_file_field)=LNAME","displayName":"LNAME","additionalProperties":{"odbc_type":"VARCHAR"},"allowDuplicates":true,"deprecated":false,"nullable":true,"position":3,"minCardinality":0,"maxCardinality":1},{"qualifiedName":"(host)=HOST::(data_file_folder)=/::(data_file_folder)=data::(data_file_folder)=files::(data_file_folder)=minimal::(data_file)=emplname.csv::(data_file_record)=emplname::(data_file_field)=LOCID","displayName":"LOCID","additionalProperties":{"odbc_type":"VARCHAR"},"allowDuplicates":true,"deprecated":false,"nullable":false,"position":4,"minCardinality":1,"maxCardinality":1}]}} diff --git a/open-metadata-implementation/access-services/data-engine/docs/scenarios/README.md b/open-metadata-implementation/access-services/data-engine/docs/scenarios/README.md index 3fa1afebd0d..907a197fa81 100644 --- a/open-metadata-implementation/access-services/data-engine/docs/scenarios/README.md +++ b/open-metadata-implementation/access-services/data-engine/docs/scenarios/README.md @@ -8,8 +8,8 @@ Below is the list of tasks supported by Data Engine OMAS. #### External Tool registration -Typically the first action to take for an external tool is to [register](register-external-tool.md) as a -[software-server-capability](../../../docs/concepts/server-capabilities). +Typically, the first action to take for an external tool is to [register](register-external-tool.md) as an +[engine](../../../docs/concepts/server-capabilities). #### External Tool lookup diff --git a/open-metadata-implementation/access-services/data-engine/docs/scenarios/lookup-registration-tool.md b/open-metadata-implementation/access-services/data-engine/docs/scenarios/lookup-registration-tool.md index d9c0db9bc78..a3fbd9dcdbd 100644 --- a/open-metadata-implementation/access-services/data-engine/docs/scenarios/lookup-registration-tool.md +++ b/open-metadata-implementation/access-services/data-engine/docs/scenarios/lookup-registration-tool.md @@ -3,7 +3,7 @@ # Lookup an external tool -An external tool can lookup for the software server capability entity created at registration step. +An external tool can lookup for the engine entity created at registration step. Request to use is: [lookup-external-tool](../../data-engine-server/docs/scenarios/lookup-registration.md) diff --git a/open-metadata-implementation/access-services/data-engine/docs/scenarios/register-external-tool.md b/open-metadata-implementation/access-services/data-engine/docs/scenarios/register-external-tool.md index 75a4f30f5da..534946c4c0f 100644 --- a/open-metadata-implementation/access-services/data-engine/docs/scenarios/register-external-tool.md +++ b/open-metadata-implementation/access-services/data-engine/docs/scenarios/register-external-tool.md @@ -5,7 +5,7 @@ For an external tool to submit metadata to Data Engine OMAS it needs to first register. -This implies creating a SoftwareServerCapability entity with the properties defining the external tool. +This implies creating an Engine entity with the properties defining the external tool. Request to use is: [register-external-tool](../../data-engine-server/docs/scenarios/register-data-engine-tool.md) diff --git a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/README.md b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/README.md index 360169c4e0c..6624cacdccc 100644 --- a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/README.md +++ b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/README.md @@ -13,7 +13,7 @@ In essence, this is to carry out the following: 1. Setup connectivity to a [Data Engine OMAS](../../../access-services/data-engine). (See below section [Configuring interface type for Data Engine OMAS](#configuring-interface-type-for-data-engine-omas)) 1. Setup connectivity to a data engine, through the configured data engine connection of a [Data Engine Proxy Connector](../data-engine-proxy-connector). -1. Ensure a `SoftwareServerCapability` exists to represent this data engine via the Data Engine OMAS. +1. Ensure an `Engine` exists to represent this data engine via the Data Engine OMAS. 1. Poll the data engine every defined interval (60 seconds by default) for any changes: 1. First send any changed `SchemaType`s via the Data Engine OMAS. 1. Then send any changed `PortImplementation`s via the Data Engine OMAS. From 0587951a69c288f736c1454e8161a6bab4f8a10e Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Wed, 19 Oct 2022 10:14:13 +0300 Subject: [PATCH 04/10] DE - FVTs changes for engine refactoring Signed-off-by: Alexandra Bucur --- ...upService.java => EngineSetupService.java} | 42 +++++++------- .../dataengine/RepositoryService.java | 5 +- .../fvt/ConnectionAndEndpointFVT.java | 2 +- .../dataengine/fvt/DataEngineFVT.java | 4 +- .../fvt/DataStoreAndRelationalTableFVT.java | 22 +++---- .../dataengine/fvt/FindFVT.java | 2 +- .../dataengine/fvt/LineageFVT.java | 4 +- .../dataengine/fvt/SoftwareCapabilityFVT.java | 58 +++++++++---------- .../dataengine/fvt/TopicAndEventTypeFVT.java | 9 ++- 9 files changed, 73 insertions(+), 75 deletions(-) rename open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/{SoftwareServerCapabilitySetupService.java => EngineSetupService.java} (60%) diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/SoftwareServerCapabilitySetupService.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/EngineSetupService.java similarity index 60% rename from open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/SoftwareServerCapabilitySetupService.java rename to open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/EngineSetupService.java index 9cf20f78b81..963d4429803 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/SoftwareServerCapabilitySetupService.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/EngineSetupService.java @@ -3,7 +3,7 @@ package org.odpi.openmetadata.accessservices.dataengine; import org.odpi.openmetadata.accessservices.dataengine.client.DataEngineClient; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.frameworks.connectors.ffdc.ConnectorCheckedException; import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; @@ -12,32 +12,32 @@ /** * Generates test data of type SoftwareCapability, and triggers requests via client for aforementioned type */ -public class SoftwareServerCapabilitySetupService { +public class EngineSetupService { - public SoftwareServerCapabilitySetupService() { } + public EngineSetupService() { } /** * Registers an external data engine source. * * @param userId the user which creates the data engine * @param dataEngineOMASClient the data engine client that is used to create the external data engine - * @param softwareServerCapability capability to create. If null, a default will be used + * @param engine capability to create. If null, a default will be used * - * @return software server capability containing sent values + * @return engine containing sent values * * @throws InvalidParameterException one of the parameters is null or invalid. * @throws ConnectorCheckedException there are errors in the initialization of the connector. * @throws PropertyServerException there is a problem retrieving information from the property server(s). * @throws UserNotAuthorizedException the requesting user is not authorized to issue this request. */ - public SoftwareServerCapability createExternalDataEngine(String userId, DataEngineClient dataEngineOMASClient, - SoftwareServerCapability softwareServerCapability) + public Engine createExternalDataEngine(String userId, DataEngineClient dataEngineOMASClient, + Engine engine) throws InvalidParameterException, UserNotAuthorizedException, PropertyServerException, ConnectorCheckedException { - if(softwareServerCapability == null){ - softwareServerCapability = getDefaultSoftwareServerCapability(); + if(engine == null){ + engine = getDefaultEngine(); } - dataEngineOMASClient.createExternalDataEngine(userId, softwareServerCapability); - return softwareServerCapability; + dataEngineOMASClient.createExternalDataEngine(userId, engine); + return engine; } /** @@ -56,16 +56,16 @@ public void deleteExternalDataEngine(String userId, DataEngineClient dataEngineC dataEngineClient.deleteExternalDataEngine(userId, qualifiedName, guid); } - private SoftwareServerCapability getDefaultSoftwareServerCapability(){ - SoftwareServerCapability softwareServerCapability = new SoftwareServerCapability(); - softwareServerCapability.setName("Data Engine Display Name"); - softwareServerCapability.setQualifiedName("DataEngine"); - softwareServerCapability.setDescription("Data Engine Description"); - softwareServerCapability.setEngineType("DataEngine"); - softwareServerCapability.setEngineVersion("1"); - softwareServerCapability.setPatchLevel("2"); - softwareServerCapability.setSource("source"); - return softwareServerCapability; + private Engine getDefaultEngine(){ + Engine engine = new Engine(); + engine.setName("Data Engine Display Name"); + engine.setQualifiedName("DataEngine"); + engine.setDescription("Data Engine Description"); + engine.setEngineType("DataEngine"); + engine.setEngineVersion("1"); + engine.setPatchLevel("2"); + engine.setSource("source"); + return engine; } } diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/RepositoryService.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/RepositoryService.java index 8741f77a1b7..f2cf052e818 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/RepositoryService.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/RepositoryService.java @@ -20,7 +20,6 @@ import org.odpi.openmetadata.repositoryservices.ffdc.exception.RepositoryErrorException; import org.odpi.openmetadata.repositoryservices.ffdc.exception.TypeErrorException; import org.odpi.openmetadata.repositoryservices.ffdc.exception.UserNotAuthorizedException; -import org.odpi.openmetadata.repositoryservices.rest.properties.EntityPropertyFindRequest; import java.util.HashMap; import java.util.List; @@ -120,9 +119,9 @@ public EntityDetail findEntityByQualifiedName(String entityValue, String typeGUI * Find an entity by using the search criteria given as parameter in a call to the LocalRepositoryServicesClient * * @param typeGuid guid of expected type - * @param searchCriteria the property value used to search and identify the software server capability + * @param searchCriteria the property value used to search and identify the engine * - * @return a list of EntityDetails that contain the found software server capability + * @return a list of EntityDetails that contain the found engine */ public List findEntityByPropertyValue(String typeGuid, String searchCriteria) throws UserNotAuthorizedException, FunctionNotSupportedException, InvalidParameterException, RepositoryErrorException, PropertyErrorException, diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/ConnectionAndEndpointFVT.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/ConnectionAndEndpointFVT.java index 07cc7e253cf..0529b5e6ab6 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/ConnectionAndEndpointFVT.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/ConnectionAndEndpointFVT.java @@ -44,7 +44,7 @@ public void deleteConnectionAndEndpoint(String userId, DataEngineClient dataEngi org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); DataFile dataFile = dataStoreAndRelationalTableSetupService.upsertDataFile(userId, dataEngineClient, getDataFile()); // assert Connection diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataEngineFVT.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataEngineFVT.java index ca5e3a78fa6..5b4f76a3753 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataEngineFVT.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataEngineFVT.java @@ -8,7 +8,7 @@ import org.odpi.openmetadata.accessservices.dataengine.LineageSetupService; import org.odpi.openmetadata.accessservices.dataengine.PortSetupService; import org.odpi.openmetadata.accessservices.dataengine.ProcessSetupService; -import org.odpi.openmetadata.accessservices.dataengine.SoftwareServerCapabilitySetupService; +import org.odpi.openmetadata.accessservices.dataengine.EngineSetupService; import org.odpi.openmetadata.accessservices.dataengine.TopicAndEventTypeSetupService; import org.odpi.openmetadata.accessservices.dataengine.model.Attribute; import org.odpi.openmetadata.accessservices.dataengine.model.DataFile; @@ -83,7 +83,7 @@ public DataEngineFVT() { } protected final LineageSetupService lineageSetupService = new LineageSetupService(); - protected final SoftwareServerCapabilitySetupService softwareServerCapabilitySetupServer = new SoftwareServerCapabilitySetupService(); + protected final EngineSetupService engineSetupService = new EngineSetupService(); protected final DataStoreAndRelationalTableSetupService dataStoreAndRelationalTableSetupService = new DataStoreAndRelationalTableSetupService(); protected final ProcessSetupService processSetupService = new ProcessSetupService(); protected final PortSetupService portSetupService = new PortSetupService(); diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataStoreAndRelationalTableFVT.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataStoreAndRelationalTableFVT.java index 762d22d60a0..947db2f5084 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataStoreAndRelationalTableFVT.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/DataStoreAndRelationalTableFVT.java @@ -13,7 +13,7 @@ import org.odpi.openmetadata.accessservices.dataengine.model.DatabaseSchema; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalColumn; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalTable; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.frameworks.connectors.ffdc.ConnectorCheckedException; import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; @@ -46,7 +46,7 @@ public void upsertDatabase(String userId, DataEngineClient dataEngineClient, Rep org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Database database = dataStoreAndRelationalTableSetupService.upsertDatabase(userId, dataEngineClient, null); // assert Database @@ -62,7 +62,7 @@ public void deleteDatabase(String userId, DataEngineClient dataEngineClient, Rep org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Database database = dataStoreAndRelationalTableSetupService.upsertDatabase(userId, dataEngineClient, getDatabaseToDelete()); // assert Database @@ -98,7 +98,7 @@ public void upsertDatabaseSchema(String userId, DataEngineClient dataEngineClien org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Database database = dataStoreAndRelationalTableSetupService.upsertDatabase(userId, dataEngineClient, null); DatabaseSchema databaseSchema = dataStoreAndRelationalTableSetupService.upsertDatabaseSchema(userId, dataEngineClient, null, database.getQualifiedName(), false); @@ -117,7 +117,7 @@ public void deleteDatabaseSchema(String userId, DataEngineClient dataEngineClien org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Database database = dataStoreAndRelationalTableSetupService.upsertDatabase(userId, dataEngineClient, getDatabaseToDelete()); DatabaseSchema databaseSchema = dataStoreAndRelationalTableSetupService.upsertDatabaseSchema(userId, dataEngineClient, getDatabaseSchemaToDelete(), database.getQualifiedName(), false); @@ -151,7 +151,7 @@ public void upsertRelationalTable(String userId, DataEngineClient dataEngineClie org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Database database = dataStoreAndRelationalTableSetupService.upsertDatabase(userId, dataEngineClient, null); DatabaseSchema databaseSchema = dataStoreAndRelationalTableSetupService.upsertDatabaseSchema(userId, dataEngineClient, null, database.getQualifiedName(), false); @@ -194,7 +194,7 @@ public void deleteRelationalTable(String userId, DataEngineClient dataEngineClie org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Database database = dataStoreAndRelationalTableSetupService.upsertDatabase(userId, dataEngineClient, null); DatabaseSchema databaseSchema = dataStoreAndRelationalTableSetupService.upsertDatabaseSchema(userId, dataEngineClient, null, database.getQualifiedName(), false); @@ -245,7 +245,7 @@ public void upsertDataFile(String userId, DataEngineClient dataEngineClient, Rep org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); DataFile dataFile = dataStoreAndRelationalTableSetupService.upsertDataFile(userId, dataEngineClient, null); // assert Data File @@ -285,7 +285,7 @@ public void deleteDataFileAndFileFolder(String userId, DataEngineClient dataEngi org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - SoftwareServerCapability softwareServerCapability = softwareServerCapabilitySetupServer + Engine engine = engineSetupService .createExternalDataEngine(userId, dataEngineClient, null); DataFile dataFile = dataStoreAndRelationalTableSetupService .upsertDataFile(userId, dataEngineClient, getDataFileToDelete()); @@ -303,7 +303,7 @@ public void deleteDataFileAndFileFolder(String userId, DataEngineClient dataEngi assertNull(dataFilesToDelete); // delete FileFolder - String fileFolderQualifiedName = softwareServerCapability.getQualifiedName() + "::/to-delete-data-file-pathname"; + String fileFolderQualifiedName = engine.getQualifiedName() + "::/to-delete-data-file-pathname"; List fileFolders = repositoryService.findEntityByPropertyValue(FILE_FOLDER_TYPE_GUID, fileFolderQualifiedName); assertNotNull(fileFolders); assertEquals(1, fileFolders.size()); @@ -349,7 +349,7 @@ public void deleteSchemaType(String userId, DataEngineClient dataEngineClient, R org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); DataFile dataFile = dataStoreAndRelationalTableSetupService .upsertDataFile(userId, dataEngineClient, getDataFileToDelete()); diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/FindFVT.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/FindFVT.java index db2445f525d..885b12f6006 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/FindFVT.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/FindFVT.java @@ -38,7 +38,7 @@ public void find(String userId, DataEngineClient dataEngineClient, RepositorySer org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); DataFile dataFile = dataStoreAndRelationalTableSetupService.upsertDataFile(userId, dataEngineClient, null); GUIDListResponse guidListResponse = findSetupService.find(userId, dataEngineClient, dataFile.getQualifiedName(), diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/LineageFVT.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/LineageFVT.java index ebb79ddba5e..6f5991f9de9 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/LineageFVT.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/LineageFVT.java @@ -52,7 +52,7 @@ public void verifyLineageMappingsForAJobProcess(String userId, DataEngineClient FunctionNotSupportedException, org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); List processes = lineageSetupService.createJobProcessWithContent(userId, dataEngineClient); for(Process process : processes){ validate(process, repositoryService); @@ -199,7 +199,7 @@ public void verifyHighLevelLineage(String userId, DataEngineClient dataEngineCli org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Database database = dataStoreAndRelationalTableSetupService.upsertDatabase(userId, dataEngineClient, null); List databases = repositoryService.findEntityByPropertyValue(DATABASE_TYPE_GUID, database.getQualifiedName()); assertDatabase(database, databases); diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/SoftwareCapabilityFVT.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/SoftwareCapabilityFVT.java index 812b0ade065..208b96a22da 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/SoftwareCapabilityFVT.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/SoftwareCapabilityFVT.java @@ -7,7 +7,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.odpi.openmetadata.accessservices.dataengine.RepositoryService; import org.odpi.openmetadata.accessservices.dataengine.client.DataEngineClient; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.frameworks.connectors.ffdc.ConnectorCheckedException; import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; @@ -38,11 +38,11 @@ public void registerExternalTool(String userId, DataEngineClient dataEngineClien org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - SoftwareServerCapability softwareServerCapability = softwareServerCapabilitySetupServer + Engine engine = engineSetupService .createExternalDataEngine(userId, dataEngineClient, null); List entityDetails = repositoryService.findEntityByPropertyValue(SOFTWARE_SERVER_CAPABILITY_TYPE_GUID, - softwareServerCapability.getQualifiedName()); + engine.getQualifiedName()); if (entityDetails == null || entityDetails.isEmpty()) { fail(); } @@ -50,13 +50,13 @@ public void registerExternalTool(String userId, DataEngineClient dataEngineClien assertEquals(1, entityDetails.size()); EntityDetail entity = entityDetails.get(0); - assertEquals(softwareServerCapability.getDescription(), entity.getProperties().getPropertyValue(DESCRIPTION).valueAsString()); - assertEquals(softwareServerCapability.getName(), entity.getProperties().getPropertyValue(NAME).valueAsString()); - assertEquals(softwareServerCapability.getEngineVersion(), entity.getProperties().getPropertyValue(CAPABILITY_VERSION).valueAsString()); - assertEquals(softwareServerCapability.getEngineType(), entity.getProperties().getPropertyValue(CAPABILITY_TYPE).valueAsString()); - assertEquals(softwareServerCapability.getPatchLevel(), entity.getProperties().getPropertyValue(PATCH_LEVEL).valueAsString()); - assertEquals(softwareServerCapability.getQualifiedName(), entity.getProperties().getPropertyValue(QUALIFIED_NAME).valueAsString()); - assertEquals(softwareServerCapability.getSource(), entity.getProperties().getPropertyValue(SOURCE).valueAsString()); + assertEquals(engine.getDescription(), entity.getProperties().getPropertyValue(DESCRIPTION).valueAsString()); + assertEquals(engine.getName(), entity.getProperties().getPropertyValue(NAME).valueAsString()); + assertEquals(engine.getEngineVersion(), entity.getProperties().getPropertyValue(CAPABILITY_VERSION).valueAsString()); + assertEquals(engine.getEngineType(), entity.getProperties().getPropertyValue(CAPABILITY_TYPE).valueAsString()); + assertEquals(engine.getPatchLevel(), entity.getProperties().getPropertyValue(PATCH_LEVEL).valueAsString()); + assertEquals(engine.getQualifiedName(), entity.getProperties().getPropertyValue(QUALIFIED_NAME).valueAsString()); + assertEquals(engine.getSource(), entity.getProperties().getPropertyValue(SOURCE).valueAsString()); } @ParameterizedTest @@ -67,39 +67,39 @@ public void deleteExternalTool(String userId, DataEngineClient dataEngineClient, org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException { - SoftwareServerCapability toDeleteSoftwareServerCapability = softwareServerCapabilitySetupServer - .createExternalDataEngine(userId, dataEngineClient, getToDeleteSoftwareServerCapability()); + Engine toDeleteEngine = engineSetupService + .createExternalDataEngine(userId, dataEngineClient, getToDeleteEngine()); List softwareServerCapabilities = repositoryService.findEntityByPropertyValue(SOFTWARE_SERVER_CAPABILITY_TYPE_GUID, - toDeleteSoftwareServerCapability.getQualifiedName()); + toDeleteEngine.getQualifiedName()); if (softwareServerCapabilities == null || softwareServerCapabilities.isEmpty()) { fail(); } assertEquals(1, softwareServerCapabilities.size()); - EntityDetail softwareServerCapabilityAsEntityDetail = softwareServerCapabilities.get(0); - softwareServerCapabilitySetupServer.deleteExternalDataEngine(userId, dataEngineClient, - softwareServerCapabilityAsEntityDetail.getProperties().getPropertyValue(QUALIFIED_NAME).valueAsString(), - softwareServerCapabilityAsEntityDetail.getGUID()); + EntityDetail engineAsEntityDetail = softwareServerCapabilities.get(0); + engineSetupService.deleteExternalDataEngine(userId, dataEngineClient, + engineAsEntityDetail.getProperties().getPropertyValue(QUALIFIED_NAME).valueAsString(), + engineAsEntityDetail.getGUID()); List deletedSoftwareServerCapabilities = repositoryService.findEntityByPropertyValue(SOFTWARE_SERVER_CAPABILITY_TYPE_GUID, - toDeleteSoftwareServerCapability.getQualifiedName()); - // TODO: add verification for to be deleted softwareServerCapability once the method is implemented + toDeleteEngine.getQualifiedName()); + // TODO: add verification for to be deleted engine once the method is implemented // in this moment, a FunctionNotSupportedException is thrown // on searching the so called deleted capability, we still receive it as the result assertNotNull(deletedSoftwareServerCapabilities); } - private SoftwareServerCapability getToDeleteSoftwareServerCapability(){ - SoftwareServerCapability softwareServerCapability = new SoftwareServerCapability(); - softwareServerCapability.setName("To Delete Data Engine Display Name"); - softwareServerCapability.setQualifiedName("ToDeleteDataEngine"); - softwareServerCapability.setDescription("To Delete Data Engine Description"); - softwareServerCapability.setEngineType("ToDeleteDataEngine"); - softwareServerCapability.setEngineVersion("1"); - softwareServerCapability.setPatchLevel("2"); - softwareServerCapability.setSource("source"); - return softwareServerCapability; + private Engine getToDeleteEngine(){ + Engine engine = new Engine(); + engine.setName("To Delete Data Engine Display Name"); + engine.setQualifiedName("ToDeleteDataEngine"); + engine.setDescription("To Delete Data Engine Description"); + engine.setEngineType("ToDeleteDataEngine"); + engine.setEngineVersion("1"); + engine.setPatchLevel("2"); + engine.setSource("source"); + return engine; } } diff --git a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/TopicAndEventTypeFVT.java b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/TopicAndEventTypeFVT.java index a787e3cba1a..980465885cb 100644 --- a/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/TopicAndEventTypeFVT.java +++ b/open-metadata-test/open-metadata-fvt/access-services-fvt/data-engine-fvt/src/test/java/org/odpi/openmetadata/accessservices/dataengine/fvt/TopicAndEventTypeFVT.java @@ -22,7 +22,6 @@ import org.odpi.openmetadata.repositoryservices.ffdc.exception.RepositoryErrorException; import org.odpi.openmetadata.repositoryservices.ffdc.exception.TypeErrorException; -import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.assertNull; @@ -40,7 +39,7 @@ public void upsertTopicWithEventType(String userId, DataEngineClient dataEngineC org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException, InterruptedException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Topic topic = topicAndEventTypeSetupService.upsertTopic(userId, dataEngineClient, topicAndEventTypeSetupService.getTopicWithEventType()); // assert Topic @@ -67,7 +66,7 @@ public void deleteTopic(String userId, DataEngineClient dataEngineClient, Reposi org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException, InterruptedException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Topic topic = topicAndEventTypeSetupService.upsertTopic(userId, dataEngineClient, topicAndEventTypeSetupService.getDeleteTopic()); // assert Topic @@ -88,7 +87,7 @@ public void upserEventType(String userId, DataEngineClient dataEngineClient, Rep org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException, InterruptedException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Topic topic = topicAndEventTypeSetupService.upsertTopic(userId, dataEngineClient, null); EventType eventType = topicAndEventTypeSetupService.upsertEventType(userId, dataEngineClient, null, topic.getQualifiedName()); @@ -111,7 +110,7 @@ public void upsertAndDeleteEventType(String userId, DataEngineClient dataEngineC org.odpi.openmetadata.repositoryservices.ffdc.exception.InvalidParameterException, RepositoryErrorException, PropertyErrorException, TypeErrorException, PagingErrorException, EntityNotKnownException, InterruptedException { - softwareServerCapabilitySetupServer.createExternalDataEngine(userId, dataEngineClient, null); + engineSetupService.createExternalDataEngine(userId, dataEngineClient, null); Topic topic = topicAndEventTypeSetupService.upsertTopic(userId, dataEngineClient, null); EventType eventType = topicAndEventTypeSetupService.upsertEventType(userId, dataEngineClient, topicAndEventTypeSetupService.getDeleteEventType(), topic.getQualifiedName()); From 30a107630ba621bbea874087f39d694670f57dd8 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Wed, 19 Oct 2022 10:14:32 +0300 Subject: [PATCH 05/10] DE - JUnits for engine refactoring and processing state classification Signed-off-by: Alexandra Bucur --- .../client/DataEngineRESTClientTest.java | 30 ++++ .../DataEngineRegistrationHandlerTest.java | 133 +++++++++++++----- .../service/DataEngineRESTServicesTest.java | 82 +++++++++-- .../server/spring/DataEngineResourceTest.java | 17 +++ 4 files changed, 211 insertions(+), 51 deletions(-) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/test/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClientTest.java b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/test/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClientTest.java index 152e50f3376..1f99c42c369 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/test/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClientTest.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/test/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClientTest.java @@ -13,6 +13,7 @@ import org.odpi.openmetadata.adapters.connectors.restclients.RESTClientConnector; import org.odpi.openmetadata.adapters.connectors.restclients.ffdc.exceptions.RESTServerException; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDResponse; +import org.odpi.openmetadata.commonservices.ffdc.rest.PropertiesResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.VoidResponse; import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; @@ -20,6 +21,8 @@ import org.springframework.util.ReflectionUtils; import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -181,6 +184,33 @@ public void deleteEndpoint() throws RESTServerException, InvalidParameterExcepti verify(connector, times(1)).callDeleteRESTCall(eq("deleteEndpoint"), eq(VoidResponse.class), anyString(), any(), any()); } + @Test + public void upsertProcessingState() throws RESTServerException, InvalidParameterException, PropertyServerException, UserNotAuthorizedException { + VoidResponse response = mockVoidResponse(); + + when(connector.callPostRESTCall(eq("upsertProcessingState"), eq(VoidResponse.class), anyString(), any(), any())) + .thenReturn(response); + dataEngineRESTClient.upsertProcessingState(USER_ID, new HashMap<>()); + + verify(connector, times(1)).callPostRESTCall(eq("upsertProcessingState"), eq(VoidResponse.class), anyString(), any(), any()); + } + + + @Test + public void getProcessingState() throws RESTServerException, PropertyServerException { + Map properties = new HashMap<>(); + properties.put("key", 100L); + PropertiesResponse response = new PropertiesResponse(); + response.setProperties(properties); + + when(connector.callGetRESTCall(eq("getProcessingState"), eq(PropertiesResponse.class), anyString(), any(), any(), + any())).thenReturn(response); + dataEngineRESTClient.getProcessingState(USER_ID); + + verify(connector, times(1)).callGetRESTCall(eq("getProcessingState"), + eq(PropertiesResponse.class), anyString(), any(), any(), any()); + } + private GUIDResponse mockGUIDResponse() { GUIDResponse response = new GUIDResponse(); response.setGUID(GUID); diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandlerTest.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandlerTest.java index 785b32fe3ce..36d49151755 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandlerTest.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/handlers/DataEngineRegistrationHandlerTest.java @@ -13,8 +13,8 @@ import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; import org.odpi.openmetadata.accessservices.dataengine.model.DeleteSemantic; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.model.ProcessingState; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; import org.odpi.openmetadata.accessservices.dataengine.server.builders.ExternalDataEnginePropertiesBuilder; import org.odpi.openmetadata.accessservices.dataengine.server.mappers.CommonMapper; import org.odpi.openmetadata.accessservices.dataengine.server.service.ClockService; @@ -23,8 +23,12 @@ import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; import org.odpi.openmetadata.frameworks.connectors.ffdc.UserNotAuthorizedException; +import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.properties.instances.Classification; import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.properties.instances.EntityDetail; import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.properties.instances.InstanceProperties; +import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.properties.instances.MapPropertyValue; +import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.properties.instances.PrimitivePropertyValue; +import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.properties.typedefs.PrimitiveDefCategory; import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.properties.typedefs.TypeDef; import org.odpi.openmetadata.repositoryservices.connectors.stores.metadatacollectionstore.repositoryconnector.OMRSRepositoryHelper; import org.odpi.openmetadata.repositoryservices.ffdc.exception.EntityNotKnownException; @@ -32,6 +36,8 @@ import java.lang.reflect.InvocationTargetException; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -72,7 +78,7 @@ class DataEngineRegistrationHandlerTest { private OMRSRepositoryHelper repositoryHelper; @Mock - private SoftwareCapabilityHandler softwareServerCapabilityHandler; + private SoftwareCapabilityHandler softwareServerCapabilityHandler; @Mock private InvalidParameterHandler invalidParameterHandler; @@ -93,18 +99,18 @@ void before() { void upsertExternalDataEngine_createEntity() throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException { String methodName = "upsertExternalDataEngine"; - SoftwareServerCapability softwareServerCapability = getSoftwareServerCapability(); + Engine engine = getEngine(); when(softwareServerCapabilityHandler.createSoftwareCapability(USER, null, null, ENGINE_TYPE_NAME, null, - softwareServerCapability.getQualifiedName(), - softwareServerCapability.getName(), softwareServerCapability.getDescription(), softwareServerCapability.getEngineType(), - softwareServerCapability.getEngineVersion(), softwareServerCapability.getPatchLevel(), softwareServerCapability.getSource(), - softwareServerCapability.getAdditionalProperties(), null, + engine.getQualifiedName(), + engine.getName(), engine.getDescription(), engine.getEngineType(), + engine.getEngineVersion(), engine.getPatchLevel(), engine.getSource(), + engine.getAdditionalProperties(), null, null, null, null, false, false, null, methodName)).thenReturn(GUID); - String response = registrationHandler.upsertExternalDataEngine(USER, softwareServerCapability); + String response = registrationHandler.upsertExternalDataEngine(USER, engine); assertEquals(GUID, response); verify(invalidParameterHandler, times(1)).validateUserId(USER, methodName); @@ -115,7 +121,7 @@ void upsertExternalDataEngine_createEntity() throws InvalidParameterException, P void upsertExternalDataEngine_updateEntity() throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException { String methodName = "upsertExternalDataEngine"; - SoftwareServerCapability softwareServerCapability = getSoftwareServerCapability(); + Engine engine = getEngine(); EntityDetail entityDetail = Mockito.mock(EntityDetail.class); @@ -132,7 +138,7 @@ void upsertExternalDataEngine_updateEntity() throws InvalidParameterException, P SOFTWARE_SERVER_CAPABILITY_TYPE_GUID, ENGINE_TYPE_NAME, null, true, methodName); - String response = registrationHandler.upsertExternalDataEngine(USER, softwareServerCapability); + String response = registrationHandler.upsertExternalDataEngine(USER, engine); assertEquals(GUID, response); verify(invalidParameterHandler, times(1)).validateUserId(USER, methodName); @@ -153,18 +159,18 @@ void upsertExternalDataEngine_throwsUserNotAuthorizedException() throws Invocati ExternalDataEnginePropertiesBuilder builder = new ExternalDataEnginePropertiesBuilder(QUALIFIED_NAME, NAME, DESCRIPTION, TYPE, VERSION, PATCH_LEVEL, SOURCE, null, repositoryHelper, "serviceName", "serverName"); - SoftwareServerCapability softwareServerCapability = getSoftwareServerCapability(); + Engine engine = getEngine(); when(softwareServerCapabilityHandler.createSoftwareCapability(USER, null, null, ENGINE_TYPE_NAME, null, - softwareServerCapability.getQualifiedName(), softwareServerCapability.getName(), softwareServerCapability.getDescription(), - softwareServerCapability.getEngineType(), softwareServerCapability.getEngineVersion(), softwareServerCapability.getPatchLevel(), - softwareServerCapability.getSource(), softwareServerCapability.getAdditionalProperties(), + engine.getQualifiedName(), engine.getName(), engine.getDescription(), + engine.getEngineType(), engine.getEngineVersion(), engine.getPatchLevel(), + engine.getSource(), engine.getAdditionalProperties(), null, null, null, null, false, false, null, methodName)).thenThrow(mockedException); UserNotAuthorizedException thrown = assertThrows(UserNotAuthorizedException.class, () -> - registrationHandler.upsertExternalDataEngine(USER, softwareServerCapability)); + registrationHandler.upsertExternalDataEngine(USER, engine)); assertTrue(thrown.getMessage().contains("OMAS-DATA-ENGINE-404-001 ")); } @@ -224,16 +230,16 @@ private void mockEntityTypeDef() { } @Test - void createDataEngineClassification() throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException, EntityNotKnownException { - String methodName = "createDataEngineClassification"; + void upsertProcessingStateClassification() throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException, EntityNotKnownException { + String methodName = "upsertProcessingStateClassification"; ProcessingState processingState = getProcessingState(); InstanceProperties properties = new InstanceProperties(); EntityDetail entityDetail = mock(EntityDetail.class); - SoftwareServerCapability softwareServerCapability = getSoftwareServerCapability(); + Engine engine = getEngine(); doReturn(GUID).when(registrationHandler).getExternalDataEngine(USER, - softwareServerCapability.getQualifiedName()); + engine.getQualifiedName()); when(repositoryHelper.addLongMapPropertyToInstance(null, properties, SYNC_DATES_BY_KEY, processingState.getSyncDatesByKey(), methodName)).thenReturn(properties); @@ -250,7 +256,7 @@ void createDataEngineClassification() throws InvalidParameterException, Property PROCESSING_STATE_CLASSIFICATION_TYPE_NAME, properties, true, false, false, null, methodName); - registrationHandler.createDataEngineClassification(USER, processingState, softwareServerCapability.getQualifiedName()); + registrationHandler.upsertProcessingStateClassification(USER, processingState, engine.getQualifiedName()); verify(invalidParameterHandler, times(1)).validateUserId(USER, methodName); verify(repositoryHelper, times(1)).addLongMapPropertyToInstance(null, properties, @@ -262,21 +268,21 @@ void createDataEngineClassification() throws InvalidParameterException, Property } @Test - void createDataEngineClassification_throwsUserNotAuthorizedException() throws UserNotAuthorizedException, + void upsertProcessingStateClassification_throwsUserNotAuthorizedException() throws UserNotAuthorizedException, PropertyServerException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvalidParameterException { - String methodName = "createDataEngineClassification"; + String methodName = "upsertProcessingStateClassification"; ProcessingState processingState = getProcessingState(); InstanceProperties properties = new InstanceProperties(); EntityDetail entityDetail = mock(EntityDetail.class); - SoftwareServerCapability softwareServerCapability = getSoftwareServerCapability(); + Engine engine = getEngine(); doReturn(GUID).when(registrationHandler).getExternalDataEngine(USER, - softwareServerCapability.getQualifiedName()); + engine.getQualifiedName()); when(softwareServerCapabilityHandler.getEntityByValue(USER, QUALIFIED_NAME, CommonMapper.QUALIFIED_NAME_PROPERTY_NAME, SOFTWARE_SERVER_CAPABILITY_TYPE_GUID, ENGINE_TYPE_NAME, @@ -295,30 +301,85 @@ void createDataEngineClassification_throwsUserNotAuthorizedException() throws Us null, methodName); UserNotAuthorizedException thrown = assertThrows(UserNotAuthorizedException.class, () -> - registrationHandler.createDataEngineClassification(USER, processingState, softwareServerCapability.getQualifiedName())); + registrationHandler.upsertProcessingStateClassification(USER, processingState, engine.getQualifiedName())); assertTrue(thrown.getMessage().contains("OMAS-DATA-ENGINE-404-001 ")); } + @Test + void getProcessingStateClassification() throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException, EntityNotKnownException { + String methodName = "getProcessingStateClassification"; + EntityDetail entityDetail = mock(EntityDetail.class); + + ProcessingState processingState = getProcessingState(); + Map newSyncDatesByKey = processingState.getSyncDatesByKey(); + Classification classification = getClassification(newSyncDatesByKey); + + Engine engine = getEngine(); + + doReturn(GUID).when(registrationHandler).getExternalDataEngine(USER, engine.getQualifiedName()); + + when(softwareServerCapabilityHandler.getEntityByValue(USER, QUALIFIED_NAME, CommonMapper.QUALIFIED_NAME_PROPERTY_NAME, + SOFTWARE_SERVER_CAPABILITY_TYPE_GUID, ENGINE_TYPE_NAME, + Collections.singletonList(CommonMapper.QUALIFIED_NAME_PROPERTY_NAME), false, + false, null, methodName)).thenReturn(entityDetail); + + when(entityDetail.getClassifications()).thenReturn(Collections.singletonList(classification)); + + ProcessingState result = registrationHandler.getProcessingStateClassification(USER, QUALIFIED_NAME); + assertEquals(result, processingState); + + verify(invalidParameterHandler, times(1)).validateUserId(USER, methodName); + } + + private Classification getClassification(Map newSyncDatesByKey) { + InstanceProperties resultingProperties = new InstanceProperties(); + for (String mapPropertyName : newSyncDatesByKey.keySet()) + { + Long mapPropertyValue = newSyncDatesByKey.get(mapPropertyName); + + if (mapPropertyValue != null) + { + PrimitivePropertyValue primitivePropertyValue = new PrimitivePropertyValue(); + primitivePropertyValue.setPrimitiveDefCategory(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_LONG); + primitivePropertyValue.setPrimitiveValue(mapPropertyValue); + primitivePropertyValue.setTypeName(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_LONG.getName()); + primitivePropertyValue.setTypeGUID(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_LONG.getGUID()); + resultingProperties.setProperty(mapPropertyName, primitivePropertyValue); + } + } + + MapPropertyValue mapPropertyValue = new MapPropertyValue(); + mapPropertyValue.setMapValues(resultingProperties); + InstanceProperties properties = new InstanceProperties(); + properties.setProperty(SYNC_DATES_BY_KEY, mapPropertyValue); + + Classification classification = new Classification(); + classification.setName(PROCESSING_STATE_CLASSIFICATION_TYPE_NAME); + classification.setProperties(properties); + return classification; + } - private SoftwareServerCapability getSoftwareServerCapability() { + private Engine getEngine() { - SoftwareServerCapability softwareServerCapability = new SoftwareServerCapability(); + Engine engine = new Engine(); - softwareServerCapability.setQualifiedName(QUALIFIED_NAME); - softwareServerCapability.setName(NAME); - softwareServerCapability.setDescription(DESCRIPTION); - softwareServerCapability.setEngineType(TYPE); - softwareServerCapability.setEngineVersion(VERSION); - softwareServerCapability.setPatchLevel(PATCH_LEVEL); - softwareServerCapability.setSource(SOURCE); + engine.setQualifiedName(QUALIFIED_NAME); + engine.setName(NAME); + engine.setDescription(DESCRIPTION); + engine.setEngineType(TYPE); + engine.setEngineVersion(VERSION); + engine.setPatchLevel(PATCH_LEVEL); + engine.setSource(SOURCE); - return softwareServerCapability; + return engine; } private ProcessingState getProcessingState() { ProcessingState processingState = new ProcessingState(); - processingState.setSyncDatesByKey(Collections.EMPTY_MAP); + Map syncKeys = new HashMap<>(); + syncKeys.put("key", 100L); + processingState.setSyncDatesByKey(syncKeys); return processingState; } } \ No newline at end of file diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServicesTest.java b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServicesTest.java index 141708f5e32..d9dc9e6a40a 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServicesTest.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServicesTest.java @@ -28,9 +28,10 @@ import org.odpi.openmetadata.accessservices.dataengine.model.PortImplementation; import org.odpi.openmetadata.accessservices.dataengine.model.PortType; import org.odpi.openmetadata.accessservices.dataengine.model.Process; +import org.odpi.openmetadata.accessservices.dataengine.model.ProcessingState; import org.odpi.openmetadata.accessservices.dataengine.model.RelationalTable; import org.odpi.openmetadata.accessservices.dataengine.model.SchemaType; -import org.odpi.openmetadata.accessservices.dataengine.model.SoftwareServerCapability; +import org.odpi.openmetadata.accessservices.dataengine.model.Engine; import org.odpi.openmetadata.accessservices.dataengine.model.Topic; import org.odpi.openmetadata.accessservices.dataengine.model.UpdateSemantic; import org.odpi.openmetadata.accessservices.dataengine.rest.DataEngineRegistrationRequestBody; @@ -43,6 +44,7 @@ import org.odpi.openmetadata.accessservices.dataengine.rest.PortAliasRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.PortImplementationRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessRequestBody; +import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessingStateRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.RelationalTableRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.SchemaTypeRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.TopicRequestBody; @@ -61,6 +63,7 @@ import org.odpi.openmetadata.accessservices.dataengine.server.handlers.DataEngineTopicHandler; import org.odpi.openmetadata.commonservices.ffdc.RESTExceptionHandler; import org.odpi.openmetadata.commonservices.ffdc.rest.GUIDResponse; +import org.odpi.openmetadata.commonservices.ffdc.rest.PropertiesResponse; import org.odpi.openmetadata.commonservices.ffdc.rest.VoidResponse; import org.odpi.openmetadata.frameworks.connectors.ffdc.InvalidParameterException; import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; @@ -87,6 +90,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -229,7 +233,7 @@ void createExternalDataEngine() throws InvalidParameterException, PropertyServer UserNotAuthorizedException { mockRegistrationHandler("createExternalDataEngine"); - when(dataEngineRegistrationHandler.upsertExternalDataEngine(USER, getSoftwareServerCapability())).thenReturn(EXTERNAL_SOURCE_DE_GUID); + when(dataEngineRegistrationHandler.upsertExternalDataEngine(USER, getEngine())).thenReturn(EXTERNAL_SOURCE_DE_GUID); DataEngineRegistrationRequestBody requestBody = mockDataEngineRegistrationRequestBody(); @@ -251,7 +255,7 @@ void createExternalDataEngine_ResponseWithCapturedInvalidParameterException() th mockRegistrationHandler(methodName); InvalidParameterException mockedException = mockException(InvalidParameterException.class, methodName); - when(dataEngineRegistrationHandler.upsertExternalDataEngine(USER, getSoftwareServerCapability())).thenThrow(mockedException); + when(dataEngineRegistrationHandler.upsertExternalDataEngine(USER, getEngine())).thenThrow(mockedException); DataEngineRegistrationRequestBody requestBody = mockDataEngineRegistrationRequestBody(); @@ -273,7 +277,7 @@ void createExternalDataEngine_ResponseWithCapturedUserNotAuthorizedException() t mockRegistrationHandler(methodName); UserNotAuthorizedException mockedException = mockException(UserNotAuthorizedException.class, methodName); - when(dataEngineRegistrationHandler.upsertExternalDataEngine(USER, getSoftwareServerCapability())).thenThrow(mockedException); + when(dataEngineRegistrationHandler.upsertExternalDataEngine(USER, getEngine())).thenThrow(mockedException); DataEngineRegistrationRequestBody requestBody = mockDataEngineRegistrationRequestBody(); @@ -1343,6 +1347,47 @@ void deleteEventType_withGuid() throws InvalidParameterException, PropertyServer GUID, QUALIFIED_NAME, EXTERNAL_SOURCE_DE_QUALIFIED_NAME, DeleteSemantic.SOFT); } + @Test + void upsertProcessingState() throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException { + mockRegistrationHandler("upsertProcessingState"); + + ProcessingState processingState = new ProcessingState(); + ProcessingStateRequestBody requestBody = mockProcessingStateRequestBody(processingState); + + doNothing().when(dataEngineRegistrationHandler).upsertProcessingStateClassification(USER, processingState, + EXTERNAL_SOURCE_DE_QUALIFIED_NAME); + + dataEngineRESTServices.upsertProcessingState(USER, SERVER_NAME, requestBody); + + verify(dataEngineRegistrationHandler, times(1)).upsertProcessingStateClassification(USER, + processingState, EXTERNAL_SOURCE_DE_QUALIFIED_NAME); + } + + @Test + void getProcessingState() throws InvalidParameterException, PropertyServerException, UserNotAuthorizedException { + mockRegistrationHandler("getProcessingState"); + Map responseProperties = new HashMap<>(); + responseProperties.put("key", 100L); + PropertiesResponse propertiesResponse = new PropertiesResponse(); + propertiesResponse.setProperties(responseProperties); + + Map classificationProperties = new HashMap<>(); + classificationProperties.put("key", 100L); + ProcessingState processingState = new ProcessingState(); + processingState.setSyncDatesByKey(classificationProperties); + + when(dataEngineRegistrationHandler.getProcessingStateClassification(USER, + EXTERNAL_SOURCE_DE_QUALIFIED_NAME)).thenReturn(processingState); + + PropertiesResponse result = dataEngineRESTServices.getProcessingState(USER, SERVER_NAME, + EXTERNAL_SOURCE_DE_QUALIFIED_NAME); + + assertEquals(result, propertiesResponse); + + verify(dataEngineRegistrationHandler, times(1)).getProcessingStateClassification(USER, + EXTERNAL_SOURCE_DE_QUALIFIED_NAME); + } + private DeleteRequestBody getDeleteRequestBody() { DeleteRequestBody deleteRequestBody = new DeleteRequestBody(); deleteRequestBody.setQualifiedName(QUALIFIED_NAME); @@ -1409,7 +1454,7 @@ private void mockEventTypeHandler(String methodName) throws InvalidParameterExce private DataEngineRegistrationRequestBody mockDataEngineRegistrationRequestBody() { DataEngineRegistrationRequestBody requestBody = new DataEngineRegistrationRequestBody(); - requestBody.setSoftwareServerCapability(getSoftwareServerCapability()); + requestBody.setEngine(getEngine()); return requestBody; } @@ -1420,6 +1465,13 @@ private SchemaTypeRequestBody mockSchemaTypeRequestBody() { return requestBody; } + private ProcessingStateRequestBody mockProcessingStateRequestBody(ProcessingState processingState) { + ProcessingStateRequestBody requestBody = new ProcessingStateRequestBody(); + requestBody.setProcessingState(processingState); + requestBody.setExternalSourceName(EXTERNAL_SOURCE_DE_QUALIFIED_NAME); + return requestBody; + } + private PortImplementationRequestBody mockPortImplementationRequestBody() { PortImplementationRequestBody requestBody = new PortImplementationRequestBody(); requestBody.setPortImplementation(portImplementation); @@ -1451,18 +1503,18 @@ private DataFileRequestBody mockDataFileRequestBody(DataFile dataFile) { return dataFileRequestBody; } - private SoftwareServerCapability getSoftwareServerCapability() { - SoftwareServerCapability softwareServerCapability = new SoftwareServerCapability(); + private Engine getEngine() { + Engine engine = new Engine(); - softwareServerCapability.setQualifiedName(EXTERNAL_SOURCE_DE_QUALIFIED_NAME); - softwareServerCapability.setName(NAME); - softwareServerCapability.setDescription(DESCRIPTION); - softwareServerCapability.setEngineType(TYPE); - softwareServerCapability.setEngineVersion(VERSION); - softwareServerCapability.setPatchLevel(PATCH_LEVEL); - softwareServerCapability.setSource(SOURCE); + engine.setQualifiedName(EXTERNAL_SOURCE_DE_QUALIFIED_NAME); + engine.setName(NAME); + engine.setDescription(DESCRIPTION); + engine.setEngineType(TYPE); + engine.setEngineVersion(VERSION); + engine.setPatchLevel(PATCH_LEVEL); + engine.setSource(SOURCE); - return softwareServerCapability; + return engine; } private DatabaseRequestBody mockDatabaseRequestBody() { diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResourceTest.java b/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResourceTest.java index 1c693299861..1804f8965fb 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResourceTest.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-spring/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/spring/DataEngineResourceTest.java @@ -17,6 +17,7 @@ import org.odpi.openmetadata.accessservices.dataengine.rest.PortImplementationRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessHierarchyRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessRequestBody; +import org.odpi.openmetadata.accessservices.dataengine.rest.ProcessingStateRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.SchemaTypeRequestBody; import org.odpi.openmetadata.accessservices.dataengine.rest.TopicRequestBody; import org.odpi.openmetadata.accessservices.dataengine.server.service.DataEngineRESTServices; @@ -30,6 +31,7 @@ class DataEngineResourceTest { private static final String USER = "user"; private static final String SERVER_NAME = "serverName"; + private static final String DATA_ENGINE = "DataEngine"; @Mock private DataEngineRESTServices dataEngineRestServices; @@ -132,4 +134,19 @@ void testDeleteEventTypes() { verify(dataEngineRestServices, times(1)).deleteEventType(USER, SERVER_NAME, requestBody); } + + @Test + void testUpsertProcessingState() { + ProcessingStateRequestBody requestBody = new ProcessingStateRequestBody(); + dataEngineResource.upsertProcessingState(USER, SERVER_NAME, requestBody); + + verify(dataEngineRestServices, times(1)).upsertProcessingState(USER, SERVER_NAME, requestBody); + } + + @Test + void testGetProcessingState() { + dataEngineResource.getProcessingState(USER, SERVER_NAME, DATA_ENGINE); + + verify(dataEngineRestServices, times(1)).getProcessingState(USER, SERVER_NAME, DATA_ENGINE); + } } \ No newline at end of file From 49cf57f96218e3115094c80899cf74fb8b37b4c8 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Wed, 19 Oct 2022 13:54:00 +0300 Subject: [PATCH 06/10] DE REST Client - avoid null in getProcessingState Signed-off-by: Alexandra Bucur --- .../dataengine/client/DataEngineRESTClient.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java index 8b3ead224d8..0a20b561565 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java @@ -45,6 +45,7 @@ import org.odpi.openmetadata.frameworks.connectors.ffdc.PropertyServerException; import org.odpi.openmetadata.frameworks.connectors.ffdc.UserNotAuthorizedException; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -585,6 +586,9 @@ public Map getProcessingState(String userId) throws PropertyServer PropertiesResponse restResult = this.callGetRESTCall(methodName, PropertiesResponse.class, serverPlatformRootURL + PROCESSING_STATE_URL_TEMPLATE, serverName, userId, externalSourceName); + if(restResult.getProperties().isEmpty()) { + return Collections.emptyMap(); + } return restResult.getProperties().entrySet() .stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> (Long) e.getValue())); From 1bcf59919bde1fdf3880b222492b18ebbfe43010 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Thu, 20 Oct 2022 19:05:00 +0300 Subject: [PATCH 07/10] DE REST Client - avoid null in getProcessingState Signed-off-by: Alexandra Bucur --- .../data-engine/data-engine-client/build.gradle | 1 + .../access-services/data-engine/data-engine-client/pom.xml | 5 +++++ .../dataengine/client/DataEngineRESTClient.java | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle b/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle index 026ea2face8..f7845326d53 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle @@ -17,6 +17,7 @@ dependencies { implementation project(':open-metadata-implementation:repository-services:repository-services-apis') implementation project(':open-metadata-implementation:adapters:open-connectors:rest-client-connectors:rest-client-connectors-api') implementation project(':open-metadata-implementation:repository-services:repository-services-apis') + implementation 'org.apache.commons:commons-collections4' implementation 'org.springframework:spring-core' implementation 'org.apache.commons:commons-collections4' compileOnly 'com.fasterxml.jackson.core:jackson-annotations' diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/pom.xml b/open-metadata-implementation/access-services/data-engine/data-engine-client/pom.xml index 5c2022bd9a1..8568bb488a0 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/pom.xml +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/pom.xml @@ -65,6 +65,11 @@ rest-client-connectors-api + + org.apache.commons + commons-collections4 + + org.springframework spring-core diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java index 0a20b561565..bd8b9536eab 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java @@ -2,6 +2,7 @@ /* Copyright Contributors to the ODPi Egeria project. */ package org.odpi.openmetadata.accessservices.dataengine.client; +import org.apache.commons.collections4.MapUtils; import org.odpi.openmetadata.accessservices.dataengine.model.DataFile; import org.odpi.openmetadata.accessservices.dataengine.model.Database; import org.odpi.openmetadata.accessservices.dataengine.model.DatabaseSchema; @@ -586,7 +587,7 @@ public Map getProcessingState(String userId) throws PropertyServer PropertiesResponse restResult = this.callGetRESTCall(methodName, PropertiesResponse.class, serverPlatformRootURL + PROCESSING_STATE_URL_TEMPLATE, serverName, userId, externalSourceName); - if(restResult.getProperties().isEmpty()) { + if(MapUtils.isEmpty(restResult.getProperties())) { return Collections.emptyMap(); } return restResult.getProperties().entrySet() From 57b48f26c8f39bc49f6ed4d65857f58d0e621e53 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Fri, 21 Oct 2022 14:51:58 +0300 Subject: [PATCH 08/10] DE Proxy Service - revert processing state to using rules for the connector v1 (no reports) Signed-off-by: Alexandra Bucur --- .../processor/DataEngineProxyService.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java index d9225351da5..86ea0823360 100644 --- a/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java +++ b/open-metadata-implementation/governance-servers/data-engine-proxy-services/data-engine-proxy-services-server/src/main/java/org/odpi/openmetadata/governanceservers/dataengineproxy/processor/DataEngineProxyService.java @@ -100,14 +100,24 @@ public void run() { running.set(true); while (running.get()) { try { + // Start with the last change synchronization date and time + Date changesLastSynced = connector.getChangesLastSynced(); + + // Then look for the oldest change available in the Data Engine since that time + Date oldestSinceSync = connector.getOldestChangeSince(changesLastSynced); Date changesCutoff = new Date(); - Date oldestSinceSync = getProcessingState(); - if(oldestSinceSync != null) { + if (oldestSinceSync == null) { + // If there were no changes since the last sync time, default to the last sync time + oldestSinceSync = changesLastSynced; + } else { + // If there are any changes since that last sync time, calculate a batch window from that oldest + // change to the maximum amount of time to include in a batch long window = oldestSinceSync.getTime() + (dataEngineProxyConfig.getBatchWindowInSeconds() * 1000L); long now = changesCutoff.getTime(); // We will look for changes up to that batch window size or the current moment, whichever is sooner changesCutoff = new Date(Math.min(window, now)); } + ensureSourceNameIsSet(); this.auditLog.logMessage(methodName, @@ -124,7 +134,7 @@ public void run() { upsertLineageMappings(oldestSinceSync, changesCutoff); // Update the timestamp at which changes were last synced - upsertProcessingState(changesCutoff); + connector.setChangesLastSynced(changesCutoff); // Sleep for the poll interval before continuing with the next poll sleep(); From 7f22c0b0665d757bba85acb341fb90691c85f845 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Tue, 8 Nov 2022 09:52:37 +0200 Subject: [PATCH 09/10] DE Proxy Service - fix sonatype-lift findings Signed-off-by: Alexandra Bucur --- .../dataengine/event/DataEngineEventHeader.java | 12 ++++++------ .../event/DataEngineRegistrationEvent.java | 11 +++++++++++ .../dataengine/event/DataFileEvent.java | 12 ++++++++++++ .../dataengine/event/DatabaseEvent.java | 13 +++++++++++++ .../dataengine/event/DatabaseSchemaEvent.java | 12 ++++++++++++ .../dataengine/event/DeleteEvent.java | 11 +++++++++++ .../dataengine/event/EventTypeEvent.java | 12 ++++++++++++ .../accessservices/dataengine/event/FindEvent.java | 12 ++++++++++++ .../dataengine/event/LineageMappingsEvent.java | 11 +++++++++++ .../dataengine/event/PortAliasEvent.java | 11 +++++++++++ .../dataengine/event/PortImplementationEvent.java | 11 +++++++++++ .../dataengine/event/ProcessEvent.java | 11 +++++++++++ .../dataengine/event/ProcessHierarchyEvent.java | 13 ++++++++++++- .../dataengine/event/ProcessListEvent.java | 11 +++++++++++ .../dataengine/event/ProcessingStateEvent.java | 11 +++++++++++ .../dataengine/event/RelationalTableEvent.java | 12 ++++++++++++ .../dataengine/event/SchemaTypeEvent.java | 11 +++++++++++ .../accessservices/dataengine/event/TopicEvent.java | 13 ++++++++++++- .../data-engine/data-engine-client/build.gradle | 1 - .../dataengine/client/DataEngineRESTClient.java | 2 +- 20 files changed, 203 insertions(+), 10 deletions(-) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java index 0a0d15b0adf..8535975897a 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineEventHeader.java @@ -54,15 +54,15 @@ public abstract class DataEngineEventHeader implements Serializable { /** - * Event version ID + * Serial version UID * -- GETTER -- - * Gets the event version ID - * @return the event version ID + * Gets the serial version UID + * @return the serial version UID * -- SETTER -- - * Sets the event version ID - * @param eventVersionId the event version ID + * Sets the serial version UID + * @param serialVersionUID the serial version UID */ - private long eventVersionId = 1L; + private static final long serialVersionUID = 1L; /* different data engine event types */ /** diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java index 6eb58d001ec..57be0d3dc69 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataEngineRegistrationEvent.java @@ -26,6 +26,17 @@ @ToString(callSuper = true) public class DataEngineRegistrationEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * Engine * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataFileEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataFileEvent.java index 05ff645a1ba..27cfa40320d 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataFileEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DataFileEvent.java @@ -26,6 +26,18 @@ @EqualsAndHashCode(callSuper = true) @ToString public class DataFileEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The data file to be created * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseEvent.java index 800ea82b2e9..730e5e271d3 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseEvent.java @@ -25,6 +25,19 @@ @EqualsAndHashCode(callSuper = true) @ToString public class DatabaseEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + + /** * The database to be created * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseSchemaEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseSchemaEvent.java index 825ef59e70f..bf1d0887b32 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseSchemaEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DatabaseSchemaEvent.java @@ -25,6 +25,18 @@ @EqualsAndHashCode(callSuper = true) @ToString public class DatabaseSchemaEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The database schema to be created * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DeleteEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DeleteEvent.java index 7f9832020a6..c0e8d3394a9 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DeleteEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/DeleteEvent.java @@ -26,6 +26,17 @@ @ToString public class DeleteEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The qualified name of the entity * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/EventTypeEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/EventTypeEvent.java index b030ee8543c..8027d7f6860 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/EventTypeEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/EventTypeEvent.java @@ -25,6 +25,18 @@ @EqualsAndHashCode(callSuper = true) @ToString public class EventTypeEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The event type to be created * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/FindEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/FindEvent.java index 2e4b6abee00..a558d0d88bf 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/FindEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/FindEvent.java @@ -26,6 +26,18 @@ @EqualsAndHashCode(callSuper = true) @ToString public class FindEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The find request body * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/LineageMappingsEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/LineageMappingsEvent.java index 6b6dd21316a..18171b83515 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/LineageMappingsEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/LineageMappingsEvent.java @@ -28,6 +28,17 @@ @ToString(callSuper = true) public class LineageMappingsEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The lineage mappings * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortAliasEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortAliasEvent.java index 74c7dffb6b7..df82c6d5969 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortAliasEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortAliasEvent.java @@ -26,6 +26,17 @@ @ToString(callSuper = true) public class PortAliasEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The process qualified name * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortImplementationEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortImplementationEvent.java index 1ae52e903d9..8668f1c2fec 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortImplementationEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/PortImplementationEvent.java @@ -26,6 +26,17 @@ @ToString(callSuper = true) public class PortImplementationEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The process qualified name * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessEvent.java index a72014dc998..ac4be65a58e 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessEvent.java @@ -26,6 +26,17 @@ @ToString(callSuper = true) public class ProcessEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The process * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessHierarchyEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessHierarchyEvent.java index 66123bcb2a2..8cc152c5547 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessHierarchyEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessHierarchyEvent.java @@ -24,7 +24,18 @@ @Setter @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ProcessHierarchyEvent extends DataEngineEventHeader{ +public class ProcessHierarchyEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; /** * The process hierarchy diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessListEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessListEvent.java index da24dd046f7..84d04b564c8 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessListEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessListEvent.java @@ -27,6 +27,17 @@ @ToString(callSuper = true) public class ProcessListEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The failed GUIDs * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java index e9aedac9669..32b17378554 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java @@ -23,6 +23,17 @@ @ToString(callSuper = true) public class ProcessingStateEvent extends DataEngineEventHeader { + /** + * Serial version ID + * -- GETTER -- + * Gets the serial version ID + * @return the serial version ID + * -- SETTER -- + * Sets the serial version ID + * @param serialVersionUID the serial version ID + */ + private long serialVersionUID = 1L; + /** * The processing state. * diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/RelationalTableEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/RelationalTableEvent.java index 610f757d1cb..ce3f9a95faa 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/RelationalTableEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/RelationalTableEvent.java @@ -26,6 +26,18 @@ @EqualsAndHashCode(callSuper = true) @ToString public class RelationalTableEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The relational table to be created * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/SchemaTypeEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/SchemaTypeEvent.java index c382ac9242c..8967a8d19c6 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/SchemaTypeEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/SchemaTypeEvent.java @@ -27,6 +27,17 @@ @ToString(callSuper = true) public class SchemaTypeEvent extends DataEngineEventHeader { + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The port qualified name * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/TopicEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/TopicEvent.java index 4ff66cb6cd2..a470c47fa23 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/TopicEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/TopicEvent.java @@ -9,7 +9,6 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; -import org.odpi.openmetadata.accessservices.dataengine.model.Database; import org.odpi.openmetadata.accessservices.dataengine.model.Topic; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; @@ -26,6 +25,18 @@ @EqualsAndHashCode(callSuper = true) @ToString public class TopicEvent extends DataEngineEventHeader { + + /** + * Serial version UID + * -- GETTER -- + * Gets the serial version UID + * @return the serial version UID + * -- SETTER -- + * Sets the serial version UID + * @param serialVersionUID the serial version UID + */ + private static final long serialVersionUID = 1L; + /** * The topic to be created * -- GETTER -- diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle b/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle index f7845326d53..026ea2face8 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/build.gradle @@ -17,7 +17,6 @@ dependencies { implementation project(':open-metadata-implementation:repository-services:repository-services-apis') implementation project(':open-metadata-implementation:adapters:open-connectors:rest-client-connectors:rest-client-connectors-api') implementation project(':open-metadata-implementation:repository-services:repository-services-apis') - implementation 'org.apache.commons:commons-collections4' implementation 'org.springframework:spring-core' implementation 'org.apache.commons:commons-collections4' compileOnly 'com.fasterxml.jackson.core:jackson-annotations' diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java index bd8b9536eab..cf3df17b382 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-client/src/main/java/org/odpi/openmetadata/accessservices/dataengine/client/DataEngineRESTClient.java @@ -587,7 +587,7 @@ public Map getProcessingState(String userId) throws PropertyServer PropertiesResponse restResult = this.callGetRESTCall(methodName, PropertiesResponse.class, serverPlatformRootURL + PROCESSING_STATE_URL_TEMPLATE, serverName, userId, externalSourceName); - if(MapUtils.isEmpty(restResult.getProperties())) { + if(restResult == null || MapUtils.isEmpty(restResult.getProperties())) { return Collections.emptyMap(); } return restResult.getProperties().entrySet() From 4064c93aa0221c80e0ffc5f69ac2cfb2de429fe7 Mon Sep 17 00:00:00 2001 From: Alexandra Bucur Date: Tue, 8 Nov 2022 11:53:16 +0200 Subject: [PATCH 10/10] DE Proxy Service - fix sonatype-lift findings Signed-off-by: Alexandra Bucur --- .../accessservices/dataengine/event/ProcessingStateEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java index 32b17378554..9f3258668c1 100644 --- a/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java +++ b/open-metadata-implementation/access-services/data-engine/data-engine-api/src/main/java/org/odpi/openmetadata/accessservices/dataengine/event/ProcessingStateEvent.java @@ -32,7 +32,7 @@ public class ProcessingStateEvent extends DataEngineEventHeader { * Sets the serial version ID * @param serialVersionUID the serial version ID */ - private long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; /** * The processing state.