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) { protected T decryptOrNullify(SecurityContext securityContext, T service) {
service if (service.getConnection() != null) {
.getConnection() service
.setConfig(retrieveServiceConnectionConfig(service, authorizer.shouldMaskPasswords(securityContext))); .getConnection()
.setConfig(retrieveServiceConnectionConfig(service, authorizer.shouldMaskPasswords(securityContext)));
}
return service; return service;
} }

View File

@ -1,5 +1,6 @@
package org.openmetadata.service.resources.services.metadata; 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 static org.openmetadata.service.Entity.ADMIN_USER_NAME;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
@ -84,36 +85,32 @@ public class MetadataServiceResource
public static final String FIELDS = "pipelines,owner,tags"; public static final String FIELDS = "pipelines,owner,tags";
@Override @Override
public void initialize(OpenMetadataApplicationConfig config) { public void initialize(OpenMetadataApplicationConfig config) throws IOException {
registerMetadataServices(config); registerMetadataServices(config);
} }
private void registerMetadataServices(OpenMetadataApplicationConfig config) { private void registerMetadataServices(OpenMetadataApplicationConfig config) throws IOException {
try { 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) { if (config.getElasticSearchConfiguration() != null) {
OpenMetadataConnection openMetadataServerConnection = OpenMetadataConnection openMetadataServerConnection =
new OpenMetadataConnectionBuilder(config) new OpenMetadataConnectionBuilder(config)
.build() .build()
.withElasticsSearch(getElasticSearchConnectionSink(config.getElasticSearchConfiguration())); .withElasticsSearch(getElasticSearchConnectionSink(config.getElasticSearchConfiguration()));
MetadataConnection metadataConnection = new MetadataConnection().withConfig(openMetadataServerConnection); MetadataConnection metadataConnection = new MetadataConnection().withConfig(openMetadataServerConnection);
List<MetadataService> servicesList = openMetadataService.setConnection(metadataConnection);
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.");
}
} else { } else {
LOG.error("[MetadataService] Missing Elastic Search Config."); LOG.error("[MetadataService] Missing Elastic Search Config.");
} }
} catch (Exception ex) { repository.setFullyQualifiedName(openMetadataService);
LOG.error("[MetadataService] Error in creating Metadata Services.", ex); 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 @Slf4j
public class MetadataServiceResourceTest extends EntityResourceTest<MetadataService, CreateMetadataService> { public class MetadataServiceResourceTest extends EntityResourceTest<MetadataService, CreateMetadataService> {
public static final String DEFAULT_OPENMETADATA_SERVICE_NAME = "OpenMetadata";
public MetadataServiceResourceTest() { public MetadataServiceResourceTest() {
super( super(
Entity.METADATA_SERVICE, Entity.METADATA_SERVICE,
@ -69,6 +71,12 @@ public class MetadataServiceResourceTest extends EntityResourceTest<MetadataServ
ATLAS_SERVICE_REFERENCE = metadataService.getEntityReference(); 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 @Test
void post_withoutRequiredFields_400_badRequest(TestInfo test) { void post_withoutRequiredFields_400_badRequest(TestInfo test) {
// Create metadata with mandatory serviceType field empty // Create metadata with mandatory serviceType field empty