Fix #12014: Register OpenMetadata as a service when the server starts for the first time (#12015)

This commit is contained in:
Sriharsha Chintalapani 2023-06-16 16:39:55 -07:00 committed by GitHub
parent bc76515a6b
commit 146c56abab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 21 deletions

View File

@ -53,9 +53,11 @@ public abstract class ServiceEntityResource<
}
protected T decryptOrNullify(SecurityContext securityContext, T service) {
service
.getConnection()
.setConfig(retrieveServiceConnectionConfig(service, authorizer.shouldMaskPasswords(securityContext)));
if (service.getConnection() != null) {
service
.getConnection()
.setConfig(retrieveServiceConnectionConfig(service, authorizer.shouldMaskPasswords(securityContext)));
}
return service;
}

View File

@ -1,5 +1,6 @@
package org.openmetadata.service.resources.services.metadata;
import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
import static org.openmetadata.service.Entity.ADMIN_USER_NAME;
import io.swagger.v3.oas.annotations.ExternalDocumentation;
@ -84,36 +85,32 @@ public class MetadataServiceResource
public static final String FIELDS = "pipelines,owner,tags";
@Override
public void initialize(OpenMetadataApplicationConfig config) {
public void initialize(OpenMetadataApplicationConfig config) throws IOException {
registerMetadataServices(config);
}
private void registerMetadataServices(OpenMetadataApplicationConfig config) {
try {
private void registerMetadataServices(OpenMetadataApplicationConfig config) throws IOException {
List<MetadataService> servicesList =
repository.getEntitiesFromSeedData(".*json/data/metadataService/OpenmetadataService.json$");
if (!nullOrEmpty(servicesList)) {
MetadataService openMetadataService = servicesList.get(0);
openMetadataService.setId(UUID.randomUUID());
openMetadataService.setUpdatedBy(ADMIN_USER_NAME);
openMetadataService.setUpdatedAt(System.currentTimeMillis());
if (config.getElasticSearchConfiguration() != null) {
OpenMetadataConnection openMetadataServerConnection =
new OpenMetadataConnectionBuilder(config)
.build()
.withElasticsSearch(getElasticSearchConnectionSink(config.getElasticSearchConfiguration()));
MetadataConnection metadataConnection = new MetadataConnection().withConfig(openMetadataServerConnection);
List<MetadataService> servicesList =
repository.getEntitiesFromSeedData(".*json/data/metadataService/.*\\.json$");
if (servicesList.size() == 1) {
MetadataService service = servicesList.get(0);
service.setId(UUID.randomUUID());
service.setConnection(metadataConnection);
service.setUpdatedBy(ADMIN_USER_NAME);
service.setUpdatedAt(System.currentTimeMillis());
repository.setFullyQualifiedName(service);
repository.createOrUpdate(null, service);
} else {
throw new IOException("Only one Openmetadata Service can be initialized from the Data.");
}
openMetadataService.setConnection(metadataConnection);
} else {
LOG.error("[MetadataService] Missing Elastic Search Config.");
}
} catch (Exception ex) {
LOG.error("[MetadataService] Error in creating Metadata Services.", ex);
repository.setFullyQualifiedName(openMetadataService);
repository.createOrUpdate(null, openMetadataService);
} else {
throw new IOException("Failed to initialize OpenMetadata Service.");
}
}

View File

@ -38,6 +38,8 @@ import org.openmetadata.service.util.TestUtils;
@Slf4j
public class MetadataServiceResourceTest extends EntityResourceTest<MetadataService, CreateMetadataService> {
public static final String DEFAULT_OPENMETADATA_SERVICE_NAME = "OpenMetadata";
public MetadataServiceResourceTest() {
super(
Entity.METADATA_SERVICE,
@ -69,6 +71,12 @@ public class MetadataServiceResourceTest extends EntityResourceTest<MetadataServ
ATLAS_SERVICE_REFERENCE = metadataService.getEntityReference();
}
@Test
void defaultOpenMetadataServiceMustExist(TestInfo test) throws HttpResponseException {
MetadataService service = getEntityByName(DEFAULT_OPENMETADATA_SERVICE_NAME, ADMIN_AUTH_HEADERS);
assertEquals(service.getName(), DEFAULT_OPENMETADATA_SERVICE_NAME);
}
@Test
void post_withoutRequiredFields_400_badRequest(TestInfo test) {
// Create metadata with mandatory serviceType field empty