Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
3e4fb5cd
Commit
3e4fb5cd
authored
6 years ago
by
Madhan Neethiraj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-3054: updated notification pre-process to handle updates to ownedRef attributes - #3
parent
d234de2d
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
325 additions
and
139 deletions
+325
-139
AtlasArrayType.java
intg/src/main/java/org/apache/atlas/type/AtlasArrayType.java
+0
-0
AtlasEntityType.java
.../src/main/java/org/apache/atlas/type/AtlasEntityType.java
+36
-40
AtlasRelationshipType.java
...ain/java/org/apache/atlas/type/AtlasRelationshipType.java
+9
-2
AtlasStructType.java
.../src/main/java/org/apache/atlas/type/AtlasStructType.java
+1
-0
AtlasTypeUtil.java
intg/src/main/java/org/apache/atlas/type/AtlasTypeUtil.java
+27
-0
TestAtlasStructType.java
.../test/java/org/apache/atlas/type/TestAtlasStructType.java
+2
-2
AtlasStructFormatConverter.java
...las/repository/converters/AtlasStructFormatConverter.java
+1
-1
AtlasEntityStream.java
...he/atlas/repository/store/graph/v2/AtlasEntityStream.java
+5
-0
NotificationHookConsumer.java
...g/apache/atlas/notification/NotificationHookConsumer.java
+49
-23
EntityPreprocessor.java
...e/atlas/notification/preprocessor/EntityPreprocessor.java
+1
-0
HivePreprocessor.java
...che/atlas/notification/preprocessor/HivePreprocessor.java
+4
-59
PreprocessorContext.java
.../atlas/notification/preprocessor/PreprocessorContext.java
+179
-7
RdbmsPreprocessor.java
...he/atlas/notification/preprocessor/RdbmsPreprocessor.java
+11
-5
No files found.
intg/src/main/java/org/apache/atlas/type/AtlasArrayType.java
View file @
3e4fb5cd
This diff is collapsed.
Click to expand it.
intg/src/main/java/org/apache/atlas/type/AtlasEntityType.java
View file @
3e4fb5cd
...
...
@@ -22,7 +22,6 @@ import org.apache.atlas.AtlasErrorCode;
import
org.apache.atlas.exception.AtlasBaseException
;
import
org.apache.atlas.model.instance.AtlasEntity
;
import
org.apache.atlas.model.instance.AtlasObjectId
;
import
org.apache.atlas.model.instance.AtlasStruct
;
import
org.apache.atlas.model.typedef.AtlasEntityDef
;
import
org.apache.atlas.model.typedef.AtlasEntityDef.AtlasRelationshipAttributeDef
;
import
org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef
;
...
...
@@ -544,7 +543,9 @@ public class AtlasEntityType extends AtlasStructType {
superType
.
normalizeAttributeValues
(
ent
);
}
normalizeValues
(
ent
);
super
.
normalizeAttributeValues
(
ent
);
normalizeRelationshipAttributeValues
(
ent
,
false
);
}
}
...
...
@@ -555,6 +556,8 @@ public class AtlasEntityType extends AtlasStructType {
}
super
.
normalizeAttributeValuesForUpdate
(
ent
);
normalizeRelationshipAttributeValues
(
ent
,
true
);
}
}
...
...
@@ -565,7 +568,9 @@ public class AtlasEntityType extends AtlasStructType {
superType
.
normalizeAttributeValues
(
obj
);
}
normalizeValues
(
obj
);
super
.
normalizeAttributeValues
(
obj
);
normalizeRelationshipAttributeValues
(
obj
,
false
);
}
}
...
...
@@ -576,6 +581,8 @@ public class AtlasEntityType extends AtlasStructType {
}
super
.
normalizeAttributeValuesForUpdate
(
obj
);
normalizeRelationshipAttributeValues
(
obj
,
true
);
}
}
...
...
@@ -743,67 +750,56 @@ public class AtlasEntityType extends AtlasStructType {
return
ret
;
}
private
void
normalizeRelationshipAttributeValues
(
AtlasStruct
obj
)
{
if
(
obj
!=
null
&&
obj
instanceof
AtlasEntity
)
{
AtlasEntity
entityObj
=
(
AtlasEntity
)
obj
;
private
void
normalizeRelationshipAttributeValues
(
AtlasEntity
entity
,
boolean
isUpdate
)
{
if
(
entity
!=
null
)
{
for
(
String
attributeName
:
relationshipAttributes
.
keySet
())
{
if
(
entity
Obj
.
hasRelationshipAttribute
(
attributeName
))
{
Object
attributeValue
=
entityObj
.
getRelationshipAttribute
(
attributeName
);
if
(
entity
.
hasRelationshipAttribute
(
attributeName
))
{
Object
attributeValue
=
entity
.
getRelationshipAttribute
(
attributeName
);
String
relationshipType
=
AtlasEntityUtil
.
getRelationshipType
(
attributeValue
);
AtlasAttribute
attribute
=
getRelationshipAttribute
(
attributeName
,
relationshipType
);
AtlasAttributeDef
attributeDef
=
attribute
.
getAttributeDef
();
attributeValue
=
getNormalizedValue
(
attributeValue
,
attributeDef
);
if
(
attribute
!=
null
)
{
AtlasType
attrType
=
attribute
.
getAttributeType
();
if
(
isValidRelationshipType
(
attrType
))
{
if
(
isUpdate
)
{
attributeValue
=
attrType
.
getNormalizedValueForUpdate
(
attributeValue
);
}
else
{
attributeValue
=
attrType
.
getNormalizedValue
(
attributeValue
);
}
entityObj
.
setRelationshipAttribute
(
attributeName
,
attributeValue
);
entity
.
setRelationshipAttribute
(
attributeName
,
attributeValue
);
}
}
}
}
}
}
public
void
normalizeRelationshipAttributeValues
(
Map
<
String
,
Object
>
obj
)
{
public
void
normalizeRelationshipAttributeValues
(
Map
<
String
,
Object
>
obj
,
boolean
isUpdate
)
{
if
(
obj
!=
null
)
{
for
(
String
attributeName
:
relationshipAttributes
.
keySet
())
{
if
(
obj
.
containsKey
(
attributeName
))
{
Object
attributeValue
=
obj
.
get
(
attributeName
);
String
relationshipType
=
AtlasEntityUtil
.
getRelationshipType
(
attributeValue
);
AtlasAttribute
attribute
=
getRelationshipAttribute
(
attributeName
,
relationshipType
);
AtlasAttributeDef
attributeDef
=
attribute
.
getAttributeDef
();
attributeValue
=
getNormalizedValue
(
attributeValue
,
attributeDef
);
obj
.
put
(
attributeName
,
attributeValue
);
}
}
}
}
private
Object
getNormalizedValue
(
Object
value
,
AtlasAttributeDef
attributeDef
)
{
String
relationshipType
=
AtlasEntityUtil
.
getRelationshipType
(
value
);
AtlasAttribute
attribute
=
getRelationshipAttribute
(
attributeDef
.
getName
(),
relationshipType
);
if
(
attribute
!=
null
)
{
AtlasType
attrType
=
attribute
.
getAttributeType
();
if
(
isValidRelationshipType
(
attrType
)
&&
value
!=
null
)
{
return
attrType
.
getNormalizedValue
(
value
);
}
if
(
isValidRelationshipType
(
attrType
))
{
if
(
isUpdate
)
{
attributeValue
=
attrType
.
getNormalizedValueForUpdate
(
attributeValue
);
}
else
{
attributeValue
=
attrType
.
getNormalizedValue
(
attributeValue
);
}
return
null
;
obj
.
put
(
attributeName
,
attributeValue
);
}
}
}
}
private
void
normalizeValues
(
AtlasEntity
ent
)
{
super
.
normalizeAttributeValues
(
ent
);
normalizeRelationshipAttributeValues
(
ent
);
}
private
void
normalizeValues
(
Map
<
String
,
Object
>
obj
)
{
super
.
normalizeAttributeValues
(
obj
);
normalizeRelationshipAttributeValues
(
obj
);
}
private
boolean
validateRelationshipAttributes
(
Object
obj
,
String
objName
,
List
<
String
>
messages
)
{
...
...
This diff is collapsed.
Click to expand it.
intg/src/main/java/org/apache/atlas/type/AtlasRelationshipType.java
View file @
3e4fb5cd
...
...
@@ -346,8 +346,15 @@ public class AtlasRelationshipType extends AtlasStructType {
attributeDef
.
addConstraint
(
constraint
);
}
attribute
=
new
AtlasAttribute
(
entityType
,
attributeDef
,
typeRegistry
.
getType
(
attrTypeName
),
getTypeName
(),
relationshipLabel
);
AtlasType
attrType
=
typeRegistry
.
getType
(
attrTypeName
);
if
(
attrType
instanceof
AtlasArrayType
)
{
AtlasArrayType
arrayType
=
(
AtlasArrayType
)
attrType
;
arrayType
.
setCardinality
(
attributeDef
.
getCardinality
());
}
attribute
=
new
AtlasAttribute
(
entityType
,
attributeDef
,
attrType
,
getTypeName
(),
relationshipLabel
);
attribute
.
setLegacyAttribute
(
endDef
.
getIsLegacyAttribute
());
}
else
{
...
...
This diff is collapsed.
Click to expand it.
intg/src/main/java/org/apache/atlas/type/AtlasStructType.java
View file @
3e4fb5cd
...
...
@@ -99,6 +99,7 @@ public class AtlasStructType extends AtlasType {
arrayType
.
setMinCount
(
attributeDef
.
getValuesMinCount
());
arrayType
.
setMaxCount
(
attributeDef
.
getValuesMaxCount
());
arrayType
.
setCardinality
(
cardinality
);
}
//check if attribute type is not classification
...
...
This diff is collapsed.
Click to expand it.
intg/src/main/java/org/apache/atlas/type/AtlasTypeUtil.java
View file @
3e4fb5cd
...
...
@@ -38,6 +38,7 @@ import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef.Cardinali
import
org.apache.atlas.model.typedef.AtlasStructDef.AtlasConstraintDef
;
import
org.apache.atlas.model.typedef.AtlasTypeDefHeader
;
import
org.apache.atlas.model.typedef.AtlasTypesDef
;
import
org.apache.atlas.type.AtlasStructType.AtlasAttribute
;
import
org.apache.atlas.v1.model.typedef.AttributeDefinition
;
import
org.apache.atlas.v1.model.typedef.ClassTypeDefinition
;
import
org.apache.atlas.v1.model.typedef.Multiplicity
;
...
...
@@ -413,10 +414,36 @@ public class AtlasTypeUtil {
return
new
AtlasRelatedObjectId
(
getAtlasObjectId
(
entity
));
}
public
static
AtlasRelatedObjectId
toAtlasRelatedObjectId
(
AtlasEntity
entity
,
AtlasTypeRegistry
typeRegistry
)
{
return
new
AtlasRelatedObjectId
(
getAtlasObjectId
(
entity
,
typeRegistry
));
}
public
static
AtlasObjectId
getAtlasObjectId
(
AtlasEntity
entity
)
{
return
new
AtlasObjectId
(
entity
.
getGuid
(),
entity
.
getTypeName
());
}
public
static
AtlasObjectId
getAtlasObjectId
(
AtlasEntity
entity
,
AtlasTypeRegistry
typeRegistry
)
{
String
typeName
=
entity
.
getTypeName
();
AtlasEntityType
entityType
=
typeRegistry
.
getEntityTypeByName
(
typeName
);
Map
<
String
,
Object
>
uniqAttributes
=
null
;
if
(
entityType
!=
null
&&
MapUtils
.
isNotEmpty
(
entityType
.
getUniqAttributes
()))
{
for
(
AtlasAttribute
attribute
:
entityType
.
getUniqAttributes
().
values
())
{
Object
attrValue
=
entity
.
getAttribute
(
attribute
.
getName
());
if
(
attrValue
!=
null
)
{
if
(
uniqAttributes
==
null
)
{
uniqAttributes
=
new
HashMap
<>();
}
uniqAttributes
.
put
(
attribute
.
getName
(),
attrValue
);
}
}
}
return
new
AtlasObjectId
(
entity
.
getGuid
(),
typeName
,
uniqAttributes
);
}
public
static
AtlasObjectId
getAtlasObjectId
(
AtlasEntityHeader
header
)
{
return
new
AtlasObjectId
(
header
.
getGuid
(),
header
.
getTypeName
());
}
...
...
This diff is collapsed.
Click to expand it.
intg/src/test/java/org/apache/atlas/type/TestAtlasStructType.java
View file @
3e4fb5cd
...
...
@@ -63,12 +63,12 @@ public class TestAtlasStructType {
multiValuedAttribMin
.
setName
(
MULTI_VAL_ATTR_NAME_MIN
);
multiValuedAttribMin
.
setTypeName
(
AtlasBaseTypeDef
.
getArrayTypeName
(
ATLAS_TYPE_INT
));
multiValuedAttribMin
.
setCardinality
(
Cardinality
.
SE
T
);
multiValuedAttribMin
.
setCardinality
(
Cardinality
.
LIS
T
);
multiValuedAttribMin
.
setValuesMinCount
(
MULTI_VAL_ATTR_MIN_COUNT
);
multiValuedAttribMax
.
setName
(
MULTI_VAL_ATTR_NAME_MAX
);
multiValuedAttribMax
.
setTypeName
(
AtlasBaseTypeDef
.
getArrayTypeName
(
ATLAS_TYPE_INT
));
multiValuedAttribMax
.
setCardinality
(
Cardinality
.
LIS
T
);
multiValuedAttribMax
.
setCardinality
(
Cardinality
.
SE
T
);
multiValuedAttribMax
.
setValuesMaxCount
(
MULTI_VAL_ATTR_MAX_COUNT
);
AtlasStructDef
structDef
=
ModelTestUtil
.
newStructDef
();
...
...
This diff is collapsed.
Click to expand it.
repository/src/main/java/org/apache/atlas/repository/converters/AtlasStructFormatConverter.java
View file @
3e4fb5cd
...
...
@@ -190,7 +190,7 @@ public class AtlasStructFormatConverter extends AtlasAbstractFormatConverter {
if
(
entities
!=
null
)
{
v2Value
=
entities
;
attrType
=
new
AtlasArrayType
(
entityType
);
attrType
=
new
AtlasArrayType
(
entityType
,
arrayType
.
getMinCount
(),
arrayType
.
getMaxCount
(),
arrayType
.
getCardinality
()
);
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"{}: replaced objIdList with entityList"
,
attr
.
getQualifiedName
());
...
...
This diff is collapsed.
Click to expand it.
repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStream.java
View file @
3e4fb5cd
...
...
@@ -22,6 +22,7 @@ import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
import
org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo
;
import
java.util.Iterator
;
import
java.util.List
;
public
class
AtlasEntityStream
implements
EntityStream
{
protected
final
AtlasEntitiesWithExtInfo
entitiesWithExtInfo
;
...
...
@@ -33,6 +34,10 @@ public class AtlasEntityStream implements EntityStream {
this
(
new
AtlasEntitiesWithExtInfo
(
entity
),
null
);
}
public
AtlasEntityStream
(
List
<
AtlasEntity
>
entities
)
{
this
(
new
AtlasEntitiesWithExtInfo
(
entities
),
null
);
}
public
AtlasEntityStream
(
AtlasEntityWithExtInfo
entityWithExtInfo
)
{
this
(
new
AtlasEntitiesWithExtInfo
(
entityWithExtInfo
),
null
);
}
...
...
This diff is collapsed.
Click to expand it.
webapp/src/main/java/org/apache/atlas/notification/NotificationHookConsumer.java
View file @
3e4fb5cd
...
...
@@ -34,6 +34,7 @@ import org.apache.atlas.listener.ActiveStateChangeHandler;
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.AtlasEntityHeader
;
import
org.apache.atlas.model.instance.AtlasObjectId
;
import
org.apache.atlas.model.instance.EntityMutationResponse
;
import
org.apache.atlas.model.notification.HookNotification
;
...
...
@@ -79,7 +80,6 @@ import javax.inject.Inject;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
...
...
@@ -492,7 +492,7 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
return
;
}
preProcessNotificationMessage
(
kafkaMsg
);
PreprocessorContext
context
=
preProcessNotificationMessage
(
kafkaMsg
);
if
(
isEmptyMessage
(
kafkaMsg
))
{
commit
(
kafkaMsg
);
...
...
@@ -525,7 +525,7 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
AtlasClient
.
API_V1
.
CREATE_ENTITY
.
getNormalizedPath
());
}
createOrUpdate
(
entities
,
false
);
createOrUpdate
(
entities
,
false
,
context
);
}
break
;
...
...
@@ -546,7 +546,7 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
// There should only be one root entity
entities
.
getEntities
().
get
(
0
).
setGuid
(
guid
);
createOrUpdate
(
entities
,
true
);
createOrUpdate
(
entities
,
true
,
context
);
}
break
;
...
...
@@ -579,7 +579,7 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
AtlasClientV2
.
API_V2
.
UPDATE_ENTITY
.
getNormalizedPath
());
}
createOrUpdate
(
entities
,
false
);
createOrUpdate
(
entities
,
false
,
context
);
}
break
;
...
...
@@ -593,7 +593,7 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
AtlasClientV2
.
API_V2
.
CREATE_ENTITY
.
getNormalizedPath
());
}
createOrUpdate
(
entities
,
false
);
createOrUpdate
(
entities
,
false
,
context
);
}
break
;
...
...
@@ -622,7 +622,7 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
AtlasClientV2
.
API_V2
.
UPDATE_ENTITY
.
getNormalizedPath
());
}
createOrUpdate
(
entities
,
false
);
createOrUpdate
(
entities
,
false
,
context
);
}
break
;
...
...
@@ -708,15 +708,15 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
}
}
private
void
createOrUpdate
(
AtlasEntitiesWithExtInfo
entities
,
boolean
isPartialUpdate
)
throws
AtlasBaseException
{
private
void
createOrUpdate
(
AtlasEntitiesWithExtInfo
entities
,
boolean
isPartialUpdate
,
PreprocessorContext
context
)
throws
AtlasBaseException
{
List
<
AtlasEntity
>
entitiesList
=
entities
.
getEntities
();
AtlasEntityStream
entityStream
=
new
AtlasEntityStream
(
entities
);
if
(
commitBatchSize
<=
0
||
entitiesList
.
size
()
<=
commitBatchSize
)
{
atlasEntityStore
.
createOrUpdate
(
entityStream
,
isPartialUpdate
);
}
else
{
Map
<
String
,
String
>
guidAssignments
=
new
HashMap
<>();
EntityMutationResponse
response
=
atlasEntityStore
.
createOrUpdate
(
entityStream
,
isPartialUpdate
);
recordProcessedEntities
(
response
,
context
);
}
else
{
for
(
int
fromIdx
=
0
;
fromIdx
<
entitiesList
.
size
();
fromIdx
+=
commitBatchSize
)
{
int
toIndex
=
fromIdx
+
commitBatchSize
;
...
...
@@ -726,20 +726,30 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
List
<
AtlasEntity
>
entitiesBatch
=
new
ArrayList
<>(
entitiesList
.
subList
(
fromIdx
,
toIndex
));
updateProcessedEntityReferences
(
entitiesBatch
,
guidAssignments
);
updateProcessedEntityReferences
(
entitiesBatch
,
context
.
getGuidAssignments
()
);
AtlasEntitiesWithExtInfo
batch
=
new
AtlasEntitiesWithExtInfo
(
entitiesBatch
);
AtlasEntityStream
batchStream
=
new
AtlasEntityStream
(
batch
,
entityStream
);
EntityMutationResponse
response
=
atlasEntityStore
.
createOrUpdate
(
batchStream
,
isPartialUpdate
);
recordProcessedEntities
(
response
,
guidAssignments
);
recordProcessedEntities
(
response
,
context
);
RequestContext
.
get
().
resetEntityGuidUpdates
();
RequestContext
.
get
().
clearCache
();
}
}
if
(
context
!=
null
)
{
context
.
prepareForPostUpdate
();
List
<
AtlasEntity
>
postUpdateEntities
=
context
.
getPostUpdateEntities
();
if
(
CollectionUtils
.
isNotEmpty
(
postUpdateEntities
))
{
atlasEntityStore
.
createOrUpdate
(
new
AtlasEntityStream
(
postUpdateEntities
),
true
);
}
}
}
private
void
recordFailedMessages
()
{
...
...
@@ -815,12 +825,11 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
}
}
private
void
preProcessNotificationMessage
(
AtlasKafkaMessage
<
HookNotification
>
kafkaMsg
)
{
if
(!
preprocessEnabled
)
{
return
;
}
private
PreprocessorContext
preProcessNotificationMessage
(
AtlasKafkaMessage
<
HookNotification
>
kafkaMsg
)
{
PreprocessorContext
context
=
null
;
PreprocessorContext
context
=
new
PreprocessorContext
(
kafkaMsg
,
hiveTablesToIgnore
,
hiveTablesToPrune
,
hiveTablesCache
,
hiveTypesRemoveOwnedRefAttrs
,
rdbmsTypesRemoveOwnedRefAttrs
);
if
(
preprocessEnabled
)
{
context
=
new
PreprocessorContext
(
kafkaMsg
,
typeRegistry
,
hiveTablesToIgnore
,
hiveTablesToPrune
,
hiveTablesCache
,
hiveTypesRemoveOwnedRefAttrs
,
rdbmsTypesRemoveOwnedRefAttrs
);
if
(
context
.
isHivePreprocessEnabled
())
{
preprocessHiveTypes
(
context
);
...
...
@@ -860,6 +869,9 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
}
}
return
context
;
}
private
void
rdbmsTypeRemoveOwnedRefAttrs
(
PreprocessorContext
context
)
{
List
<
AtlasEntity
>
entities
=
context
.
getEntities
();
...
...
@@ -1009,12 +1021,26 @@ public class NotificationHookConsumer implements Service, ActiveStateChangeHandl
return
ret
;
}
private
void
recordProcessedEntities
(
EntityMutationResponse
mutationResponse
,
Map
<
String
,
String
>
guidAssignments
)
{
if
(
mutationResponse
!=
null
&&
MapUtils
.
isNotEmpty
(
mutationResponse
.
getGuidAssignments
()))
{
guidAssignments
.
putAll
(
mutationResponse
.
getGuidAssignments
());
private
void
recordProcessedEntities
(
EntityMutationResponse
mutationResponse
,
PreprocessorContext
context
)
{
if
(
mutationResponse
!=
null
&&
context
!=
null
)
{
if
(
MapUtils
.
isNotEmpty
(
mutationResponse
.
getGuidAssignments
()))
{
context
.
getGuidAssignments
().
putAll
(
mutationResponse
.
getGuidAssignments
());
}
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"recordProcessedEntities: added {} guidAssignments. updatedSize={}"
,
mutationResponse
.
getGuidAssignments
().
size
(),
guidAssignments
.
size
());
if
(
CollectionUtils
.
isNotEmpty
(
mutationResponse
.
getCreatedEntities
()))
{
for
(
AtlasEntityHeader
entity
:
mutationResponse
.
getCreatedEntities
())
{
if
(
entity
!=
null
&&
entity
.
getGuid
()
!=
null
)
{
context
.
getCreatedEntities
().
add
(
entity
.
getGuid
());
}
}
}
if
(
CollectionUtils
.
isNotEmpty
(
mutationResponse
.
getDeletedEntities
()))
{
for
(
AtlasEntityHeader
entity
:
mutationResponse
.
getDeletedEntities
())
{
if
(
entity
!=
null
&&
entity
.
getGuid
()
!=
null
)
{
context
.
getDeletedEntities
().
add
(
entity
.
getGuid
());
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
webapp/src/main/java/org/apache/atlas/notification/preprocessor/EntityPreprocessor.java
View file @
3e4fb5cd
...
...
@@ -53,6 +53,7 @@ public abstract class EntityPreprocessor {
public
static
final
String
ATTRIBUTE_TABLES
=
"tables"
;
public
static
final
String
ATTRIBUTE_INDEXES
=
"indexes"
;
public
static
final
String
ATTRIBUTE_FOREIGN_KEYS
=
"foreign_keys"
;
public
static
final
String
ATTRIBUTE_INSTANCE
=
"instance"
;
public
static
final
char
QNAME_SEP_CLUSTER_NAME
=
'@'
;
public
static
final
char
QNAME_SEP_ENTITY_NAME
=
'.'
;
...
...
This diff is collapsed.
Click to expand it.
webapp/src/main/java/org/apache/atlas/notification/preprocessor/HivePreprocessor.java
View file @
3e4fb5cd
...
...
@@ -18,8 +18,6 @@
package
org
.
apache
.
atlas
.
notification
.
preprocessor
;
import
org.apache.atlas.model.instance.AtlasEntity
;
import
org.apache.atlas.model.instance.AtlasObjectId
;
import
org.apache.atlas.model.instance.AtlasRelatedObjectId
;
import
org.apache.atlas.notification.preprocessor.PreprocessorContext.PreprocessAction
;
import
org.apache.commons.lang.StringUtils
;
import
org.slf4j.Logger
;
...
...
@@ -27,16 +25,14 @@ import org.slf4j.LoggerFactory;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
public
class
HivePreprocessor
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
HivePreprocessor
.
class
);
private
static
final
String
RELATIONSHIP_TYPE_HIVE_TABLE_COLUMNS
=
"hive_table_columns"
;
private
static
final
String
RELATIONSHIP_TYPE_HIVE_TABLE_PARTITION_KEYS
=
"hive_table_partitionkeys"
;
private
static
final
String
RELATIONSHIP_TYPE_HIVE_TABLE_STORAGEDESC
=
"hive_table_storagedesc"
;
static
class
HiveTablePreprocessor
extends
EntityPreprocessor
{
public
HiveTablePreprocessor
()
{
...
...
@@ -67,62 +63,11 @@ public class HivePreprocessor {
entity
.
setAttribute
(
ATTRIBUTE_COLUMNS
,
null
);
entity
.
setAttribute
(
ATTRIBUTE_PARTITION_KEYS
,
null
);
}
else
if
(
context
.
getHiveTypesRemoveOwnedRefAttrs
())
{
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_SD
);
removeColumnsAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_COLUMNS
,
RELATIONSHIP_TYPE_HIVE_TABLE_COLUMNS
,
context
);
removeColumnsAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_PARTITION_KEYS
,
RELATIONSHIP_TYPE_HIVE_TABLE_PARTITION_KEYS
,
context
);
}
}
}
private
void
removeColumnsAttributeAndRegisterToMove
(
AtlasEntity
entity
,
String
attrName
,
String
relationshipType
,
PreprocessorContext
context
)
{
Object
attrVal
=
entity
.
removeAttribute
(
attrName
);
if
(
attrVal
!=
null
)
{
Set
<
String
>
guids
=
new
HashSet
<>();
context
.
collectGuids
(
attrVal
,
guids
);
for
(
String
guid
:
guids
)
{
AtlasEntity
colEntity
=
context
.
getEntity
(
guid
);
if
(
colEntity
!=
null
)
{
Object
attrTable
=
null
;
if
(
colEntity
.
hasRelationshipAttribute
(
ATTRIBUTE_TABLE
))
{
attrTable
=
colEntity
.
getRelationshipAttribute
(
ATTRIBUTE_TABLE
);
}
else
if
(
colEntity
.
hasAttribute
(
ATTRIBUTE_TABLE
))
{
attrTable
=
colEntity
.
getAttribute
(
ATTRIBUTE_TABLE
);
}
attrTable
=
setRelationshipType
(
attrTable
,
relationshipType
);
if
(
attrTable
!=
null
)
{
colEntity
.
setRelationshipAttribute
(
ATTRIBUTE_TABLE
,
attrTable
);
}
context
.
addToReferredEntitiesToMove
(
guid
);
}
}
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_SD
,
RELATIONSHIP_TYPE_HIVE_TABLE_STORAGEDESC
,
ATTRIBUTE_TABLE
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_COLUMNS
,
RELATIONSHIP_TYPE_HIVE_TABLE_COLUMNS
,
ATTRIBUTE_TABLE
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_PARTITION_KEYS
,
RELATIONSHIP_TYPE_HIVE_TABLE_PARTITION_KEYS
,
ATTRIBUTE_TABLE
);
}
}
private
AtlasRelatedObjectId
setRelationshipType
(
Object
attr
,
String
relationshipType
)
{
AtlasRelatedObjectId
ret
=
null
;
if
(
attr
instanceof
AtlasRelatedObjectId
)
{
ret
=
(
AtlasRelatedObjectId
)
attr
;
}
else
if
(
attr
instanceof
AtlasObjectId
)
{
ret
=
new
AtlasRelatedObjectId
((
AtlasObjectId
)
attr
);
}
else
if
(
attr
instanceof
Map
)
{
ret
=
new
AtlasRelatedObjectId
((
Map
)
attr
);
}
if
(
ret
!=
null
)
{
ret
.
setRelationshipType
(
relationshipType
);
}
return
ret
;
}
}
...
...
This diff is collapsed.
Click to expand it.
webapp/src/main/java/org/apache/atlas/notification/preprocessor/PreprocessorContext.java
View file @
3e4fb5cd
This diff is collapsed.
Click to expand it.
webapp/src/main/java/org/apache/atlas/notification/preprocessor/RdbmsPreprocessor.java
View file @
3e4fb5cd
...
...
@@ -32,6 +32,12 @@ import java.util.Set;
public
class
RdbmsPreprocessor
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RdbmsPreprocessor
.
class
);
private
static
final
String
RELATIONSHIP_TYPE_RDBMS_INSTANCE_DATABASES
=
"rdbms_instance_databases"
;
private
static
final
String
RELATIONSHIP_TYPE_RDBMS_DB_TABLES
=
"rdbms_db_tables"
;
private
static
final
String
RELATIONSHIP_TYPE_RDBMS_TABLE_COLUMNS
=
"rdbms_table_columns"
;
private
static
final
String
RELATIONSHIP_TYPE_RDBMS_TABLE_INDEXES
=
"rdbms_table_indexes"
;
private
static
final
String
RELATIONSHIP_TYPE_RDBMS_TABLE_FOREIGN_KEYS
=
"rdbms_table_foreign_key"
;
static
class
RdbmsInstancePreprocessor
extends
RdbmsTypePreprocessor
{
public
RdbmsInstancePreprocessor
()
{
super
(
TYPE_RDBMS_INSTANCE
);
...
...
@@ -121,17 +127,17 @@ public class RdbmsPreprocessor {
private
void
clearRefAttributesAndMove
(
AtlasEntity
entity
,
PreprocessorContext
context
)
{
switch
(
entity
.
getTypeName
())
{
case
TYPE_RDBMS_INSTANCE:
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_DATABASES
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_DATABASES
,
RELATIONSHIP_TYPE_RDBMS_INSTANCE_DATABASES
,
ATTRIBUTE_INSTANCE
);
break
;
case
TYPE_RDBMS_DB:
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_TABLES
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_TABLES
,
RELATIONSHIP_TYPE_RDBMS_DB_TABLES
,
ATTRIBUTE_DB
);
break
;
case
TYPE_RDBMS_TABLE:
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_COLUMNS
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_INDEXES
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_FOREIGN_KEYS
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_COLUMNS
,
RELATIONSHIP_TYPE_RDBMS_TABLE_COLUMNS
,
ATTRIBUTE_TABLE
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_INDEXES
,
RELATIONSHIP_TYPE_RDBMS_TABLE_INDEXES
,
ATTRIBUTE_TABLE
);
context
.
removeRefAttributeAndRegisterToMove
(
entity
,
ATTRIBUTE_FOREIGN_KEYS
,
RELATIONSHIP_TYPE_RDBMS_TABLE_FOREIGN_KEYS
,
ATTRIBUTE_TABLE
);
break
;
}
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment