ATLAS-1198: Spring Framework (v4 with Spring security) over Guice
This commit is contained in:
parent
35c776448c
commit
35e5828fb8
|
|
@ -200,10 +200,6 @@
|
|||
<artifactId>scalap</artifactId>
|
||||
<version>${scala.version}</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka_${scala.binary.version}</artifactId>
|
||||
|
|
|
|||
|
|
@ -19,15 +19,12 @@
|
|||
package org.apache.atlas.falcon.hook;
|
||||
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import org.apache.atlas.AtlasConstants;
|
||||
import org.apache.atlas.falcon.bridge.FalconBridge;
|
||||
import org.apache.atlas.falcon.event.FalconEvent;
|
||||
import org.apache.atlas.falcon.publisher.FalconEventPublisher;
|
||||
import org.apache.atlas.hook.AtlasHook;
|
||||
import org.apache.atlas.notification.NotificationInterface;
|
||||
import org.apache.atlas.notification.NotificationModule;
|
||||
import org.apache.atlas.kafka.NotificationProvider;
|
||||
import org.apache.atlas.notification.hook.HookNotification;
|
||||
import org.apache.atlas.typesystem.Referenceable;
|
||||
import org.apache.falcon.entity.store.ConfigurationStore;
|
||||
|
|
@ -112,8 +109,7 @@ public class FalconHook extends AtlasHook implements FalconEventPublisher {
|
|||
|
||||
STORE = ConfigurationStore.get();
|
||||
|
||||
Injector injector = Guice.createInjector(new NotificationModule());
|
||||
notifInterface = injector.getInstance(NotificationInterface.class);
|
||||
notificationInterface = NotificationProvider.get();
|
||||
|
||||
} catch (Exception e) {
|
||||
LOG.error("Caught exception initializing the falcon hook.", e);
|
||||
|
|
|
|||
|
|
@ -248,10 +248,6 @@
|
|||
<artifactId>scalap</artifactId>
|
||||
<version>${scala.version}</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka_${scala.binary.version}</artifactId>
|
||||
|
|
|
|||
|
|
@ -260,10 +260,6 @@
|
|||
<artifactId>scalap</artifactId>
|
||||
<version>${scala.version}</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka_${scala.binary.version}</artifactId>
|
||||
|
|
|
|||
|
|
@ -35,17 +35,6 @@
|
|||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- Logging -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- apache atlas core dependencies -->
|
||||
<dependency>
|
||||
<groupId>org.apache.atlas</groupId>
|
||||
|
|
@ -230,22 +219,6 @@
|
|||
<artifactId>scalap</artifactId>
|
||||
<version>${scala.version}</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-servlet</artifactId>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-throwingproviders</artifactId>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka_${scala.binary.version}</artifactId>
|
||||
|
|
|
|||
|
|
@ -17,15 +17,14 @@
|
|||
*/
|
||||
package org.apache.atlas.authorize;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.atlas.authorize.simple.AtlasAuthorizationUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
|
||||
public class AtlasAccessRequest {
|
||||
|
||||
private static Logger LOG = LoggerFactory.getLogger(AtlasAccessRequest.class);
|
||||
|
|
@ -39,7 +38,8 @@ public class AtlasAccessRequest {
|
|||
private String clientIPAddress = null;
|
||||
|
||||
public AtlasAccessRequest(HttpServletRequest request, String user, Set<String> userGroups) {
|
||||
this(AtlasAuthorizationUtils.getAtlasResourceType(request.getServletPath()), "*", AtlasAuthorizationUtils
|
||||
// Spring Security 4 Change => request.getServletPath() -> request.getPathInfo()
|
||||
this(AtlasAuthorizationUtils.getAtlasResourceType(request.getPathInfo()), "*", AtlasAuthorizationUtils
|
||||
.getAtlasAction(request.getMethod()), user, userGroups,AtlasAuthorizationUtils.getRequestIpAddress(request));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,21 +113,6 @@
|
|||
<artifactId>joda-time</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-throwingproviders</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.googlecode.json-simple</groupId>
|
||||
<artifactId>json-simple</artifactId>
|
||||
|
|
|
|||
|
|
@ -17,19 +17,16 @@
|
|||
*/
|
||||
package org.apache.atlas;
|
||||
|
||||
import static org.apache.atlas.security.SecurityProperties.TLS_ENABLED;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.ConnectException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ws.rs.HttpMethod;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriBuilder;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.sun.jersey.api.client.Client;
|
||||
import com.sun.jersey.api.client.ClientHandlerException;
|
||||
import com.sun.jersey.api.client.ClientResponse;
|
||||
import com.sun.jersey.api.client.GenericType;
|
||||
import com.sun.jersey.api.client.WebResource;
|
||||
import com.sun.jersey.api.client.config.DefaultClientConfig;
|
||||
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
|
||||
import com.sun.jersey.api.json.JSONConfiguration;
|
||||
import com.sun.jersey.client.urlconnection.URLConnectionClientHandler;
|
||||
import org.apache.atlas.model.metrics.AtlasMetrics;
|
||||
import org.apache.atlas.security.SecureClientUtils;
|
||||
import org.apache.atlas.utils.AuthenticationUtil;
|
||||
|
|
@ -41,16 +38,17 @@ import org.codehaus.jettison.json.JSONObject;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.sun.jersey.api.client.Client;
|
||||
import com.sun.jersey.api.client.ClientHandlerException;
|
||||
import com.sun.jersey.api.client.ClientResponse;
|
||||
import com.sun.jersey.api.client.GenericType;
|
||||
import com.sun.jersey.api.client.WebResource;
|
||||
import com.sun.jersey.api.client.config.DefaultClientConfig;
|
||||
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
|
||||
import com.sun.jersey.api.json.JSONConfiguration;
|
||||
import com.sun.jersey.client.urlconnection.URLConnectionClientHandler;
|
||||
import javax.ws.rs.HttpMethod;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriBuilder;
|
||||
import java.io.IOException;
|
||||
import java.net.ConnectException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.apache.atlas.security.SecurityProperties.TLS_ENABLED;
|
||||
|
||||
public abstract class AtlasBaseClient {
|
||||
public static final String BASE_URI = "api/atlas/";
|
||||
|
|
@ -410,7 +408,7 @@ public abstract class AtlasBaseClient {
|
|||
for (int i = 0; i < getNumberOfRetries(); i++) {
|
||||
WebResource resource = resourceCreator.createResource();
|
||||
try {
|
||||
LOG.debug("Using resource {} for {} times", resource.getURI(), i);
|
||||
LOG.debug("Using resource {} for {} times", resource.getURI(), i + 1);
|
||||
return callAPIWithResource(api, resource, requestObject, JSONObject.class);
|
||||
} catch (ClientHandlerException che) {
|
||||
if (i == (getNumberOfRetries() - 1)) {
|
||||
|
|
|
|||
|
|
@ -20,9 +20,8 @@ package org.apache.atlas;
|
|||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.sun.jersey.api.client.WebResource;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.typesystem.Referenceable;
|
||||
import org.apache.atlas.typesystem.Struct;
|
||||
import org.apache.atlas.typesystem.TypesDef;
|
||||
|
|
@ -36,10 +35,6 @@ import org.apache.atlas.typesystem.types.utils.TypesUtil;
|
|||
import org.apache.commons.configuration.Configuration;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.hadoop.security.UserGroupInformation;
|
||||
import org.codehaus.jackson.annotate.JsonAutoDetect;
|
||||
import org.codehaus.jackson.annotate.JsonIgnore;
|
||||
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
|
||||
import org.codehaus.jackson.map.annotate.JsonSerialize;
|
||||
import org.codehaus.jettison.json.JSONArray;
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
|
|
@ -49,18 +44,10 @@ import org.slf4j.LoggerFactory;
|
|||
import javax.ws.rs.HttpMethod;
|
||||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.NONE;
|
||||
import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONLY;
|
||||
|
||||
/**
|
||||
* Client for metadata.
|
||||
|
|
@ -255,76 +242,6 @@ public class AtlasClient extends AtlasBaseClient {
|
|||
}
|
||||
}
|
||||
|
||||
@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
|
||||
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
|
||||
@JsonIgnoreProperties(ignoreUnknown=true)
|
||||
@XmlRootElement
|
||||
@XmlAccessorType(XmlAccessType.PROPERTY)
|
||||
public static class EntityResult {
|
||||
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||
|
||||
public static final String OP_CREATED = "created";
|
||||
public static final String OP_UPDATED = "updated";
|
||||
public static final String OP_DELETED = "deleted";
|
||||
|
||||
Map<String, List<String>> entities = new HashMap<>();
|
||||
|
||||
public EntityResult() {
|
||||
//For gson
|
||||
}
|
||||
|
||||
public EntityResult(List<String> created, List<String> updated, List<String> deleted) {
|
||||
set(OP_CREATED, created);
|
||||
set(OP_UPDATED, updated);
|
||||
set(OP_DELETED, deleted);
|
||||
}
|
||||
|
||||
public void set(String type, List<String> list) {
|
||||
if (list != null && list.size() > 0) {
|
||||
entities.put(type, list);
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> get(String type) {
|
||||
List<String> list = entities.get(type);
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public Map<String, List<String>> getEntities(){
|
||||
return entities;
|
||||
}
|
||||
|
||||
public void setEntities(Map<String, List<String>> entities){
|
||||
this.entities = entities;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public List<String> getCreatedEntities() {
|
||||
return get(OP_CREATED);
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public List<String> getUpdateEntities() {
|
||||
return get(OP_UPDATED);
|
||||
}
|
||||
|
||||
|
||||
@JsonIgnore
|
||||
public List<String> getDeletedEntities() {
|
||||
return get(OP_DELETED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() { return gson.toJson(this); }
|
||||
|
||||
public static EntityResult fromString(String json) throws AtlasServiceException {
|
||||
return gson.fromJson(json, EntityResult.class);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the given type(meta model)
|
||||
* @param typeAsJson type definition a jaon
|
||||
|
|
@ -470,11 +387,6 @@ public class AtlasClient extends AtlasBaseClient {
|
|||
JSONObject response = callAPIWithBodyAndParams(API.GET_TYPE, null, typeName);
|
||||
String typeJson = response.getString(DEFINITION);
|
||||
return TypesSerialization.fromJson(typeJson);
|
||||
} catch (AtlasServiceException e) {
|
||||
if (Response.Status.NOT_FOUND.equals(e.getStatus())) {
|
||||
return null;
|
||||
}
|
||||
throw e;
|
||||
} catch (JSONException e) {
|
||||
throw new AtlasServiceException(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import org.apache.atlas.model.SearchFilter;
|
|||
import org.apache.atlas.model.discovery.AtlasSearchResult;
|
||||
import org.apache.atlas.model.instance.AtlasClassification;
|
||||
import org.apache.atlas.model.instance.AtlasClassification.AtlasClassifications;
|
||||
import org.apache.atlas.model.instance.AtlasEntity;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
|
||||
import org.apache.atlas.model.instance.EntityMutationResponse;
|
||||
|
|
@ -55,9 +54,14 @@ public class AtlasClientV2 extends AtlasBaseClient {
|
|||
// Type APIs
|
||||
public static final String TYPES_API = BASE_URI + "v2/types/";
|
||||
private static final String TYPEDEFS_API = TYPES_API + "typedefs/";
|
||||
private static final String TYPEDEF_BY_NAME = TYPES_API + "typedef/name/";
|
||||
private static final String TYPEDEF_BY_GUID = TYPES_API + "typedef/guid/";
|
||||
|
||||
private static final String GET_BY_NAME_TEMPLATE = TYPES_API + "%s/name/%s";
|
||||
private static final String GET_BY_GUID_TEMPLATE = TYPES_API + "%s/guid/%s";
|
||||
|
||||
private static final APIInfo GET_TYPEDEF_BY_NAME = new APIInfo(TYPEDEF_BY_NAME, HttpMethod.GET, Response.Status.OK);
|
||||
private static final APIInfo GET_TYPEDEF_BY_GUID = new APIInfo(TYPEDEF_BY_GUID, HttpMethod.GET, Response.Status.OK);
|
||||
private static final APIInfo GET_ALL_TYPE_DEFS = new APIInfo(TYPEDEFS_API, HttpMethod.GET, Response.Status.OK);
|
||||
private static final APIInfo CREATE_ALL_TYPE_DEFS = new APIInfo(TYPEDEFS_API, HttpMethod.POST, Response.Status.OK);
|
||||
private static final APIInfo UPDATE_ALL_TYPE_DEFS = new APIInfo(TYPEDEFS_API, HttpMethod.PUT, Response.Status.OK);
|
||||
|
|
@ -131,6 +135,24 @@ public class AtlasClientV2 extends AtlasBaseClient {
|
|||
return callAPI(GET_ALL_TYPE_DEFS, AtlasTypesDef.class, searchFilter.getParams());
|
||||
}
|
||||
|
||||
public boolean typeWithGuidExists(String guid) {
|
||||
try {
|
||||
callAPI(GET_TYPEDEF_BY_GUID, String.class, null, guid);
|
||||
} catch (AtlasServiceException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean typeWithNameExists(String name) {
|
||||
try {
|
||||
callAPI(GET_TYPEDEF_BY_NAME, String.class, null, name);
|
||||
} catch (AtlasServiceException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public AtlasEnumDef getEnumDefByName(final String name) throws AtlasServiceException {
|
||||
return getTypeDefByName(name, AtlasEnumDef.class);
|
||||
}
|
||||
|
|
@ -389,13 +411,13 @@ public class AtlasClientV2 extends AtlasBaseClient {
|
|||
}
|
||||
|
||||
private <T> String getAtlasPath(Class<T> typeDefClass) {
|
||||
if (typeDefClass.isAssignableFrom(AtlasEnumDef.class)) {
|
||||
if (AtlasEnumDef.class.isAssignableFrom(typeDefClass)) {
|
||||
return "enumdef";
|
||||
} else if (typeDefClass.isAssignableFrom(AtlasEntityDef.class)) {
|
||||
} else if (AtlasEntityDef.class.isAssignableFrom(typeDefClass)) {
|
||||
return "entitydef";
|
||||
} else if (typeDefClass.isAssignableFrom(AtlasClassificationDef.class)) {
|
||||
} else if (AtlasClassificationDef.class.isAssignableFrom(typeDefClass)) {
|
||||
return "classificationdef";
|
||||
} else if (typeDefClass.isAssignableFrom(AtlasStructDef.class)) {
|
||||
} else if (AtlasStructDef.class.isAssignableFrom(typeDefClass)) {
|
||||
return "structdef";
|
||||
}
|
||||
// Code should never reach this point
|
||||
|
|
|
|||
|
|
@ -17,13 +17,13 @@
|
|||
*/
|
||||
package org.apache.atlas;
|
||||
|
||||
import org.apache.atlas.model.instance.GuidMapping;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.type.AtlasType;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.atlas.AtlasClient.EntityResult;
|
||||
import org.apache.atlas.model.instance.GuidMapping;
|
||||
import org.apache.atlas.type.AtlasType;
|
||||
|
||||
/**
|
||||
* Result from creating or updating entities.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import com.sun.jersey.api.client.Client;
|
|||
import com.sun.jersey.api.client.ClientHandlerException;
|
||||
import com.sun.jersey.api.client.ClientResponse;
|
||||
import com.sun.jersey.api.client.WebResource;
|
||||
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.typesystem.Referenceable;
|
||||
import org.apache.atlas.typesystem.json.InstanceSerialization;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
|
|
@ -33,15 +33,14 @@ import org.mockito.MockitoAnnotations;
|
|||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriBuilder;
|
||||
import java.net.ConnectException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriBuilder;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
|
|
@ -94,7 +93,7 @@ public class AtlasClientTest {
|
|||
ClientResponse response = mock(ClientResponse.class);
|
||||
when(response.getStatus()).thenReturn(Response.Status.CREATED.getStatusCode());
|
||||
|
||||
JSONObject jsonResponse = new JSONObject(new AtlasClient.EntityResult(Arrays.asList("id"), null, null).toString());
|
||||
JSONObject jsonResponse = new JSONObject(new EntityResult(Arrays.asList("id"), null, null).toString());
|
||||
when(response.getEntity(String.class)).thenReturn(jsonResponse.toString());
|
||||
when(response.getLength()).thenReturn(jsonResponse.length());
|
||||
String entityJson = InstanceSerialization.toJson(new Referenceable("type"), true);
|
||||
|
|
|
|||
|
|
@ -36,8 +36,8 @@
|
|||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
<groupId>javax.inject</groupId>
|
||||
<artifactId>javax.inject</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
|
@ -65,6 +65,12 @@
|
|||
<artifactId>spring-beans</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
|
|
|
|||
|
|
@ -6,29 +6,33 @@
|
|||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
* <p/>
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p/>
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas;
|
||||
|
||||
package org.apache.atlas.web.listeners;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.google.inject.Binder;
|
||||
@Configuration
|
||||
public class CommonConfiguration {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(CommonConfiguration.class);
|
||||
|
||||
import org.apache.atlas.RepositoryMetadataModule;
|
||||
import org.apache.atlas.repository.audit.EntityAuditRepository;
|
||||
import org.apache.atlas.repository.audit.InMemoryEntityAuditRepository;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
|
||||
public class TestModule extends RepositoryMetadataModule {
|
||||
@Override
|
||||
protected void bindAuditRepository(Binder binder, Configuration configuration) {
|
||||
//Map EntityAuditRepository interface to hbase based implementation
|
||||
binder.bind(EntityAuditRepository.class).to(InMemoryEntityAuditRepository.class).asEagerSingleton();
|
||||
@Bean
|
||||
public org.apache.commons.configuration.Configuration getAtlasConfig() throws AtlasException {
|
||||
try {
|
||||
return ApplicationProperties.get();
|
||||
} catch (AtlasException e) {
|
||||
LOGGER.warn("AtlasConfig init failed", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -15,16 +15,19 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas;
|
||||
package org.apache.atlas.annotation;
|
||||
|
||||
import org.apache.atlas.graph.GraphSandboxUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
public class TestOnlyModule extends RepositoryMetadataModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
GraphSandboxUtil.create();
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
// Configure extra stuff for test DI here
|
||||
super.configure();
|
||||
}
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Service
|
||||
@Inherited
|
||||
public @interface AtlasService {
|
||||
}
|
||||
|
|
@ -6,27 +6,31 @@
|
|||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas.annotation;
|
||||
|
||||
package org.apache.atlas.web.setup;
|
||||
import org.apache.atlas.utils.OnAtlasPropertyCondition;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.multibindings.Multibinder;
|
||||
import org.apache.atlas.repository.graph.GraphSchemaInitializer;
|
||||
import org.apache.atlas.setup.SetupStep;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
public class AtlasSetupModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
Multibinder<SetupStep> setupStepMultibinder = Multibinder.newSetBinder(binder(), SetupStep.class);
|
||||
setupStepMultibinder.addBinding().to(GraphSchemaInitializer.class);
|
||||
}
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Conditional(OnAtlasPropertyCondition.class)
|
||||
public @interface ConditionalOnAtlasProperty {
|
||||
// Configured atlas property
|
||||
String property();
|
||||
// The default interface implementation should declare this as true
|
||||
boolean isDefault() default false;
|
||||
}
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.atlas;
|
||||
package org.apache.atlas.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
|
|
@ -17,38 +17,49 @@
|
|||
*/
|
||||
package org.apache.atlas.service;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.annotation.AtlasService;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
|
||||
import java.util.Set;
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Utility for starting and stopping all services.
|
||||
*/
|
||||
@Singleton
|
||||
@AtlasService
|
||||
@Profile("!test")
|
||||
public class Services {
|
||||
public static final Logger LOG = LoggerFactory.getLogger(Services.class);
|
||||
|
||||
private final Set<Service> services;
|
||||
private final List<Service> services;
|
||||
private final Configuration configuration;
|
||||
|
||||
@Inject
|
||||
public Services(Set<Service> services) {
|
||||
public Services(List<Service> services, Configuration configuration) {
|
||||
this.services = services;
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void start() {
|
||||
try {
|
||||
for (Service service : services) {
|
||||
LOG.info("Starting service {}", service.getClass().getName());
|
||||
service.start();
|
||||
if (configuration.getBoolean("atlas.services.enabled", true)) {
|
||||
try {
|
||||
for (Service service : services) {
|
||||
LOG.info("Starting service {}", service.getClass().getName());
|
||||
service.start();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@PreDestroy
|
||||
public void stop() {
|
||||
for (Service service : services) {
|
||||
LOG.info("Stopping service {}", service.getClass().getName());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas.utils;
|
||||
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Condition;
|
||||
import org.springframework.context.annotation.ConditionContext;
|
||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||
import org.springframework.core.type.classreading.AnnotationMetadataReadingVisitor;
|
||||
|
||||
public class OnAtlasPropertyCondition implements Condition {
|
||||
private final Logger LOG = LoggerFactory.getLogger(OnAtlasPropertyCondition.class);
|
||||
|
||||
@Override
|
||||
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||
boolean matches = false;
|
||||
String propertyName = (String) metadata.getAnnotationAttributes(ConditionalOnAtlasProperty.class.getName()).get("property");
|
||||
boolean isDefault = (Boolean) metadata.getAnnotationAttributes(ConditionalOnAtlasProperty.class.getName()).get("isDefault");
|
||||
String className = ((AnnotationMetadataReadingVisitor) metadata).getClassName();
|
||||
|
||||
try {
|
||||
Configuration configuration = ApplicationProperties.get();
|
||||
String configuredProperty = configuration.getString(propertyName);
|
||||
if (StringUtils.isNotEmpty(configuredProperty)) {
|
||||
matches = configuredProperty.equals(className);
|
||||
} else if (isDefault) matches = true;
|
||||
} catch (AtlasException e) {
|
||||
LOG.error("Unable to load atlas properties. Dependent bean configuration may fail");
|
||||
}
|
||||
return matches;
|
||||
}
|
||||
}
|
||||
|
|
@ -126,6 +126,9 @@ atlas.graph.index.search.solr.zookeeper-session-timeout=60000
|
|||
<titan.storage.backend>berkeleyje</titan.storage.backend>
|
||||
<titan.storage.properties>#Berkeley
|
||||
atlas.graph.storage.directory=${sys:atlas.home}/data/berkley
|
||||
atlas.graph.storage.lock.clean-expired=true
|
||||
atlas.graph.storage.lock.expiry-time=500
|
||||
atlas.graph.storage.lock.wait-time=300
|
||||
</titan.storage.properties>
|
||||
<titan.index.backend>elasticsearch</titan.index.backend>
|
||||
<titan.index.properties>#ElasticSearch
|
||||
|
|
|
|||
|
|
@ -69,6 +69,21 @@
|
|||
<appender-ref ref="FILE"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework" additivity="false">
|
||||
<level value="warn"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.eclipse" additivity="false">
|
||||
<level value="warn"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<logger name="com.sun.jersey" additivity="false">
|
||||
<level value="warn"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<!-- to avoid logs - The configuration log.flush.interval.messages = 1 was supplied but isn't a known config -->
|
||||
<logger name="org.apache.kafka.common.config.AbstractConfig" additivity="false">
|
||||
<level value="error"/>
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.18.1</version>
|
||||
<configuration>
|
||||
<skip>false</skip>
|
||||
<skip>${skipUTs}</skip>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
|
@ -81,13 +81,6 @@
|
|||
<version>${guava.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-configuration</groupId>
|
||||
<artifactId>commons-configuration</artifactId>
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.18.1</version>
|
||||
<configuration>
|
||||
<skip>false</skip>
|
||||
<skip>${skipUTs}</skip>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
|
@ -105,12 +105,6 @@
|
|||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-configuration</groupId>
|
||||
<artifactId>commons-configuration</artifactId>
|
||||
|
|
|
|||
|
|
@ -67,6 +67,11 @@
|
|||
<artifactId>testng</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ public enum AtlasErrorCode {
|
|||
DISCOVERY_QUERY_FAILED(500, "ATLAS-500-00-004", "Discovery query failed {0}"),
|
||||
FAILED_TO_OBTAIN_TYPE_UPDATE_LOCK(500, "ATLAS-500-00-005", "Failed to get the lock; another type update might be in progress. Please try again"),
|
||||
FAILED_TO_OBTAIN_IMPORT_EXPORT_LOCK(500, "ATLAS-500-00-006", "Another import or export is in progress. Please try again"),
|
||||
NOTIFICATION_FAILED(500, "ATLAS-500-00-007", "Failed to notify for change {0}"),
|
||||
NOTIFICATION_FAILED(500, "ATLAS-500-00-007", "Failed to notify {0} for change {1}"),
|
||||
FAILED_TO_OBTAIN_GREMLIN_SCRIPT_ENGINE(500, "ATLAS-500-00-008", "Failed to obtain gremlin script engine: {0}"),
|
||||
JSON_ERROR_OBJECT_MAPPER_NULL_RETURNED(500, "ATLAS-500-00-009", "ObjectMapper.readValue returned NULL for class: {0}"),
|
||||
GREMLIN_SCRIPT_EXECUTION_FAILED(500, "ATLAS-500-00-00A", "Gremlin script execution failed: {0}"),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,100 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas.model.legacy;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import org.codehaus.jackson.annotate.JsonAutoDetect;
|
||||
import org.codehaus.jackson.annotate.JsonIgnore;
|
||||
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
|
||||
import org.codehaus.jackson.map.annotate.JsonSerialize;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.NONE;
|
||||
import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONLY;
|
||||
|
||||
@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
|
||||
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
|
||||
@JsonIgnoreProperties(ignoreUnknown=true)
|
||||
public class EntityResult {
|
||||
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||
|
||||
public static final String OP_CREATED = "created";
|
||||
public static final String OP_UPDATED = "updated";
|
||||
public static final String OP_DELETED = "deleted";
|
||||
|
||||
Map<String, List<String>> entities = new HashMap<>();
|
||||
|
||||
public EntityResult() {
|
||||
//For gson
|
||||
}
|
||||
|
||||
public EntityResult(List<String> created, List<String> updated, List<String> deleted) {
|
||||
set(OP_CREATED, created);
|
||||
set(OP_UPDATED, updated);
|
||||
set(OP_DELETED, deleted);
|
||||
}
|
||||
|
||||
public void set(String type, List<String> list) {
|
||||
if (list != null && list.size() > 0) {
|
||||
entities.put(type, list);
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> get(String type) {
|
||||
List<String> list = entities.get(type);
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public Map<String, List<String>> getEntities(){
|
||||
return entities;
|
||||
}
|
||||
|
||||
public void setEntities(Map<String, List<String>> entities){
|
||||
this.entities = entities;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public List<String> getCreatedEntities() {
|
||||
return get(OP_CREATED);
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public List<String> getUpdateEntities() {
|
||||
return get(OP_UPDATED);
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public List<String> getDeletedEntities() {
|
||||
return get(OP_DELETED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() { return gson.toJson(this); }
|
||||
|
||||
public static EntityResult fromString(String json) {
|
||||
return gson.fromJson(json, EntityResult.class);
|
||||
}
|
||||
}
|
||||
|
|
@ -17,8 +17,6 @@
|
|||
*/
|
||||
package org.apache.atlas.type;
|
||||
|
||||
import com.sun.jersey.spi.resource.Singleton;
|
||||
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
|
||||
|
|
@ -31,7 +29,9 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
|
@ -41,16 +41,13 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_ARRAY_PREFIX;
|
||||
import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_ARRAY_SUFFIX;
|
||||
import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_MAP_KEY_VAL_SEP;
|
||||
import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_MAP_PREFIX;
|
||||
import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.ATLAS_TYPE_MAP_SUFFIX;
|
||||
import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.*;
|
||||
|
||||
/**
|
||||
* registry for all types defined in Atlas.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
public class AtlasTypeRegistry {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AtlasStructType.class);
|
||||
private static final int DEFAULT_LOCK_MAX_WAIT_TIME_IN_SECONDS = 15;
|
||||
|
|
|
|||
|
|
@ -60,21 +60,6 @@
|
|||
<artifactId>kafka_${scala.binary.version}</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.testng</groupId>
|
||||
<artifactId>testng</artifactId>
|
||||
|
|
|
|||
|
|
@ -19,12 +19,10 @@
|
|||
package org.apache.atlas.hook;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.kafka.NotificationProvider;
|
||||
import org.apache.atlas.notification.NotificationException;
|
||||
import org.apache.atlas.notification.NotificationInterface;
|
||||
import org.apache.atlas.notification.NotificationModule;
|
||||
import org.apache.atlas.notification.hook.HookNotification;
|
||||
import org.apache.atlas.security.InMemoryJAASConfiguration;
|
||||
import org.apache.atlas.typesystem.Referenceable;
|
||||
|
|
@ -51,7 +49,7 @@ public abstract class AtlasHook {
|
|||
|
||||
protected static Configuration atlasProperties;
|
||||
|
||||
protected static NotificationInterface notifInterface;
|
||||
protected static NotificationInterface notificationInterface;
|
||||
|
||||
private static boolean logFailedMessages;
|
||||
private static FailedMessagesLogger failedMessagesLogger;
|
||||
|
|
@ -86,8 +84,7 @@ public abstract class AtlasHook {
|
|||
}
|
||||
|
||||
notificationRetryInterval = atlasProperties.getInt(ATLAS_NOTIFICATION_RETRY_INTERVAL, 1000);
|
||||
Injector injector = Guice.createInjector(new NotificationModule());
|
||||
notifInterface = injector.getInstance(NotificationInterface.class);
|
||||
notificationInterface = NotificationProvider.get();
|
||||
|
||||
LOG.info("Created Atlas Hook");
|
||||
}
|
||||
|
|
@ -118,7 +115,7 @@ public abstract class AtlasHook {
|
|||
* @param maxRetries maximum number of retries while sending message to messaging system
|
||||
*/
|
||||
public static void notifyEntities(List<HookNotification.HookNotificationMessage> messages, int maxRetries) {
|
||||
notifyEntitiesInternal(messages, maxRetries, notifInterface, logFailedMessages, failedMessagesLogger);
|
||||
notifyEntitiesInternal(messages, maxRetries, notificationInterface, logFailedMessages, failedMessagesLogger);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
package org.apache.atlas.kafka;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.inject.Singleton;
|
||||
import kafka.consumer.Consumer;
|
||||
import kafka.consumer.KafkaStream;
|
||||
import kafka.javaapi.consumer.ConsumerConnector;
|
||||
|
|
@ -46,8 +45,11 @@ import org.apache.zookeeper.server.ServerCnxnFactory;
|
|||
import org.apache.zookeeper.server.ZooKeeperServer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
import scala.Option;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
|
|
@ -64,7 +66,8 @@ import java.util.concurrent.Future;
|
|||
/**
|
||||
* Kafka specific access point to the Atlas notification framework.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
@Order(3)
|
||||
public class KafkaNotification extends AbstractNotification implements Service {
|
||||
public static final Logger LOG = LoggerFactory.getLogger(KafkaNotification.class);
|
||||
|
||||
|
|
@ -105,6 +108,7 @@ public class KafkaNotification extends AbstractNotification implements Service {
|
|||
*
|
||||
* @throws AtlasException if the notification interface can not be created
|
||||
*/
|
||||
@Inject
|
||||
public KafkaNotification(Configuration applicationProperties) throws AtlasException {
|
||||
super(applicationProperties);
|
||||
Configuration subsetConfiguration =
|
||||
|
|
|
|||
|
|
@ -17,27 +17,25 @@
|
|||
*/
|
||||
package org.apache.atlas.kafka;
|
||||
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
|
||||
/**
|
||||
* Provider class that provides KafkaNotification for Guice.
|
||||
* Provider class for Notification interfaces
|
||||
*/
|
||||
public class KafkaNotificationProvider implements Provider<KafkaNotification> {
|
||||
public class NotificationProvider {
|
||||
private static KafkaNotification kafka;
|
||||
|
||||
@Override
|
||||
@Provides
|
||||
@Singleton
|
||||
public KafkaNotification get() {
|
||||
try {
|
||||
Configuration applicationProperties = ApplicationProperties.get();
|
||||
return new KafkaNotification(applicationProperties);
|
||||
} catch(AtlasException e) {
|
||||
throw new RuntimeException(e);
|
||||
public static KafkaNotification get() {
|
||||
if (kafka == null) {
|
||||
try {
|
||||
Configuration applicationProperties = ApplicationProperties.get();
|
||||
kafka = new KafkaNotification(applicationProperties);
|
||||
} catch (AtlasException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return kafka;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas.notification;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.kafka.KafkaNotification;
|
||||
import org.apache.atlas.kafka.KafkaNotificationProvider;
|
||||
|
||||
/**
|
||||
* Notification module for Guice.
|
||||
*
|
||||
* NOTE: This module is loaded by hook clients like hive hook etc. Don't add any server specific bindings here.
|
||||
*/
|
||||
public class NotificationModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(NotificationInterface.class).to(KafkaNotification.class).in(Singleton.class);
|
||||
bind(KafkaNotification.class).toProvider(KafkaNotificationProvider.class).in(Singleton.class);
|
||||
}
|
||||
}
|
||||
162
pom.xml
162
pom.xml
|
|
@ -496,9 +496,9 @@
|
|||
<gson.version>2.5</gson.version>
|
||||
<fastutil.version>6.5.16</fastutil.version>
|
||||
<guice.version>4.1.0</guice.version>
|
||||
<spring.version>3.1.3.RELEASE</spring.version>
|
||||
<spring.security.version>3.1.3.RELEASE</spring.security.version>
|
||||
<spring-ldap-core.version>1.3.1.RELEASE</spring-ldap-core.version>
|
||||
<spring.version>4.3.8.RELEASE</spring.version>
|
||||
<spring.security.version>4.2.2.RELEASE</spring.security.version>
|
||||
<spring-ldap-core.version>2.3.1.RELEASE</spring-ldap-core.version>
|
||||
<javax.servlet.version>3.1.0</javax.servlet.version>
|
||||
<guava.version>19.0</guava.version>
|
||||
|
||||
|
|
@ -535,21 +535,9 @@
|
|||
<atlas.surefire.options></atlas.surefire.options>
|
||||
|
||||
<aspectj.runtime.version>1.8.7</aspectj.runtime.version>
|
||||
<aspectj.skip>true</aspectj.skip>
|
||||
</properties>
|
||||
|
||||
<profiles>
|
||||
<!-- Turn on this profile to instrument atlas server to collect performance metrics -->
|
||||
<profile>
|
||||
<id>perf</id>
|
||||
<activation>
|
||||
<activeByDefault>false</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
<aspectj.skip>false</aspectj.skip>
|
||||
</properties>
|
||||
</profile>
|
||||
|
||||
<!-- Turning on this profile affects only tests and does not affect packaging -->
|
||||
<profile>
|
||||
<id>distributed</id>
|
||||
|
|
@ -687,18 +675,6 @@
|
|||
<artifactId>guava</artifactId>
|
||||
<version>${guava.version}</version>
|
||||
</dependency>
|
||||
<!-- AOP dependencies. -->
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjrt</artifactId>
|
||||
<version>${aspectj.runtime.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjtools</artifactId>
|
||||
<version>${aspectj.runtime.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-jsp</artifactId>
|
||||
|
|
@ -916,43 +892,13 @@
|
|||
<version>${commons-collections.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--Javax inject-->
|
||||
<dependency>
|
||||
<groupId>javax.inject</groupId>
|
||||
<artifactId>javax.inject</artifactId>
|
||||
<version>${javax-inject.version}</version>
|
||||
</dependency>
|
||||
<!-- utilities -->
|
||||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
<version>${guice.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-throwingproviders</artifactId>
|
||||
<version>${guice.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
<version>${guice.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-servlet</artifactId>
|
||||
<version>${guice.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.sun.jersey.contribs</groupId>
|
||||
<artifactId>jersey-guice</artifactId>
|
||||
<version>1.18.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.skyscreamer</groupId>
|
||||
<artifactId>jsonassert</artifactId>
|
||||
|
|
@ -997,6 +943,12 @@
|
|||
<version>${jersey.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.sun.jersey</groupId>
|
||||
<artifactId>jersey-servlet</artifactId>
|
||||
<version>${jersey.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet.jsp</groupId>
|
||||
<artifactId>jsp-api</artifactId>
|
||||
|
|
@ -1102,6 +1054,12 @@
|
|||
<version>${titan.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.thinkaurelius.titan</groupId>
|
||||
<artifactId>titan-lucene</artifactId>
|
||||
<version>${titan.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.thinkaurelius.titan</groupId>
|
||||
<artifactId>titan-hbase</artifactId>
|
||||
|
|
@ -1203,6 +1161,73 @@
|
|||
<version>${solr.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>${javax.servlet.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Spring -->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-core</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-web</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-core</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-web</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-config</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-ldap</artifactId>
|
||||
<version>${spring.security.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.ldap</groupId>
|
||||
<artifactId>spring-ldap-core</artifactId>
|
||||
<version>${spring-ldap-core.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-aop</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- atlas modules -->
|
||||
<dependency>
|
||||
<groupId>org.apache.atlas</groupId>
|
||||
|
|
@ -1603,6 +1628,11 @@
|
|||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>jul-to-slf4j</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cglib</groupId>
|
||||
<artifactId>cglib</artifactId>
|
||||
<version>2.2.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
@ -1746,12 +1776,6 @@
|
|||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>aspectj-maven-plugin</artifactId>
|
||||
<version>1.8</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>com.webcohesion.enunciate</groupId>
|
||||
<artifactId>enunciate-maven-plugin</artifactId>
|
||||
|
|
|
|||
|
|
@ -75,21 +75,6 @@
|
|||
<artifactId>joda-time</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject</groupId>
|
||||
<artifactId>guice</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-throwingproviders</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.codehaus.jettison</groupId>
|
||||
<artifactId>jettison</artifactId>
|
||||
|
|
@ -168,6 +153,20 @@
|
|||
<artifactId>atlas-hbase-server-shaded</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-aop</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.inject.extensions</groupId>
|
||||
<artifactId>guice-multibindings</artifactId>
|
||||
<version>4.1.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
@ -235,47 +234,6 @@
|
|||
</properties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>aspectj-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<complianceLevel>1.7</complianceLevel>
|
||||
<includes>
|
||||
<include>**/*.java</include>
|
||||
<include>**/*.aj</include>
|
||||
</includes>
|
||||
<XaddSerialVersionUID>true</XaddSerialVersionUID>
|
||||
<showWeaveInfo>true</showWeaveInfo>
|
||||
<aspectLibraries>
|
||||
<aspectLibrary>
|
||||
<groupId>org.apache.atlas</groupId>
|
||||
<artifactId>atlas-server-api</artifactId>
|
||||
</aspectLibrary>
|
||||
</aspectLibraries>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>compile_with_aspectj</id>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjtools</artifactId>
|
||||
<version>${aspectj.runtime.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.atlas</groupId>
|
||||
<artifactId>atlas-server-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas;
|
||||
|
||||
import org.aopalliance.aop.Advice;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.aop.Pointcut;
|
||||
import org.springframework.aop.support.AbstractPointcutAdvisor;
|
||||
import org.springframework.aop.support.StaticMethodMatcherPointcut;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@Component
|
||||
public class GraphTransactionAdvisor extends AbstractPointcutAdvisor {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GraphTransactionAdvisor.class);
|
||||
|
||||
private final StaticMethodMatcherPointcut pointcut = new StaticMethodMatcherPointcut() {
|
||||
@Override
|
||||
public boolean matches(Method method, Class<?> targetClass) {
|
||||
boolean annotationPresent = method.isAnnotationPresent(GraphTransaction.class);
|
||||
if (annotationPresent) {
|
||||
LOG.info("GraphTransaction intercept for {}.{}", targetClass.getName(), method.getName());
|
||||
}
|
||||
return annotationPresent;
|
||||
}
|
||||
};
|
||||
|
||||
private final GraphTransactionInterceptor interceptor;
|
||||
|
||||
@Inject
|
||||
public GraphTransactionAdvisor(GraphTransactionInterceptor interceptor) {
|
||||
this.interceptor = interceptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pointcut getPointcut() {
|
||||
return pointcut;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Advice getAdvice() {
|
||||
return interceptor;
|
||||
}
|
||||
}
|
||||
|
|
@ -20,30 +20,32 @@ package org.apache.atlas;
|
|||
import org.aopalliance.intercept.MethodInterceptor;
|
||||
import org.aopalliance.intercept.MethodInvocation;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.typesystem.exception.NotFoundException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class GraphTransactionInterceptor implements MethodInterceptor {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GraphTransactionInterceptor.class);
|
||||
|
||||
private static final ThreadLocal<List<PostTransactionHook>> postTransactionHooks = new ThreadLocal<>();
|
||||
|
||||
private AtlasGraph graph;
|
||||
private final AtlasGraph graph;
|
||||
|
||||
@Inject
|
||||
public GraphTransactionInterceptor(AtlasGraph graph) {
|
||||
this.graph = graph;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(MethodInvocation invocation) throws Throwable {
|
||||
|
||||
if (graph == null) {
|
||||
graph = AtlasGraphProvider.getGraphInstance();
|
||||
}
|
||||
|
||||
boolean isSuccess = false;
|
||||
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,155 +0,0 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.atlas;
|
||||
|
||||
import com.google.inject.Binder;
|
||||
import com.google.inject.Singleton;
|
||||
import com.google.inject.matcher.Matchers;
|
||||
import com.google.inject.multibindings.Multibinder;
|
||||
|
||||
import org.aopalliance.intercept.MethodInterceptor;
|
||||
import org.apache.atlas.discovery.AtlasDiscoveryService;
|
||||
import org.apache.atlas.discovery.AtlasLineageService;
|
||||
import org.apache.atlas.discovery.DataSetLineageService;
|
||||
import org.apache.atlas.discovery.DiscoveryService;
|
||||
import org.apache.atlas.discovery.EntityDiscoveryService;
|
||||
import org.apache.atlas.discovery.EntityLineageService;
|
||||
import org.apache.atlas.discovery.LineageService;
|
||||
import org.apache.atlas.discovery.graph.GraphBackedDiscoveryService;
|
||||
import org.apache.atlas.listener.EntityChangeListener;
|
||||
import org.apache.atlas.listener.TypeDefChangeListener;
|
||||
import org.apache.atlas.listener.TypesChangeListener;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.audit.EntityAuditListener;
|
||||
import org.apache.atlas.repository.audit.EntityAuditRepository;
|
||||
import org.apache.atlas.repository.graph.DeleteHandler;
|
||||
import org.apache.atlas.repository.graph.GraphBackedMetadataRepository;
|
||||
import org.apache.atlas.repository.graph.GraphBackedSearchIndexer;
|
||||
import org.apache.atlas.repository.store.graph.AtlasEntityDefStore;
|
||||
import org.apache.atlas.repository.store.graph.AtlasEntityStore;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasEntityDefStoreV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasEntityStoreV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasTypeDefGraphStoreV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.DeleteHandlerV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.EntityGraphMapper;
|
||||
import org.apache.atlas.repository.typestore.GraphBackedTypeStore;
|
||||
import org.apache.atlas.repository.typestore.ITypeStore;
|
||||
import org.apache.atlas.service.Service;
|
||||
import org.apache.atlas.services.DefaultMetadataService;
|
||||
import org.apache.atlas.services.MetadataService;
|
||||
import org.apache.atlas.store.AtlasTypeDefStore;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.apache.atlas.typesystem.types.TypeSystemProvider;
|
||||
import org.apache.atlas.typesystem.types.cache.TypeCache;
|
||||
import org.apache.atlas.util.AtlasRepositoryConfiguration;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
|
||||
/**
|
||||
* Guice module for Repository module.
|
||||
*/
|
||||
public class RepositoryMetadataModule extends com.google.inject.AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
|
||||
// allow for dynamic binding of the metadata repo & graph service
|
||||
// bind the MetadataRepositoryService interface to an implementation
|
||||
bind(MetadataRepository.class).to(GraphBackedMetadataRepository.class).asEagerSingleton();
|
||||
|
||||
bind(TypeSystem.class).toProvider(TypeSystemProvider.class).in(Singleton.class);
|
||||
|
||||
// bind the ITypeStore interface to an implementation
|
||||
bind(ITypeStore.class).to(GraphBackedTypeStore.class).asEagerSingleton();
|
||||
bind(AtlasTypeDefStore.class).to(AtlasTypeDefGraphStoreV1.class).asEagerSingleton();
|
||||
|
||||
//For testing
|
||||
bind(AtlasEntityDefStore.class).to(AtlasEntityDefStoreV1.class).asEagerSingleton();
|
||||
bind(AtlasTypeRegistry.class).asEagerSingleton();
|
||||
|
||||
//GraphBackedSearchIndexer must be an eager singleton to force the search index creation to happen before
|
||||
//we try to restore the type system (otherwise we'll end up running queries
|
||||
//before we have any indices during the initial graph setup)
|
||||
Multibinder<TypesChangeListener> typesChangeListenerBinder =
|
||||
Multibinder.newSetBinder(binder(), TypesChangeListener.class);
|
||||
typesChangeListenerBinder.addBinding().to(GraphBackedSearchIndexer.class).asEagerSingleton();
|
||||
|
||||
// New typesdef/instance change listener should also be bound to the corresponding implementation
|
||||
Multibinder<TypeDefChangeListener> typeDefChangeListenerMultibinder =
|
||||
Multibinder.newSetBinder(binder(), TypeDefChangeListener.class);
|
||||
typeDefChangeListenerMultibinder.addBinding().to(DefaultMetadataService.class);
|
||||
typeDefChangeListenerMultibinder.addBinding().to(GraphBackedSearchIndexer.class).asEagerSingleton();
|
||||
|
||||
bind(AtlasEntityStore.class).to(AtlasEntityStoreV1.class);
|
||||
|
||||
// bind the MetadataService interface to an implementation
|
||||
bind(MetadataService.class).to(DefaultMetadataService.class).asEagerSingleton();
|
||||
|
||||
// bind the DiscoveryService interface to an implementation
|
||||
bind(DiscoveryService.class).to(GraphBackedDiscoveryService.class).asEagerSingleton();
|
||||
bind(AtlasDiscoveryService.class).to(EntityDiscoveryService.class).asEagerSingleton();
|
||||
|
||||
bind(LineageService.class).to(DataSetLineageService.class).asEagerSingleton();
|
||||
bind(AtlasLineageService.class).to(EntityLineageService.class).asEagerSingleton();
|
||||
|
||||
Configuration configuration = getConfiguration();
|
||||
bindAuditRepository(binder(), configuration);
|
||||
|
||||
bind(DeleteHandler.class).to(AtlasRepositoryConfiguration.getDeleteHandlerImpl()).asEagerSingleton();
|
||||
|
||||
bind(DeleteHandlerV1.class).to(AtlasRepositoryConfiguration.getDeleteHandlerV1Impl()).asEagerSingleton();
|
||||
|
||||
bind(TypeCache.class).to(AtlasRepositoryConfiguration.getTypeCache()).asEagerSingleton();
|
||||
|
||||
bind(EntityGraphMapper.class);
|
||||
|
||||
//Add EntityAuditListener as EntityChangeListener
|
||||
Multibinder<EntityChangeListener> entityChangeListenerBinder =
|
||||
Multibinder.newSetBinder(binder(), EntityChangeListener.class);
|
||||
entityChangeListenerBinder.addBinding().to(EntityAuditListener.class);
|
||||
|
||||
MethodInterceptor interceptor = new GraphTransactionInterceptor();
|
||||
requestInjection(interceptor);
|
||||
bindInterceptor(Matchers.any(), Matchers.annotatedWith(GraphTransaction.class), interceptor);
|
||||
}
|
||||
|
||||
protected Configuration getConfiguration() {
|
||||
try {
|
||||
return ApplicationProperties.get();
|
||||
} catch (AtlasException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void bindAuditRepository(Binder binder, Configuration configuration) {
|
||||
|
||||
Class<? extends EntityAuditRepository> auditRepoImpl = AtlasRepositoryConfiguration.getAuditRepositoryImpl();
|
||||
|
||||
//Map EntityAuditRepository interface to configured implementation
|
||||
binder.bind(EntityAuditRepository.class).to(auditRepoImpl).asEagerSingleton();
|
||||
|
||||
if(Service.class.isAssignableFrom(auditRepoImpl)) {
|
||||
Class<? extends Service> auditRepoService = (Class<? extends Service>)auditRepoImpl;
|
||||
//if it's a service, make sure that it gets properly closed at shutdown
|
||||
Multibinder<Service> serviceBinder = Multibinder.newSetBinder(binder, Service.class);
|
||||
serviceBinder.addBinding().to(auditRepoService);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -18,17 +18,11 @@
|
|||
|
||||
package org.apache.atlas.discovery;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.AtlasConfiguration;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.discovery.graph.DefaultGraphPersistenceStrategy;
|
||||
import org.apache.atlas.discovery.graph.GraphBackedDiscoveryService;
|
||||
import org.apache.atlas.query.GremlinQueryResult;
|
||||
|
|
@ -37,7 +31,6 @@ import org.apache.atlas.query.OutputLineageClosureQuery;
|
|||
import org.apache.atlas.query.QueryParams;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
|
|
@ -49,16 +42,22 @@ import org.apache.atlas.utils.ParamChecker;
|
|||
import org.apache.commons.configuration.Configuration;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import scala.Option;
|
||||
import scala.Some;
|
||||
import scala.collection.JavaConversions;
|
||||
import scala.collection.immutable.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Hive implementation of Lineage service interface.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
public class DataSetLineageService implements LineageService {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(DataSetLineageService.class);
|
||||
|
|
@ -91,8 +90,9 @@ public class DataSetLineageService implements LineageService {
|
|||
|
||||
@Inject
|
||||
DataSetLineageService(MetadataRepository metadataRepository,
|
||||
GraphBackedDiscoveryService discoveryService) throws DiscoveryException {
|
||||
this.graph = AtlasGraphProvider.getGraphInstance();
|
||||
GraphBackedDiscoveryService discoveryService,
|
||||
AtlasGraph atlasGraph) throws DiscoveryException {
|
||||
this.graph = atlasGraph;
|
||||
this.graphPersistenceStrategy = new DefaultGraphPersistenceStrategy(metadataRepository);
|
||||
this.discoveryService = discoveryService;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ package org.apache.atlas.discovery;
|
|||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasConfiguration;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.discovery.graph.DefaultGraphPersistenceStrategy;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.discovery.AtlasSearchResult;
|
||||
|
|
@ -28,6 +27,7 @@ import org.apache.atlas.model.discovery.AtlasSearchResult.AtlasFullTextResult;
|
|||
import org.apache.atlas.model.discovery.AtlasSearchResult.AtlasQueryType;
|
||||
import org.apache.atlas.model.discovery.AtlasSearchResult.AttributeSearchResult;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.Status;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.model.instance.AtlasEntityHeader;
|
||||
import org.apache.atlas.query.Expressions.AliasExpression;
|
||||
import org.apache.atlas.query.Expressions.Expression;
|
||||
|
|
@ -40,7 +40,6 @@ import org.apache.atlas.query.QueryProcessor;
|
|||
import org.apache.atlas.query.SelectExpressionHelper;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.repository.graphdb.AtlasIndexQuery;
|
||||
|
|
@ -58,6 +57,7 @@ import org.apache.commons.collections.MapUtils;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import scala.Option;
|
||||
import scala.util.Either;
|
||||
import scala.util.parsing.combinator.Parsers.NoSuccess;
|
||||
|
|
@ -73,10 +73,11 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.apache.atlas.AtlasErrorCode.CLASSIFICATION_NOT_FOUND;
|
||||
import static org.apache.atlas.AtlasErrorCode.DISCOVERY_QUERY_FAILED;
|
||||
import static org.apache.atlas.AtlasErrorCode.UNKNOWN_TYPENAME;
|
||||
import static org.apache.atlas.AtlasErrorCode.CLASSIFICATION_NOT_FOUND;
|
||||
|
||||
@Component
|
||||
public class EntityDiscoveryService implements AtlasDiscoveryService {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(EntityDiscoveryService.class);
|
||||
|
||||
|
|
@ -90,8 +91,8 @@ public class EntityDiscoveryService implements AtlasDiscoveryService {
|
|||
private final int maxTagsCountInIdxQuery;
|
||||
|
||||
@Inject
|
||||
EntityDiscoveryService(MetadataRepository metadataRepository, AtlasTypeRegistry typeRegistry) throws AtlasException {
|
||||
this.graph = AtlasGraphProvider.getGraphInstance();
|
||||
EntityDiscoveryService(MetadataRepository metadataRepository, AtlasTypeRegistry typeRegistry, AtlasGraph graph) throws AtlasException {
|
||||
this.graph = graph;
|
||||
this.graphPersistenceStrategy = new DefaultGraphPersistenceStrategy(metadataRepository);
|
||||
this.entityRetriever = new EntityGraphRetriever(typeRegistry);
|
||||
this.gremlinQueryProvider = AtlasGremlinQueryProvider.INSTANCE;
|
||||
|
|
|
|||
|
|
@ -24,10 +24,9 @@ import org.apache.atlas.AtlasErrorCode;
|
|||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.instance.AtlasEntityHeader;
|
||||
import org.apache.atlas.model.lineage.AtlasLineageInfo;
|
||||
import org.apache.atlas.model.lineage.AtlasLineageInfo.LineageRelation;
|
||||
import org.apache.atlas.model.lineage.AtlasLineageInfo.LineageDirection;
|
||||
import org.apache.atlas.model.lineage.AtlasLineageInfo.LineageRelation;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
|
|
@ -36,9 +35,9 @@ import org.apache.atlas.type.AtlasTypeRegistry;
|
|||
import org.apache.atlas.util.AtlasGremlinQueryProvider;
|
||||
import org.apache.atlas.util.AtlasGremlinQueryProvider.AtlasGremlinQuery;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.script.ScriptException;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
|
@ -46,6 +45,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
public class EntityLineageService implements AtlasLineageService {
|
||||
private static final String INPUT_PROCESS_EDGE = "__Process.inputs";
|
||||
private static final String OUTPUT_PROCESS_EDGE = "__Process.outputs";
|
||||
|
|
@ -55,8 +55,8 @@ public class EntityLineageService implements AtlasLineageService {
|
|||
private final EntityGraphRetriever entityRetriever;
|
||||
|
||||
@Inject
|
||||
EntityLineageService(AtlasTypeRegistry typeRegistry) throws DiscoveryException {
|
||||
this.graph = AtlasGraphProvider.getGraphInstance();
|
||||
EntityLineageService(AtlasTypeRegistry typeRegistry, AtlasGraph atlasGraph) throws DiscoveryException {
|
||||
this.graph = atlasGraph;
|
||||
this.gremlinQueryProvider = AtlasGremlinQueryProvider.INSTANCE;
|
||||
this.entityRetriever = new EntityGraphRetriever(typeRegistry);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,18 +18,8 @@
|
|||
|
||||
package org.apache.atlas.discovery.graph;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.discovery.DiscoveryException;
|
||||
import org.apache.atlas.discovery.DiscoveryService;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
|
|
@ -43,7 +33,6 @@ import org.apache.atlas.query.QueryParser;
|
|||
import org.apache.atlas.query.QueryProcessor;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
|
|
@ -56,14 +45,24 @@ import org.codehaus.jettison.json.JSONException;
|
|||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import scala.util.Either;
|
||||
import scala.util.parsing.combinator.Parsers;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Graph backed implementation of Search.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
public class GraphBackedDiscoveryService implements DiscoveryService {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GraphBackedDiscoveryService.class);
|
||||
|
|
@ -74,9 +73,9 @@ public class GraphBackedDiscoveryService implements DiscoveryService {
|
|||
public final static String SCORE = "score";
|
||||
|
||||
@Inject
|
||||
GraphBackedDiscoveryService(MetadataRepository metadataRepository)
|
||||
GraphBackedDiscoveryService(MetadataRepository metadataRepository, AtlasGraph atlasGraph)
|
||||
throws DiscoveryException {
|
||||
this.graph = AtlasGraphProvider.getGraphInstance();
|
||||
this.graph = atlasGraph;
|
||||
this.graphPersistenceStrategy = new DefaultGraphPersistenceStrategy(metadataRepository);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@
|
|||
|
||||
package org.apache.atlas.repository;
|
||||
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.CreateUpdateEntitiesResult;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.ITypedStruct;
|
||||
import org.apache.atlas.typesystem.exception.EntityExistsException;
|
||||
|
|
@ -135,7 +135,7 @@ public interface MetadataRepository {
|
|||
* @return guids of deleted entities
|
||||
* @throws RepositoryException
|
||||
*/
|
||||
AtlasClient.EntityResult deleteEntities(List<String> guids) throws RepositoryException;
|
||||
EntityResult deleteEntities(List<String> guids) throws RepositoryException;
|
||||
|
||||
|
||||
// Trait management functions
|
||||
|
|
|
|||
|
|
@ -6,23 +6,32 @@
|
|||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
* <p/>
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p/>
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas.repository;
|
||||
|
||||
package org.apache.atlas.typesystem.types;
|
||||
import org.apache.atlas.repository.graphdb.GraphDatabase;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.apache.atlas.util.AtlasRepositoryConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.google.inject.Provider;
|
||||
@Configuration
|
||||
public class RepositoryConfiguration {
|
||||
@Bean
|
||||
public GraphDatabase getGraphDatabase() throws IllegalAccessException, InstantiationException {
|
||||
return AtlasRepositoryConfiguration.getGraphDatabaseImpl().newInstance();
|
||||
}
|
||||
|
||||
public class TypeSystemProvider implements Provider<TypeSystem> {
|
||||
@Override
|
||||
public TypeSystem get() {
|
||||
@Bean
|
||||
public TypeSystem getTypeSystem() {
|
||||
return TypeSystem.getInstance();
|
||||
}
|
||||
}
|
||||
|
|
@ -32,6 +32,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
import org.apache.commons.collections.MapUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
|
@ -44,6 +45,7 @@ import java.util.Map;
|
|||
/**
|
||||
* Listener on entity create/update/delete, tag add/delete. Adds the corresponding audit event to the audit repository.
|
||||
*/
|
||||
@Component
|
||||
public class EntityAuditListener implements EntityChangeListener {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(EntityAuditListener.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@
|
|||
package org.apache.atlas.repository.audit;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.EntityAuditEvent;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.apache.atlas.ha.HAConfiguration;
|
||||
import org.apache.atlas.listener.ActiveStateChangeHandler;
|
||||
import org.apache.atlas.service.Service;
|
||||
|
|
@ -47,7 +47,9 @@ import org.apache.hadoop.hbase.regionserver.BloomType;
|
|||
import org.apache.hadoop.hbase.util.Bytes;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -70,6 +72,8 @@ import java.util.Map;
|
|||
* But if there are more than one atlas servers, we should use server id in the key
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
@ConditionalOnAtlasProperty(property = "atlas.EntityAuditRepository.impl")
|
||||
public class HBaseBasedAuditRepository implements Service, EntityAuditRepository, ActiveStateChangeHandler {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(HBaseBasedAuditRepository.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,21 +18,24 @@
|
|||
|
||||
package org.apache.atlas.repository.audit;
|
||||
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.EntityAuditEvent;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.EntityAuditEvent;
|
||||
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Entity audit repository where audit events are stored in-memory. Used only for integration tests
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
@ConditionalOnAtlasProperty(property = "atlas.EntityAuditRepository.impl")
|
||||
public class InMemoryEntityAuditRepository implements EntityAuditRepository {
|
||||
private TreeMap<String, EntityAuditEvent> auditEvents = new TreeMap<>();
|
||||
|
||||
|
|
|
|||
|
|
@ -18,18 +18,21 @@
|
|||
|
||||
package org.apache.atlas.repository.audit;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.EntityAuditEvent;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.google.inject.Singleton;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Implementation that completely disables the audit repository.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
@ConditionalOnAtlasProperty(property = "atlas.EntityAuditRepository.impl", isDefault = true)
|
||||
public class NoopEntityAuditRepository implements EntityAuditRepository {
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ package org.apache.atlas.repository.converters;
|
|||
import org.apache.atlas.model.TypeCategory;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
|
||||
|
||||
public abstract class AtlasAbstractFormatConverter implements AtlasFormatConverter {
|
||||
|
||||
protected final AtlasFormatConverters converterRegistry;
|
||||
protected final AtlasTypeRegistry typeRegistry;
|
||||
protected final TypeCategory typeCategory;
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ import org.apache.atlas.typesystem.types.EnumValue;
|
|||
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class AtlasEnumFormatConverter extends AtlasAbstractFormatConverter {
|
||||
|
||||
public AtlasEnumFormatConverter(AtlasFormatConverters registry, AtlasTypeRegistry typeRegistry) {
|
||||
super(registry, typeRegistry, TypeCategory.ENUM);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,17 +17,19 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.converters;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.TypeCategory;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Singleton
|
||||
@Component
|
||||
public class AtlasFormatConverters {
|
||||
|
||||
private final Map<TypeCategory, AtlasFormatConverter> registry = new HashMap<>();
|
||||
|
|
|
|||
|
|
@ -17,10 +17,7 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.converters;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.AtlasClient.EntityResult;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.CreateUpdateEntitiesResult;
|
||||
|
|
@ -55,7 +52,10 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
import org.apache.commons.collections.MapUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
|
@ -64,19 +64,24 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
@Singleton
|
||||
@Component
|
||||
public class AtlasInstanceConverter {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AtlasInstanceConverter.class);
|
||||
|
||||
@Inject
|
||||
private AtlasTypeRegistry typeRegistry;
|
||||
|
||||
@Inject
|
||||
private AtlasFormatConverters instanceFormatters;
|
||||
|
||||
@Inject
|
||||
private MetadataService metadataService;
|
||||
|
||||
@Inject
|
||||
public AtlasInstanceConverter(AtlasTypeRegistry typeRegistry, AtlasFormatConverters instanceFormatters, MetadataService metadataService) {
|
||||
this.typeRegistry = typeRegistry;
|
||||
this.instanceFormatters = instanceFormatters;
|
||||
this.metadataService = metadataService;
|
||||
}
|
||||
|
||||
public ITypedReferenceableInstance[] getITypedReferenceables(Collection<AtlasEntity> entities) throws AtlasBaseException {
|
||||
ITypedReferenceableInstance[] entitiesInOldFormat = new ITypedReferenceableInstance[entities.size()];
|
||||
|
||||
|
|
@ -166,7 +171,7 @@ public class AtlasInstanceConverter {
|
|||
return ctx.getEntities();
|
||||
}
|
||||
|
||||
public static EntityMutationResponse toEntityMutationResponse(AtlasClient.EntityResult entityResult) {
|
||||
public static EntityMutationResponse toEntityMutationResponse(EntityResult entityResult) {
|
||||
|
||||
CreateUpdateEntitiesResult result = new CreateUpdateEntitiesResult();
|
||||
result.setEntityResult(entityResult);
|
||||
|
|
|
|||
|
|
@ -36,8 +36,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||
|
||||
import java.util.Map;
|
||||
|
||||
public class
|
||||
AtlasObjectIdConverter extends AtlasAbstractFormatConverter {
|
||||
public class AtlasObjectIdConverter extends AtlasAbstractFormatConverter {
|
||||
|
||||
public AtlasObjectIdConverter(AtlasFormatConverters registry, AtlasTypeRegistry typeRegistry) {
|
||||
this(registry, typeRegistry, TypeCategory.OBJECT_ID_TYPE);
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ import org.apache.atlas.model.TypeCategory;
|
|||
import org.apache.atlas.type.AtlasType;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
|
||||
|
||||
public class AtlasPrimitiveFormatConverter extends AtlasAbstractFormatConverter {
|
||||
|
||||
public AtlasPrimitiveFormatConverter(AtlasFormatConverters registry, AtlasTypeRegistry typeRegistry) {
|
||||
super(registry, typeRegistry, TypeCategory.PRIMITIVE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,17 +18,19 @@
|
|||
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.repository.graphdb.GraphDatabase;
|
||||
import org.apache.atlas.util.AtlasRepositoryConfiguration;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* Provides access to the AtlasGraph
|
||||
*
|
||||
*/
|
||||
@Configuration
|
||||
public class AtlasGraphProvider implements IAtlasGraphProvider {
|
||||
|
||||
private static volatile GraphDatabase<?,?> graphDb_;
|
||||
|
|
@ -64,6 +66,7 @@ public class AtlasGraphProvider implements IAtlasGraphProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
@Bean
|
||||
public AtlasGraph get() throws RepositoryException {
|
||||
return getGraphInstance();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.instance.AtlasClassification;
|
||||
|
|
@ -34,6 +32,7 @@ import org.apache.commons.collections.MapUtils;
|
|||
import org.apache.commons.configuration.Configuration;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.HashSet;
|
||||
|
|
@ -42,7 +41,7 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
|
||||
@Singleton
|
||||
@Component
|
||||
public class FullTextMapperV2 {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(FullTextMapperV2.class);
|
||||
|
||||
|
|
@ -53,20 +52,9 @@ public class FullTextMapperV2 {
|
|||
private final boolean followReferences;
|
||||
|
||||
@Inject
|
||||
public FullTextMapperV2(AtlasTypeRegistry typeRegistry) {
|
||||
public FullTextMapperV2(AtlasTypeRegistry typeRegistry, Configuration configuration) {
|
||||
entityGraphRetriever = new EntityGraphRetriever(typeRegistry);
|
||||
|
||||
Configuration configuration = null;
|
||||
|
||||
try {
|
||||
configuration = ApplicationProperties.get();
|
||||
} catch (Throwable e) {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("AtlasApplication properties couldn't be loaded", e);
|
||||
}
|
||||
} finally {
|
||||
followReferences = configuration != null && configuration.getBoolean(FULL_TEXT_FOLLOW_REFERENCES, false);
|
||||
}
|
||||
followReferences = configuration != null && configuration.getBoolean(FULL_TEXT_FOLLOW_REFERENCES, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -18,23 +18,13 @@
|
|||
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import com.google.common.base.Preconditions;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.CreateUpdateEntitiesResult;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.model.instance.GuidMapping;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
|
|
@ -55,16 +45,18 @@ import org.apache.atlas.typesystem.types.IDataType;
|
|||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* An implementation backed by a Graph database provided
|
||||
* as a Graph Service.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
@Deprecated
|
||||
public class GraphBackedMetadataRepository implements MetadataRepository {
|
||||
|
||||
|
|
@ -76,24 +68,16 @@ public class GraphBackedMetadataRepository implements MetadataRepository {
|
|||
|
||||
private DeleteHandler deleteHandler;
|
||||
|
||||
private final IAtlasGraphProvider graphProvider;
|
||||
private final AtlasGraph atlasGraph;
|
||||
private final GraphToTypedInstanceMapper graphToInstanceMapper;
|
||||
|
||||
@Inject
|
||||
public GraphBackedMetadataRepository(DeleteHandler deleteHandler) {
|
||||
this.graphProvider = new AtlasGraphProvider();
|
||||
this.graphToInstanceMapper = new GraphToTypedInstanceMapper(graphProvider);
|
||||
public GraphBackedMetadataRepository(DeleteHandler deleteHandler, AtlasGraph atlasGraph) {
|
||||
this.atlasGraph = atlasGraph;
|
||||
this.graphToInstanceMapper = new GraphToTypedInstanceMapper(atlasGraph);
|
||||
this.deleteHandler = deleteHandler;
|
||||
}
|
||||
|
||||
//for testing only
|
||||
public GraphBackedMetadataRepository(IAtlasGraphProvider graphProvider, DeleteHandler deleteHandler) {
|
||||
this.graphProvider = graphProvider;
|
||||
this.graphToInstanceMapper = new GraphToTypedInstanceMapper(graphProvider);
|
||||
this.deleteHandler = deleteHandler;
|
||||
}
|
||||
|
||||
|
||||
public GraphToTypedInstanceMapper getGraphToInstanceMapper() {
|
||||
return graphToInstanceMapper;
|
||||
}
|
||||
|
|
@ -161,7 +145,7 @@ public class GraphBackedMetadataRepository implements MetadataRepository {
|
|||
instanceToGraphMapper.mapTypedInstanceToGraph(TypedInstanceToGraphMapper.Operation.CREATE, entities);
|
||||
List<String> createdGuids = RequestContext.get().getCreatedEntityIds();
|
||||
CreateUpdateEntitiesResult result = new CreateUpdateEntitiesResult();
|
||||
AtlasClient.EntityResult entityResult = new AtlasClient.EntityResult(createdGuids, null, null);
|
||||
EntityResult entityResult = new EntityResult(createdGuids, null, null);
|
||||
GuidMapping mapping = instanceToGraphMapper.createGuidMapping();
|
||||
result.setEntityResult(entityResult);
|
||||
result.setGuidMapping(mapping);
|
||||
|
|
@ -174,6 +158,7 @@ public class GraphBackedMetadataRepository implements MetadataRepository {
|
|||
}
|
||||
|
||||
@Override
|
||||
@GraphTransaction
|
||||
public ITypedReferenceableInstance getEntityDefinition(String guid) throws RepositoryException, EntityNotFoundException {
|
||||
return getEntityDefinitions(guid).get(0);
|
||||
}
|
||||
|
|
@ -469,7 +454,7 @@ public class GraphBackedMetadataRepository implements MetadataRepository {
|
|||
|
||||
@Override
|
||||
@GraphTransaction
|
||||
public AtlasClient.EntityResult deleteEntities(List<String> guids) throws RepositoryException {
|
||||
public EntityResult deleteEntities(List<String> guids) throws RepositoryException {
|
||||
|
||||
if (guids == null || guids.size() == 0) {
|
||||
throw new IllegalArgumentException("guids must be non-null and non-empty");
|
||||
|
|
@ -491,7 +476,7 @@ public class GraphBackedMetadataRepository implements MetadataRepository {
|
|||
|
||||
if (deletionCandidates.isEmpty()) {
|
||||
LOG.info("No deletion candidate entities were found for guids %s", guids);
|
||||
return new AtlasClient.EntityResult(Collections.<String>emptyList(), Collections.<String>emptyList(), Collections.<String>emptyList());
|
||||
return new EntityResult(Collections.<String>emptyList(), Collections.<String>emptyList(), Collections.<String>emptyList());
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
@ -505,14 +490,14 @@ public class GraphBackedMetadataRepository implements MetadataRepository {
|
|||
return createEntityResultFromContext(requestContext);
|
||||
}
|
||||
|
||||
private AtlasClient.EntityResult createEntityResultFromContext(RequestContext requestContext) {
|
||||
return new AtlasClient.EntityResult(
|
||||
private EntityResult createEntityResultFromContext(RequestContext requestContext) {
|
||||
return new EntityResult(
|
||||
requestContext.getCreatedEntityIds(),
|
||||
requestContext.getUpdatedEntityIds(),
|
||||
requestContext.getDeletedEntityIds());
|
||||
}
|
||||
|
||||
public AtlasGraph getGraph() throws RepositoryException {
|
||||
return graphProvider.get();
|
||||
return atlasGraph;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
import org.apache.commons.configuration.Configuration;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -76,6 +77,7 @@ import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.*;
|
|||
/**
|
||||
* Adds index for properties of a given type when its added before any instances are added.
|
||||
*/
|
||||
@Component
|
||||
public class GraphBackedSearchIndexer implements SearchIndexer, ActiveStateChangeHandler,
|
||||
TypeDefChangeListener {
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import org.apache.atlas.setup.SetupException;
|
|||
import org.apache.atlas.setup.SetupStep;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* A {@link SetupStep} that initializes the Graph backend for Atlas.
|
||||
|
|
@ -29,6 +30,7 @@ import org.slf4j.LoggerFactory;
|
|||
* This class will initialize the specific backend implementation specified in
|
||||
* the Atlas configuration for the key atlas.graph.storage.backend.
|
||||
*/
|
||||
@Component
|
||||
public class GraphSchemaInitializer implements SetupStep {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GraphSchemaInitializer.class);
|
||||
|
|
|
|||
|
|
@ -17,20 +17,10 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import static org.apache.atlas.repository.graph.GraphHelper.string;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdgeDirection;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
|
|
@ -50,10 +40,20 @@ import org.apache.atlas.typesystem.types.TraitType;
|
|||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.google.inject.Singleton;
|
||||
import javax.inject.Inject;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Singleton
|
||||
import static org.apache.atlas.repository.graph.GraphHelper.string;
|
||||
|
||||
@Component
|
||||
@Deprecated
|
||||
public final class GraphToTypedInstanceMapper {
|
||||
|
||||
|
|
@ -61,10 +61,11 @@ public final class GraphToTypedInstanceMapper {
|
|||
private static TypeSystem typeSystem = TypeSystem.getInstance();
|
||||
private static final GraphHelper graphHelper = GraphHelper.getInstance();
|
||||
|
||||
private final IAtlasGraphProvider graphProvider;
|
||||
private final AtlasGraph atlasGraph;
|
||||
|
||||
public GraphToTypedInstanceMapper(IAtlasGraphProvider graphProvider) {
|
||||
this.graphProvider = graphProvider;
|
||||
@Inject
|
||||
public GraphToTypedInstanceMapper(AtlasGraph atlasGraph) {
|
||||
this.atlasGraph = atlasGraph;
|
||||
}
|
||||
|
||||
public ITypedReferenceableInstance mapGraphToTypedInstance(String guid, AtlasVertex instanceVertex)
|
||||
|
|
@ -448,7 +449,7 @@ public final class GraphToTypedInstanceMapper {
|
|||
}
|
||||
|
||||
private AtlasGraph getGraph() throws RepositoryException {
|
||||
return graphProvider.get();
|
||||
return atlasGraph;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,12 +18,17 @@
|
|||
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@Component
|
||||
@ConditionalOnAtlasProperty(property = "atlas.DeleteHandler.impl")
|
||||
public class HardDeleteHandler extends DeleteHandler {
|
||||
|
||||
@Inject
|
||||
|
|
|
|||
|
|
@ -18,19 +18,25 @@
|
|||
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.typesystem.persistence.Id;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.apache.atlas.repository.Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY;
|
||||
import static org.apache.atlas.repository.Constants.MODIFIED_BY_KEY;
|
||||
import static org.apache.atlas.repository.Constants.STATE_PROPERTY_KEY;
|
||||
|
||||
@Component
|
||||
@ConditionalOnAtlasProperty(property = "atlas.DeleteHandler.impl", isDefault = true)
|
||||
public class SoftDeleteHandler extends DeleteHandler {
|
||||
|
||||
@Inject
|
||||
public SoftDeleteHandler(TypeSystem typeSystem) {
|
||||
super(typeSystem, false, true);
|
||||
|
|
|
|||
|
|
@ -17,19 +17,8 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import static org.apache.atlas.repository.graph.GraphHelper.string;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.model.instance.GuidMapping;
|
||||
|
|
@ -46,27 +35,30 @@ import org.apache.atlas.typesystem.exception.EntityExistsException;
|
|||
import org.apache.atlas.typesystem.exception.EntityNotFoundException;
|
||||
import org.apache.atlas.typesystem.persistence.Id;
|
||||
import org.apache.atlas.typesystem.persistence.ReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.types.AttributeInfo;
|
||||
import org.apache.atlas.typesystem.types.ClassType;
|
||||
import org.apache.atlas.typesystem.types.DataTypes;
|
||||
import org.apache.atlas.typesystem.types.*;
|
||||
import org.apache.atlas.typesystem.types.DataTypes.TypeCategory;
|
||||
import org.apache.atlas.typesystem.types.EnumValue;
|
||||
import org.apache.atlas.typesystem.types.IDataType;
|
||||
import org.apache.atlas.typesystem.types.Multiplicity;
|
||||
import org.apache.atlas.typesystem.types.ObjectGraphWalker;
|
||||
import org.apache.atlas.typesystem.types.TraitType;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.apache.atlas.typesystem.types.TypeUtils;
|
||||
import org.apache.atlas.typesystem.types.utils.TypesUtil;
|
||||
import org.apache.atlas.util.AtlasRepositoryConfiguration;
|
||||
import org.apache.atlas.utils.MD5Utils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.inject.Inject;
|
||||
import javax.inject.Inject;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.apache.atlas.repository.graph.GraphHelper.string;
|
||||
|
||||
@Component
|
||||
@Deprecated
|
||||
public final class TypedInstanceToGraphMapper {
|
||||
|
||||
|
|
@ -473,8 +465,8 @@ public final class TypedInstanceToGraphMapper {
|
|||
IDataType entryType, AttributeInfo attributeInfo) throws AtlasException {
|
||||
if (currentEntries != null && !currentEntries.isEmpty()) {
|
||||
LOG.debug("Removing unused entries from the old collection");
|
||||
if (entryType.getTypeCategory() == DataTypes.TypeCategory.STRUCT
|
||||
|| entryType.getTypeCategory() == DataTypes.TypeCategory.CLASS) {
|
||||
if (entryType.getTypeCategory() == TypeCategory.STRUCT
|
||||
|| entryType.getTypeCategory() == TypeCategory.CLASS) {
|
||||
|
||||
//Remove the edges for (current edges - new edges)
|
||||
List<AtlasEdge> cloneElements = new ArrayList<>(currentEntries);
|
||||
|
|
@ -840,7 +832,7 @@ public final class TypedInstanceToGraphMapper {
|
|||
if (dateVal != null) {
|
||||
propertyValue = dateVal.getTime();
|
||||
}
|
||||
} else if (attributeInfo.dataType().getTypeCategory() == DataTypes.TypeCategory.ENUM) {
|
||||
} else if (attributeInfo.dataType().getTypeCategory() == TypeCategory.ENUM) {
|
||||
if (attrValue != null) {
|
||||
propertyValue = ((EnumValue) attrValue).value;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ import org.apache.atlas.model.typedef.AtlasEnumDef;
|
|||
import org.apache.atlas.model.typedef.AtlasStructDef;
|
||||
import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
|
||||
import org.apache.atlas.model.typedef.AtlasTypesDef;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.repository.store.graph.v1.EntityGraphRetriever;
|
||||
import org.apache.atlas.type.AtlasArrayType;
|
||||
|
|
@ -55,7 +54,9 @@ import org.apache.commons.collections.MapUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptException;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -68,6 +69,7 @@ import java.util.Set;
|
|||
|
||||
import static org.apache.atlas.model.impexp.AtlasExportRequest.*;
|
||||
|
||||
@Component
|
||||
public class ExportService {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ExportService.class);
|
||||
|
||||
|
|
@ -76,10 +78,11 @@ public class ExportService {
|
|||
private final EntityGraphRetriever entityGraphRetriever;
|
||||
private final AtlasGremlinQueryProvider gremlinQueryProvider;
|
||||
|
||||
public ExportService(final AtlasTypeRegistry typeRegistry) throws AtlasBaseException {
|
||||
@Inject
|
||||
public ExportService(final AtlasTypeRegistry typeRegistry, AtlasGraph atlasGraph) throws AtlasBaseException {
|
||||
this.typeRegistry = typeRegistry;
|
||||
this.entityGraphRetriever = new EntityGraphRetriever(this.typeRegistry);
|
||||
this.atlasGraph = AtlasGraphProvider.getGraphInstance();
|
||||
this.atlasGraph = atlasGraph;
|
||||
this.gremlinQueryProvider = AtlasGremlinQueryProvider.INSTANCE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,12 +33,16 @@ import org.apache.atlas.type.AtlasTypeRegistry;
|
|||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.lang.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.codehaus.jackson.annotate.JsonAutoDetect;
|
||||
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
|
||||
import org.codehaus.jackson.map.annotate.JsonSerialize;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.inject.Inject;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
|
@ -57,10 +61,28 @@ import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONL
|
|||
/**
|
||||
* Class that handles initial loading of models and patches into typedef store
|
||||
*/
|
||||
@Service
|
||||
public class AtlasTypeDefStoreInitializer {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AtlasTypeDefStoreInitializer.class);
|
||||
|
||||
public void initializeStore(AtlasTypeDefStore typeDefStore, AtlasTypeRegistry typeRegistry, String typesDirName) {
|
||||
private final AtlasTypeDefStore atlasTypeDefStore;
|
||||
private final AtlasTypeRegistry atlasTypeRegistry;
|
||||
|
||||
@Inject
|
||||
public AtlasTypeDefStoreInitializer(AtlasTypeDefStore atlasTypeDefStore, AtlasTypeRegistry atlasTypeRegistry) {
|
||||
this.atlasTypeDefStore = atlasTypeDefStore;
|
||||
this.atlasTypeRegistry = atlasTypeRegistry;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
String atlasHomeDir = System.getProperty("atlas.home");
|
||||
String typesDirName = (StringUtils.isEmpty(atlasHomeDir) ? "." : atlasHomeDir) + File.separator + "models";
|
||||
|
||||
initializeStore(typesDirName);
|
||||
}
|
||||
|
||||
private void initializeStore(String typesDirName) {
|
||||
File typesDir = new File(typesDirName);
|
||||
File[] typeDefFiles = typesDir.exists() ? typesDir.listFiles() : null;
|
||||
|
||||
|
|
@ -88,11 +110,11 @@ public class AtlasTypeDefStoreInitializer {
|
|||
continue;
|
||||
}
|
||||
|
||||
AtlasTypesDef typesToCreate = getTypesToCreate(typesDef, typeRegistry);
|
||||
AtlasTypesDef typesToUpdate = getTypesToUpdate(typesDef, typeRegistry);
|
||||
AtlasTypesDef typesToCreate = getTypesToCreate(typesDef, atlasTypeRegistry);
|
||||
AtlasTypesDef typesToUpdate = getTypesToUpdate(typesDef, atlasTypeRegistry);
|
||||
|
||||
if (!typesToCreate.isEmpty() || !typesToUpdate.isEmpty()) {
|
||||
typeDefStore.createUpdateTypesDef(typesToCreate, typesToUpdate);
|
||||
atlasTypeDefStore.createUpdateTypesDef(typesToCreate, typesToUpdate);
|
||||
|
||||
LOG.info("Created/Updated types defined in file {}", typeDefFile.getAbsolutePath());
|
||||
} else {
|
||||
|
|
@ -104,7 +126,7 @@ public class AtlasTypeDefStoreInitializer {
|
|||
}
|
||||
}
|
||||
|
||||
applyTypePatches(typeDefStore, typeRegistry, typesDirName);
|
||||
applyTypePatches(typesDirName);
|
||||
}
|
||||
|
||||
public static AtlasTypesDef getTypesToCreate(AtlasTypesDef typesDef, AtlasTypeRegistry typeRegistry) {
|
||||
|
|
@ -239,7 +261,7 @@ public class AtlasTypeDefStoreInitializer {
|
|||
return ObjectUtils.compare(newTypeVersion, oldTypeVersion) > 0;
|
||||
}
|
||||
|
||||
private void applyTypePatches(AtlasTypeDefStore typeDefStore, AtlasTypeRegistry typeRegistry, String typesDirName) {
|
||||
private void applyTypePatches(String typesDirName) {
|
||||
String typePatchesDirName = typesDirName + File.separator + "patches";
|
||||
File typePatchesDir = new File(typePatchesDirName);
|
||||
File[] typePatchFiles = typePatchesDir.exists() ? typePatchesDir.listFiles() : null;
|
||||
|
|
@ -254,9 +276,9 @@ public class AtlasTypeDefStoreInitializer {
|
|||
Arrays.sort(typePatchFiles);
|
||||
|
||||
PatchHandler[] patchHandlers = new PatchHandler[] {
|
||||
new AddAttributePatchHandler(typeDefStore, typeRegistry),
|
||||
new UpdateTypeDefOptionsPatchHandler(typeDefStore, typeRegistry),
|
||||
new UpdateAttributePatchHandler(typeDefStore, typeRegistry)
|
||||
new AddAttributePatchHandler(atlasTypeDefStore, atlasTypeRegistry),
|
||||
new UpdateTypeDefOptionsPatchHandler(atlasTypeDefStore, atlasTypeRegistry),
|
||||
new UpdateAttributePatchHandler(atlasTypeDefStore, atlasTypeRegistry)
|
||||
};
|
||||
|
||||
Map<String, PatchHandler> patchHandlerRegistry = new HashMap<>();
|
||||
|
|
|
|||
|
|
@ -17,12 +17,9 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.store.graph;
|
||||
|
||||
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.impexp.AtlasImportResult;
|
||||
import org.apache.atlas.model.instance.AtlasClassification;
|
||||
import org.apache.atlas.model.instance.AtlasEntity;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
|
||||
import org.apache.atlas.model.instance.EntityMutationResponse;
|
||||
|
|
@ -132,7 +129,6 @@ public interface AtlasEntityStore {
|
|||
*/
|
||||
void updateClassifications(String guid, List<AtlasClassification> classifications) throws AtlasBaseException;
|
||||
|
||||
@GraphTransaction
|
||||
void addClassification(List<String> guids, AtlasClassification classification) throws AtlasBaseException;
|
||||
|
||||
/**
|
||||
|
|
@ -140,9 +136,7 @@ public interface AtlasEntityStore {
|
|||
*/
|
||||
void deleteClassifications(String guid, List<String> classificationNames) throws AtlasBaseException;
|
||||
|
||||
@GraphTransaction
|
||||
List<AtlasClassification> getClassifications(String guid) throws AtlasBaseException;
|
||||
|
||||
@GraphTransaction
|
||||
AtlasClassification getClassification(String guid, String classificationName) throws AtlasBaseException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ package org.apache.atlas.repository.store.graph;
|
|||
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.GraphTransactionInterceptor;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.listener.ActiveStateChangeHandler;
|
||||
import org.apache.atlas.listener.ChangedTypeDefs;
|
||||
|
|
@ -34,7 +34,6 @@ import org.apache.atlas.model.typedef.AtlasStructDef;
|
|||
import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
|
||||
import org.apache.atlas.model.typedef.AtlasStructDef.AtlasConstraintDef;
|
||||
import org.apache.atlas.model.typedef.AtlasTypesDef;
|
||||
import org.apache.atlas.repository.store.bootstrap.AtlasTypeDefStoreInitializer;
|
||||
import org.apache.atlas.repository.util.FilterUtil;
|
||||
import org.apache.atlas.store.AtlasTypeDefStore;
|
||||
import org.apache.atlas.type.AtlasClassificationType;
|
||||
|
|
@ -52,7 +51,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
|
@ -108,8 +106,6 @@ public abstract class AtlasTypeDefGraphStore implements AtlasTypeDefStore, Activ
|
|||
} finally {
|
||||
typeRegistry.releaseTypeRegistryForUpdate(ttr, commitUpdates);
|
||||
}
|
||||
|
||||
bootstrapTypes();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -571,15 +567,6 @@ public abstract class AtlasTypeDefGraphStore implements AtlasTypeDefStore, Activ
|
|||
LOG.info("Not reacting to a Passive state change");
|
||||
}
|
||||
|
||||
private void bootstrapTypes() {
|
||||
AtlasTypeDefStoreInitializer storeInitializer = new AtlasTypeDefStoreInitializer();
|
||||
|
||||
String atlasHomeDir = System.getProperty("atlas.home");
|
||||
String typesDirName = (StringUtils.isEmpty(atlasHomeDir) ? "." : atlasHomeDir) + File.separator + "models";
|
||||
|
||||
storeInitializer.initializeStore(this, typeRegistry, typesDirName);
|
||||
}
|
||||
|
||||
private AtlasBaseTypeDef getTypeDefFromType(AtlasType type) throws AtlasBaseException {
|
||||
AtlasBaseTypeDef ret;
|
||||
switch (type.getTypeCategory()) {
|
||||
|
|
|
|||
|
|
@ -18,8 +18,6 @@
|
|||
package org.apache.atlas.repository.store.graph.v1;
|
||||
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
|
|
@ -30,7 +28,8 @@ import org.apache.atlas.model.instance.EntityMutationResponse;
|
|||
import org.apache.atlas.model.instance.EntityMutations.EntityOperation;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.converters.AtlasInstanceConverter;
|
||||
import org.apache.atlas.repository.graph.*;
|
||||
import org.apache.atlas.repository.graph.FullTextMapperV2;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.ITypedStruct;
|
||||
|
|
@ -39,14 +38,16 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
@Singleton
|
||||
@Component
|
||||
public class AtlasEntityChangeNotifier {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AtlasEntityChangeNotifier.class);
|
||||
|
||||
|
|
@ -101,7 +102,7 @@ public class AtlasEntityChangeNotifier {
|
|||
try {
|
||||
listener.onTraitsAdded(entity, traits);
|
||||
} catch (AtlasException e) {
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e);
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e, getListenerName(listener), "TraitAdd");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -120,7 +121,7 @@ public class AtlasEntityChangeNotifier {
|
|||
try {
|
||||
listener.onTraitsDeleted(entity, traitNames);
|
||||
} catch (AtlasException e) {
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e);
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e, getListenerName(listener), "TraitDelete");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -140,11 +141,15 @@ public class AtlasEntityChangeNotifier {
|
|||
try {
|
||||
listener.onTraitsUpdated(entity, traits);
|
||||
} catch (AtlasException e) {
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e);
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e, getListenerName(listener), "TraitUpdate");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getListenerName(EntityChangeListener listener) {
|
||||
return listener.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
private void notifyListeners(List<AtlasEntityHeader> entityHeaders, EntityOperation operation, boolean isImport) throws AtlasBaseException {
|
||||
if (CollectionUtils.isEmpty(entityHeaders)) {
|
||||
return;
|
||||
|
|
@ -167,7 +172,7 @@ public class AtlasEntityChangeNotifier {
|
|||
break;
|
||||
}
|
||||
} catch (AtlasException e) {
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e, operation.toString());
|
||||
throw new AtlasBaseException(AtlasErrorCode.NOTIFICATION_FAILED, e, getListenerName(listener), operation.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.store.graph.v1;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.typedef.AtlasEntityDef;
|
||||
|
|
@ -32,6 +31,7 @@ import org.apache.commons.lang.StringUtils;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
|
|
|||
|
|
@ -18,11 +18,9 @@
|
|||
package org.apache.atlas.repository.store.graph.v1;
|
||||
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.RequestContextV1;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.impexp.AtlasImportResult;
|
||||
import org.apache.atlas.model.instance.AtlasClassification;
|
||||
|
|
@ -47,7 +45,9 @@ import org.apache.commons.collections.MapUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
|
@ -61,19 +61,22 @@ import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.DE
|
|||
import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.UPDATE;
|
||||
|
||||
|
||||
@Singleton
|
||||
@Component
|
||||
public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AtlasEntityStoreV1.class);
|
||||
|
||||
private final DeleteHandlerV1 deleteHandler;
|
||||
private final AtlasTypeRegistry typeRegistry;
|
||||
private final AtlasEntityChangeNotifier entityChangeNotifier;
|
||||
private final EntityGraphMapper entityGraphMapper;
|
||||
|
||||
@Inject
|
||||
public AtlasEntityStoreV1(DeleteHandlerV1 deleteHandler, AtlasTypeRegistry typeRegistry, AtlasEntityChangeNotifier entityChangeNotifier) {
|
||||
public AtlasEntityStoreV1(DeleteHandlerV1 deleteHandler, AtlasTypeRegistry typeRegistry,
|
||||
AtlasEntityChangeNotifier entityChangeNotifier, EntityGraphMapper entityGraphMapper) {
|
||||
this.deleteHandler = deleteHandler;
|
||||
this.typeRegistry = typeRegistry;
|
||||
this.entityChangeNotifier = entityChangeNotifier;
|
||||
this.entityGraphMapper = entityGraphMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -143,6 +146,7 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
}
|
||||
|
||||
@Override
|
||||
@GraphTransaction
|
||||
public EntityMutationResponse bulkImport(EntityImportStream entityStream, AtlasImportResult importResult) throws AtlasBaseException {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("==> bulkImport()");
|
||||
|
|
@ -208,7 +212,6 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
}
|
||||
}
|
||||
|
||||
@GraphTransaction
|
||||
private EntityMutationResponse createOrUpdate(EntityStream entityStream, boolean isPartialUpdate, boolean replaceClassifications) throws AtlasBaseException {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("==> createOrUpdate()");
|
||||
|
|
@ -219,8 +222,6 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
}
|
||||
|
||||
// Create/Update entities
|
||||
EntityGraphMapper entityGraphMapper = new EntityGraphMapper(deleteHandler, typeRegistry);
|
||||
|
||||
EntityMutationContext context = preCreateOrUpdate(entityStream, entityGraphMapper, isPartialUpdate);
|
||||
|
||||
EntityMutationResponse ret = entityGraphMapper.mapAttributesAndClassifications(context, isPartialUpdate, replaceClassifications);
|
||||
|
|
@ -238,6 +239,7 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
}
|
||||
|
||||
@Override
|
||||
@GraphTransaction
|
||||
public EntityMutationResponse createOrUpdate(EntityStream entityStream, boolean isPartialUpdate) throws AtlasBaseException {
|
||||
return createOrUpdate(entityStream, isPartialUpdate, false);
|
||||
}
|
||||
|
|
@ -315,6 +317,7 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
return createOrUpdate(new AtlasEntityStream(updateEntity), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@GraphTransaction
|
||||
public EntityMutationResponse deleteById(final String guid) throws AtlasBaseException {
|
||||
|
||||
|
|
@ -432,8 +435,7 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
// validate if entity, not already associated with classifications
|
||||
validateEntityAssociations(guid, classifications);
|
||||
|
||||
EntityGraphMapper graphMapper = new EntityGraphMapper(deleteHandler, typeRegistry);
|
||||
graphMapper.addClassifications(new EntityMutationContext(), guid, classifications);
|
||||
entityGraphMapper.addClassifications(new EntityMutationContext(), guid, classifications);
|
||||
|
||||
// notify listeners on classification addition
|
||||
entityChangeNotifier.onClassificationAddedToEntity(guid, classifications);
|
||||
|
|
@ -454,7 +456,6 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
throw new AtlasBaseException(AtlasErrorCode.INVALID_PARAMETERS, "classifications(s) not specified");
|
||||
}
|
||||
|
||||
EntityGraphMapper graphMapper = new EntityGraphMapper(deleteHandler, typeRegistry);
|
||||
List<AtlasClassification> updatedClassifications = new ArrayList<>();
|
||||
|
||||
for (AtlasClassification newClassification : newClassifications) {
|
||||
|
|
@ -475,7 +476,7 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
}
|
||||
}
|
||||
|
||||
graphMapper.updateClassification(new EntityMutationContext(), guid, oldClassification);
|
||||
entityGraphMapper.updateClassification(new EntityMutationContext(), guid, oldClassification);
|
||||
|
||||
updatedClassifications.add(oldClassification);
|
||||
}
|
||||
|
|
@ -498,8 +499,6 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
LOG.debug("Adding classification={} to entities={}", classification, guids);
|
||||
}
|
||||
|
||||
EntityGraphMapper graphMapper = new EntityGraphMapper(deleteHandler, typeRegistry);
|
||||
|
||||
validateAndNormalize(classification);
|
||||
|
||||
List<AtlasClassification> classifications = Collections.singletonList(classification);
|
||||
|
|
@ -508,7 +507,7 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
// validate if entity, not already associated with classifications
|
||||
validateEntityAssociations(guid, classifications);
|
||||
|
||||
graphMapper.addClassifications(new EntityMutationContext(), guid, classifications);
|
||||
entityGraphMapper.addClassifications(new EntityMutationContext(), guid, classifications);
|
||||
|
||||
// notify listeners on classification addition
|
||||
entityChangeNotifier.onClassificationAddedToEntity(guid, classifications);
|
||||
|
|
@ -530,7 +529,6 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
LOG.debug("Deleting classifications={} from entity={}", classificationNames, guid);
|
||||
}
|
||||
|
||||
EntityGraphMapper entityGraphMapper = new EntityGraphMapper(deleteHandler, typeRegistry);
|
||||
entityGraphMapper.deleteClassifications(guid, classificationNames);
|
||||
|
||||
// notify listeners on classification deletion
|
||||
|
|
@ -569,7 +567,7 @@ public class AtlasEntityStoreV1 implements AtlasEntityStore {
|
|||
AtlasEntity entity = entityStream.getByGuid(guid);
|
||||
|
||||
if (entity != null) {
|
||||
|
||||
|
||||
if (vertex != null) {
|
||||
// entity would be null if guid is not in the stream but referenced by an entity in the stream
|
||||
if (!isPartialUpdate) {
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
package org.apache.atlas.repository.store.graph.v1;
|
||||
|
||||
import org.apache.atlas.model.instance.AtlasEntity;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
|
|
|
|||
|
|
@ -19,14 +19,11 @@ package org.apache.atlas.repository.store.graph.v1;
|
|||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.listener.TypeDefChangeListener;
|
||||
import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdgeDirection;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
|
|
@ -43,7 +40,11 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
|
@ -59,15 +60,19 @@ import static org.apache.atlas.repository.store.graph.v1.AtlasGraphUtilsV1.VERTE
|
|||
/**
|
||||
* Graph persistence store for TypeDef - v1
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
public class AtlasTypeDefGraphStoreV1 extends AtlasTypeDefGraphStore {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AtlasTypeDefGraphStoreV1.class);
|
||||
|
||||
protected final AtlasGraph atlasGraph = AtlasGraphProvider.getGraphInstance();
|
||||
protected final AtlasGraph atlasGraph;
|
||||
|
||||
@Inject
|
||||
public AtlasTypeDefGraphStoreV1(AtlasTypeRegistry typeRegistry,
|
||||
Set<TypeDefChangeListener> typeDefChangeListeners) {
|
||||
Set<TypeDefChangeListener> typeDefChangeListeners,
|
||||
AtlasGraph atlasGraph) {
|
||||
super(typeRegistry, typeDefChangeListeners);
|
||||
this.atlasGraph = atlasGraph;
|
||||
|
||||
LOG.debug("==> AtlasTypeDefGraphStoreV1()");
|
||||
|
||||
|
|
@ -105,6 +110,7 @@ public class AtlasTypeDefGraphStoreV1 extends AtlasTypeDefGraphStore {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PostConstruct
|
||||
public void init() throws AtlasBaseException {
|
||||
LOG.debug("==> AtlasTypeDefGraphStoreV1.init()");
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
package org.apache.atlas.repository.store.graph.v1;
|
||||
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.RequestContextV1;
|
||||
|
|
@ -29,9 +28,8 @@ import org.apache.atlas.model.instance.AtlasEntity;
|
|||
import org.apache.atlas.model.instance.AtlasEntityHeader;
|
||||
import org.apache.atlas.model.instance.AtlasObjectId;
|
||||
import org.apache.atlas.model.instance.AtlasStruct;
|
||||
import org.apache.atlas.model.instance.EntityMutations;
|
||||
import org.apache.atlas.model.instance.EntityMutations.EntityOperation;
|
||||
import org.apache.atlas.model.instance.EntityMutationResponse;
|
||||
import org.apache.atlas.model.instance.EntityMutations.EntityOperation;
|
||||
import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
|
|
@ -45,48 +43,42 @@ import org.apache.atlas.type.AtlasClassificationType;
|
|||
import org.apache.atlas.type.AtlasEntityType;
|
||||
import org.apache.atlas.type.AtlasMapType;
|
||||
import org.apache.atlas.type.AtlasStructType;
|
||||
import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
|
||||
import org.apache.atlas.type.AtlasType;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.apache.atlas.type.AtlasTypeUtil;
|
||||
import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import javax.inject.Inject;
|
||||
import java.util.*;
|
||||
|
||||
import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.CREATE;
|
||||
import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.DELETE;
|
||||
import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.PARTIAL_UPDATE;
|
||||
import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.UPDATE;
|
||||
import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.DELETE;
|
||||
import static org.apache.atlas.repository.Constants.STATE_PROPERTY_KEY;
|
||||
import static org.apache.atlas.repository.graph.GraphHelper.string;
|
||||
|
||||
|
||||
@Component
|
||||
public class EntityGraphMapper {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(EntityGraphMapper.class);
|
||||
|
||||
private final AtlasGraph graph = AtlasGraphProvider.getGraphInstance();
|
||||
private final GraphHelper graphHelper = GraphHelper.getInstance();
|
||||
private final AtlasGraph graph;
|
||||
private final DeleteHandlerV1 deleteHandler;
|
||||
private final AtlasTypeRegistry typeRegistry;
|
||||
|
||||
|
||||
@Inject
|
||||
public EntityGraphMapper(DeleteHandlerV1 deleteHandler, AtlasTypeRegistry typeRegistry) {
|
||||
public EntityGraphMapper(DeleteHandlerV1 deleteHandler, AtlasTypeRegistry typeRegistry, AtlasGraph atlasGraph) {
|
||||
this.deleteHandler = deleteHandler;
|
||||
this.typeRegistry = typeRegistry;
|
||||
this.graph = atlasGraph;
|
||||
}
|
||||
|
||||
public AtlasVertex createVertex(AtlasEntity entity) {
|
||||
|
|
@ -284,7 +276,7 @@ public class EntityGraphMapper {
|
|||
}
|
||||
|
||||
private Object mapToVertexByTypeCategory(AttributeMutationContext ctx, EntityMutationContext context) throws AtlasBaseException {
|
||||
if (ctx.getOp() == EntityMutations.EntityOperation.CREATE && ctx.getValue() == null) {
|
||||
if (ctx.getOp() == CREATE && ctx.getValue() == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -509,7 +501,7 @@ public class EntityGraphMapper {
|
|||
|
||||
try {
|
||||
AtlasAttribute attribute = ctx.getAttribute();
|
||||
List<String> currentKeys = GraphHelper.getListProperty(ctx.getReferringVertex(), ctx.getVertexProperty());
|
||||
List<String> currentKeys = GraphHelper.getListProperty(ctx.getReferringVertex(), ctx.getVertexProperty());
|
||||
Map<String, Object> currentMap = new HashMap<>();
|
||||
|
||||
if (CollectionUtils.isNotEmpty(currentKeys)) {
|
||||
|
|
|
|||
|
|
@ -289,16 +289,16 @@ public final class EntityGraphRetriever {
|
|||
List<String> classificationNames = GraphHelper.getTraitNames(instanceVertex);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(classificationNames)) {
|
||||
for (String classficationName : classificationNames) {
|
||||
AtlasClassification classification = null;
|
||||
for (String classificationName : classificationNames) {
|
||||
AtlasClassification classification;
|
||||
if (StringUtils.isNotEmpty(classificationNameFilter)) {
|
||||
if (classficationName.equals(classificationNameFilter)) {
|
||||
classification = getClassification(instanceVertex, classficationName);
|
||||
if (classificationName.equals(classificationNameFilter)) {
|
||||
classification = getClassification(instanceVertex, classificationName);
|
||||
classifications.add(classification);
|
||||
return classifications;
|
||||
}
|
||||
} else {
|
||||
classification = getClassification(instanceVertex, classficationName);
|
||||
classification = getClassification(instanceVertex, classificationName);
|
||||
classifications.add(classification);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,12 +18,17 @@
|
|||
|
||||
package org.apache.atlas.repository.store.graph.v1;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@Component
|
||||
@ConditionalOnAtlasProperty(property = "atlas.DeleteHandlerV1.impl")
|
||||
public class HardDeleteHandlerV1 extends DeleteHandlerV1 {
|
||||
|
||||
@Inject
|
||||
|
|
|
|||
|
|
@ -18,21 +18,24 @@
|
|||
|
||||
package org.apache.atlas.repository.store.graph.v1;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.RequestContextV1;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.instance.AtlasEntity;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.apache.atlas.typesystem.persistence.Id;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.apache.atlas.repository.Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY;
|
||||
import static org.apache.atlas.repository.Constants.MODIFIED_BY_KEY;
|
||||
import static org.apache.atlas.repository.Constants.STATE_PROPERTY_KEY;
|
||||
|
||||
@Component
|
||||
@ConditionalOnAtlasProperty(property = "atlas.DeleteHandlerV1.impl", isDefault = true)
|
||||
public class SoftDeleteHandlerV1 extends DeleteHandlerV1 {
|
||||
|
||||
@Inject
|
||||
|
|
|
|||
|
|
@ -20,31 +20,22 @@ package org.apache.atlas.repository.store.graph.v1;
|
|||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.TypeCategory;
|
||||
import org.apache.atlas.model.instance.AtlasEntity;
|
||||
import org.apache.atlas.model.instance.AtlasObjectId;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.repository.store.graph.EntityGraphDiscoveryContext;
|
||||
import org.apache.atlas.repository.store.graph.EntityResolver;
|
||||
import org.apache.atlas.type.AtlasEntityType;
|
||||
import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.apache.atlas.typesystem.exception.EntityNotFoundException;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class UniqAttrBasedEntityResolver implements EntityResolver {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(UniqAttrBasedEntityResolver.class);
|
||||
|
||||
private final static GraphHelper graphHelper = GraphHelper.getInstance();
|
||||
|
||||
private final AtlasTypeRegistry typeRegistry;
|
||||
|
||||
public UniqAttrBasedEntityResolver(AtlasTypeRegistry typeRegistry) {
|
||||
|
|
|
|||
|
|
@ -22,13 +22,10 @@ import com.google.common.base.Function;
|
|||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.GraphHelper;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdgeDirection;
|
||||
|
|
@ -41,7 +38,10 @@ import org.apache.atlas.typesystem.types.utils.TypesUtil;
|
|||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
|
@ -53,6 +53,7 @@ import java.util.Set;
|
|||
import static org.apache.atlas.repository.graph.GraphHelper.setProperty;
|
||||
|
||||
@Singleton
|
||||
@Component
|
||||
@Deprecated
|
||||
public class GraphBackedTypeStore implements ITypeStore {
|
||||
public static final String VERTEX_TYPE = "typeSystem";
|
||||
|
|
@ -66,8 +67,8 @@ public class GraphBackedTypeStore implements ITypeStore {
|
|||
private GraphHelper graphHelper = GraphHelper.getInstance();
|
||||
|
||||
@Inject
|
||||
public GraphBackedTypeStore() {
|
||||
graph = AtlasGraphProvider.getGraphInstance();
|
||||
public GraphBackedTypeStore(AtlasGraph atlasGraph) {
|
||||
this.graph = atlasGraph;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -123,7 +124,7 @@ public class GraphBackedTypeStore implements ITypeStore {
|
|||
List<AtlasVertex> vertices = createVertices(typeVerticesNeeded);
|
||||
|
||||
//Create a type name->AtlasVertex map with the result
|
||||
Map<String, AtlasVertex> result = new HashMap<String,AtlasVertex>(typeVerticesNeeded.size());
|
||||
Map<String, AtlasVertex> result = new HashMap<>(typeVerticesNeeded.size());
|
||||
for(int i = 0 ; i < typeVerticesNeeded.size(); i++) {
|
||||
TypeVertexInfo createdVertexInfo = typeVerticesNeeded.get(i);
|
||||
AtlasVertex createdVertex = vertices.get(i);
|
||||
|
|
@ -357,7 +358,6 @@ public class GraphBackedTypeStore implements ITypeStore {
|
|||
|
||||
List<AtlasVertex> result = new ArrayList<>(infoList.size());
|
||||
List<String> typeNames = Lists.transform(infoList, new Function<TypeVertexInfo,String>() {
|
||||
|
||||
@Override
|
||||
public String apply(TypeVertexInfo input) {
|
||||
return input.getTypeName();
|
||||
|
|
|
|||
|
|
@ -17,14 +17,9 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.typestore;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.annotation.ConditionalOnAtlasProperty;
|
||||
import org.apache.atlas.typesystem.TypesDef;
|
||||
import org.apache.atlas.typesystem.types.AttributeDefinition;
|
||||
import org.apache.atlas.typesystem.types.ClassType;
|
||||
|
|
@ -38,10 +33,16 @@ import org.apache.atlas.typesystem.types.TypeSystem.TransientTypeSystem;
|
|||
import org.apache.atlas.typesystem.types.TypeUtils;
|
||||
import org.apache.atlas.typesystem.types.cache.DefaultTypeCache;
|
||||
import org.apache.atlas.typesystem.types.utils.TypesUtil;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -52,7 +53,9 @@ import com.google.inject.Singleton;
|
|||
* are also loaded from the store if they are not already in the cache.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
@Deprecated
|
||||
@ConditionalOnAtlasProperty(property = "atlas.TypeCache.impl")
|
||||
public class StoreBackedTypeCache extends DefaultTypeCache {
|
||||
|
||||
private ITypeStore typeStore;
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@ package org.apache.atlas.services;
|
|||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.Provider;
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.AtlasException;
|
||||
|
|
@ -35,6 +33,7 @@ import org.apache.atlas.listener.ChangedTypeDefs;
|
|||
import org.apache.atlas.listener.EntityChangeListener;
|
||||
import org.apache.atlas.listener.TypeDefChangeListener;
|
||||
import org.apache.atlas.listener.TypesChangeListener;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
import org.apache.atlas.repository.audit.EntityAuditRepository;
|
||||
|
|
@ -54,16 +53,7 @@ import org.apache.atlas.typesystem.json.InstanceSerialization;
|
|||
import org.apache.atlas.typesystem.json.TypesSerialization;
|
||||
import org.apache.atlas.typesystem.persistence.Id;
|
||||
import org.apache.atlas.typesystem.persistence.ReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.types.AttributeInfo;
|
||||
import org.apache.atlas.typesystem.types.ClassType;
|
||||
import org.apache.atlas.typesystem.types.DataTypes;
|
||||
import org.apache.atlas.typesystem.types.EnumTypeDefinition;
|
||||
import org.apache.atlas.typesystem.types.HierarchicalTypeDefinition;
|
||||
import org.apache.atlas.typesystem.types.IDataType;
|
||||
import org.apache.atlas.typesystem.types.Multiplicity;
|
||||
import org.apache.atlas.typesystem.types.StructTypeDefinition;
|
||||
import org.apache.atlas.typesystem.types.TraitType;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.apache.atlas.typesystem.types.*;
|
||||
import org.apache.atlas.typesystem.types.cache.TypeCache;
|
||||
import org.apache.atlas.utils.ParamChecker;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
|
|
@ -71,6 +61,7 @@ import org.codehaus.jettison.json.JSONException;
|
|||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
|
@ -80,6 +71,7 @@ import java.util.Collections;
|
|||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
|
||||
|
|
@ -88,6 +80,7 @@ import java.util.Map;
|
|||
* for listening to changes to the repository.
|
||||
*/
|
||||
@Singleton
|
||||
@Component
|
||||
@Deprecated
|
||||
public class DefaultMetadataService implements MetadataService, ActiveStateChangeHandler, TypeDefChangeListener {
|
||||
private enum OperationType {
|
||||
|
|
@ -106,24 +99,16 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
private final Collection<TypesChangeListener> typeChangeListeners = new LinkedHashSet<>();
|
||||
private final Collection<EntityChangeListener> entityChangeListeners = new LinkedHashSet<>();
|
||||
|
||||
@Inject
|
||||
private EntityAuditRepository auditRepository;
|
||||
|
||||
@Inject
|
||||
DefaultMetadataService(final MetadataRepository repository, final ITypeStore typeStore,
|
||||
final Collection<Provider<TypesChangeListener>> typeListenerProviders,
|
||||
final Collection<Provider<EntityChangeListener>> entityListenerProviders, TypeCache typeCache)
|
||||
throws AtlasException {
|
||||
this(repository, typeStore, typeListenerProviders, entityListenerProviders,
|
||||
TypeSystem.getInstance(), ApplicationProperties.get(), typeCache);
|
||||
}
|
||||
|
||||
//for testing only
|
||||
public DefaultMetadataService(final MetadataRepository repository, final ITypeStore typeStore,
|
||||
final Collection<Provider<TypesChangeListener>> typeListenerProviders,
|
||||
final Collection<Provider<EntityChangeListener>> entityListenerProviders,
|
||||
final TypeSystem typeSystem,
|
||||
final Configuration configuration, TypeCache typeCache) throws AtlasException {
|
||||
final Set<TypesChangeListener> typesChangeListeners,
|
||||
final Set<EntityChangeListener> entityChangeListeners,
|
||||
final TypeSystem typeSystem,
|
||||
final Configuration configuration,
|
||||
TypeCache typeCache,
|
||||
EntityAuditRepository auditRepository) throws AtlasException {
|
||||
this.typeStore = typeStore;
|
||||
this.typeSystem = typeSystem;
|
||||
/**
|
||||
|
|
@ -139,19 +124,17 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
|
||||
this.repository = repository;
|
||||
|
||||
for (Provider<TypesChangeListener> provider : typeListenerProviders) {
|
||||
typeChangeListeners.add(provider.get());
|
||||
}
|
||||
this.typeChangeListeners.addAll(typesChangeListeners);
|
||||
|
||||
for (Provider<EntityChangeListener> provider : entityListenerProviders) {
|
||||
entityChangeListeners.add(provider.get());
|
||||
}
|
||||
this.entityChangeListeners.addAll(entityChangeListeners);
|
||||
|
||||
if (!HAConfiguration.isHAEnabled(configuration)) {
|
||||
restoreTypeSystem();
|
||||
}
|
||||
|
||||
maxAuditResults = configuration.getShort(CONFIG_MAX_AUDIT_RESULTS, DEFAULT_MAX_AUDIT_RESULTS);
|
||||
|
||||
this.auditRepository = auditRepository;
|
||||
}
|
||||
|
||||
private void restoreTypeSystem() throws AtlasException {
|
||||
|
|
@ -313,7 +296,7 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
public ITypedReferenceableInstance[] deserializeClassInstances(String entityInstanceDefinition) throws AtlasException {
|
||||
return GraphHelper.deserializeClassInstances(typeSystem, entityInstanceDefinition);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ITypedReferenceableInstance getTypedReferenceableInstance(Referenceable entityInstance) throws AtlasException {
|
||||
return GraphHelper.getTypedReferenceableInstance(typeSystem, entityInstance);
|
||||
|
|
@ -356,7 +339,7 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
return repository.getEntityDefinition(entityType, attribute, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public String getEntityDefinition(String entityType, String attribute, String value) throws AtlasException {
|
||||
final ITypedReferenceableInstance instance = getEntityDefinitionReference(entityType, attribute, value);
|
||||
return InstanceSerialization.toJson(instance, true);
|
||||
|
|
@ -422,7 +405,7 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
return result;
|
||||
}
|
||||
|
||||
private void onEntitiesAddedUpdated(AtlasClient.EntityResult entityResult) throws AtlasException {
|
||||
private void onEntitiesAddedUpdated(EntityResult entityResult) throws AtlasException {
|
||||
onEntitiesAdded(entityResult.getCreatedEntities());
|
||||
onEntitiesUpdated(entityResult.getUpdateEntities());
|
||||
//Note: doesn't access deletedEntities from entityResult
|
||||
|
|
@ -635,8 +618,8 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
|
||||
// ensure trait is not already defined
|
||||
Preconditions
|
||||
.checkArgument(!getTraitNames(guid).contains(traitName), "trait=%s is already defined for entity=%s",
|
||||
traitName, guid);
|
||||
.checkArgument(!getTraitNames(guid).contains(traitName), "trait=%s is already defined for entity=%s",
|
||||
traitName, guid);
|
||||
|
||||
repository.addTrait(guid, traitInstance);
|
||||
|
||||
|
|
@ -644,7 +627,7 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
}
|
||||
|
||||
private ITypedStruct deserializeTraitInstance(String traitInstanceDefinition)
|
||||
throws AtlasException {
|
||||
throws AtlasException {
|
||||
return createTraitInstance(InstanceSerialization.fromJsonStruct(traitInstanceDefinition, true));
|
||||
}
|
||||
|
||||
|
|
@ -762,14 +745,14 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
* @see org.apache.atlas.services.MetadataService#deleteEntities(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public AtlasClient.EntityResult deleteEntities(List<String> deleteCandidateGuids) throws AtlasException {
|
||||
public EntityResult deleteEntities(List<String> deleteCandidateGuids) throws AtlasException {
|
||||
ParamChecker.notEmpty(deleteCandidateGuids, "delete candidate guids");
|
||||
return deleteGuids(deleteCandidateGuids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AtlasClient.EntityResult deleteEntityByUniqueAttribute(String typeName, String uniqueAttributeName,
|
||||
String attrValue) throws AtlasException {
|
||||
public EntityResult deleteEntityByUniqueAttribute(String typeName, String uniqueAttributeName,
|
||||
String attrValue) throws AtlasException {
|
||||
typeName = ParamChecker.notEmpty(typeName, "delete candidate typeName");
|
||||
uniqueAttributeName = ParamChecker.notEmpty(uniqueAttributeName, "delete candidate unique attribute name");
|
||||
attrValue = ParamChecker.notEmpty(attrValue, "delete candidate unique attribute value");
|
||||
|
|
@ -782,8 +765,8 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
|
|||
return deleteGuids(deleteCandidateGuids);
|
||||
}
|
||||
|
||||
private AtlasClient.EntityResult deleteGuids(List<String> deleteCandidateGuids) throws AtlasException {
|
||||
AtlasClient.EntityResult entityResult = repository.deleteEntities(deleteCandidateGuids);
|
||||
private EntityResult deleteGuids(List<String> deleteCandidateGuids) throws AtlasException {
|
||||
EntityResult entityResult = repository.deleteEntities(deleteCandidateGuids);
|
||||
onEntitiesAddedUpdated(entityResult);
|
||||
return entityResult;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,12 +18,11 @@
|
|||
package org.apache.atlas.services;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.inject.Singleton;
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.annotation.AtlasService;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.metrics.AtlasMetrics;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.util.AtlasGremlinQueryProvider;
|
||||
import org.apache.atlas.util.AtlasGremlinQueryProvider.AtlasGremlinQuery;
|
||||
|
|
@ -35,7 +34,7 @@ import javax.inject.Inject;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Singleton
|
||||
@AtlasService
|
||||
public class MetricsService {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MetricsService.class);
|
||||
|
||||
|
|
@ -75,8 +74,8 @@ public class MetricsService {
|
|||
|
||||
|
||||
@Inject
|
||||
public MetricsService() throws AtlasException {
|
||||
this(ApplicationProperties.get(), AtlasGraphProvider.getGraphInstance());
|
||||
public MetricsService(AtlasGraph atlasGraph) throws AtlasException {
|
||||
this(ApplicationProperties.get(), atlasGraph);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
|
|
|||
|
|
@ -17,18 +17,13 @@
|
|||
*/
|
||||
package org.apache.atlas.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.repository.audit.EntityAuditRepository;
|
||||
import org.apache.atlas.repository.audit.HBaseBasedAuditRepository;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.DeleteHandler;
|
||||
import org.apache.atlas.repository.graph.SoftDeleteHandler;
|
||||
import org.apache.atlas.repository.graphdb.GraphDatabase;
|
||||
import org.apache.atlas.repository.graphdb.GremlinVersion;
|
||||
import org.apache.atlas.repository.store.graph.v1.DeleteHandlerV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.SoftDeleteHandlerV1;
|
||||
import org.apache.atlas.typesystem.types.cache.DefaultTypeCache;
|
||||
|
|
@ -37,6 +32,9 @@ import org.apache.commons.configuration.Configuration;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Atlas configuration for repository project
|
||||
*
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import com.google.common.base.Preconditions;
|
|||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.GraphBackedSearchIndexer;
|
||||
import org.apache.atlas.services.MetadataService;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
|
|
@ -45,7 +44,7 @@ import static org.apache.atlas.AtlasClient.PROCESS_ATTRIBUTE_OUTPUTS;
|
|||
/**
|
||||
* Base Class to set up hive types and instances for tests
|
||||
*/
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class BaseRepositoryTest {
|
||||
|
||||
@Inject
|
||||
|
|
@ -70,7 +69,6 @@ public class BaseRepositoryTest {
|
|||
|
||||
protected void tearDown() throws Exception {
|
||||
TypeSystem.getInstance().reset();
|
||||
AtlasGraphProvider.cleanup();
|
||||
}
|
||||
|
||||
private void setUpTypes() throws Exception {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import org.testng.annotations.Test;
|
|||
* Uses TestNG's Guice annotation to load the necessary modules and inject the
|
||||
* objects from Guice
|
||||
*/
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class RepositoryServiceLoadingTest {
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -0,0 +1,231 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.atlas;
|
||||
|
||||
import com.google.inject.Binder;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
import com.google.inject.matcher.Matchers;
|
||||
import com.google.inject.multibindings.Multibinder;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.discovery.AtlasDiscoveryService;
|
||||
import org.apache.atlas.discovery.AtlasLineageService;
|
||||
import org.apache.atlas.discovery.DataSetLineageService;
|
||||
import org.apache.atlas.discovery.DiscoveryService;
|
||||
import org.apache.atlas.discovery.EntityDiscoveryService;
|
||||
import org.apache.atlas.discovery.EntityLineageService;
|
||||
import org.apache.atlas.discovery.LineageService;
|
||||
import org.apache.atlas.discovery.graph.GraphBackedDiscoveryService;
|
||||
import org.apache.atlas.graph.GraphSandboxUtil;
|
||||
import org.apache.atlas.listener.EntityChangeListener;
|
||||
import org.apache.atlas.listener.TypeDefChangeListener;
|
||||
import org.apache.atlas.listener.TypesChangeListener;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.audit.EntityAuditListener;
|
||||
import org.apache.atlas.repository.audit.EntityAuditRepository;
|
||||
import org.apache.atlas.repository.graph.DeleteHandler;
|
||||
import org.apache.atlas.repository.graph.GraphBackedMetadataRepository;
|
||||
import org.apache.atlas.repository.graph.GraphBackedSearchIndexer;
|
||||
import org.apache.atlas.repository.graph.HardDeleteHandler;
|
||||
import org.apache.atlas.repository.graph.SoftDeleteHandler;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
import org.apache.atlas.repository.impexp.ExportService;
|
||||
import org.apache.atlas.repository.store.graph.AtlasEntityDefStore;
|
||||
import org.apache.atlas.repository.store.graph.AtlasEntityStore;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasEntityChangeNotifier;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasEntityDefStoreV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasEntityStoreV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasTypeDefGraphStoreV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.DeleteHandlerV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.EntityGraphMapper;
|
||||
import org.apache.atlas.repository.store.graph.v1.HardDeleteHandlerV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.SoftDeleteHandlerV1;
|
||||
import org.apache.atlas.repository.typestore.GraphBackedTypeStore;
|
||||
import org.apache.atlas.repository.typestore.ITypeStore;
|
||||
import org.apache.atlas.repository.typestore.StoreBackedTypeCache;
|
||||
import org.apache.atlas.service.Service;
|
||||
import org.apache.atlas.services.DefaultMetadataService;
|
||||
import org.apache.atlas.services.MetadataService;
|
||||
import org.apache.atlas.store.AtlasTypeDefStore;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.apache.atlas.typesystem.types.cache.TypeCache;
|
||||
import org.apache.atlas.util.AtlasRepositoryConfiguration;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
import org.mockito.Mockito;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TestModules {
|
||||
|
||||
static class MockNotifier implements Provider<AtlasEntityChangeNotifier> {
|
||||
@Override
|
||||
public AtlasEntityChangeNotifier get() {
|
||||
return Mockito.mock(AtlasEntityChangeNotifier.class);
|
||||
}
|
||||
}
|
||||
|
||||
// Test only DI modules
|
||||
public static class TestOnlyModule extends com.google.inject.AbstractModule {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(TestOnlyModule.class);
|
||||
|
||||
static class TypeSystemProvider implements Provider<TypeSystem> {
|
||||
@Override
|
||||
public TypeSystem get() {
|
||||
return TypeSystem.getInstance();
|
||||
}
|
||||
}
|
||||
|
||||
static class AtlasConfigurationProvider implements Provider<Configuration> {
|
||||
|
||||
@Override
|
||||
public Configuration get() {
|
||||
try {
|
||||
return ApplicationProperties.get();
|
||||
} catch (AtlasException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class AtlasGraphProvider implements Provider<AtlasGraph> {
|
||||
@Override
|
||||
public AtlasGraph get() {
|
||||
return org.apache.atlas.repository.graph.AtlasGraphProvider.getGraphInstance();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
GraphSandboxUtil.create();
|
||||
|
||||
bindAuditRepository(binder());
|
||||
|
||||
bindDeleteHandler(binder());
|
||||
|
||||
bind(AtlasGraph.class).toProvider(AtlasGraphProvider.class);
|
||||
|
||||
// allow for dynamic binding of the metadata repo & graph service
|
||||
// bind the MetadataRepositoryService interface to an implementation
|
||||
bind(MetadataRepository.class).to(GraphBackedMetadataRepository.class).asEagerSingleton();
|
||||
|
||||
bind(TypeSystem.class).toProvider(TypeSystemProvider.class).in(Singleton.class);
|
||||
bind(Configuration.class).toProvider(AtlasConfigurationProvider.class).in(Singleton.class);
|
||||
|
||||
// bind the ITypeStore interface to an implementation
|
||||
bind(ITypeStore.class).to(GraphBackedTypeStore.class).asEagerSingleton();
|
||||
bind(AtlasTypeDefStore.class).to(AtlasTypeDefGraphStoreV1.class).asEagerSingleton();
|
||||
|
||||
//For testing
|
||||
bind(AtlasEntityDefStore.class).to(AtlasEntityDefStoreV1.class).asEagerSingleton();
|
||||
bind(AtlasTypeRegistry.class).asEagerSingleton();
|
||||
bind(EntityGraphMapper.class).asEagerSingleton();
|
||||
bind(ExportService.class).asEagerSingleton();
|
||||
|
||||
//GraphBackedSearchIndexer must be an eager singleton to force the search index creation to happen before
|
||||
//we try to restore the type system (otherwise we'll end up running queries
|
||||
//before we have any indices during the initial graph setup)
|
||||
Multibinder<TypesChangeListener> typesChangeListenerBinder =
|
||||
Multibinder.newSetBinder(binder(), TypesChangeListener.class);
|
||||
typesChangeListenerBinder.addBinding().to(GraphBackedSearchIndexer.class).asEagerSingleton();
|
||||
|
||||
// New typesdef/instance change listener should also be bound to the corresponding implementation
|
||||
Multibinder<TypeDefChangeListener> typeDefChangeListenerMultibinder =
|
||||
Multibinder.newSetBinder(binder(), TypeDefChangeListener.class);
|
||||
typeDefChangeListenerMultibinder.addBinding().to(DefaultMetadataService.class);
|
||||
typeDefChangeListenerMultibinder.addBinding().to(GraphBackedSearchIndexer.class).asEagerSingleton();
|
||||
|
||||
bind(AtlasEntityStore.class).to(AtlasEntityStoreV1.class);
|
||||
|
||||
// bind the MetadataService interface to an implementation
|
||||
bind(MetadataService.class).to(DefaultMetadataService.class).asEagerSingleton();
|
||||
|
||||
// bind the DiscoveryService interface to an implementation
|
||||
bind(DiscoveryService.class).to(GraphBackedDiscoveryService.class).asEagerSingleton();
|
||||
bind(AtlasDiscoveryService.class).to(EntityDiscoveryService.class).asEagerSingleton();
|
||||
|
||||
bind(LineageService.class).to(DataSetLineageService.class).asEagerSingleton();
|
||||
bind(AtlasLineageService.class).to(EntityLineageService.class).asEagerSingleton();
|
||||
|
||||
bindTypeCache();
|
||||
|
||||
//Add EntityAuditListener as EntityChangeListener
|
||||
Multibinder<EntityChangeListener> entityChangeListenerBinder =
|
||||
Multibinder.newSetBinder(binder(), EntityChangeListener.class);
|
||||
entityChangeListenerBinder.addBinding().to(EntityAuditListener.class);
|
||||
|
||||
final GraphTransactionInterceptor graphTransactionInterceptor = new GraphTransactionInterceptor(new AtlasGraphProvider().get());
|
||||
requestInjection(graphTransactionInterceptor);
|
||||
bindInterceptor(Matchers.any(), Matchers.annotatedWith(GraphTransaction.class), graphTransactionInterceptor);
|
||||
}
|
||||
|
||||
protected void bindTypeCache() {
|
||||
bind(TypeCache.class).to(AtlasRepositoryConfiguration.getTypeCache()).asEagerSingleton();
|
||||
}
|
||||
|
||||
protected void bindDeleteHandler(Binder binder) {
|
||||
binder.bind(DeleteHandler.class).to(AtlasRepositoryConfiguration.getDeleteHandlerImpl()).asEagerSingleton();
|
||||
binder.bind(DeleteHandlerV1.class).to(AtlasRepositoryConfiguration.getDeleteHandlerV1Impl()).asEagerSingleton();
|
||||
}
|
||||
|
||||
protected void bindAuditRepository(Binder binder) {
|
||||
|
||||
Class<? extends EntityAuditRepository> auditRepoImpl = AtlasRepositoryConfiguration.getAuditRepositoryImpl();
|
||||
|
||||
//Map EntityAuditRepository interface to configured implementation
|
||||
binder.bind(EntityAuditRepository.class).to(auditRepoImpl).asEagerSingleton();
|
||||
|
||||
if(Service.class.isAssignableFrom(auditRepoImpl)) {
|
||||
Class<? extends Service> auditRepoService = (Class<? extends Service>)auditRepoImpl;
|
||||
//if it's a service, make sure that it gets properly closed at shutdown
|
||||
Multibinder<Service> serviceBinder = Multibinder.newSetBinder(binder, Service.class);
|
||||
serviceBinder.addBinding().to(auditRepoService);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class SoftDeleteModule extends TestOnlyModule {
|
||||
@Override
|
||||
protected void bindDeleteHandler(Binder binder) {
|
||||
bind(DeleteHandler.class).to(SoftDeleteHandler.class).asEagerSingleton();
|
||||
bind(DeleteHandlerV1.class).to(SoftDeleteHandlerV1.class).asEagerSingleton();
|
||||
bind(AtlasEntityChangeNotifier.class).toProvider(MockNotifier.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class HardDeleteModule extends TestOnlyModule {
|
||||
@Override
|
||||
protected void bindDeleteHandler(Binder binder) {
|
||||
bind(DeleteHandler.class).to(HardDeleteHandler.class).asEagerSingleton();
|
||||
bind(DeleteHandlerV1.class).to(HardDeleteHandlerV1.class).asEagerSingleton();
|
||||
bind(AtlasEntityChangeNotifier.class).toProvider(MockNotifier.class);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Guice module which sets TypeCache implementation class configuration property to {@link StoreBackedTypeCache}.
|
||||
*
|
||||
*/
|
||||
public static class StoreBackedTypeCacheTestModule extends TestOnlyModule {
|
||||
@Override
|
||||
protected void bindTypeCache() {
|
||||
bind(TypeCache.class).to(StoreBackedTypeCache.class).asEagerSingleton();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -20,10 +20,11 @@ package org.apache.atlas;
|
|||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Provider;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.listener.EntityChangeListener;
|
||||
import org.apache.atlas.listener.TypesChangeListener;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.audit.InMemoryEntityAuditRepository;
|
||||
import org.apache.atlas.repository.graph.AtlasGraphProvider;
|
||||
import org.apache.atlas.repository.graph.GraphBackedMetadataRepository;
|
||||
import org.apache.atlas.repository.graph.GraphBackedSearchIndexer;
|
||||
|
|
@ -64,7 +65,6 @@ import java.math.BigDecimal;
|
|||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
|
@ -600,20 +600,18 @@ public final class TestUtils {
|
|||
typeCache = new DefaultTypeCache();
|
||||
}
|
||||
final GraphBackedSearchIndexer indexer = new GraphBackedSearchIndexer(new AtlasTypeRegistry());
|
||||
Provider<TypesChangeListener> indexerProvider = new Provider<TypesChangeListener>() {
|
||||
|
||||
@Override
|
||||
public TypesChangeListener get() {
|
||||
return indexer;
|
||||
}
|
||||
};
|
||||
|
||||
Configuration config = ApplicationProperties.get();
|
||||
ITypeStore typeStore = new GraphBackedTypeStore();
|
||||
ITypeStore typeStore = new GraphBackedTypeStore(AtlasGraphProvider.getGraphInstance());
|
||||
DefaultMetadataService defaultMetadataService = new DefaultMetadataService(repo,
|
||||
typeStore,
|
||||
Collections.singletonList(indexerProvider),
|
||||
new ArrayList<Provider<EntityChangeListener>>(), TypeSystem.getInstance(), config, typeCache);
|
||||
new HashSet<TypesChangeListener>() {{ add(indexer); }},
|
||||
new HashSet<EntityChangeListener>(),
|
||||
TypeSystem.getInstance(),
|
||||
config,
|
||||
typeCache,
|
||||
// Fixme: Can we work with Noop
|
||||
new InMemoryEntityAuditRepository());
|
||||
|
||||
//commit the created types
|
||||
getGraph().commit();
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@
|
|||
package org.apache.atlas.discovery;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.BaseRepositoryTest;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.query.QueryParams;
|
||||
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.Referenceable;
|
||||
|
|
@ -55,7 +55,7 @@ import static org.testng.Assert.fail;
|
|||
/**
|
||||
* Unit tests for Hive LineageService.
|
||||
*/
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class DataSetLineageServiceTest extends BaseRepositoryTest {
|
||||
|
||||
@Inject
|
||||
|
|
@ -400,7 +400,7 @@ public class DataSetLineageServiceTest extends BaseRepositoryTest {
|
|||
|
||||
//Delete the entity. Lineage for entity returns the same results as before.
|
||||
//Lineage for table name throws EntityNotFoundException
|
||||
AtlasClient.EntityResult deleteResult = repository.deleteEntities(Arrays.asList(tableId));
|
||||
EntityResult deleteResult = repository.deleteEntities(Arrays.asList(tableId));
|
||||
assertTrue(deleteResult.getDeletedEntities().contains(tableId));
|
||||
|
||||
results = new JSONObject(lineageService.getSchemaForEntity(tableId));
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import com.google.common.collect.ImmutableSet;
|
|||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.BaseRepositoryTest;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.discovery.graph.GraphBackedDiscoveryService;
|
||||
import org.apache.atlas.query.QueryParams;
|
||||
|
|
@ -62,7 +62,7 @@ import static org.apache.atlas.typesystem.types.utils.TypesUtil.createRequiredAt
|
|||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class GraphBackedDiscoveryServiceTest extends BaseRepositoryTest {
|
||||
|
||||
@Inject
|
||||
|
|
|
|||
|
|
@ -19,15 +19,15 @@
|
|||
package org.apache.atlas.lineage;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.AtlasErrorCode;
|
||||
import org.apache.atlas.BaseRepositoryTest;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.discovery.EntityLineageService;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.instance.AtlasEntity.Status;
|
||||
import org.apache.atlas.model.instance.AtlasEntityHeader;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.model.lineage.AtlasLineageInfo;
|
||||
import org.apache.atlas.model.lineage.AtlasLineageInfo.LineageDirection;
|
||||
import org.apache.atlas.model.lineage.AtlasLineageInfo.LineageRelation;
|
||||
|
|
@ -56,7 +56,7 @@ import static org.testng.Assert.fail;
|
|||
/**
|
||||
* Unit tests for the new v2 Instance LineageService.
|
||||
*/
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class EntityLineageServiceTest extends BaseRepositoryTest {
|
||||
|
||||
@Inject
|
||||
|
|
@ -301,7 +301,7 @@ public class EntityLineageServiceTest extends BaseRepositoryTest {
|
|||
|
||||
//Delete the table entity. Lineage for entity returns the same results as before.
|
||||
//Lineage for table name throws EntityNotFoundException
|
||||
AtlasClient.EntityResult deleteResult = repository.deleteEntities(Arrays.asList(entityGuid));
|
||||
EntityResult deleteResult = repository.deleteEntities(Arrays.asList(entityGuid));
|
||||
assertTrue(deleteResult.getDeletedEntities().contains(entityGuid));
|
||||
|
||||
inputLineage = getInputLineageInfo(entityGuid, 5);
|
||||
|
|
|
|||
|
|
@ -63,12 +63,12 @@ public abstract class AbstractGremlinQueryOptimizerTest implements IAtlasGraphPr
|
|||
private final GraphPersistenceStrategies STRATEGY = mock(GraphPersistenceStrategies.class);
|
||||
|
||||
@BeforeClass
|
||||
public void setUp() {
|
||||
public void setUp() throws RepositoryException {
|
||||
GremlinQueryOptimizer.reset();
|
||||
GremlinQueryOptimizer.setExpressionFactory(getFactory());
|
||||
when(STRATEGY.typeAttributeName()).thenReturn(Constants.ENTITY_TYPE_PROPERTY_KEY);
|
||||
when(STRATEGY.superTypeAttributeName()).thenReturn(Constants.SUPER_TYPES_PROPERTY_KEY);
|
||||
repo = new GraphBackedMetadataRepository(this, new HardDeleteHandler(TypeSystem.getInstance()));
|
||||
repo = new GraphBackedMetadataRepository(new HardDeleteHandler(TypeSystem.getInstance()), this.get());
|
||||
}
|
||||
|
||||
private FieldInfo getTestFieldInfo() throws AtlasException {
|
||||
|
|
|
|||
|
|
@ -21,12 +21,12 @@ package org.apache.atlas.repository.graph;
|
|||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import org.apache.atlas.AtlasClient;
|
||||
import org.apache.atlas.AtlasClient.EntityResult;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.CreateUpdateEntitiesResult;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.model.legacy.EntityResult;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
|
|
@ -53,6 +53,7 @@ import org.testng.annotations.BeforeMethod;
|
|||
import org.testng.annotations.Guice;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
|
@ -72,7 +73,7 @@ import static org.testng.Assert.fail;
|
|||
* Guice loads the dependencies and injects the necessary objects
|
||||
*
|
||||
*/
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
||||
|
||||
protected MetadataRepository repositoryService;
|
||||
|
|
@ -83,6 +84,9 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
|
||||
private ClassType compositeMapValueType;
|
||||
|
||||
@Inject
|
||||
AtlasGraph atlasGraph;
|
||||
|
||||
@BeforeClass
|
||||
public void setUp() throws Exception {
|
||||
|
||||
|
|
@ -90,7 +94,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
typeSystem.reset();
|
||||
|
||||
new GraphBackedSearchIndexer(new AtlasTypeRegistry());
|
||||
final GraphBackedMetadataRepository delegate = new GraphBackedMetadataRepository(getDeleteHandler(typeSystem));
|
||||
final GraphBackedMetadataRepository delegate = new GraphBackedMetadataRepository(getDeleteHandler(typeSystem), atlasGraph);
|
||||
|
||||
repositoryService = TestUtils.addTransactionWrapper(delegate);
|
||||
|
||||
|
|
@ -126,7 +130,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
@AfterClass
|
||||
public void tearDown() throws Exception {
|
||||
TypeSystem.getInstance().reset();
|
||||
AtlasGraphProvider.cleanup();
|
||||
// AtlasGraphProvider.cleanup();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -194,7 +198,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
table.set(COLUMNS_ATTR_NAME, Arrays.asList(new Id(colId, 0, COLUMN_TYPE)));
|
||||
String tableId = createInstance(table);
|
||||
|
||||
AtlasClient.EntityResult entityResult = deleteEntities(colId);
|
||||
EntityResult entityResult = deleteEntities(colId);
|
||||
assertEquals(entityResult.getDeletedEntities().size(), 1);
|
||||
assertEquals(entityResult.getDeletedEntities().get(0), colId);
|
||||
assertEquals(entityResult.getUpdateEntities().size(), 1);
|
||||
|
|
@ -227,7 +231,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
|
||||
protected abstract void assertEntityDeleted(String id) throws Exception;
|
||||
|
||||
private AtlasClient.EntityResult deleteEntities(String... id) throws Exception {
|
||||
private EntityResult deleteEntities(String... id) throws Exception {
|
||||
RequestContext.createContext();
|
||||
return repositoryService.deleteEntities(Arrays.asList(id));
|
||||
}
|
||||
|
|
@ -261,7 +265,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
String colId = columns.get(0).getId()._getId();
|
||||
String tableId = tableInstance.getId()._getId();
|
||||
|
||||
AtlasClient.EntityResult entityResult = deleteEntities(colId);
|
||||
EntityResult entityResult = deleteEntities(colId);
|
||||
assertEquals(entityResult.getDeletedEntities().size(), 1);
|
||||
assertEquals(entityResult.getDeletedEntities().get(0), colId);
|
||||
assertEquals(entityResult.getUpdateEntities().size(), 1);
|
||||
|
|
@ -389,7 +393,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
return entityDefinition;
|
||||
}
|
||||
|
||||
private AtlasClient.EntityResult updatePartial(ITypedReferenceableInstance entity) throws RepositoryException {
|
||||
private EntityResult updatePartial(ITypedReferenceableInstance entity) throws RepositoryException {
|
||||
RequestContext.createContext();
|
||||
return repositoryService.updatePartial(entity).getEntityResult();
|
||||
}
|
||||
|
|
@ -419,7 +423,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
ClassType personType = typeSystem.getDataType(ClassType.class, "Person");
|
||||
ITypedReferenceableInstance maxEntity = personType.createInstance(max.getId());
|
||||
maxEntity.set("mentor", johnGuid);
|
||||
AtlasClient.EntityResult entityResult = updatePartial(maxEntity);
|
||||
EntityResult entityResult = updatePartial(maxEntity);
|
||||
assertEquals(entityResult.getUpdateEntities().size(), 1);
|
||||
assertTrue(entityResult.getUpdateEntities().contains(maxGuid));
|
||||
|
||||
|
|
@ -512,7 +516,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
Assert.assertTrue(subordinateIds.contains(maxGuid));
|
||||
|
||||
|
||||
AtlasClient.EntityResult entityResult = deleteEntities(maxGuid);
|
||||
EntityResult entityResult = deleteEntities(maxGuid);
|
||||
ITypedReferenceableInstance john = repositoryService.getEntityDefinition("Person", "name", "John");
|
||||
|
||||
assertEquals(entityResult.getDeletedEntities().size(), 1);
|
||||
|
|
@ -560,7 +564,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
String columnGuid = columns.get(0).getId()._getId();
|
||||
|
||||
// Delete the column.
|
||||
AtlasClient.EntityResult entityResult = deleteEntities(columnGuid);
|
||||
EntityResult entityResult = deleteEntities(columnGuid);
|
||||
assertEquals(entityResult.getDeletedEntities().size(), 1);
|
||||
Assert.assertTrue(entityResult.getDeletedEntities().contains(columnGuid));
|
||||
assertEquals(entityResult.getUpdateEntities().size(), 1);
|
||||
|
|
@ -672,7 +676,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
Assert.assertEquals(refList.get(0).getId()._getId(), traitTargetGuid);
|
||||
|
||||
// Delete the entities that are targets of the struct and trait instances.
|
||||
AtlasClient.EntityResult entityResult = deleteEntities(structTargetGuid, traitTargetGuid);
|
||||
EntityResult entityResult = deleteEntities(structTargetGuid, traitTargetGuid);
|
||||
Assert.assertEquals(entityResult.getDeletedEntities().size(), 2);
|
||||
Assert.assertTrue(entityResult.getDeletedEntities().containsAll(Arrays.asList(structTargetGuid, traitTargetGuid)));
|
||||
assertEntityDeleted(structTargetGuid);
|
||||
|
|
@ -1037,7 +1041,7 @@ public abstract class GraphBackedMetadataRepositoryDeleteTestBase {
|
|||
String table2Id = createInstance(table2);
|
||||
|
||||
// Delete the tables and column
|
||||
AtlasClient.EntityResult entityResult = deleteEntities(table1Id, colId, table2Id);
|
||||
EntityResult entityResult = deleteEntities(table1Id, colId, table2Id);
|
||||
Assert.assertEquals(entityResult.getDeletedEntities().size(), 3);
|
||||
Assert.assertTrue(entityResult.getDeletedEntities().containsAll(Arrays.asList(colId, table1Id, table2Id)));
|
||||
assertEntityDeleted(table1Id);
|
||||
|
|
|
|||
|
|
@ -22,10 +22,10 @@ import com.google.common.collect.ImmutableList;
|
|||
import com.google.common.collect.ImmutableSet;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.CreateUpdateEntitiesResult;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.RequestContext;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.discovery.graph.GraphBackedDiscoveryService;
|
||||
import org.apache.atlas.query.QueryParams;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
|
|
@ -92,7 +92,7 @@ import static org.testng.Assert.assertTrue;
|
|||
* Guice loads the dependencies and injects the necessary objects
|
||||
*
|
||||
*/
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class GraphBackedMetadataRepositoryTest {
|
||||
|
||||
@Inject
|
||||
|
|
@ -126,7 +126,7 @@ public class GraphBackedMetadataRepositoryTest {
|
|||
@AfterClass
|
||||
public void tearDown() throws Exception {
|
||||
TypeSystem.getInstance().reset();
|
||||
AtlasGraphProvider.cleanup();
|
||||
// AtlasGraphProvider.cleanup();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ package org.apache.atlas.repository.graph;
|
|||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
|
|
@ -41,12 +41,10 @@ import org.testng.annotations.Test;
|
|||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
|
||||
import static org.testng.Assert.assertFalse;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class GraphBackedSearchIndexerTest {
|
||||
@Inject
|
||||
private GraphBackedSearchIndexer graphBackedSearchIndexer;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import org.apache.atlas.AtlasException;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.repository.graph.GraphHelper.VertexInfo;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
|
|
@ -56,7 +56,7 @@ import java.util.Set;
|
|||
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class GraphHelperTest {
|
||||
|
||||
|
||||
|
|
@ -104,7 +104,7 @@ public class GraphHelperTest {
|
|||
|
||||
@AfterClass
|
||||
public void tearDown() {
|
||||
AtlasGraphProvider.cleanup();
|
||||
// AtlasGraphProvider.cleanup();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@ package org.apache.atlas.repository.graph;
|
|||
|
||||
import org.apache.atlas.ApplicationProperties;
|
||||
import org.apache.atlas.CreateUpdateEntitiesResult;
|
||||
import org.apache.atlas.GraphTransaction;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.annotation.GraphTransaction;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.RepositoryException;
|
||||
import org.apache.atlas.repository.graphdb.AtlasGraph;
|
||||
|
|
@ -54,7 +54,7 @@ import java.util.Date;
|
|||
import java.util.Iterator;
|
||||
|
||||
@Test
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class GraphRepoMapperScaleTest {
|
||||
|
||||
private static final String DATABASE_NAME = "foo";
|
||||
|
|
@ -89,7 +89,7 @@ public class GraphRepoMapperScaleTest {
|
|||
@AfterClass
|
||||
public void tearDown() throws Exception {
|
||||
TypeSystem.getInstance().reset();
|
||||
AtlasGraphProvider.cleanup();
|
||||
// AtlasGraphProvider.cleanup();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -17,9 +17,10 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Guice;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -28,14 +29,8 @@ import java.util.List;
|
|||
* Run tests in {@link ReverseReferenceUpdateTestBase} with hard delete enabled.
|
||||
*
|
||||
*/
|
||||
@Guice(modules = TestModules.HardDeleteModule.class)
|
||||
public class ReverseReferenceUpdateHardDeleteTest extends ReverseReferenceUpdateTestBase {
|
||||
|
||||
@Override
|
||||
DeleteHandler getDeleteHandler(TypeSystem typeSystem) {
|
||||
|
||||
return new HardDeleteHandler(typeSystem);
|
||||
}
|
||||
|
||||
@Override
|
||||
void assertTestOneToOneReference(Object refValue, ITypedReferenceableInstance expectedValue, ITypedReferenceableInstance referencingInstance) throws Exception {
|
||||
// Verify reference was disconnected
|
||||
|
|
@ -48,5 +43,4 @@ public class ReverseReferenceUpdateHardDeleteTest extends ReverseReferenceUpdate
|
|||
List<ITypedReferenceableInstance> refValues = (List<ITypedReferenceableInstance>) object;
|
||||
Assert.assertEquals(refValues.size(), 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,13 +17,14 @@
|
|||
*/
|
||||
package org.apache.atlas.repository.graph;
|
||||
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.repository.Constants;
|
||||
import org.apache.atlas.repository.graphdb.AtlasEdge;
|
||||
import org.apache.atlas.repository.graphdb.AtlasVertex;
|
||||
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.persistence.Id;
|
||||
import org.apache.atlas.typesystem.types.TypeSystem;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Guice;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
|
@ -33,14 +34,8 @@ import java.util.List;
|
|||
* Run tests in {@link ReverseReferenceUpdateTestBase} with soft delete enabled.
|
||||
*
|
||||
*/
|
||||
@Guice(modules = TestModules.SoftDeleteModule.class)
|
||||
public class ReverseReferenceUpdateSoftDeleteTest extends ReverseReferenceUpdateTestBase {
|
||||
|
||||
@Override
|
||||
DeleteHandler getDeleteHandler(TypeSystem typeSystem) {
|
||||
|
||||
return new SoftDeleteHandler(typeSystem);
|
||||
}
|
||||
|
||||
@Override
|
||||
void assertTestOneToOneReference(Object actual, ITypedReferenceableInstance expectedValue, ITypedReferenceableInstance referencingInstance) throws Exception {
|
||||
// Verify reference was not disconnected if soft deletes are enabled.
|
||||
|
|
|
|||
|
|
@ -21,10 +21,8 @@ import com.google.common.collect.ImmutableList;
|
|||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.CreateUpdateEntitiesResult;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestUtils;
|
||||
import org.apache.atlas.repository.MetadataRepository;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.apache.atlas.typesystem.ITypedReferenceableInstance;
|
||||
import org.apache.atlas.typesystem.TypesDef;
|
||||
import org.apache.atlas.typesystem.types.AttributeDefinition;
|
||||
|
|
@ -40,7 +38,6 @@ import org.apache.atlas.typesystem.types.utils.TypesUtil;
|
|||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Guice;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
|
@ -52,9 +49,7 @@ import java.util.Map;
|
|||
* Verifies automatic update of reverse references
|
||||
*
|
||||
*/
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
public abstract class ReverseReferenceUpdateTestBase {
|
||||
|
||||
@Inject
|
||||
MetadataRepository repositoryService;
|
||||
|
||||
|
|
@ -63,8 +58,6 @@ public abstract class ReverseReferenceUpdateTestBase {
|
|||
protected ClassType typeA;
|
||||
protected ClassType typeB;
|
||||
|
||||
abstract DeleteHandler getDeleteHandler(TypeSystem typeSystem);
|
||||
|
||||
abstract void assertTestOneToOneReference(Object actual, ITypedReferenceableInstance expectedValue, ITypedReferenceableInstance referencingInstance) throws Exception;
|
||||
abstract void assertTestOneToManyReference(Object refValue, ITypedReferenceableInstance referencingInstance) throws Exception;
|
||||
|
||||
|
|
@ -73,8 +66,6 @@ public abstract class ReverseReferenceUpdateTestBase {
|
|||
typeSystem = TypeSystem.getInstance();
|
||||
typeSystem.reset();
|
||||
|
||||
new GraphBackedSearchIndexer(new AtlasTypeRegistry());
|
||||
|
||||
HierarchicalTypeDefinition<ClassType> aDef = TypesUtil.createClassTypeDef("A", ImmutableSet.<String>of(),
|
||||
TypesUtil.createRequiredAttrDef("name", DataTypes.STRING_TYPE),
|
||||
new AttributeDefinition("b", "B", Multiplicity.OPTIONAL, false, "a"), // 1-1
|
||||
|
|
@ -95,7 +86,6 @@ public abstract class ReverseReferenceUpdateTestBase {
|
|||
typeA = typeSystem.getDataType(ClassType.class, "A");
|
||||
typeB = typeSystem.getDataType(ClassType.class, "B");
|
||||
|
||||
repositoryService = new GraphBackedMetadataRepository(getDeleteHandler(typeSystem));
|
||||
repositoryService = TestUtils.addTransactionWrapper(repositoryService);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
package org.apache.atlas.repository.impexp;
|
||||
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.TestUtilsV2;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.model.impexp.AtlasExportRequest;
|
||||
|
|
@ -33,20 +32,21 @@ import org.apache.atlas.repository.store.graph.v1.AtlasEntityChangeNotifier;
|
|||
import org.apache.atlas.repository.store.graph.v1.AtlasEntityStoreV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.AtlasEntityStream;
|
||||
import org.apache.atlas.repository.store.graph.v1.DeleteHandlerV1;
|
||||
import org.apache.atlas.repository.store.graph.v1.EntityGraphMapper;
|
||||
import org.apache.atlas.repository.store.graph.v1.SoftDeleteHandlerV1;
|
||||
import org.apache.atlas.store.AtlasTypeDefStore;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
import org.powermock.reflect.Whitebox;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.testng.Assert;
|
||||
import org.powermock.reflect.Whitebox;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Guice;
|
||||
import org.testng.annotations.Test;
|
||||
import scala.actors.threadpool.Arrays;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
|
|
@ -61,7 +61,7 @@ import static org.testng.Assert.assertEquals;
|
|||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class ExportServiceTest {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ExportServiceTest.class);
|
||||
|
||||
|
|
@ -71,6 +71,9 @@ public class ExportServiceTest {
|
|||
@Inject
|
||||
private AtlasTypeDefStore typeDefStore;
|
||||
|
||||
@Inject
|
||||
private EntityGraphMapper graphMapper;
|
||||
@Inject
|
||||
ExportService exportService;
|
||||
private DeleteHandlerV1 deleteHandler = mock(SoftDeleteHandlerV1.class);;
|
||||
private AtlasEntityChangeNotifier mockChangeNotifier = mock(AtlasEntityChangeNotifier.class);
|
||||
|
|
@ -78,7 +81,7 @@ public class ExportServiceTest {
|
|||
|
||||
@BeforeClass
|
||||
public void setupSampleData() throws AtlasBaseException {
|
||||
entityStore = new AtlasEntityStoreV1(deleteHandler, typeRegistry, mockChangeNotifier);;
|
||||
entityStore = new AtlasEntityStoreV1(deleteHandler, typeRegistry, mockChangeNotifier, graphMapper);;
|
||||
|
||||
AtlasTypesDef sampleTypes = TestUtilsV2.defineDeptEmployeeTypes();
|
||||
AtlasTypesDef typesToCreate = AtlasTypeDefStoreInitializer.getTypesToCreate(sampleTypes, typeRegistry);
|
||||
|
|
@ -94,11 +97,6 @@ public class ExportServiceTest {
|
|||
LOG.debug("==> setupSampleData: ", AtlasEntity.dumpObjects(hrDept.getEntities(), null).toString());
|
||||
}
|
||||
|
||||
@BeforeTest
|
||||
public void setupExportService () throws AtlasBaseException {
|
||||
exportService = new ExportService(typeRegistry);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public void clear() {
|
||||
AtlasGraphProvider.cleanup();
|
||||
|
|
@ -257,33 +255,33 @@ public class ExportServiceTest {
|
|||
@Test
|
||||
public void verifyOverallStatus() throws Exception {
|
||||
|
||||
ExportService service = new ExportService(typeRegistry);
|
||||
assertEquals(AtlasExportResult.OperationStatus.FAIL, Whitebox.invokeMethod(service,
|
||||
// ExportService service = new ExportService(typeRegistry);
|
||||
assertEquals(AtlasExportResult.OperationStatus.FAIL, Whitebox.invokeMethod(exportService,
|
||||
"getOverallOperationStatus"));
|
||||
|
||||
assertEquals(AtlasExportResult.OperationStatus.SUCCESS, Whitebox.invokeMethod(service,
|
||||
assertEquals(AtlasExportResult.OperationStatus.SUCCESS, Whitebox.invokeMethod(exportService,
|
||||
"getOverallOperationStatus",
|
||||
AtlasExportResult.OperationStatus.SUCCESS));
|
||||
|
||||
assertEquals(AtlasExportResult.OperationStatus.SUCCESS, Whitebox.invokeMethod(service,
|
||||
assertEquals(AtlasExportResult.OperationStatus.SUCCESS, Whitebox.invokeMethod(exportService,
|
||||
"getOverallOperationStatus",
|
||||
AtlasExportResult.OperationStatus.SUCCESS,
|
||||
AtlasExportResult.OperationStatus.SUCCESS,
|
||||
AtlasExportResult.OperationStatus.SUCCESS));
|
||||
|
||||
assertEquals(AtlasExportResult.OperationStatus.PARTIAL_SUCCESS, Whitebox.invokeMethod(service,
|
||||
assertEquals(AtlasExportResult.OperationStatus.PARTIAL_SUCCESS, Whitebox.invokeMethod(exportService,
|
||||
"getOverallOperationStatus",
|
||||
AtlasExportResult.OperationStatus.FAIL,
|
||||
AtlasExportResult.OperationStatus.PARTIAL_SUCCESS,
|
||||
AtlasExportResult.OperationStatus.SUCCESS));
|
||||
|
||||
assertEquals(AtlasExportResult.OperationStatus.PARTIAL_SUCCESS, Whitebox.invokeMethod(service,
|
||||
assertEquals(AtlasExportResult.OperationStatus.PARTIAL_SUCCESS, Whitebox.invokeMethod(exportService,
|
||||
"getOverallOperationStatus",
|
||||
AtlasExportResult.OperationStatus.FAIL,
|
||||
AtlasExportResult.OperationStatus.FAIL,
|
||||
AtlasExportResult.OperationStatus.PARTIAL_SUCCESS));
|
||||
|
||||
assertEquals(AtlasExportResult.OperationStatus.FAIL, Whitebox.invokeMethod(service,
|
||||
assertEquals(AtlasExportResult.OperationStatus.FAIL, Whitebox.invokeMethod(exportService,
|
||||
"getOverallOperationStatus",
|
||||
AtlasExportResult.OperationStatus.FAIL,
|
||||
AtlasExportResult.OperationStatus.FAIL,
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
package org.apache.atlas.repository.impexp;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.repository.store.graph.AtlasEntityStore;
|
||||
import org.apache.atlas.store.AtlasTypeDefStore;
|
||||
import org.apache.atlas.type.AtlasTypeRegistry;
|
||||
|
|
@ -26,7 +26,7 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
import org.testng.annotations.Guice;
|
||||
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class ImportServiceReportingTest {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ImportServiceReportingTest.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
package org.apache.atlas.repository.impexp;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.apache.atlas.TestOnlyModule;
|
||||
import org.apache.atlas.TestModules;
|
||||
import org.apache.atlas.exception.AtlasBaseException;
|
||||
import org.apache.atlas.repository.store.graph.AtlasEntityStore;
|
||||
import org.apache.atlas.store.AtlasTypeDefStore;
|
||||
|
|
@ -36,7 +36,7 @@ import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.getZip
|
|||
import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.loadModelFromJson;
|
||||
import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.runAndVerifyQuickStart_v1_Import;
|
||||
|
||||
@Guice(modules = TestOnlyModule.class)
|
||||
@Guice(modules = TestModules.TestOnlyModule.class)
|
||||
public class ImportServiceTest {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ImportServiceTest.class);
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue