Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
4379 commits
Select commit Hold shift + click to select a range
6775acb
add logs
aarshi0301 Aug 25, 2025
6767ae1
MLH-1025 Issue1 audit writes PROPAGATED_CLASSIFICATION_ADD instead of…
nikhilbonte21 Aug 25, 2025
9b307c2
Merge pull request #5277 from atlanhq/MLH-1025
nikhilbonte21 Aug 25, 2025
fa4cf94
add logs
aarshi0301 Aug 25, 2025
a3f8882
Autorepair corrupted vertices
aarshi0301 Aug 26, 2025
97012bf
MLH-987 add observability to tag propagation
sriram-atlan Aug 24, 2025
3646f13
MLH-987 set correct asset affected count
sriram-atlan Aug 26, 2025
bedae48
Merge pull request #5015 from atlanhq/mesh-578-remove-inputport
ankitpatnaik-atlan Aug 26, 2025
430607b
Merge pull request #5286 from atlanhq/mlh-987-tag-metrics-master
sriram-atlan Aug 26, 2025
d830a3c
MLH-986: Made typedef lock name configurable for service isolation (#…
hitk6 Aug 27, 2025
b85b2a7
Added retries to sync ES for tags
suraj5077 Aug 27, 2025
3ac4cd3
Removed redundant code
suraj5077 Aug 27, 2025
54d91c6
Removed redundant catch block
suraj5077 Aug 27, 2025
cc72e04
Added retries to ES audits
suraj5077 Aug 27, 2025
8b1a5e6
Improved error handling for audits
suraj5077 Aug 27, 2025
6fdbd80
Refactored some code
suraj5077 Aug 27, 2025
00bc40a
Cursor code review comments
suraj5077 Aug 27, 2025
35ce8dc
Cursor code review comments
suraj5077 Aug 27, 2025
8546aa4
Cursor code review comments
suraj5077 Aug 27, 2025
a352e94
Added retries with backoff
suraj5077 Aug 27, 2025
9d1c073
Merge pull request #5288 from atlanhq/tag-es-sync-retries
suraj5077 Aug 27, 2025
b21a91f
use edge labels supplied
LijiArokee Aug 27, 2025
7d7d34d
feat: primary commit
sumandas0 Aug 27, 2025
43aec96
feat: working update
sumandas0 Aug 27, 2025
35eb280
feat: add rest and observability
sumandas0 Aug 27, 2025
e4c4e15
added branch for custom image
LijiArokee Aug 28, 2025
c168996
feat: fix all usage of feature flags
sumandas0 Aug 28, 2025
d4821b0
Autorepair corrupted vertices
aarshi0301 Aug 28, 2025
961a246
fix models
aarshi0301 Aug 28, 2025
675887e
Updated commons-lang3 version
suraj5077 Aug 28, 2025
a4a6c58
remove branch
LijiArokee Aug 28, 2025
871edac
Removed task warnings attribute
suraj5077 Aug 28, 2025
66e904b
MLH-1056 keep read after write consistency for sdks and workflows
sriram-atlan Aug 28, 2025
e7f2b83
Merge pull request #5289 from atlanhq/mlh1022
LijiArokee Aug 28, 2025
8e832d9
Merge pull request #5298 from atlanhq/task-warning-fix
suraj5077 Aug 28, 2025
909cd03
Merge pull request #5299 from atlanhq/commons-lib-upgrade
suraj5077 Aug 28, 2025
0b1efec
Merge pull request #5300 from atlanhq/mlh-1056-master
sriram-atlan Aug 28, 2025
a113f80
MLH-1057 return empty list when no propagation
sriram-atlan Aug 28, 2025
4b24c98
Merge pull request #5302 from atlanhq/mlh-1057-master
sriram-atlan Aug 28, 2025
462931a
fix transactions
aarshi0301 Aug 28, 2025
799520b
remove on the fly processing
aarshi0301 Aug 28, 2025
2adb504
make composite as default
aarshi0301 Aug 28, 2025
dccc4b4
remove auto repair
aarshi0301 Aug 28, 2025
b42d64b
MLH-1054 use vertex modification time rather than event time for upda…
sriram-atlan Aug 29, 2025
37a1533
remove from maven
aarshi0301 Aug 29, 2025
5b0b414
MLH-498 fallback to refresh typedef cache before failing the request …
sriram-atlan Aug 29, 2025
e6dd176
Add authorization
aarshi0301 Aug 29, 2025
4a1a3c9
MLH-1054 set updated by as user from request context
sriram-atlan Aug 29, 2025
9ea3976
simplify condition
aarshi0301 Aug 29, 2025
572df59
MLH-498 revert updatedBy change
sriram-atlan Aug 29, 2025
97c1c1d
MLH-498 handle BM and classification typedefs on validation
sriram-atlan Aug 29, 2025
b1b7196
Merge pull request #5285 from atlanhq/debuginvalidguid
aarshi0301 Aug 29, 2025
862a320
Skip unknown policy change event
krsoninikhil Aug 29, 2025
c6fe64b
Merge pull request #5310 from atlanhq/ns/fix/delta
krsoninikhil Aug 29, 2025
bd50ef0
Merge pull request #5313 from atlanhq/featureflagimpl
sumandas0 Aug 29, 2025
4b9010d
MLH-1054 fix updated by and updated time for kafka mutated details
sriram-atlan Aug 29, 2025
baed8ff
MLH-498 keep mesh logic as-is
sriram-atlan Aug 29, 2025
60a5c55
MLH-498 fail on registry returning invalid typeName
sriram-atlan Aug 29, 2025
3dcb503
Merge pull request #5306 from atlanhq/mlh-498-read-after-write-master
sriram-atlan Aug 29, 2025
ab1c99e
Merge pull request #5314 from atlanhq/mlh-1054-master
sriram-atlan Aug 29, 2025
4ce707a
Merge branch 'master' into ns/feat/abac
krsoninikhil Sep 1, 2025
6ca7c65
Change tag values to behave with OR condition
krsoninikhil Sep 1, 2025
ff4bec9
Merge pull request #5315 from atlanhq/ns/feat/abac
krsoninikhil Sep 1, 2025
7ffbb4b
Change tag values to behave with OR condition in evaluation
krsoninikhil Sep 1, 2025
d7b0d5d
Merge pull request #5316 from atlanhq/ns/feat/abac
krsoninikhil Sep 1, 2025
7afc3d0
Add batching in edge retrieval
aarshi0301 Sep 2, 2025
763b236
MLH-498 refresh typedefs without locks
sriram-atlan Sep 2, 2025
354c579
MLH-498 branch to build
sriram-atlan Sep 2, 2025
9643773
Fix empty tag value requirement in ES alias
krsoninikhil Sep 3, 2025
f0a9b6f
Merge pull request #5322 from atlanhq/ns/feat/abac
krsoninikhil Sep 3, 2025
28d1a5c
Remove unnecessary log noise
krsoninikhil Sep 3, 2025
197ed12
Merge pull request #5323 from atlanhq/ns/feat/abac
krsoninikhil Sep 3, 2025
2bcd1b3
Merge branch 'master' into featureflagimpl
suraj5077 Sep 3, 2025
8182c95
Merge pull request #5312 from atlanhq/ns/fix/delta
krsoninikhil Sep 3, 2025
8d88aa4
Fix error log
aarshi0301 Sep 3, 2025
585d9d4
optimisation added
aarshi0301 Sep 3, 2025
1b767c1
do bramch based deployment
aarshi0301 Sep 3, 2025
59410e2
exclude corrupted vertex from getting processed
aarshi0301 Sep 3, 2025
886135f
Repair corrupted vertex on the fly
aarshi0301 Sep 3, 2025
c4f89ba
Repair corrupted vertex on the fly
aarshi0301 Sep 3, 2025
19771ff
let it run with old flow
aarshi0301 Sep 3, 2025
b8eb76f
let it run with old flow
aarshi0301 Sep 3, 2025
82198ac
fix naming
aarshi0301 Sep 3, 2025
c3b2386
Merge pull request #5320 from atlanhq/mlh-498-use-spec-store-master
sriram-atlan Sep 3, 2025
225c3dd
GA readiness
aarshi0301 Sep 4, 2025
f32ffbc
use constants
aarshi0301 Sep 4, 2025
de7b7c6
resolve conflicts
aarshi0301 Sep 4, 2025
225f4b2
Merge pull request #5318 from atlanhq/mlh1096
aarshi0301 Sep 4, 2025
49dca52
MLH-1074 avoid throwing error on already deleted relationship
sriram-atlan Sep 4, 2025
2a2cf0e
Merge pull request #5327 from atlanhq/mlh-1074-master
sriram-atlan Sep 4, 2025
030eda4
Improved defaul value handling
suraj5077 Sep 4, 2025
c3ad2b8
Error handling
suraj5077 Sep 4, 2025
2b08806
MLH-498 retry on failure for PUT typedefs
sriram-atlan Sep 4, 2025
8df38e6
Merge pull request #5331 from atlanhq/mlh-498-retry-on-failure-master
sriram-atlan Sep 4, 2025
1dce402
Completed FF testing and impl
suraj5077 Sep 4, 2025
e1d0b74
Increased primary cache TTL
suraj5077 Sep 4, 2025
38b43f0
Made error handling consistent across methods
suraj5077 Sep 4, 2025
d5f54d6
Set CHECK_SENTINELS_LIST value
suraj5077 Sep 4, 2025
cbb4e86
Merge branch 'beta' into featureflagimpl
suraj5077 Sep 4, 2025
9a09843
ttl 30m
suraj5077 Sep 4, 2025
4b082b9
MLH-1074 do not add null entry to a list. avoid NPEs
sriram-atlan Sep 5, 2025
f4ab7d4
MLH-1074 format code
sriram-atlan Sep 5, 2025
eb74dba
Merge pull request #5334 from atlanhq/mlh-1074-fix-npe-master
sriram-atlan Sep 5, 2025
03ceeb1
temp
suraj5077 Sep 5, 2025
1fc1a48
MLH-1140 Missing Add Prop Kafka notif for v1
nikhilbonte21 Sep 5, 2025
9424171
MLH-1140 Revert direct tag attach Kafka notif
nikhilbonte21 Sep 5, 2025
460ca20
Merge pull request #5339 from atlanhq/MLH-1140
sriram-atlan Sep 5, 2025
9864a6f
MLH-1115 prometheus metrics for tags observability (aggs)
sriram-atlan Sep 5, 2025
eac09bd
MLH-1115 prometheus metrics for tags observability (aggs)
sriram-atlan Sep 5, 2025
9d7ba57
MLH-1115 branch to build
sriram-atlan Sep 5, 2025
ffb0d7c
MLH-1115 fix build
sriram-atlan Sep 5, 2025
281e1a4
MLH-1115 disable buildkit cache
sriram-atlan Sep 5, 2025
ccf6f5d
MLH-1115 disable buildkit cache
sriram-atlan Sep 5, 2025
7f22f5e
MLH-1115 fix build issue
sriram-atlan Sep 5, 2025
0357bcf
MLH-1115 fix build issue
sriram-atlan Sep 5, 2025
450d74f
MLH-1115 fix version
sriram-atlan Sep 5, 2025
640d2e7
MLH-1115 fix version
sriram-atlan Sep 5, 2025
8f0b915
MLH-1115 fix build
sriram-atlan Sep 5, 2025
8c9f574
MLH-1115 add TaskMetricsService and tests
sriram-atlan Sep 5, 2025
7e41344
MLH-1115 fix compilation issues
sriram-atlan Sep 5, 2025
f50aa10
MLH-1115 fix compilation issues
sriram-atlan Sep 5, 2025
79babad
MLH-1115 wire in beans correctly
sriram-atlan Sep 5, 2025
15d79a2
Prevent redis thundering herd
suraj5077 Sep 6, 2025
3edf2f4
Merge branch 'master' into featureflagimpl
suraj5077 Sep 6, 2025
38a4cf8
Reverted beta changes
suraj5077 Sep 6, 2025
dce85a5
Fixed Cassandra compaction strategy for local setup
suraj5077 Sep 6, 2025
5445276
set CHECK_SENTINELS_LIST
suraj5077 Sep 6, 2025
8d684c7
Reverted non related files
suraj5077 Sep 6, 2025
a3d19a6
Added infinite retries on redis failures
suraj5077 Sep 6, 2025
e64d6d1
fixed logs
suraj5077 Sep 6, 2025
2d316d9
MLH-1142 skip wildcard optimisation when there is case-sensitive in t…
sriram-atlan Sep 6, 2025
33c1733
Merge pull request #5341 from atlanhq/1142-master
sriram-atlan Sep 6, 2025
bb5aea9
Addressed code review commets, added jitter + infinite retries on red…
suraj5077 Sep 6, 2025
4f3aed6
Removed redundant classes
suraj5077 Sep 6, 2025
bb420d4
Minor improvement for primary cache load
suraj5077 Sep 8, 2025
8fe81df
Addressed PR review comments
suraj5077 Sep 8, 2025
3a4a30d
just add corruted data in observability
aarshi0301 Sep 8, 2025
1a0a27b
graceful handling of MDC variables
aarshi0301 Sep 8, 2025
7d0972a
graceful handling
aarshi0301 Sep 8, 2025
5260976
graceful handling with MDCCloseable
aarshi0301 Sep 8, 2025
e69a882
Removed tags FF default value
suraj5077 Sep 8, 2025
75f28d3
tweak string check
aarshi0301 Sep 8, 2025
ed8eb5b
Tags default flag handling done
suraj5077 Sep 8, 2025
52809bc
Merge branch 'master' into featureflagimpl
suraj5077 Sep 8, 2025
4ddbf63
Merge pull request #5328 from atlanhq/featureflagimpl
suraj5077 Sep 8, 2025
69205cb
add retry logic for update and delete
LijiArokee Sep 8, 2025
8b48c2f
MLH-1115 update distribution summary metrics
sriram-atlan Sep 8, 2025
f7639bf
MLH-1115 remove unnecessary changes
sriram-atlan Sep 8, 2025
eb11d97
Revert "Reverted beta changes"
krsoninikhil Sep 9, 2025
96bc19f
Rearrange private and public methods
krsoninikhil Sep 8, 2025
c59efb5
Switch to java 17 switch case syntax
krsoninikhil Sep 8, 2025
b56b6b5
Use term_phrase instead of span_near for tag value matching
krsoninikhil Sep 8, 2025
29417c0
Merge pull request #5110 from atlanhq/ns/feat/abac
krsoninikhil Sep 9, 2025
1bbb62e
updated for compile error
LijiArokee Sep 9, 2025
22ec792
added foeceful patching for update and create to handle race condition
LijiArokee Sep 9, 2025
5f611fd
restore patch falg
LijiArokee Sep 9, 2025
1a59b42
MLH-1115 properly indent
sriram-atlan Sep 9, 2025
31c5f07
MLH-1163 add null safe operation, gracefully continue with edge remov…
sriram-atlan Sep 9, 2025
346b0dd
MLH-1163 noop when edge is null
sriram-atlan Sep 9, 2025
2294851
MLH-1131 | change retry methods to private
LijiArokee Sep 9, 2025
b5ce505
Merge pull request #5340 from atlanhq/mlh-1115-master
sriram-atlan Sep 9, 2025
4cce755
MLH-1163 set correct default value for propagate
sriram-atlan Sep 9, 2025
8da20a5
Merge pull request #5351 from atlanhq/mlh-1163-master
sriram-atlan Sep 9, 2025
a9f2289
removed custom branch
LijiArokee Sep 10, 2025
fb1b37a
Merge pull request #5349 from atlanhq/mlh1131
LijiArokee Sep 10, 2025
621e341
MLH-1198 skip wildcard optimisation when content value has special ch…
sriram-atlan Sep 10, 2025
c2ed9d0
MLH-1199 add a metric to track v1 vs. v2 tenants
sriram-atlan Sep 10, 2025
c7b1c9f
MLH-1199 null safe code
sriram-atlan Sep 10, 2025
f01a212
Merge pull request #5354 from atlanhq/mlh-1198-master
sriram-atlan Sep 10, 2025
aec1fec
updated image build logic (#5361)
hitk6 Sep 10, 2025
e25ada2
Merge pull request #5355 from atlanhq/1199-master
sriram-atlan Sep 10, 2025
0aa38ab
Merge pull request #5325 from atlanhq/mlh1111
aarshi0301 Sep 12, 2025
e5eda07
mlh-1228 ignore wildcard when there is case sensitive attributes and …
sriram-atlan Sep 12, 2025
ebe6ee7
Merge pull request #5368 from atlanhq/mlh-1228-does-not-contain-master
sriram-atlan Sep 12, 2025
b35959c
MESH-652: Restrict deletion of Parent if it has child objects
PRATHAM2002-DS Sep 12, 2025
49e24e8
MLH-1224 Ensure restoration info is captured in ENTITY_UPDATE events …
nikhilbonte21 Sep 12, 2025
e9f22d1
MLH-1224 Revert unintended change
nikhilbonte21 Sep 12, 2025
0fac334
MLH-1224 Address NPE warning by BugBot review
nikhilbonte21 Sep 12, 2025
b3b1753
mlh-1163 return when edge or its typeName is empty
sriram-atlan Sep 12, 2025
d0d6090
Merge branch 'master' into mlh-1163-master
sriram-atlan Sep 13, 2025
d18ac57
optimise tag propagation
sriram-atlan Sep 13, 2025
63c56d1
MLH-1224 Avoid multiple calls to EntityMutationResponse
nikhilbonte21 Sep 15, 2025
606bc29
Merge pull request #5374 from atlanhq/mlh-1163-master
sriram-atlan Sep 15, 2025
f070e24
MLH-1240 improve refresh logic, reduce retry count and wait time
sriram-atlan Sep 15, 2025
3a6b41a
MLH-1240 use version number to decide to invoke typedef cache refresh…
sriram-atlan Sep 15, 2025
08c7945
MESH-652: Iterate only one child to restrict archival
PRATHAM2002-DS Sep 15, 2025
41df3cd
MLH-1240 reload only business metadata
sriram-atlan Sep 15, 2025
7c3e04e
MLH-1240 increment internal cache version
sriram-atlan Sep 15, 2025
248ea12
MLH-1240 reload business and classification typedef
sriram-atlan Sep 15, 2025
28e84d9
MLH-1240 use consistent version and reload if necessary in all typede…
sriram-atlan Sep 15, 2025
1a6c6f0
MLH-1240 update cache when current version is less than redis version
sriram-atlan Sep 15, 2025
887ddc6
MLH-1240 refresh custom types always (wip testing)
sriram-atlan Sep 16, 2025
b42fdbf
MLH-1240 refresh enum and always read from transient registry
sriram-atlan Sep 16, 2025
cb8c0ab
MLH-1240 track version for all custom types to load them independently
sriram-atlan Sep 16, 2025
5f44128
Merge pull request #5384 from atlanhq/MESH-652-validate-child-object
PRATHAM2002-DS Sep 16, 2025
b91db52
MLH-1240 commit update
sriram-atlan Sep 16, 2025
0246c4a
Merge branch 'master' into tags_task_optimise
suraj5077 Sep 17, 2025
cc03517
merged master
suraj5077 Sep 17, 2025
04b7258
Removed redundant vars
suraj5077 Sep 17, 2025
bab5f6f
Removed redundant vars
suraj5077 Sep 17, 2025
32c9021
Merge pull request #5378 from atlanhq/tags_task_optimise
suraj5077 Sep 17, 2025
b76b1f8
MLH-1260 | Updated error code to handle retries
LijiArokee Sep 17, 2025
41531df
optimise lineage calculation
aarshi0301 Sep 17, 2025
be7a994
MLH-1260 | address review comment
LijiArokee Sep 17, 2025
e6387f9
MLH-1227 | update es-audit mappings for cm
LijiArokee Sep 17, 2025
ce513e4
MLH-1240 clear that type of atlas typedef and reload to handle delete…
sriram-atlan Sep 17, 2025
bf4d46a
Merge pull request #5370 from atlanhq/MLH-1224
nikhilbonte21 Sep 17, 2025
a8624cc
Merge pull request #5385 from atlanhq/mlh1260
LijiArokee Sep 17, 2025
ace953c
Merge pull request #5387 from atlanhq/mlh1227
LijiArokee Sep 17, 2025
0cf1155
MLH-1240 add struct, enum and relationship def and refactor cache ref…
sriram-atlan Sep 17, 2025
d4d86a6
MLH-1199 replace null with `this` in gauge builder
sriram-atlan Sep 17, 2025
e0f2a9b
Merge pull request #5393 from atlanhq/mlh-1199-master
sriram-atlan Sep 18, 2025
7e06e58
Merge pull request #5380 from atlanhq/mlh-1240-custom-metadata-consis…
sriram-atlan Sep 18, 2025
d6b9c16
mesh-661: Hard limit for rich text properties
PRATHAM2002-DS Sep 18, 2025
34f72fe
remove other redis implementations
sriram-atlan Sep 18, 2025
aff2023
Merge pull request #5400 from atlanhq/fix-redis-wiring
sriram-atlan Sep 19, 2025
16da29d
MLH-1277 fix for delete tags correctly
sriram-atlan Sep 19, 2025
bf37bc7
MLH-1277 branch to build
sriram-atlan Sep 19, 2025
adff2bb
Merge pull request #5403 from atlanhq/1277-master
sriram-atlan Sep 19, 2025
ab75f80
MLH-1240 revert all optimisations and keep current cinv based full re…
sriram-atlan Sep 19, 2025
478882b
MLH-1240 branch to build
sriram-atlan Sep 19, 2025
945da59
MLH-1240 revert initWithoutlock method too
sriram-atlan Sep 19, 2025
3ba9eca
Merge pull request #5408 from atlanhq/revert-custom-metadata-changes
sriram-atlan Sep 20, 2025
7d6415e
admin-347: added logs to pinpoint bug
ankitpatnaik-atlan Sep 21, 2025
2bc8ff2
admin-347: added catch block
ankitpatnaik-atlan Sep 21, 2025
f2e58be
admin-347: corrected reference error message
ankitpatnaik-atlan Sep 21, 2025
3a5506c
admin-347: corrected error message
ankitpatnaik-atlan Sep 21, 2025
0b6dceb
admin-347: corrected error message
ankitpatnaik-atlan Sep 21, 2025
5add6f7
DQ-168 : Update policies for DQ
BichitraCodesAtlan Sep 22, 2025
7752e0e
admin-347: diff computation while linking term
ankitpatnaik-atlan Sep 22, 2025
8da3bdf
admin-347: null pointer check
ankitpatnaik-atlan Sep 22, 2025
a259f9f
Fix not_in operator tags in abac
krsoninikhil Sep 23, 2025
cc9ed2f
admin-347: resolved reviews
ankitpatnaik-atlan Sep 23, 2025
356e903
admin-347: resolved reviews
ankitpatnaik-atlan Sep 23, 2025
0d40f13
Merge pull request #5410 from atlanhq/admin-347-debug-logs
ankitpatnaik-atlan Sep 24, 2025
e5deeb7
Merge pull request #5426 from atlanhq/ns/feat/abac
krsoninikhil Sep 24, 2025
6fa6668
mesh-661: Value limit for keyword property
PRATHAM2002-DS Sep 24, 2025
61a7066
mesh-661: Corrected Log
PRATHAM2002-DS Sep 24, 2025
53faac0
add branch for canary
aarshi0301 Sep 25, 2025
7bb3bca
Merge pull request #5413 from atlanhq/dq-168
BichitraCodesAtlan Sep 25, 2025
1486f86
AIGOV-135 process create/delete for AImodels (#5430)
rashi-j Sep 26, 2025
fd41909
MLH-1226 Get all attrs to Kafka for ES Isolation (#5440)
sriram-atlan Sep 29, 2025
65e7e15
mesh-661: resolved PR comments
PRATHAM2002-DS Sep 30, 2025
cd7b8c1
mesh-661: Handle archiving CM property
PRATHAM2002-DS Sep 30, 2025
9d53b29
mesh-661: resolve PR comments
PRATHAM2002-DS Sep 30, 2025
73e1695
mesh-661: increased limit from 15 to 50 rich-text properties
PRATHAM2002-DS Sep 30, 2025
d4d1f33
mesh-661: resolve PR comment
PRATHAM2002-DS Oct 1, 2025
cbd7a49
Merge pull request #5443 from atlanhq/mesh-661-rich-text
PRATHAM2002-DS Oct 1, 2025
8c5945a
optimise lineage calculation
aarshi0301 Oct 1, 2025
865b2c7
Merge branch 'master' into mindbodylineage
aarshi0301 Oct 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
584 changes: 584 additions & 0 deletions .cursor/rules/feature-flag-rest.mdc

Large diffs are not rendered by default.

211 changes: 211 additions & 0 deletions .cursor/rules/feature-flag.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
---
description: Cache based feature flag implementation based on redis
alwaysApply: false
---
# Feature Flag Implementation Rules

## Core Architecture Principles

### Feature Flag Definition
- ALL feature flags MUST be defined in the FeatureFlag enum with explicit keys and default values
- Default values are ALWAYS false unless explicitly documented otherwise
- NO dynamic feature flag creation - only predefined flags allowed
- Feature flag keys should be descriptive and follow SCREAMING_SNAKE_CASE convention

### Dual Cache Architecture
- Primary cache: Time-bound cache (configurable TTL with jitter, typically 30 minutes)
- Fallback cache: Permanent cache storing last known Redis values
- NEVER fallback to default values during runtime - use cached values instead
- Cache operations must be atomic to prevent dirty writes

### Redis Integration
- RedisService MUST be initialized before FeatureFlagStore (@DependsOn annotation required)
- All Redis operations include retry logic with exponential backoff
- Redis connectivity MUST be validated during startup with actual read/write/delete test
- Startup MUST fail-fast if Redis is not operational

## Code Patterns & Conventions

### Thread Safety
- Use `synchronized` methods instead of manual lock management for write operations
- Read operations should be lock-free for performance
- Method names ending with `Internal` indicate synchronized operations
- Cache update operations must be synchronized: `updateBothCaches()`, `setFlagInternal()`, `deleteFlagInternal()`

### Error Handling
- Constructor validation: Use `Objects.requireNonNull()` for critical dependencies
- Startup validation: Comprehensive dependency and connectivity testing
- Runtime validation: Null checks and state validation with clear error messages
- NO silent failures - log all errors with appropriate levels (WARN for retries, ERROR for failures)

### Method Naming Conventions
```java
// Public static API methods (validation + delegation)
public static String getFlag(String key)
public static boolean evaluate(String key, String expectedValue)
public static void setFlag(String key, String value)

// Private synchronized implementation methods
private synchronized void setFlagInternal(String key, String value)
private synchronized void deleteFlagInternal(String key)
private synchronized void updateBothCaches(String namespacedKey, String value)

// Validation and utility methods
private static boolean isValidFlag(String key)
private void validateDependencies()
```

### Spring Integration Patterns
- Use `@DependsOn("redisService")` to ensure proper initialization order
- Use `@PostConstruct` for initialization with comprehensive validation
- Use `@Component` for Spring bean registration
- Use `@Inject` for constructor dependency injection
- ApplicationContextProvider pattern for static method access to Spring beans

### Configuration Management
- All configuration values must have sensible defaults
- Configuration validation during startup (retry attempts > 0, timeouts > 0)
- Cache sizes and TTL values should be configurable via application properties
- Property names follow pattern: `atlas.feature.flag.{component}.{property}`

### Validation Patterns
```java
// Flag validation - reject unknown flags immediately
if (!isValidFlag(key)) {
LOG.error("Invalid feature flag requested: '{}'", key);
return null; // or appropriate default
}

// Null safety - fail fast with descriptive messages
Objects.requireNonNull(redisService, "RedisService cannot be null - critical dependency missing!");

// State validation - prevent operations on uninitialized objects
if (!initialized) {
throw new IllegalStateException("FeatureFlagStore not initialized");
}
```

### Retry Logic Patterns
- Use simple for-loop: `for (int attempt = 1; attempt <= maxAttempts; attempt++)`
- Early return on success: `return redisService.getValue(key);`
- Last attempt handling: `boolean isLastAttempt = (attempt == maxAttempts);`
- Clear logging differentiation: WARN for retries, ERROR for final failures
- Thread interruption handling with proper cleanup

### Logging Standards
- Startup: INFO level for successful initialization with timing
- Errors: ERROR level with full exception details and context
- Retries: WARN level with attempt numbers and total attempts
- Debug: DEBUG level for cache hits/misses and internal operations
- Health checks: DEBUG level to avoid log noise

## API Design Principles

### Public Static API
- Keep public methods simple and focused
- Always validate inputs before processing
- Return null for invalid requests (don't throw exceptions in getters)
- Provide convenience methods for common use cases

### Internal Implementation
- Separate concerns: validation, caching, Redis operations
- Use meaningful method names that indicate thread safety
- Keep synchronized blocks minimal and focused
- Handle all exceptions gracefully with appropriate logging

## Performance & Reliability

### Caching Strategy
- Read path: Primary cache → Redis → Fallback cache → null
- Write path: Redis + Both caches (atomic)
- Cache invalidation: Remove from both caches simultaneously. Only current k8s pod updates both caches in real-time. Other pods will have wait for cache expiration
- No cache stampeding - single writer per flag per Atlas pod

### Startup Reliability
- Fail-fast: Application won't start with broken feature flags store initialization.
- Comprehensive testing: Redis connectivity + configuration validation
- Clear error messages: Operators can quickly identify and fix issues
- Timeout protection: Prevent infinite startup hangs

### Runtime Reliability
- Graceful degradation: Use cached values when Redis is unavailable
- Health monitoring: Provide methods for operational visibility
- Exception isolation: One bad flag doesn't break others
- Thread safety: Concurrent access without data corruption

## Testing & Monitoring

### Health Check Integration
```java
// Operational health checks
public static boolean isFeatureFlagStoreHealthy()
public boolean isRedisHealthy()
public boolean isInitialized()
```

### Debugging Support
- Comprehensive startup logging with timing information
- Clear error messages with actionable information
- Health check methods for operational monitoring
- Flag access logging for usage analysis

## Anti-Patterns to Avoid

❌ Manual lock management (`lock.lock(); try { ... } finally { lock.unlock(); }`)
❌ Default fallbacks during runtime (use cached values instead)
❌ Dynamic feature flag creation (only predefined flags)
❌ Silent failures (always log errors appropriately)
❌ Complex async initialization (keep startup simple and sequential)
❌ Missing dependency validation (always validate critical dependencies)
❌ Tight coupling between components (use clear interfaces)
❌ Runtime exceptions for normal operations (reserve for serious errors)

## Example Implementation Template

```java
@Component
@DependsOn("redisService")
public class FeatureService {

private final RedisService redisService;

@Inject
public FeatureService(RedisService redisService) {
this.redisService = Objects.requireNonNull(redisService,
"RedisService cannot be null - critical dependency missing!");
}

@PostConstruct
public void initialize() {
try {
validateDependencies();
// ... initialization logic
initialized = true;
} catch (Exception e) {
throw new RuntimeException("Failed to initialize - cannot start application", e);
}
}

public static ReturnType publicMethod(String key) {
if (!isValidInput(key)) {
LOG.warn("Invalid input: '{}'", key);
return appropriateDefault;
}

Instance instance = getInstance();
if (instance == null) {
LOG.warn("Service not initialized");
return appropriateDefault;
}

return instance.internalMethod(key);
}

private synchronized void writeOperation(String key, String value) {
// Synchronized method for write operations
// Clean, focused implementation
}
}
```

Follow these rules to maintain consistency, reliability, and performance in the feature flag system.
62 changes: 62 additions & 0 deletions .cursor/rules/search-apis.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
alwaysApply: false
description: search-apis
---
# Search APIs and ES Integration

This rule documents the search API implementations and ES integration to help navigation and consistent usage across the repo.

## Endpoints

- POST `/search/indexsearch` → Atlas-shaped search using DSL. See [DiscoveryREST.java](mdc:webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java)
- POST `/search/es` → Raw ES search response passthrough, trimmed to the `hits` object if present. See [DiscoveryREST.java](mdc:webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java)
- POST `/search/count` → ES `_count` API; returns `{ "count": <long> }`. See [DiscoveryREST.java](mdc:webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java)
- POST `/search/relationship/indexsearch` → Edge index search. See [DiscoveryREST.java](mdc:webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java)

## Service Flow

Service implementation: [EntityDiscoveryService.java](mdc:repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java)

- `directIndexSearch(params, useVertexEdgeBulkFetching)` → standard Atlas result shaping
- `directEsIndexSearch(params)` → returns raw ES map from index query
- `directCountIndexSearch(params)` → returns `Long` count

Common behavior (all three):
- Index selection via `getIndexName(IndexSearchParams)`; supports persona/purpose and access control exclusive DSL
- Optional pre-filtering when `enableFullRestriction` is true via `addPreFiltersToSearchQuery`
- Optional DSL optimization when feature flag is enabled and request originates from product client (see below)
- Error handling: propagate exceptions; upstream layers map network/ES errors to appropriate codes

### DSL Optimization

Reusable helper: `optimizeQueryIfApplicable(SearchParams, clientOrigin)` in [EntityDiscoveryService.java](mdc:repository/src/main/java/org/apache/atlas/discovery/EntityDiscoveryService.java)

- Controlled by feature flag key `discovery_use_dsl_optimisation`
- Only applied when `RequestContext.clientOrigin == product_webapp`
- Uses `ElasticsearchDslOptimizer.optimizeQueryWithValidation(...)`
- On validation failure: logs a warning and continues
- On optimizer error: logs and proceeds with original query

## ES Layer

Implementation: [AtlasElasticsearchQuery.java](mdc:graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasElasticsearchQuery.java)

- `vertices(SearchParams)` → executes query via low-level client, returns `DirectIndexQueryResult`
- `directIndexQuery(String)` → returns parsed ES response with `total`, `data`, optional `aggregations`
- `directEsIndexQuery(String)` → returns raw ES response as `Map<String,Object>` (unmodified)
- `countIndexQuery(String)` → calls `/_count`, parses and returns `Long`
- Request isolation: selects ES client based on `RequestContext.clientOrigin`; `product_webapp` → UI cluster; others → Non-UI cluster; fallback to default client
- Network errors: mapped to `SERVICE_UNAVAILABLE` or gateway timeout codes

Note: The Janus in-memory index implementation ([AtlasJanusIndexQuery.java](mdc:graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusIndexQuery.java)) does not implement `directEsIndexQuery`/`countIndexQuery` (throws `NotImplementedException`).

## REST Response Shaping

- `/search/es` returns only the `hits` object when present; otherwise returns the full ES response map
- `/search/count` wraps the `Long` in `{ "count": <long> }`

## Limits and Logging

- Query size limits enforced when `ATLAS_INDEXSEARCH_ENABLE_API_LIMIT` is true; see `ATLAS_INDEXSEARCH_QUERY_SIZE_MAX_LIMIT` and `ATLAS_INDEXSEARCH_LIMIT_UTM_TAGS`
- Optional search logging; some utmTag patterns skip logging; see `shouldSkipSearchLog` in [DiscoveryREST.java](mdc:webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java)

100 changes: 100 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Use `allow` to specify which dependencies to maintain

version: 2
updates:
- package-ecosystem: "npm" #npm
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "composer" #composer
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "pip" #python
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions" #github-actions
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "bundler"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct updates for all packages
- dependency-type: "all"

- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "maven"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "pub"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"

- package-ecosystem: "terraform"
directory: "/"
schedule:
interval: "daily"
allow:
# Allow direct and indirect updates for all packages
- dependency-type: "all"
Loading