----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/73012/ -----------------------------------------------------------
(Updated Jan. 20, 2021, 6:44 p.m.)
Review request for atlas, Ashutosh Mestry, Madhan Neethiraj, Sarath
Subramanian, and Sidharth Mishra.
Bugs: Atlas-4019
https://issues.apache.org/jira/browse/Atlas-4019
Repository: atlas
Description
-------
For any entity operation after the entity is created - e.g. add a column,
update an attribute. - the entire updated entity is saved in Hbase audits (for
each operation). Only the delta between two entity states needs to be stored.
Update routine could be called for an individual entity or for a list of
entities. Update-request may contain a full entity object or partial
object(with only updated attributes or relations). There could be updates in
entity core attributes, relationship attributes, custom attributes, or
associated classifications. In all the cases today we store the entire updated
entity in Hbase audits. Improvement is required so that only the updated
information is stored in Hbase audits instead of the entire entity object.
Solution explanation
All sorts of update requests go through the createOrUpdate routine of
AtlasEntityStoreV2. In this routine we compare all entities submitted for
updates with their stored copy to make sure there are valid changes in the
submitted entities. If valid changes are not found we discard them from the
update entity list.
Solution for this task is to modify this routine in such a way that while
comparing the objects for difference we also copy the difference in dummy
differential entity for each submitted updated-entity. The differential entity
will have only the information which has changed. Changed information could be
regular attributes, essential attributes, relationship attributes, custom
attributes, or classifications.
Today audit information is created using the updated entity which has all the
entity information new and old. For this task, audits are generated from the
differential entities and hence it has only the information which got updated.
Functionality is behind the application flag. Inorder to enable it set
atlas.update.audits.regular=false
Diffs (updated)
-----
intg/src/main/java/org/apache/atlas/AtlasConfiguration.java ea9f26d47
intg/src/test/java/org/apache/atlas/TestUtilsV2.java 2b9cf6e7f
repository/src/main/java/org/apache/atlas/repository/audit/EntityAuditListenerV2.java
0043f1ce4
repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityComparator.java
PRE-CREATION
repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
244072289
repository/src/test/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityComparatorTest.java
PRE-CREATION
repository/src/test/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2Test.java
c9f491296
server-api/src/main/java/org/apache/atlas/RequestContext.java 216ba08d3
Diff: https://reviews.apache.org/r/73012/diff/4/
Changes: https://reviews.apache.org/r/73012/diff/3-4/
Testing
-------
Performance impact Summary
Each number in the following tables is an average time in millisecond of 50
events of the same type. For example, the first row in the following table
shows that the average event processing time of 50 create-events was 1862
milliseconds.
Base Line (No changes) ->
eventType eventTime preCreateOrUpdate
checkForUnchanged createOrUpdate graphCommit
----- -----
----- ----- -----
create 1862 333
0 905 947
create 1978 338
0 984 986
create 1930 316
0 960 964
create 1938 350
0 977 955
create 1932 319
0 944 980
----- -----
----- ----- -----
UpdateComment 295 85
51 157 132
UpdateComment 338 128
54 196 136
UpdateComment 245 75
52 140 100
UpdateComment 245 90
49 152 88
UpdateComment 253 90
50 153 94
----- -----
----- ----- -----
UpdateColumns 762 132
49 374 381
UpdateColumns 818 146
63 425 388
UpdateColumns 768 133
52 366 395
UpdateColumns 772 149
50 392 374
UpdateColumns 764 136
49 374 384
----- -----
----- ----- -----
With changes Without flag -> No performance impact if compared to
above unmbers.
eventType eventTime preCreateOrUpdate
checkForUnchanged createOrUpdate graphCommit
----- -----
----- ----- -----
create 1866 349
0 911 944
create 1906 346
0 955 942
create 1896 340
0 943 944
create 1915 321
0 931 976
create 1920 314
0 927 985
----- -----
----- ----- -----
UpdateComment 265 90
63 169 89
UpdateComment 250 91
53 158 85
UpdateComment 229 83
51 148 76
UpdateComment 241 87
48 149 86
UpdateComment 239 78
48 139 95
----- -----
----- ----- -----
UpdateColumns 767 133
50 384 376
UpdateColumns 728 145
48 376 345
UpdateColumns 745 143
56 384 354
UpdateColumns 740 134
56 384 350
UpdateColumns 771 135
47 365 401
----- -----
----- ----- -----
With changes With flag(atlas.update.audits.regular=false) ->
eventType eventTime preCreateOrUpdate
checkForUnchanged createOrUpdate graphCommit
----- -----
----- ----- -----
create 1856 330
0 884 960
create 1901 327
0 935 958
create 1877 325
0 937 933
create 1913 309
0 931 975
create 1915 316
0 932 976
----- -----
----- ----- -----
UpdateComment 277 81
65 156 115
UpdateComment 250 82
63 154 90
UpdateComment 281 89
54 152 124
UpdateComment 241 74
59 143 93
UpdateComment 255 77
62 148 102
----- -----
----- ----- -----
UpdateColumns 778 147
64 393 378
UpdateColumns 734 128
62 363 364
UpdateColumns 741 139
63 383 352
UpdateColumns 711 130
59 364 342
UpdateColumns 753 122
58 355 392
----- -----
----- ----- -----
Thanks,
Deep Singh
