{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"Expressions.toSimpleLeafFilter (cyclomatic 69): Expressions.toSimpleLeafFilter has cyclomatic complexity 69 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/Expressions.java"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"acbdd274e613948d3cdcb199d168b9ab947d38b0a5f198add4d9a99079077d98"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamIndexTaskRunner.runInternal (cyclomatic 69): SeekableStreamIndexTaskRunner.runInternal has cyclomatic complexity 69 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"d33fa4762305da7e2b8149eb5b4674b6ec4feb5fe916d8aa0b670948256fe8ba"}},{"ruleId":"D1","level":"warning","message":{"text":"SegmentMetadataQueryQueryToolChest.mergeAnalyses (cyclomatic 48): SegmentMetadataQueryQueryToolChest.mergeAnalyses has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryQueryToolChest.java"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"db3a77dc525c67d9f401e64109900df495bc5b7117cd4e73b703587b6bb6a883"}},{"ruleId":"D1","level":"warning","message":{"text":"CombineAndSimplifyBounds.doSimplify (cyclomatic 47): CombineAndSimplifyBounds.doSimplify has cyclomatic complexity 47 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/CombineAndSimplifyBounds.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6c201e6ee4452de595222702e867505d46404bba7f9f40690cfc78a29e60c1b"}},{"ruleId":"D1","level":"warning","message":{"text":"7298.call (cyclomatic 42): 7298.call has cyclomatic complexity 42 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d7ab2b6e9084480c69e6741d7c1b25cd8897cf66c5d61be21033266343ecaa"}},{"ruleId":"D1","level":"warning","message":{"text":"ParquetGroupConverter.convertPrimitiveField (cyclomatic 41): ParquetGroupConverter.convertPrimitiveField has cyclomatic complexity 41 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/simple/ParquetGroupConverter.java"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"79199f98dab2691b0451e49c0ea223a445003719d4c002e19b1f0d12c5af9342"}},{"ruleId":"D1","level":"warning","message":{"text":"PeriodGranularity.truncate (cyclomatic 37): PeriodGranularity.truncate has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f1f7664e8518795f25bb145fb2b308e14b307285671c92c341b2993598a75cc"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedPathFinder.parseJqPath (cyclomatic 36): NestedPathFinder.parseJqPath has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedPathFinder.java"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"aec9174cc49f208f606678da87283dadde698cf1d9b521021ea4228fafdfa32d"}},{"ruleId":"D1","level":"warning","message":{"text":"ExprEval.bestEffortOf (cyclomatic 34): ExprEval.bestEffortOf has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad211155c956b50d469e57930bfa8bf52a8b17c32f475f642b0c02901ffe9e30"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedPathFinder.parseJsonPathInternal (cyclomatic 33): NestedPathFinder.parseJsonPathInternal has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedPathFinder.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"55d111fab3f6bafdf98e70ee91f7cf3b56a8e3d4357ae7dc0443f6e10c51cc9a"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionPlanner.plan (cyclomatic 33): ExpressionPlanner.plan has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/ExpressionPlanner.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"2891c32b69cd6e78e37c555c312bd786b6a14ed1bdb741b4f32a9cbb3b7241e0"}},{"ruleId":"D1","level":"warning","message":{"text":"JettyServerModule.makeAndInitializeServer (cyclomatic 32): JettyServerModule.makeAndInitializeServer has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/initialization/jetty/JettyServerModule.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a19fef1879f67940d3ef5c2fb0c467a525adf6093932db65d7deb200d6106a6"}},{"ruleId":"D1","level":"warning","message":{"text":"ImmutableConciseSet.doIntersection (cyclomatic 32): ImmutableConciseSet.doIntersection has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a1eabbe1e7681e92058adf304860d822c0526c3183ba615b88739a76cdf8ca6"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidRexExecutor.reduce (cyclomatic 31): DruidRexExecutor.reduce has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidRexExecutor.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe0bbd7cc8058113c20f4747e6b7282ae87b5db008e86dcf395d1ef6698bc82"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoTypeColumnMerger.writeMergedValueDictionary (cyclomatic 31): AutoTypeColumnMerger.writeMergedValueDictionary has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/AutoTypeColumnMerger.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2410ff4af34a091e1d8713aa53eb53fe2986a6d83a1a843998a883320509bf4"}},{"ruleId":"D1","level":"warning","message":{"text":"ConciseSet.compareTo (cyclomatic 31): ConciseSet.compareTo has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":1261}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cf1c9b323a45b1d8f59daa6f2c9024dbfc5107756370265bf0452905a101df2"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlResults.coerce (cyclomatic 29): SqlResults.coerce has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/run/SqlResults.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"8317b6a15e945750c2df4e601fd9d87b6de0ae231be063b3c1706be118af2ad2"}},{"ruleId":"D1","level":"warning","message":{"text":"InputSourceSampler.sample (cyclomatic 29): InputSourceSampler.sample has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/sampler/InputSourceSampler.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c593850654311875be7f49320fd1532a2d4e888a707efe95ada3fec3f843b20"}},{"ruleId":"D1","level":"warning","message":{"text":"ImmutableConciseSet.doUnion (cyclomatic 29): ImmutableConciseSet.doUnion has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1f2bf9178abe7e52ed220bb1ecb1e8164beff92c2b1420a9115c8b46de1d740"}},{"ruleId":"D1","level":"warning","message":{"text":"ExprEval.ofType (cyclomatic 28): ExprEval.ofType has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"17f3821cfc7a4107ce9b2b4502f1a5dee210f5e1a7cfd5e80d7497dc9a1a8cfc"}},{"ruleId":"D1","level":"warning","message":{"text":"ServerManager.getOrLoadSegmentReferences (cyclomatic 27): ServerManager.getOrLoadSegmentReferences has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/ServerManager.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"e92a45ca0f909cae72b0fbfd1c8baee66c224b9d0f6bff5cfaa8d24d7d1cc2f1"}},{"ruleId":"D1","level":"warning","message":{"text":"Projections.walkClusterGroupFilter (cyclomatic 27): Projections.walkClusterGroupFilter has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"401729d1d2bb0aea5b9a155a6a4a896cb8b99a80fde15304079eb45dd07b19d7"}},{"ruleId":"D1","level":"warning","message":{"text":"ImmutableConciseSet.addAndCompact (cyclomatic 27): ImmutableConciseSet.addAndCompact has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"2283e8e1f2e4cde0167d8f223a47b31e98ae8a102bae8f7ec374c7cc9446f096"}},{"ruleId":"D1","level":"warning","message":{"text":"HttpRemoteTaskRunner.taskAddedOrUpdated (cyclomatic 26): HttpRemoteTaskRunner.taskAddedOrUpdated has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":1419}}}],"partialFingerprints":{"codehealthFindingId/v1":"e86c2d1cce194ca4f70535b9bafecd5745f3b4555a90e1d7ba40f481f687e722"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedCommonFormatColumnFormatSpec.getEffectiveFormatSpec (cyclomatic 26): NestedCommonFormatColumnFormatSpec.getEffectiveFormatSpec has cyclomatic complexity 26 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedCommonFormatColumnFormatSpec.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b350787e96310f8223314eac5b53294055bd9a2ae0c0f209bac1cbb22cf32e"}},{"ruleId":"D1","level":"warning","message":{"text":"ControllerImpl.runInternal (cyclomatic 26): ControllerImpl.runInternal has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"424adedb12b8ad529c89688a40d789263a315586e242ef7fc996dda1311e7baf"}},{"ruleId":"D1","level":"warning","message":{"text":"ApproximateHistogram.ruleCombineBins (cyclomatic 25): ApproximateHistogram.ruleCombineBins has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b09e0ee09827454b574b8ba77ba4fb3beaad5de0b5f6fe0f6446fb2f66eb462"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedFieldColumnIndexSupplier.as (cyclomatic 25): NestedFieldColumnIndexSupplier.as has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldColumnIndexSupplier.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2fe6ac77777f86dfdd143f18800a9debdb7aa3fde21285ada28a93140c04d0"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidQuery.computeVirtualColumns (cyclomatic 24): DruidQuery.computeVirtualColumns has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":733}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d67ad9031c5ec5b98e1d5d5f9137d3fa9f1c8f8f2cbfbeaa8136c21ee3e5eb"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidLogicalValuesRule.getValueFromLiteral (cyclomatic 24): DruidLogicalValuesRule.getValueFromLiteral has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRule.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c2c7f74f8363331a791f5e93b617174a29e31ba7cf3f08a3a337500758d9358"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamSupervisor.verifyAndMergeCheckpoints (cyclomatic 23): SeekableStreamSupervisor.verifyAndMergeCheckpoints has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2776}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d7c193a4c18286b825b7da721e946b43f5481061e2f876711cce60511ad8e3"}},{"ruleId":"D1","level":"warning","message":{"text":"ConsulLeaderSelector.leaderElectionLoop (cyclomatic 23): ConsulLeaderSelector.leaderElectionLoop has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulLeaderSelector.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"4baeb57b5599d940513eb62dde52f720813e8603c20b95b069b362858741750b"}},{"ruleId":"D1","level":"warning","message":{"text":"InDimFilter.optimizeLookup (cyclomatic 23): InDimFilter.optimizeLookup has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dc271827525b15004258874d7eccea592ef9ba187b64c0ba39d4ab8bc803834"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultLimitSpec.build (cyclomatic 23): DefaultLimitSpec.build has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/orderby/DefaultLimitSpec.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef74f6af10fbdc85747aec5a8603b3e9b922d1da4ba61aba88be33a410c4bdfd"}},{"ruleId":"D1","level":"warning","message":{"text":"1.run (cyclomatic 23): 1.run has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryRunnerFactory.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfb637f310e019a5720243f2967becf1ef0e3a49bae37fef12b1d23dcc0dff93"}},{"ruleId":"D1","level":"warning","message":{"text":"ColumnType.leastRestrictiveType (cyclomatic 23): ColumnType.leastRestrictiveType has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/column/ColumnType.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"d92f370e45885a08285c043695c496ae3c340651a5bda339a5872a1af9b32fc2"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexSpec.getEffectiveSpec (cyclomatic 23): IndexSpec.getEffectiveSpec has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexSpec.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"391ccd359d522340d4687b9bbaba229576211d4219df6f6dbcffe3dd9bf43153"}},{"ruleId":"D1","level":"warning","message":{"text":"ExprEval.coerceListToArray (cyclomatic 23): ExprEval.coerceListToArray has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"84da1ee9d3b4948d8e505ca67ceba34e64cc1d674fe1dc6d77cab63681a7cc6f"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncQueryForwardingServlet.getAvaticaProtobufConnectionId (cyclomatic 22): AsyncQueryForwardingServlet.getAvaticaProtobufConnectionId has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"ececb06581dd8fdc720e75f3fc89bb3ead48364fcf1998a01661d132b48a5d17"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidAggregateCaseToFilterRule.transform (cyclomatic 22): DruidAggregateCaseToFilterRule.transform has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidAggregateCaseToFilterRule.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb09bd14cab04519610c53c9625a84d27538238815144a4e96b3aeb7518c977f"}},{"ruleId":"D1","level":"warning","message":{"text":"CostBasedAutoScaler.computeOptimalTaskCount (cyclomatic 22): CostBasedAutoScaler.computeOptimalTaskCount has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4b77c33310f34b09c3b2551634dbfa6aec9f136e555a604cd4def596d1a68c9"}},{"ruleId":"D1","level":"warning","message":{"text":"LagBasedAutoScalerConfig.\u003Cinit\u003E (cyclomatic 22): LagBasedAutoScalerConfig.\u003Cinit\u003E has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/LagBasedAutoScalerConfig.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1be9fbec4d7c9bb1b746bd1e19751a975fbca50097912e31ee6d76722b111a4a"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamSupervisor.createNewTasks (cyclomatic 22): SeekableStreamSupervisor.createNewTasks has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":4324}}}],"partialFingerprints":{"codehealthFindingId/v1":"8944da53465946d5db962ced57d4b4d23a4d00c022edde31ee5625e66d2d13bd"}},{"ruleId":"D1","level":"warning","message":{"text":"RangeFilter.makeComparatorPredicate (cyclomatic 22): RangeFilter.makeComparatorPredicate has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":962}}}],"partialFingerprints":{"codehealthFindingId/v1":"f26581a2f88ee7a182664ad0d85f163bd108dd906596930c9e0b5126d02ebe6d"}},{"ruleId":"D1","level":"warning","message":{"text":"RangeFilter.makeTypeDetectingArrayPredicate (cyclomatic 22): RangeFilter.makeTypeDetectingArrayPredicate has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"c87a137bce938f37afeb38a666e1e87b6f45f08d2f6d6586303acfc1c8da09b9"}},{"ruleId":"D1","level":"warning","message":{"text":"HavingSpecMetricComparator.compare (cyclomatic 22): HavingSpecMetricComparator.compare has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/having/HavingSpecMetricComparator.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"491d920cae6955cbd0f96b6b666af59cf02f1152adb0ee1dd20bfc934e05eecd"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexMergerBase.makeProjections (cyclomatic 22): IndexMergerBase.makeProjections has cyclomatic complexity 22 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerBase.java"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"a64d8faadb64e8b4bb71b908c2b0bf30de6f9198337b4ce8bc4e86a2bd6ee1fb"}},{"ruleId":"D1","level":"warning","message":{"text":"ConciseSet.add (cyclomatic 22): ConciseSet.add has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed1b0c9189a7e929def28337af4aadcedca9602ae4970c5a1ffcd619f6a53af6"}},{"ruleId":"D1","level":"warning","message":{"text":"MoveTimeFiltersToIntervals.extractConvertibleTimeBounds (cyclomatic 21): MoveTimeFiltersToIntervals.extractConvertibleTimeBounds has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/MoveTimeFiltersToIntervals.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e4d1face238352810160f566c6638d94f48feeb3ae17f1bb4a417a0f93913d8"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidQuery.toTimeseriesQuery (cyclomatic 21): DruidQuery.toTimeseriesQuery has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1139}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fdabad4562178c8a101c091d6c3e540b6d0a17ec4d8ba758474697237858dcb"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamIndexTaskTuningConfig.\u003Cinit\u003E (cyclomatic 21): SeekableStreamIndexTaskTuningConfig.\u003Cinit\u003E has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskTuningConfig.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3392a37f20d4283fb46dbd03c11b2d6b586c3702d882b16dd34a96ca54b9514"}},{"ruleId":"D1","level":"warning","message":{"text":"TaskLockbox.createOrFindLockPosse (cyclomatic 21): TaskLockbox.createOrFindLockPosse has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"2867b1af9f84e8020dce0fb0714b5843a063051998b4f31cefe23681446f8688"}},{"ruleId":"D1","level":"warning","message":{"text":"ClusteredValueGroupsBaseTableSchema.\u003Cinit\u003E (cyclomatic 21): ClusteredValueGroupsBaseTableSchema.\u003Cinit\u003E has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/ClusteredValueGroupsBaseTableSchema.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"93e771ef63f79572e0ccdd72a03237db44dcecc0261be772f5f3895f38809184"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonConfigurator.configurate (cyclomatic 21): JsonConfigurator.configurate has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/guice/JsonConfigurator.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"beb4c976073458703424e12f7c2f4adec587bf7f26e4d7a4d993fe4d402c86d0"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkerImpl.runInternal (cyclomatic 21): WorkerImpl.runInternal has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9c9c8331dd7e6e4ae6b4568b8043f5bef2b202c600272400374dac3afe0dfbd"}},{"ruleId":"D1","level":"warning","message":{"text":"ConciseSet.performOperation (cyclomatic 21): ConciseSet.performOperation has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"e685b09723a385daf3cb26b7a980445c9804d26387b6a98a15518ecd7ee2bddc"}},{"ruleId":"D1","level":"warning","message":{"text":"ConciseSet.remove (cyclomatic 21): ConciseSet.remove has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":999}}}],"partialFingerprints":{"codehealthFindingId/v1":"88fa2e2d739a7e857642d55692000d4eee7941412b4538403f0df238808d80f3"}},{"ruleId":"D1","level":"warning","message":{"text":"GranularityType.fromPeriod (cyclomatic 21): GranularityType.fromPeriod has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/granularity/GranularityType.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"a094dac608180a348cb9d6aa41f964b310f2b9e9b197a3ee0bf71c60f27d633b"}},{"ruleId":"D1","level":"warning","message":{"text":"HumanReadableBytes.parseInner (cyclomatic 21): HumanReadableBytes.parseInner has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/HumanReadableBytes.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"62a915b0c1224b734ddf46ff46117934df6b4f0f95423d0b7f2557197f9961ff"}},{"ruleId":"D1","level":"warning","message":{"text":"ArrayOverlapOperatorConversion.toDruidFilter (cyclomatic 20): ArrayOverlapOperatorConversion.toDruidFilter has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayOverlapOperatorConversion.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"df1c7a4d5832a0043e8aeb89778bf3c6a7965fc588a14977039483600140dded"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidQuery.toGroupByQuery (cyclomatic 20): DruidQuery.toGroupByQuery has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1366}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f727daadd48d9c1f1aeb2c0521dad21bc3ca75cc9a38d0d704547855960f94"}},{"ruleId":"D1","level":"warning","message":{"text":"WikipediaThriftEvent.read (cyclomatic 20): WikipediaThriftEvent.read has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embedded-tests/src/test/java/org/apache/druid/testing/embedded/tools/WikipediaThriftEvent.java"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"af3c31e20a7602b509607df784d23a29d78bd0ba9b3850bcde8779c0934741cd"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamSupervisor.checkTaskDuration (cyclomatic 20): SeekableStreamSupervisor.checkTaskDuration has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3751}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ac7bba2b269ef04dc564001a1bb88e10df8d77ee93a635a40f0c7de45bd2563"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamSupervisor.updatePartitionDataFromStream (cyclomatic 20): SeekableStreamSupervisor.updatePartitionDataFromStream has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3208}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f37572dbc2acdab85ace4f12cf9da7c1355372ef6f341b15a049fba11b2c946"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexTuningConfig.\u003Cinit\u003E (cyclomatic 20): IndexTuningConfig.\u003Cinit\u003E has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":1336}}}],"partialFingerprints":{"codehealthFindingId/v1":"23601c8908f0aaae77a11e37ff2a67cf311e653ed2d871a4a9d136c210bec760"}},{"ruleId":"D1","level":"warning","message":{"text":"TypedInFilter.createStringPredicate (cyclomatic 20): TypedInFilter.createStringPredicate has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/TypedInFilter.java"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"133f1a1a5e481cd32e22616c6a039ea952b8ad3b86a7ab77fb146e6d74ff1e86"}},{"ruleId":"D1","level":"warning","message":{"text":"1.doFilterSuper (cyclomatic 20): 1.doFilterSuper has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/KerberosAuthenticator.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"742b74793b3f1c1a79a0afd1999bddd0d8887797b8f3f8607fa6c4ac5c1e9aac"}},{"ruleId":"D1","level":"warning","message":{"text":"PartialSegmentBundleCacheEntry.doMount (cyclomatic 20): PartialSegmentBundleCacheEntry.doMount has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentBundleCacheEntry.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"c185baba7068eb31f6338fdae6cbe08e52f3f13d08eb20dc20242a39c1fec933"}},{"ruleId":"D1","level":"warning","message":{"text":"ReaderUtils.getColumnsRequiredForIngestion (cyclomatic 20): ReaderUtils.getColumnsRequiredForIngestion has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/indexing/ReaderUtils.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e32b14e2c54cf15910435ac82f6163a03227e62ba1190905fd894b4ede52d6"}},{"ruleId":"D1","level":"warning","message":{"text":"Metadata.merge (cyclomatic 20): Metadata.merge has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/Metadata.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a1b9c55366f4c537a357a5c9155185082a38560eede460c500f9e701b32990e"}},{"ruleId":"D1","level":"warning","message":{"text":"ControllerQueryKernelUtils.computeStageGroups (cyclomatic 20): ControllerQueryKernelUtils.computeStageGroups has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerQueryKernelUtils.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f25b2ec5698d5221ca74ae66b302a1cc63315f584068a1de85915064add9d53"}},{"ruleId":"D1","level":"warning","message":{"text":"PeriodGranularity.canBeMappedTo (cyclomatic 20): PeriodGranularity.canBeMappedTo has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"8480f09499de3f056857e91192c98d458afef2bec248a387c10ab8884890c061"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidNode.init (cyclomatic 19): DruidNode.init has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/DruidNode.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"36e80226ad616922c0c8a8cc15a4dec70f62b35d6cfcdb40f32e7b38bf4f7727"}},{"ruleId":"D1","level":"warning","message":{"text":"ArrayContainsOperatorConversion.toDruidFilter (cyclomatic 19): ArrayContainsOperatorConversion.toDruidFilter has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayContainsOperatorConversion.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"d490ac84144081c3735d2e856fd5bf424c82ef8b8b98926552e7895262c87313"}},{"ruleId":"D1","level":"warning","message":{"text":"SearchOperatorConversion.expandSearch (cyclomatic 19): SearchOperatorConversion.expandSearch has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/SearchOperatorConversion.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2e96ca7268cf9a99cd4143859edb92d04654b9fbae707ee8b24cc99b50cb462"}},{"ruleId":"D1","level":"warning","message":{"text":"Expressions.calciteLiteralToDruidLiteral (cyclomatic 19): Expressions.calciteLiteralToDruidLiteral has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/Expressions.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a76e603bd9d9c10652e2f2d8e8dc07a331cac7938b2b6087e151a0b5fcbf1a"}},{"ruleId":"D1","level":"warning","message":{"text":"HttpRemoteTaskRunner.pendingTasksExecutionLoop (cyclomatic 19): HttpRemoteTaskRunner.pendingTasksExecutionLoop has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":1091}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc5ba442b18d39e14a8a2ed948950cbb5674396e488cb95d5a138f3c25c08db5"}},{"ruleId":"D1","level":"warning","message":{"text":"AmbariMetricsEmitterConfig.equals (cyclomatic 19): AmbariMetricsEmitterConfig.equals has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/AmbariMetricsEmitterConfig.java"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"f441264bb692c54a4d1f16a1f9dfae3c8bd47a4a591a65d61fee693f50d9fbd7"}},{"ruleId":"D1","level":"warning","message":{"text":"InfluxdbEmitterConfig.equals (cyclomatic 19): InfluxdbEmitterConfig.equals has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/influxdb-emitter/src/main/java/org/apache/druid/emitter/influxdb/InfluxdbEmitterConfig.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"91efdbca59f377b954e8777929d97ea00db8e7d32879d1c731f77f1edac3cee2"}},{"ruleId":"D1","level":"warning","message":{"text":"KafkaEmitterConfig.equals (cyclomatic 19): KafkaEmitterConfig.equals has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/kafka-emitter/src/main/java/org/apache/druid/emitter/kafka/KafkaEmitterConfig.java"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aacdd2e2ed9c07f92a27abc80a6260ce48c04bc864b64b763e277df1a427db8"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeRoleWatcher.watch (cyclomatic 19): NodeRoleWatcher.watch has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeDiscoveryProvider.java"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e6e3e3200de4832a691a5b5341fc959b90d3cfdb83c838e5f1853c909dbe3ee"}},{"ruleId":"D1","level":"warning","message":{"text":"FixedBucketsHistogramQuantileSqlAggregator.toDruidAggregation (cyclomatic 19): FixedBucketsHistogramQuantileSqlAggregator.toDruidAggregation has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8e295cea6d475a45ff1e0f9ba069e67de1fa4ba34d0cc383f1c31823eced19b"}},{"ruleId":"D1","level":"warning","message":{"text":"FirstLastVectorAggregator.aggregate (cyclomatic 19): FirstLastVectorAggregator.aggregate has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/FirstLastVectorAggregator.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"53e8ce0472c7ae55972adaf3114b13e39faa1fc54b0a0b774a4f70ea167a57c5"}},{"ruleId":"D1","level":"warning","message":{"text":"AlphanumericComparator.compareNumbers (cyclomatic 19): AlphanumericComparator.compareNumbers has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b5a04dac81fa3b6226140668f5fb0750e0982e426c5592a03636507f23b190"}},{"ruleId":"D1","level":"warning","message":{"text":"LazilyDecoratedRowsAndColumns.naiveMaterialize (cyclomatic 19): LazilyDecoratedRowsAndColumns.naiveMaterialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/LazilyDecoratedRowsAndColumns.java"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"31472d31e140924234a1e3878497530170e829366e39c31db26bac84a28a683c"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexerSQLMetadataStorageCoordinator.createNewSegmentsAfterReplace (cyclomatic 19): IndexerSQLMetadataStorageCoordinator.createNewSegmentsAfterReplace has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":1885}}}],"partialFingerprints":{"codehealthFindingId/v1":"4055c1a3f1cb47b82f0d80509e1871c504d9a7dda8979b66cdef3dda5007f311"}},{"ruleId":"D1","level":"warning","message":{"text":"ColumnValueGenerator.initDistribution (cyclomatic 19): ColumnValueGenerator.initDistribution has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/generator/ColumnValueGenerator.java"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"648abc72472b2414a0d264e64deeefe1b21b9fc58f6d3b74035bbe47eac1ca42"}},{"ruleId":"D1","level":"warning","message":{"text":"PartialSegmentMetadataCacheEntry.applyRule (cyclomatic 19): PartialSegmentMetadataCacheEntry.applyRule has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"543137afb75c71a8973e767a4b62d286ad6e23598ee3e0416438bd5a31c646b4"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionSelectors.createBindings (cyclomatic 19): ExpressionSelectors.createBindings has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/ExpressionSelectors.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0e50bd5ead5e3d1052e516df85952fd67c8e31616a7899f3ec9ecd352db238e"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedFieldVirtualColumn.getIndexSupplier (cyclomatic 19): NestedFieldVirtualColumn.getIndexSupplier has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef98d73d0f41c6f869bb03063dda106b253c05b748b509fa22a458db3ce69cca"}},{"ruleId":"D1","level":"warning","message":{"text":"ControllerStageTracker.mergeClusterByStatisticsCollectorForTimeChunk (cyclomatic 19): ControllerStageTracker.mergeClusterByStatisticsCollectorForTimeChunk has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"682f4e3b1875b0849a774bc66ba39c946dcf495cb21e0a963fe3d808ee3d676d"}},{"ruleId":"D1","level":"warning","message":{"text":"ReadableByteChunksFrameChannel.updateStreamState (cyclomatic 19): ReadableByteChunksFrameChannel.updateStreamState has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/channel/ReadableByteChunksFrameChannel.java"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b6ce6041d8d3aa2cb3d98715e8d08544d980785cca89b8f412733b8f3e2aedb"}},{"ruleId":"D1","level":"warning","message":{"text":"SuperSorter.runNextMiddleMerger (cyclomatic 19): SuperSorter.runNextMiddleMerger has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/SuperSorter.java"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"57ea6266f430ddbed846d7d5cf8f93a5a2ddb73898e462217e2f757cdb41e8fe"}},{"ruleId":"D1","level":"warning","message":{"text":"StringFrameColumnWriter.addSelection (cyclomatic 19): StringFrameColumnWriter.addSelection has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/write/columnar/StringFrameColumnWriter.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0b92d0e400e487b33fbd99831b6ebf99be918575bcb4fc25086aed222719a97"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionTypeConversion.leastRestrictiveType (cyclomatic 19): ExpressionTypeConversion.leastRestrictiveType has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeConversion.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2d2f809c75ddc6e9308f87af1ea9fe30cff4eba0db2cb2b4c1c0ab91061849b"}},{"ruleId":"D1","level":"warning","message":{"text":"ConnectionUriUtils.tryParseJdbcUriParameters (cyclomatic 19): ConnectionUriUtils.tryParseJdbcUriParameters has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/utils/ConnectionUriUtils.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"156f9072f2ef1f66da748c30d4d5dc1843be9d83a7e4a567a246d298541ca038"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncQueryForwardingServlet.service (cyclomatic 18): AsyncQueryForwardingServlet.service has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed9086aa647467ef6b50e010df0b29b98d2c773187ae0989d963f044ef267b0"}},{"ruleId":"D1","level":"warning","message":{"text":"FilterJoinExcludePushToChildRule.perform (cyclomatic 18): FilterJoinExcludePushToChildRule.perform has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterJoinExcludePushToChildRule.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ae2191f3aec53d5e0bdf912ac11aa80bfe1977b37fc7c48429405cbd38922a"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamSupervisorIOConfig.\u003Cinit\u003E (cyclomatic 18): SeekableStreamSupervisorIOConfig.\u003Cinit\u003E has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorIOConfig.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"f92668817654162166de1f128e78f0bada07893d24d31f0051b9b3c0aa928b1f"}},{"ruleId":"D1","level":"warning","message":{"text":"EC2NodeData.equals (cyclomatic 18): EC2NodeData.equals has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/ec2-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2NodeData.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"59ca5cba3ded483e8c4e54f57c851f2e17abe4de711acc04b4981f907b4a0b10"}},{"ruleId":"D1","level":"warning","message":{"text":"TaskLockbox.revokeAllIncompatibleActiveLocksIfPossible (cyclomatic 18): TaskLockbox.revokeAllIncompatibleActiveLocksIfPossible has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":1538}}}],"partialFingerprints":{"codehealthFindingId/v1":"32d80e773a0da5276a7630f8eb51f837c56835234b4a70f65aec609af8062726"}},{"ruleId":"D1","level":"warning","message":{"text":"StatsDEmitter.emitMetric (cyclomatic 18): StatsDEmitter.emitMetric has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitter.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"662633aad8671c263a46a1079693793fb431ac5a6cf7427feb2e284d71b7d9a0"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultLimitSpec.makeComparator (cyclomatic 18): DefaultLimitSpec.makeComparator has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/orderby/DefaultLimitSpec.java"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f89be5fc41d54490156c080704e6a0a2591812d05c26d16c43d1a64b6b9f551"}},{"ruleId":"D1","level":"warning","message":{"text":"JoinLogic.joinRows (cyclomatic 18): JoinLogic.joinRows has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/operator/join/SortedInnerJoinOperator.java"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1194dd1e1c804019b7190e79da0ca0d2e89330248d8aa95612edd4b6f0bcd1f"}},{"ruleId":"D1","level":"warning","message":{"text":"DeltaInputRow.getValue (cyclomatic 18): DeltaInputRow.getValue has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/DeltaInputRow.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"68df5960ec22b0428e850a289ba87767d13cccccde1d9084ebd3e4de15de3a0f"}},{"ruleId":"D1","level":"warning","message":{"text":"BoundFilter.getBitmapColumnIndex (cyclomatic 18): BoundFilter.getBitmapColumnIndex has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/BoundFilter.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3d410df8664905e9be3e6996845b0f56e0c1c89f2806d5a8af2703b7f8b27cb"}},{"ruleId":"D1","level":"warning","message":{"text":"CompressedNestedDataComplexColumn.readNestedFieldColumn (cyclomatic 18): CompressedNestedDataComplexColumn.readNestedFieldColumn has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java"},"region":{"startLine":1082}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14149f58c2305b0737f496450963b921208f16e541f08767c889bb7150223a8"}},{"ruleId":"D1","level":"warning","message":{"text":"Projections.buildClusterVirtualColumnRemap (cyclomatic 18): Projections.buildClusterVirtualColumnRemap has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce0311f0c02e5fcff9cd5db4d2e51d65117f258f048b472a6d0d9f6137ec3ea7"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedFieldVirtualColumn.makeColumnValueSelector (cyclomatic 18): NestedFieldVirtualColumn.makeColumnValueSelector has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e052c1a5ceb08647c8c134b1f9331fd628429d89a68faf85c26e4ab415e63a"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseAppenderatorDriver.publishInBackground (cyclomatic 18): BaseAppenderatorDriver.publishInBackground has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/BaseAppenderatorDriver.java"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f14e57806d19b9f1e1e8fd6ba9e8104d615df107ec7bac69f49d1992333aa9"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexMergerBase.mergeIndexesAndWriteColumns (cyclomatic 18): IndexMergerBase.mergeIndexesAndWriteColumns has cyclomatic complexity 18 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerBase.java"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe53d977e61b894b6a6b826ec847f8b9cdda259c29d3b3bec883c811f63e1970"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexMergerV10.makeClusteredIndexFiles (cyclomatic 18): IndexMergerV10.makeClusteredIndexFiles has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"63e664fb13b6b47c3896aa31c169d50579dfb21c39ac9fba33da3dbb95c6e3a4"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexMergerV10.makeIndexFiles (cyclomatic 18): IndexMergerV10.makeIndexFiles has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"a396d427b01f91d8fae16018acb583daf14a3476491b307d3a8dcc18e5ca92ae"}},{"ruleId":"D1","level":"warning","message":{"text":"MSQErrorReport.getFaultFromException (cyclomatic 18): MSQErrorReport.getFaultFromException has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/error/MSQErrorReport.java"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8094bcfc5896f69925edb0766b44ca1675eac92ed3a54a5f05328487ba149b1"}},{"ruleId":"D1","level":"warning","message":{"text":"ControllerQueryKernel.registerStagePhaseChange (cyclomatic 18): ControllerQueryKernel.registerStagePhaseChange has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerQueryKernel.java"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2a101092325674a89e75f2ef7720c8a40993c613e8cd6d86e670d1ee5f31fe"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkerInputs.create (cyclomatic 18): WorkerInputs.create has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/WorkerInputs.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"045551e4bc8c56507767252ca3fea19b95c4527bd18e4282d21045442fbf97d4"}},{"ruleId":"D1","level":"warning","message":{"text":"ChannelStageOutputReader.readRemotelyFrom (cyclomatic 18): ChannelStageOutputReader.readRemotelyFrom has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/shuffle/output/ChannelStageOutputReader.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ef25253ea345dec0f7d138589c289b6d4738ceb24f246edea6a3dabfde044b"}},{"ruleId":"D1","level":"warning","message":{"text":"FrameChannelMerger.writeNextFrameWithCombiner (cyclomatic 18): FrameChannelMerger.writeNextFrameWithCombiner has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/FrameChannelMerger.java"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bda98f325c19f1e6109795ac4c044b12701d60a20fb6a10715ac73bf8108727"}},{"ruleId":"D1","level":"warning","message":{"text":"StrategicSegmentAssigner.updateReplicasInTierPartial (cyclomatic 17): StrategicSegmentAssigner.updateReplicasInTierPartial has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"89188661c0ac84f4fa8404990ead085293eb78a937fba0f19f0c67c91e358cc6"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidSqlParserUtils.convertSqlNodeToGranularity (cyclomatic 17): DruidSqlParserUtils.convertSqlNodeToGranularity has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParserUtils.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"694529c0e7f962da67024e69e4cc8dcde4537d932879a5b299c37767444842c1"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicAllocationTasksNotice.handle (cyclomatic 17): DynamicAllocationTasksNotice.handle has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c658301312272afcdbd145f53e44ff0185e0dd1c23f5e88a7acf6f30aa7c39f"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamIndexTaskRunner.setEndOffsets (cyclomatic 17): SeekableStreamIndexTaskRunner.setEndOffsets has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":1914}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5139e4d9523119328e87214b6d85bff72fe27001e13637bd8b82e595374fa0a"}},{"ruleId":"D1","level":"warning","message":{"text":"6590.call (cyclomatic 17): 6590.call has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ThreadingTaskRunner.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"35f2f1fe59b18643dd345233022925031b22b79d9c6dadde2cfcbdbf46756fef"}},{"ruleId":"D1","level":"warning","message":{"text":"CompactionTask.createInputDataSchemas (cyclomatic 17): CompactionTask.createInputDataSchemas has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java"},"region":{"startLine":595}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e86cecf867ef06ff07c515f612faa8d94925312c875ee1f2574b1401c3f112"}},{"ruleId":"D1","level":"warning","message":{"text":"Rows.objectToNumber (cyclomatic 17): Rows.objectToNumber has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/Rows.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"402acb9657360ee1a34d5af21901e20b0d01a245d88e4ced4ca9d54d56120495"}},{"ruleId":"D1","level":"warning","message":{"text":"3056.apply (cyclomatic 17): 3056.apply has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3Utils.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"27bd1edf9ad908c6fc1a58a6fe5ea57e8dc63aa448d6de543d6264bf3696a5a9"}},{"ruleId":"D1","level":"warning","message":{"text":"ClipOutlierHandler.simpleInterpolateMergeHandleOutliers (cyclomatic 17): ClipOutlierHandler.simpleInterpolateMergeHandleOutliers has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"80464a026b7b59fa506c34d0652d0f288634e92e8a82ace0082f14964231f791"}},{"ruleId":"D1","level":"warning","message":{"text":"LazilyDecoratedRowsAndColumns.materializeCursorFactory (cyclomatic 17): LazilyDecoratedRowsAndColumns.materializeCursorFactory has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/LazilyDecoratedRowsAndColumns.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"70af713f8e970469db8bd37fc3a50619a450120cff7ae9c345719a1da634e680"}},{"ruleId":"D1","level":"warning","message":{"text":"RowSerde.convertRowToJsonObject (cyclomatic 17): RowSerde.convertRowToJsonObject has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/RowSerde.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"26b19f3156f8734e78dbb95f7f97dffe639bd98082e9578d2e79c09f8d6aa009"}},{"ruleId":"D1","level":"warning","message":{"text":"FrontCodedIndexed.indexOf (cyclomatic 17): FrontCodedIndexed.indexOf has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIndexed.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba0167b2b88b8830dbf5553d44fa54294c190086a7914b3b8c9c53666b8ef0d2"}},{"ruleId":"D1","level":"warning","message":{"text":"FrontCodedIntArrayIndexed.indexOf (cyclomatic 17): FrontCodedIntArrayIndexed.indexOf has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIntArrayIndexed.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f0b0664ea3f2ca3acd3d56d7d8fed508d3b3bb4ebd20c0e9d85f30b288318a3"}},{"ruleId":"D1","level":"warning","message":{"text":"IncrementalIndex.toIncrementalIndexRow (cyclomatic 17): IncrementalIndex.toIncrementalIndexRow has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"142aa9711fb9021f8faca3e6a33adb0203b309a26ffae4215ef0be3bb0866c7a"}},{"ruleId":"D1","level":"warning","message":{"text":"CompleteSegmentCacheEntry.mount (cyclomatic 17): CompleteSegmentCacheEntry.mount has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1993}}}],"partialFingerprints":{"codehealthFindingId/v1":"1619a8e6a8767768670e3b1c947a0a270142cb958893fa679c61fd1d7dda683f"}},{"ruleId":"D1","level":"warning","message":{"text":"VariantColumnSerializer.serialize (cyclomatic 17): VariantColumnSerializer.serialize has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/VariantColumnSerializer.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"b99b1d083a7dfc1473bbef4bf88784b531e3597a2852a6bc1410872b338856d0"}},{"ruleId":"D1","level":"warning","message":{"text":"ProjectionFilterMatch.rewriteFilter (cyclomatic 17): ProjectionFilterMatch.rewriteFilter has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/ProjectionFilterMatch.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba378744549c81d4bd3b7afecb05786cbc162d9acf0785c912d3f6a86bce582f"}},{"ruleId":"D1","level":"warning","message":{"text":"Projections.matchQueryVirtualColumn (cyclomatic 17): Projections.matchQueryVirtualColumn has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"20bc3b53bc145ccc9d4111c163a2a4cae4b4486cdedbec49a0abd669c6551027"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedFieldVirtualColumn.makeVectorValueSelector (cyclomatic 17): NestedFieldVirtualColumn.makeVectorValueSelector has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c989c08db6d898e02bd1254ba445afc85bd0657f30ac192b948ca1173d6655e"}},{"ruleId":"D1","level":"warning","message":{"text":"BatchAppenderator.mergeAndPush (cyclomatic 17): BatchAppenderator.mergeAndPush has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/BatchAppenderator.java"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f4dde4130f6fc7550050dc3d45721d42c0d45f8811eb32f10d789be8791a350"}},{"ruleId":"D1","level":"warning","message":{"text":"StreamAppenderator.add (cyclomatic 17): StreamAppenderator.add has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/StreamAppenderator.java"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"e82c00c65ba9098bdf42c868957f8997891165c84fad59c49578a1fd1c2773ad"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexMergerV9.makeIndexFiles (cyclomatic 17): IndexMergerV9.makeIndexFiles has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV9.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"a001a60129222ffa3ef858ccac6310be1b8896e5823ce752a1adced54c0cb10e"}},{"ruleId":"D1","level":"warning","message":{"text":"SegmentGenerationUtils.makeDimensionsAndAggregatorsForIngestion (cyclomatic 17): SegmentGenerationUtils.makeDimensionsAndAggregatorsForIngestion has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/destination/SegmentGenerationUtils.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"3585f5d114220009b71f10ad66f01f5777cd5d9a2ea9e9175a3cb7db2f7980a1"}},{"ruleId":"D1","level":"warning","message":{"text":"ControllerStageTracker.addPartialKeyInformationForWorker (cyclomatic 17): ControllerStageTracker.addPartialKeyInformationForWorker has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"10b77f05e05ee8d4fad891bb8f07b3ceed7a7b778cc4c190219788ac85620cd7"}},{"ruleId":"D1","level":"warning","message":{"text":"ConciseSet.contains (cyclomatic 17): ConciseSet.contains has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":1095}}}],"partialFingerprints":{"codehealthFindingId/v1":"111df3be1049d7496bcf608592b7dd7467b06b032f05f2dfe37e64936b6d1492"}},{"ruleId":"D1","level":"warning","message":{"text":"ReservoirSegmentSampler.getRandomBalancerSegmentHolder (cyclomatic 16): ReservoirSegmentSampler.getRandomBalancerSegmentHolder has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/balancer/ReservoirSegmentSampler.java"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4d8d1b3ace1efe488954f34f9817d6dc569b63b18fc7bc0cefcc233aca20535"}},{"ruleId":"D1","level":"warning","message":{"text":"CompactSegments.createCompactionTask (cyclomatic 16): CompactSegments.createCompactionTask has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/duty/CompactSegments.java"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"f425196083f1ba9790d9fdd5f60d2965f5db4923851c6b4cbbf7f4bb9848f2da"}},{"ruleId":"D1","level":"warning","message":{"text":"QueryResultPusher.push (cyclomatic 16): QueryResultPusher.push has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/QueryResultPusher.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"d81051a64298b26b456275b8e6111dac08d0000103960a91fd3ee0f286c3e1aa"}},{"ruleId":"D1","level":"warning","message":{"text":"CollectComparisons.collect (cyclomatic 16): CollectComparisons.collect has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/CollectComparisons.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"40ed32bf1d40931f1721c3f9db1dfc1e4a8c53fe7306f479c2060a6b9600404c"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidSqlParser.getUnexpectedTokenString (cyclomatic 16): DruidSqlParser.getUnexpectedTokenString has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParser.java"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"c72dbb0273904def0a0124ddc525d8a148c078cb5282cb3c0e4acf3d2a9a34a9"}},{"ruleId":"D1","level":"warning","message":{"text":"DruidSqlValidator.validateWindow (cyclomatic 16): DruidSqlValidator.validateWindow has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"c04551798ef9e2406e28aa765eefa66fdb615624db24506a62b1d6c0dd2899b4"}},{"ruleId":"D1","level":"warning","message":{"text":"AggregateMergeRule.apply (cyclomatic 16): AggregateMergeRule.apply has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/AggregateMergeRule.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed97e6631c907ae326b25fb3165d10494d6088cb506e7b1253800544d08e9ae7"}},{"ruleId":"D1","level":"warning","message":{"text":"SeekableStreamSupervisor.resetInternal (cyclomatic 16): SeekableStreamSupervisor.resetInternal has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2136}}}],"partialFingerprints":{"codehealthFindingId/v1":"e99a9c767798f38fb32fa6669d4ef1a33cb8518d5bf85f942349b807690e73ed"}},{"ruleId":"D1","level":"warning","message":{"text":"99768.apply (cyclomatic 16): 99768.apply has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2463}}}],"partialFingerprints":{"codehealthFindingId/v1":"b01d965a3a848efa1fcdaa7e96110144d15ec6719daa8ac72788fc14d04ed218"}},{"ruleId":"D1","level":"warning","message":{"text":"167771.apply (cyclomatic 16): 167771.apply has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3969}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec44c6c3e81a4b6f1c5c63e03ba4d52fca74fb0bffca7d7773573cf8ecf16803"}},{"ruleId":"D1","level":"warning","message":{"text":"TaskLockbox.unlock (cyclomatic 16): TaskLockbox.unlock has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":1102}}}],"partialFingerprints":{"codehealthFindingId/v1":"9572047a557a1bf5cd8f5feec5223eb5c38d04668ca26225434973d1310afa4f"}},{"ruleId":"D1","level":"warning","message":{"text":"PartitionResource.fetchRecords (cyclomatic 16): PartitionResource.fetchRecords has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1336c68bd7ae39734f01951f6f4c7c0dc8fa176270cf696bff584593c1841d0"}},{"ruleId":"D1","level":"warning","message":{"text":"ParallelIndexPhaseRunner.run (cyclomatic 16): ParallelIndexPhaseRunner.run has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexPhaseRunner.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"e966787186d494c51db2dc694558b37740a76ae508707e7f36a20f11bcbeb591"}},{"ruleId":"D1","level":"warning","message":{"text":"ParallelIndexTuningConfig.\u003Cinit\u003E (cyclomatic 16): ParallelIndexTuningConfig.\u003Cinit\u003E has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexTuningConfig.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc83805d70436d5b172cfc894ae90412ed2e5471c4e25774a20890a8113d87bf"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexTask.generateAndPublishSegments (cyclomatic 16): IndexTask.generateAndPublishSegments has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":808}}}],"partialFingerprints":{"codehealthFindingId/v1":"59577500b4d533c5ae8083207fd072ef10f61cc93167ec3ff8a981f749f578b8"}},{"ruleId":"D1","level":"warning","message":{"text":"ServerSideEncryptingAmazonS3.builder (cyclomatic 16): ServerSideEncryptingAmazonS3.builder has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/ServerSideEncryptingAmazonS3.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"9052653736407874b2a3b1a2bf5ac81eeddfa6aee834ca591a7b84cff2cee94e"}},{"ruleId":"D1","level":"warning","message":{"text":"StatsDEmitterConfig.equals (cyclomatic 16): StatsDEmitterConfig.equals has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitterConfig.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"14e8b362a439ae005c2c2259a9808707433631aa7f95520462af9624a7c740be"}},{"ruleId":"D1","level":"warning","message":{"text":"HllSketchBaseSqlAggregator.toDruidAggregation (cyclomatic 16): HllSketchBaseSqlAggregator.toDruidAggregation has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae14b267ceb442b7fe0778a015624c4abcf9d170d81b8bd1295135a46d662123"}},{"ruleId":"D1","level":"warning","message":{"text":"ApproximateHistogram.sum (cyclomatic 16): ApproximateHistogram.sum has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1458}}}],"partialFingerprints":{"codehealthFindingId/v1":"015a96303354701bb7031ae55d054857279a3b84a2a6f3c3b270f57756eca2ee"}},{"ruleId":"D1","level":"warning","message":{"text":"RowBasedGrouperHelper.createGrouperAccumulatorPair (cyclomatic 16): RowBasedGrouperHelper.createGrouperAccumulatorPair has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"169d05f04ec9f17b4b1bcc7201aed7c6a0cea0ea4b368d01ae75c280cfd504c0"}},{"ruleId":"D1","level":"warning","message":{"text":"SegmentAnalyzer.analyze (cyclomatic 16): SegmentAnalyzer.analyze has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f5cb2a404535fbf42db3eddd797c47dde2dc7cf85cd711833c0c77c1a6b841"}},{"ruleId":"D1","level":"warning","message":{"text":"SearchBinaryFn.apply (cyclomatic 16): SearchBinaryFn.apply has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/SearchBinaryFn.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"189a53010a8a261be69327c9706bc029dd26c1ef9ab5c9294ff7879bd60e55c4"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexerSQLMetadataStorageCoordinator.createNewPendingSegment (cyclomatic 16): IndexerSQLMetadataStorageCoordinator.createNewPendingSegment has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"e253cdaf30cbb70d308c790d3736c61bba32a5888d59ae9d19b28e65e6cb0d89"}},{"ruleId":"D1","level":"warning","message":{"text":"BoundFilter.doesMatch (cyclomatic 16): BoundFilter.doesMatch has cyclomatic complexity 16 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/BoundFilter.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e51d26de8fba7d9f07cab1bced9eb1226f9d4a67f77b50af8200658e607ad78"}},{"ruleId":"D1","level":"warning","message":{"text":"1.matches (cyclomatic 16): 1.matches has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef12646a89ca320fbb6c2a253a3cedd69152b7740ad550da3916d9e643d49a5"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexedTableJoinMatcher.matchCondition (cyclomatic 16): IndexedTableJoinMatcher.matchCondition has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/table/IndexedTableJoinMatcher.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"2471f29d35fffc16766fbe73635194ade4832d7d1c21991b7665ca65385dae1e"}},{"ruleId":"D1","level":"warning","message":{"text":"HashJoinSegmentCursorFactory.planJoinCursor (cyclomatic 16): HashJoinSegmentCursorFactory.planJoinCursor has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/HashJoinSegmentCursorFactory.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"beb5f392d1a9db41b8d70e475a02e68f6756707325d20284826c4c46b4fd4e10"}},{"ruleId":"D1","level":"warning","message":{"text":"PartialSegmentMetadataCacheEntry.doMount (cyclomatic 16): PartialSegmentMetadataCacheEntry.doMount has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0c37110f80c3e78bb59f35aac31be5c1f8eb896e305296ae38c121f1ad78774"}},{"ruleId":"D1","level":"warning","message":{"text":"SegmentLocalCacheManager.addFilesToCachedSegments (cyclomatic 16): SegmentLocalCacheManager.addFilesToCachedSegments has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aecbb993ae0b377604a3be195f7c01414e66f601d40fdd60eb84d437dfb9132"}},{"ruleId":"D1","level":"warning","message":{"text":"SegmentLocalCacheManager.awaitEagerDownloadsOrClearRule (cyclomatic 16): SegmentLocalCacheManager.awaitEagerDownloadsOrClearRule has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1132}}}],"partialFingerprints":{"codehealthFindingId/v1":"13a805d96d29cb3c4c5846c96bac458cf0c343974b31d22bfa1b91af1c9676e7"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedFieldVirtualColumn.makeVectorObjectSelector (cyclomatic 16): NestedFieldVirtualColumn.makeVectorObjectSelector has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"f09912e7c01576547ccafe4ec6e5538c9b32acce111f4cfae4e296ae67d707dd"}},{"ruleId":"D1","level":"warning","message":{"text":"S3InputSourceDefn.convertArgsToSourceMap (cyclomatic 16): S3InputSourceDefn.convertArgsToSourceMap has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/s3-extensions/src/main/java/org/apache/druid/catalog/model/table/S3InputSourceDefn.java"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4763a486055b47457b005113ff592a2545ac3ba4d180d5f0ebafeda99338cfc"}},{"ruleId":"D1","level":"warning","message":{"text":"GroupByPreShuffleStageProcessor.filterBaseInput (cyclomatic 16): GroupByPreShuffleStageProcessor.filterBaseInput has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleStageProcessor.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"b83f68cb219ea85043ea104927ce7a85db63c42f075a9e368817db4e4e34cc31"}},{"ruleId":"D1","level":"warning","message":{"text":"MSQTaskSqlEngine.validateTypeChanges (cyclomatic 16): MSQTaskSqlEngine.validateTypeChanges has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/sql/MSQTaskSqlEngine.java"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda1ec5f80899524863470e61d42855910f6e0681ad00637e0e12fd791af4dc0"}},{"ruleId":"D1","level":"warning","message":{"text":"Batch.tryReleaseShared (cyclomatic 16): Batch.tryReleaseShared has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/emitter/core/Batch.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"486e88f1547f4801915121fd0db9c5be54221b44071b36f47f958e0a109ef360"}},{"ruleId":"D1","level":"warning","message":{"text":"ArrayExprEval.castTo (cyclomatic 16): ArrayExprEval.castTo has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":1295}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcdcbe0d41da4d4109639d548722c739e87012642b415272553d5a97f31fd2b3"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidRexExecutor.reduce (cognitive 170): DruidRexExecutor.reduce has cognitive complexity 170 (threshold 15). Drivers by points: if/else 134, loops 34, boolean chains 2 (nesting depth added 126). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidRexExecutor.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"e115b5f55279953f00091920038dabc1681a08e6710030485fff0e2eca95b93a"}},{"ruleId":"D2","level":"warning","message":{"text":"Expressions.toSimpleLeafFilter (cognitive 157): Expressions.toSimpleLeafFilter has cognitive complexity 157 (threshold 15). Drivers by points: if/else 124, match/switch 15, boolean chains 11, ternaries 7 (nesting depth added 98). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/Expressions.java"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"640f82a1e7f3947531c46e7410b326b57850e8bf553a47398bb487ef6e1f9e40"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamIndexTaskRunner.runInternal (cognitive 135): SeekableStreamIndexTaskRunner.runInternal has cognitive complexity 135 (threshold 15). Drivers by points: if/else 98, boolean chains 11, error handling 11, loops 11, ternaries 4 (nesting depth added 61). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d57829a62e1ea64be77f8452aef78e00360fb795a9cef1e47df56219f180ccd"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentMetadataQueryQueryToolChest.mergeAnalyses (cognitive 119): SegmentMetadataQueryQueryToolChest.mergeAnalyses has cognitive complexity 119 (threshold 15). Drivers by points: if/else 57, loops 37, ternaries 10, boolean chains 8, error handling 7 (nesting depth added 65). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryQueryToolChest.java"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd96415d8f43dbc9e9a01705b39345dece3da5b4cba81dd00dd092262ce2a4dd"}},{"ruleId":"D2","level":"warning","message":{"text":"CombineAndSimplifyBounds.doSimplify (cognitive 108): CombineAndSimplifyBounds.doSimplify has cognitive complexity 108 (threshold 15). Drivers by points: if/else 59, loops 37, ternaries 7, boolean chains 5 (nesting depth added 54). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/CombineAndSimplifyBounds.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"447c4dea62ad2c1e02afbd5a1e680c2177742fa47be53365a1d0978b35c0955d"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedPathFinder.parseJqPath (cognitive 102): NestedPathFinder.parseJqPath has cognitive complexity 102 (threshold 15). Drivers by points: if/else 84, boolean chains 11, error handling 6, loops 1 (nesting depth added 65). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedPathFinder.java"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"757ec2460ed6444f94586e69145082b9a1c9b0b6c4ed4752a68c444373bdf79d"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlResults.coerce (cognitive 99): SqlResults.coerce has cognitive complexity 99 (threshold 15). Drivers by points: if/else 71, error handling 27, boolean chains 1 (nesting depth added 64). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/run/SqlResults.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e31dff1b232d86f8a8f9b2857b404361002f1916b30185527d80ffd8bf110f4"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.compareTo (cognitive 93): ConciseSet.compareTo has cognitive complexity 93 (threshold 15). Drivers by points: if/else 87, ternaries 3, boolean chains 2, loops 1 (nesting depth added 58). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":1261}}}],"partialFingerprints":{"codehealthFindingId/v1":"81c31209ac2b5ef8f67d38476ac6d2d8400ef1ca6ef5319ae8f3103f0552cb46"}},{"ruleId":"D2","level":"warning","message":{"text":"ImmutableConciseSet.doIntersection (cognitive 91): ImmutableConciseSet.doIntersection has cognitive complexity 91 (threshold 15). Drivers by points: if/else 74, loops 13, boolean chains 4 (nesting depth added 51). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"42403aa506c09a2d80d84aa4b9e6ad6ebeba4fa873479a74b680d8b4ca1ae24a"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedPathFinder.parseJsonPathInternal (cognitive 84): NestedPathFinder.parseJsonPathInternal has cognitive complexity 84 (threshold 15). Drivers by points: if/else 70, boolean chains 8, error handling 5, loops 1 (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedPathFinder.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ffde4a82f8985adcb172c63d833f05105acde2a06183d02fe8dedbe3daa026"}},{"ruleId":"D2","level":"warning","message":{"text":"ImmutableConciseSet.doUnion (cognitive 80): ImmutableConciseSet.doUnion has cognitive complexity 80 (threshold 15). Drivers by points: if/else 63, loops 13, boolean chains 4 (nesting depth added 49). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cf3dbe9a70ce9735606405ef8741c8786cf716756b218be83f70200c56a3db5"}},{"ruleId":"D2","level":"warning","message":{"text":"JettyServerModule.makeAndInitializeServer (cognitive 79): JettyServerModule.makeAndInitializeServer has cognitive complexity 79 (threshold 15). Drivers by points: if/else 50, ternaries 23, loops 3, boolean chains 2, error handling 1 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/initialization/jetty/JettyServerModule.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8d644c53d0dd8c9862a266667964530c7f1b98c827fb025981c9bb3a5908af"}},{"ruleId":"D2","level":"warning","message":{"text":"PeriodGranularity.truncate (cognitive 77): PeriodGranularity.truncate has cognitive complexity 77 (threshold 15). Drivers by points: if/else 66, boolean chains 9, error handling 2 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdfd125f6b08057e89a659a5a5c47b37a960911412c575df23587bdb42891259"}},{"ruleId":"D2","level":"warning","message":{"text":"ExprEval.coerceListToArray (cognitive 67): ExprEval.coerceListToArray has cognitive complexity 67 (threshold 15). Drivers by points: if/else 26, loops 21, ternaries 17, boolean chains 3 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"76e94574ceae2d8ecc90a5abaff5f87c9f6d002a02f7e8f41847ae94cf6f2d8b"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionPlanner.plan (cognitive 64): ExpressionPlanner.plan has cognitive complexity 64 (threshold 15). Drivers by points: if/else 51, boolean chains 11, loops 2 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/ExpressionPlanner.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d5d7148a5810363c25436ce0f52aba13bdf8505d8fd04061e0dd34032a08d5d"}},{"ruleId":"D2","level":"warning","message":{"text":"MoveTimeFiltersToIntervals.extractConvertibleTimeBounds (cognitive 59): MoveTimeFiltersToIntervals.extractConvertibleTimeBounds has cognitive complexity 59 (threshold 15). Drivers by points: if/else 47, ternaries 6, loops 5, boolean chains 1 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/MoveTimeFiltersToIntervals.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"933bb5a1b39198c72d6e02990edb9df78a621acd979386437ed0ca517f0d5a0a"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinLogic.joinRows (cognitive 59): JoinLogic.joinRows has cognitive complexity 59 (threshold 15). Drivers by points: if/else 38, loops 21 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/operator/join/SortedInnerJoinOperator.java"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a00db61986501a62d70c807624c07d71c25c8fbd04828e400eb2b23f4c1472d"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexedTableJoinMatcher.matchCondition (cognitive 58): IndexedTableJoinMatcher.matchCondition has cognitive complexity 58 (threshold 15). Drivers by points: if/else 42, loops 14, boolean chains 2 (nesting depth added 39). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/table/IndexedTableJoinMatcher.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f61a86f0db1d597dde2c5f89898381fe06aba15933db33cb6ea51c3a8e58c74"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexMergerBase.makeProjections (cognitive 58): IndexMergerBase.makeProjections has cognitive complexity 58 (threshold 15). Drivers by points: loops 35, if/else 23 (nesting depth added 34). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerBase.java"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"e12f608ee49e29f594c6db318c31f2011d2318d56a71b62d8578cbd7f0251ae2"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayContainsOperatorConversion.toDruidFilter (cognitive 57): ArrayContainsOperatorConversion.toDruidFilter has cognitive complexity 57 (threshold 15). Drivers by points: if/else 32, ternaries 14, loops 8, boolean chains 3 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayContainsOperatorConversion.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe49ca55abd610ae28e3c40ad59055279a2ac638d7c105d04fcb725d28254110"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.remove (cognitive 57): ConciseSet.remove has cognitive complexity 57 (threshold 15). Drivers by points: if/else 51, boolean chains 5, loops 1 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":999}}}],"partialFingerprints":{"codehealthFindingId/v1":"4469a2defd05c1487e589a70163fff0545854dcb936df8543975a177e0e305e1"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayOverlapOperatorConversion.toDruidFilter (cognitive 55): ArrayOverlapOperatorConversion.toDruidFilter has cognitive complexity 55 (threshold 15). Drivers by points: if/else 44, loops 4, ternaries 4, boolean chains 3 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayOverlapOperatorConversion.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5f4164cb8521170d12f63369e74196babf686f905a91d473988851e859a6592"}},{"ruleId":"D2","level":"warning","message":{"text":"7298.call (cognitive 55): 7298.call has cognitive complexity 55 (threshold 15). Drivers by points: if/else 39, error handling 6, loops 6, boolean chains 4 (nesting depth added 11). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"af2683e2afbdc2de0ad61134de87d7eba771f5fc11848af32b1044cb430cb7a4"}},{"ruleId":"D2","level":"warning","message":{"text":"Batch.tryReleaseShared (cognitive 54): Batch.tryReleaseShared has cognitive complexity 54 (threshold 15). Drivers by points: if/else 33, ternaries 12, loops 9 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/emitter/core/Batch.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"128c764b683df010447cbf5b07bb9d70a0c876206fe8034f7bc2865fa6679594"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamIndexTaskRunner.setEndOffsets (cognitive 53): SeekableStreamIndexTaskRunner.setEndOffsets has cognitive complexity 53 (threshold 15). Drivers by points: if/else 41, loops 6, boolean chains 3, error handling 3 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":1914}}}],"partialFingerprints":{"codehealthFindingId/v1":"c265abe106166b31520a5f6e5b0b1d0aff06b25c6dd3a55257b3109619a940ec"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncQueryForwardingServlet.service (cognitive 52): AsyncQueryForwardingServlet.service has cognitive complexity 52 (threshold 15). Drivers by points: if/else 25, error handling 22, boolean chains 4, ternaries 1 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"054d8f5d905a0da4f1f63b7660fa46badf69808fc078b368a946c1a7fb685610"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidQuery.computeVirtualColumns (cognitive 52): DruidQuery.computeVirtualColumns has cognitive complexity 52 (threshold 15). Drivers by points: if/else 32, loops 19, boolean chains 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":733}}}],"partialFingerprints":{"codehealthFindingId/v1":"179faf8816e4de7277748fba9924f2adc4a8ba55c0b0094511d80dcb17c8bfd9"}},{"ruleId":"D2","level":"warning","message":{"text":"CostBasedAutoScaler.extractMovingAverage (cognitive 52): CostBasedAutoScaler.extractMovingAverage has cognitive complexity 52 (threshold 15). Drivers by points: if/else 47, loops 3, boolean chains 1, ternaries 1 (nesting depth added 39). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2be8d51e04eb98deb9cea8e08c32fd9d6c8a372d2ea8824abac0100dfad635"}},{"ruleId":"D2","level":"warning","message":{"text":"InputSourceSampler.sample (cognitive 52): InputSourceSampler.sample has cognitive complexity 52 (threshold 15). Drivers by points: if/else 35, loops 8, ternaries 5, boolean chains 3, error handling 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/sampler/InputSourceSampler.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"af33ad4ed2588bdfec77125497343f18842c31e3a2f8e248380f791880933f4a"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectionUriUtils.tryParseJdbcUriParameters (cognitive 52): ConnectionUriUtils.tryParseJdbcUriParameters has cognitive complexity 52 (threshold 15). Drivers by points: error handling 44, if/else 8 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/utils/ConnectionUriUtils.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d88896a6bf970541e1add3cf36847afcb57acf4b12c5f88ebd7072a8a0099fa"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeRoleWatcher.watch (cognitive 51): NodeRoleWatcher.watch has cognitive complexity 51 (threshold 15). Drivers by points: if/else 22, loops 16, error handling 12, boolean chains 1 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeDiscoveryProvider.java"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d9c6ccece7f8542ccb4be38f2495458e91e411ffdd8af1fb92090ae8084701f"}},{"ruleId":"D2","level":"warning","message":{"text":"Projections.walkClusterGroupFilter (cognitive 51): Projections.walkClusterGroupFilter has cognitive complexity 51 (threshold 15). Drivers by points: if/else 41, loops 6, ternaries 4 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"708506c2140813d43e77c6aa61b1a78df6948022e836935afc0a4774001f8b0f"}},{"ruleId":"D2","level":"warning","message":{"text":"MSQErrorReport.getFaultFromException (cognitive 51): MSQErrorReport.getFaultFromException has cognitive complexity 51 (threshold 15). Drivers by points: if/else 49, boolean chains 1, loops 1 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/error/MSQErrorReport.java"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9f508a1cd7cd30ced1f8872f90345a2db5e4134593bffb53b816eb3b6a7b1e3"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.add (cognitive 50): ConciseSet.add has cognitive complexity 50 (threshold 15). Drivers by points: if/else 43, boolean chains 6, loops 1 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b97221e283a6f187341740a4a54f1385b889bd150663bc6b91c809e277d8e10"}},{"ruleId":"D2","level":"warning","message":{"text":"ExprEval.bestEffortOf (cognitive 50): ExprEval.bestEffortOf has cognitive complexity 50 (threshold 15). Drivers by points: if/else 19, loops 18, ternaries 11, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8b5ac56f9cf14cc5b08f857b7af47d030b5306c59bdaf11bd09f6c5b5b4a331"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonConfigurator.configurate (cognitive 49): JsonConfigurator.configurate has cognitive complexity 49 (threshold 15). Drivers by points: if/else 26, error handling 8, loops 6, ternaries 6, boolean chains 3 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/guice/JsonConfigurator.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"71ad34d044adecaf745ed80997274bd84389504267eb76335c6ed8496da087e0"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerManager.getOrLoadSegmentReferences (cognitive 47): ServerManager.getOrLoadSegmentReferences has cognitive complexity 47 (threshold 15). Drivers by points: if/else 27, error handling 9, ternaries 7, loops 3, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/ServerManager.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"91a76d3078fb5a1d8706dd39470dd21b2b1c63054c3569b4d60fe197437afb1a"}},{"ruleId":"D2","level":"warning","message":{"text":"ReaderUtils.getColumnsRequiredForIngestion (cognitive 47): ReaderUtils.getColumnsRequiredForIngestion has cognitive complexity 47 (threshold 15). Drivers by points: if/else 29, loops 11, error handling 5, boolean chains 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/indexing/ReaderUtils.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"762376e169497ca85485d6c54a7c7781e8c16bce2f0a40c24eff80988d7b45a7"}},{"ruleId":"D2","level":"warning","message":{"text":"ImmutableConciseSet.addAndCompact (cognitive 47): ImmutableConciseSet.addAndCompact has cognitive complexity 47 (threshold 15). Drivers by points: if/else 41, boolean chains 6 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdcd2d4e4120e9a3f182af3c93b45c579043814ff3555a03347d97cc4ecb95d2"}},{"ruleId":"D2","level":"warning","message":{"text":"ExprEval.ofType (cognitive 47): ExprEval.ofType has cognitive complexity 47 (threshold 15). Drivers by points: if/else 34, loops 9, error handling 3, match/switch 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"43fa98884fcf02774ac8f5e26c6f517d55f1decf3bec423f0c8d2d929ba89fa6"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedCommonFormatColumnFormatSpec.getEffectiveFormatSpec (cognitive 46): NestedCommonFormatColumnFormatSpec.getEffectiveFormatSpec has cognitive complexity 46 (threshold 15). Drivers by points: if/else 44, boolean chains 1, ternaries 1 (nesting depth added 10). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedCommonFormatColumnFormatSpec.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"a16c2fb0806b40eb91ddaa5b224ec0b8106e1692cab60902c1f65e465afa4aef"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.createNewTasks (cognitive 45): SeekableStreamSupervisor.createNewTasks has cognitive complexity 45 (threshold 15). Drivers by points: if/else 30, ternaries 7, boolean chains 5, loops 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":4324}}}],"partialFingerprints":{"codehealthFindingId/v1":"635d5cb6ba6989952e073630e2929dba658d406cf46374d236710f9662bbb6bf"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpRemoteTaskRunner.taskAddedOrUpdated (cognitive 45): HttpRemoteTaskRunner.taskAddedOrUpdated has cognitive complexity 45 (threshold 15). Drivers by points: if/else 34, match/switch 11 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":1419}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d793ad5d3987de4b08d2d40f77e06b43e7a5b9d9e36c0e44283be45ad7fffe8"}},{"ruleId":"D2","level":"warning","message":{"text":"StringDimensionIndexer.processRowValsToUnsortedEncodedKeyComponent (cognitive 45): StringDimensionIndexer.processRowValsToUnsortedEncodedKeyComponent has cognitive complexity 45 (threshold 15). Drivers by points: if/else 28, loops 10, ternaries 7 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/StringDimensionIndexer.java"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"472cc7f4f96f09326a9d5382bbd31c2bdf0f50c9e1e1d5fc6b992e13724354a6"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsulLeaderSelector.leaderElectionLoop (cognitive 44): ConsulLeaderSelector.leaderElectionLoop has cognitive complexity 44 (threshold 15). Drivers by points: if/else 31, error handling 7, boolean chains 5, loops 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulLeaderSelector.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"f55689cb887ed5f75c663e9a9912c28a7a7df9cf5802753f4e02024f8d4fd2d9"}},{"ruleId":"D2","level":"warning","message":{"text":"FirstLastVectorAggregator.aggregate (cognitive 44): FirstLastVectorAggregator.aggregate has cognitive complexity 44 (threshold 15). Drivers by points: if/else 38, loops 4, boolean chains 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/FirstLastVectorAggregator.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cfd07f73ee70f97ba459fa9f0ab776d62434702f8f2d95e1180747fa17e89a7"}},{"ruleId":"D2","level":"warning","message":{"text":"BottomUpTransform.apply0 (cognitive 43): BottomUpTransform.apply0 has cognitive complexity 43 (threshold 15). Drivers by points: if/else 38, loops 5 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"68cd798c534915fadefd1349b3cee67de125bc228943a5423cd23e0aedc9a6c1"}},{"ruleId":"D2","level":"warning","message":{"text":"ApproximateHistogram.ruleCombineBins (cognitive 43): ApproximateHistogram.ruleCombineBins has cognitive complexity 43 (threshold 15). Drivers by points: if/else 33, boolean chains 7, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a6743ecc233ffafd4748a458e349a4100666ef40fb6416197dedfe174972d49"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultLimitSpec.build (cognitive 43): DefaultLimitSpec.build has cognitive complexity 43 (threshold 15). Drivers by points: if/else 32, boolean chains 4, loops 4, ternaries 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/orderby/DefaultLimitSpec.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa5a15bbfed1afc7aea15acb9b873951fe05d7a2418c28c5db96782617ca8dfa"}},{"ruleId":"D2","level":"warning","message":{"text":"SuperSorter.runNextMiddleMerger (cognitive 43): SuperSorter.runNextMiddleMerger has cognitive complexity 43 (threshold 15). Drivers by points: if/else 29, loops 8, boolean chains 6 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/SuperSorter.java"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d8fe778495f89257d52b6e070106b46c12bec976e28281d60c83c7164259e17"}},{"ruleId":"D2","level":"warning","message":{"text":"ExprEvalNumericBindingVector.getObjectVector (cognitive 43): ExprEvalNumericBindingVector.getObjectVector has cognitive complexity 43 (threshold 15). Drivers by points: loops 18, if/else 14, ternaries 11 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/ExprEvalNumericBindingVector.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"67839a08e703befe9ada752399780526ab8837306636e85aba7854cb6e49f5c3"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskLockbox.createOrFindLockPosse (cognitive 42): TaskLockbox.createOrFindLockPosse has cognitive complexity 42 (threshold 15). Drivers by points: if/else 27, boolean chains 6, ternaries 4, error handling 3, loops 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c555b4cc9efed6d160bbe4c18b0163a3093d2898c6433366a9615c4d2d8dec3"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkerImpl.runInternal (cognitive 42): WorkerImpl.runInternal has cognitive complexity 42 (threshold 15). Drivers by points: if/else 26, loops 11, boolean chains 5 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3bd577c99a331bb5ffd779f99e593bc30f0e33e3fa6f7294cc6883ee3a99590"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerQueryKernelUtils.computeStageGroups (cognitive 42): ControllerQueryKernelUtils.computeStageGroups has cognitive complexity 42 (threshold 15). Drivers by points: if/else 24, loops 12, boolean chains 6 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerQueryKernelUtils.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"8207ae39a99aed1f54669bcf01d7cf7bda55998316ed5fac4b8d5762edeb42b1"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.checkTaskDuration (cognitive 41): SeekableStreamSupervisor.checkTaskDuration has cognitive complexity 41 (threshold 15). Drivers by points: if/else 23, loops 14, boolean chains 4 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3751}}}],"partialFingerprints":{"codehealthFindingId/v1":"47f390d364c9c8cf8b5b45bc52c8251ac6573d6499b106bff117f59335a8b49a"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.resetInternal (cognitive 41): SeekableStreamSupervisor.resetInternal has cognitive complexity 41 (threshold 15). Drivers by points: if/else 27, error handling 4, ternaries 4, boolean chains 3, loops 3 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2136}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfdfdccde0c7a3e84ccd25d62f151f32380f2d168bed6662b5ffaccbe1976de8"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoTypeColumnMerger.writeMergedValueDictionary (cognitive 41): AutoTypeColumnMerger.writeMergedValueDictionary has cognitive complexity 41 (threshold 15). Drivers by points: if/else 19, boolean chains 14, match/switch 3, ternaries 3, error handling 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/AutoTypeColumnMerger.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e596804a41f2479a007d6a58edc13a1142812691e075c92615cbf936a903e8d"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerImpl.runInternal (cognitive 41): ControllerImpl.runInternal has cognitive complexity 41 (threshold 15). Drivers by points: if/else 31, boolean chains 5, error handling 5 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2e07fe1c646573e0f62234c198b6b6c33cca3889a4803ce843f262e3b121d51"}},{"ruleId":"D2","level":"warning","message":{"text":"ChannelStageOutputReader.readRemotelyFrom (cognitive 41): ChannelStageOutputReader.readRemotelyFrom has cognitive complexity 41 (threshold 15). Drivers by points: if/else 20, error handling 18, boolean chains 2, loops 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/shuffle/output/ChannelStageOutputReader.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"e023bb9e547e4b083c852e0e95c980aab442dcd66d85697e9a40ce2ccbf95895"}},{"ruleId":"D2","level":"warning","message":{"text":"SketchAggregator.updateUnion (cognitive 40): SketchAggregator.updateUnion has cognitive complexity 40 (threshold 15). Drivers by points: if/else 30, loops 9, boolean chains 1 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchAggregator.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c5af29da621414567439238bd9e6945c40375728556672e963361d60370326"}},{"ruleId":"D2","level":"warning","message":{"text":"InDimFilter.optimizeLookup (cognitive 40): InDimFilter.optimizeLookup has cognitive complexity 40 (threshold 15). Drivers by points: if/else 32, boolean chains 5, loops 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df8cb9131f2e930321f9bfbc5459215032770b599f6415810de51bf4f35fed7"}},{"ruleId":"D2","level":"warning","message":{"text":"1.run (cognitive 40): 1.run has cognitive complexity 40 (threshold 15). Drivers by points: if/else 25, ternaries 9, loops 4, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryRunnerFactory.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a747b2504444a3ff6d2bf50bf92b409ff787c82dca6ed8a183e27c360e95db9"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexOnlyExecutor.execute (cognitive 40): IndexOnlyExecutor.execute has cognitive complexity 40 (threshold 15). Drivers by points: if/else 35, loops 4, error handling 1 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"a72396df95c01bf4ce5f502651b8af98a38a80b23fbbe6e9f20b199b980277ae"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientQuerySegmentWalker.inlineIfNecessary (cognitive 39): ClientQuerySegmentWalker.inlineIfNecessary has cognitive complexity 39 (threshold 15). Drivers by points: if/else 27, loops 10, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ee113dea5e0d08a5e9215d82e01752eab34475ae044c765fb884cfa764827f"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpRemoteTaskRunner.pendingTasksExecutionLoop (cognitive 39): HttpRemoteTaskRunner.pendingTasksExecutionLoop has cognitive complexity 39 (threshold 15). Drivers by points: if/else 26, error handling 8, loops 3, boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":1091}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc94fa1a8b04ce28a92cb9f8d3198cbf88c655031f687caaf77597657776b5e0"}},{"ruleId":"D2","level":"warning","message":{"text":"FirstLastVectorAggregator.aggregate (cognitive 39): FirstLastVectorAggregator.aggregate has cognitive complexity 39 (threshold 15). Drivers by points: if/else 27, ternaries 6, loops 4, boolean chains 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/FirstLastVectorAggregator.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8d5a8df700b6c1f65a53cad7c86e7cfd4286ced1f188e0012062908481cd125"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectionFilterMatch.rewriteFilter (cognitive 39): ProjectionFilterMatch.rewriteFilter has cognitive complexity 39 (threshold 15). Drivers by points: if/else 33, loops 5, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/ProjectionFilterMatch.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0f2f48f65a4ee3018e4446923efde083d422601a776e670f5d7a25e78502ba9"}},{"ruleId":"D2","level":"warning","message":{"text":"DumpSegment.runBitmaps (cognitive 39): DumpSegment.runBitmaps has cognitive complexity 39 (threshold 15). Drivers by points: if/else 22, loops 11, ternaries 5, error handling 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/cli/DumpSegment.java"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"60a417c218070b6b6800a3494a8514c7dacec1983689b723c0730fe052a5d973"}},{"ruleId":"D2","level":"warning","message":{"text":"99768.apply (cognitive 38): 99768.apply has cognitive complexity 38 (threshold 15). Drivers by points: if/else 25, loops 11, boolean chains 1, error handling 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2463}}}],"partialFingerprints":{"codehealthFindingId/v1":"7877484ff24fac3f920b0228b3dbca91709c684899a9f4e93faf9f8683c73f62"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundDimFilter.makeLongPredicateSupplier (cognitive 38): BoundDimFilter.makeLongPredicateSupplier has cognitive complexity 38 (threshold 15). Drivers by points: if/else 30, error handling 8 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/BoundDimFilter.java"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeb75b1b2e4d75d22aa5f15fe946f4c43e0fca15c62e9008ce04a83907f52f49"}},{"ruleId":"D2","level":"warning","message":{"text":"1.doFilterSuper (cognitive 38): 1.doFilterSuper has cognitive complexity 38 (threshold 15). Drivers by points: if/else 31, boolean chains 5, error handling 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/KerberosAuthenticator.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"f14196904f448ea5c77b628321c0ebfde9d2e6493ebc79af346d989a32531137"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexMergerBase.mergeIndexesAndWriteColumns (cognitive 38): IndexMergerBase.mergeIndexesAndWriteColumns has cognitive complexity 38 (threshold 15). Drivers by points: loops 23, if/else 13, ternaries 2 (nesting depth added 20). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerBase.java"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"245e77e6178d13d935dbfa10ceda1ecb901924d22b87d4eee3469a52db818b29"}},{"ruleId":"D2","level":"warning","message":{"text":"NetStats.emit (cognitive 38): NetStats.emit has cognitive complexity 38 (threshold 15). Drivers by points: if/else 20, error handling 9, loops 9 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/metrics/SysMonitor.java"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"401f6503ef0e0b8ad18361d361d078b7fdff799a0e4d39446e0ab08d6b65db4d"}},{"ruleId":"D2","level":"warning","message":{"text":"DataSourceCompactibleSegmentIterator.populateQueue (cognitive 37): DataSourceCompactibleSegmentIterator.populateQueue has cognitive complexity 37 (threshold 15). Drivers by points: if/else 19, loops 17, boolean chains 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/compaction/DataSourceCompactibleSegmentIterator.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"85efd5e822f300da5a4419b3818c61db1db570aee2ae8cbba317127347106cb4"}},{"ruleId":"D2","level":"warning","message":{"text":"Expressions.calciteLiteralToDruidLiteral (cognitive 37): Expressions.calciteLiteralToDruidLiteral has cognitive complexity 37 (threshold 15). Drivers by points: if/else 18, ternaries 18, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/Expressions.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"784fd381fc0ba9fdb084e00701bf284383cd30d64db7f1d03b1af908b2e62488"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.generateReport (cognitive 37): SeekableStreamSupervisor.generateReport has cognitive complexity 37 (threshold 15). Drivers by points: ternaries 20, loops 9, if/else 7, error handling 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1656}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e983ef5fc2e1e60b0621b0f9e5d0626fe703c77ce5124e4e8de44175d74bdc7"}},{"ruleId":"D2","level":"warning","message":{"text":"ParallelIndexPhaseRunner.run (cognitive 37): ParallelIndexPhaseRunner.run has cognitive complexity 37 (threshold 15). Drivers by points: if/else 30, match/switch 3, boolean chains 2, loops 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexPhaseRunner.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0ae8cbde540e7a1d78c92df94b5bfdbed0a5df31db97a0129ce8e0f3667e738"}},{"ruleId":"D2","level":"warning","message":{"text":"FixedBucketsHistogramQuantileSqlAggregator.toDruidAggregation (cognitive 37): FixedBucketsHistogramQuantileSqlAggregator.toDruidAggregation has cognitive complexity 37 (threshold 15). Drivers by points: if/else 32, loops 3, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a11d132c5c8bd52c98e0651988c99b37b5332694b4475c04e1db1991981f332"}},{"ruleId":"D2","level":"warning","message":{"text":"HavingSpecMetricComparator.compare (cognitive 37): HavingSpecMetricComparator.compare has cognitive complexity 37 (threshold 15). Drivers by points: if/else 29, boolean chains 8 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/having/HavingSpecMetricComparator.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"123da886ce65acc1ff8d4b34e4e0a45839dec8449f470a33d46d73af847c4983"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundFilter.getBitmapColumnIndex (cognitive 37): BoundFilter.getBitmapColumnIndex has cognitive complexity 37 (threshold 15). Drivers by points: if/else 28, ternaries 6, boolean chains 3 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/BoundFilter.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"45418ce5537c32539dacd84bb7dc0f057f8cc6be0d25a3e539c152d926b89c4f"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidQuery.toTimeseriesQuery (cognitive 36): DruidQuery.toTimeseriesQuery has cognitive complexity 36 (threshold 15). Drivers by points: if/else 27, boolean chains 5, match/switch 4 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1139}}}],"partialFingerprints":{"codehealthFindingId/v1":"8402f5d5354c314102c59e70a849bc845756bfb8d978978f333d9aede38e3dda"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.checkPendingCompletionTasks (cognitive 36): SeekableStreamSupervisor.checkPendingCompletionTasks has cognitive complexity 36 (threshold 15). Drivers by points: if/else 24, loops 10, boolean chains 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":4094}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c1377579c6cf228c16e954b2c191130db1f6641d2800cb6f25298015ac0b621"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicAllocationTasksNotice.handle (cognitive 36): DynamicAllocationTasksNotice.handle has cognitive complexity 36 (threshold 15). Drivers by points: if/else 27, ternaries 4, error handling 2, loops 2, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a825faf5bae298402d71a8ba4252fc6767c1b019da5c841b4f27579e812eab"}},{"ruleId":"D2","level":"warning","message":{"text":"CompactionTask.createInputDataSchemas (cognitive 36): CompactionTask.createInputDataSchemas has cognitive complexity 36 (threshold 15). Drivers by points: if/else 26, loops 6, ternaries 3, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java"},"region":{"startLine":595}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5c5c282f70ad5faf6753cddcaa534628286ae594b27203169b2d6bb4feadf7a"}},{"ruleId":"D2","level":"warning","message":{"text":"ClipOutlierHandler.simpleInterpolateMergeHandleOutliers (cognitive 36): ClipOutlierHandler.simpleInterpolateMergeHandleOutliers has cognitive complexity 36 (threshold 15). Drivers by points: if/else 34, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"7715f89b2865a4f8819b1fbe8bab89d57e5cad174882bbb7b88b11e904c03c7b"}},{"ruleId":"D2","level":"warning","message":{"text":"HashAggregateIterator.aggregateMultiValueDims (cognitive 36): HashAggregateIterator.aggregateMultiValueDims has cognitive complexity 36 (threshold 15). Drivers by points: if/else 23, loops 13 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GroupByQueryEngine.java"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf1c5f475d99645d01714558b1c2afa4a36d69a070ea87cedbf0730bd232c87"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.performOperation (cognitive 36): ConciseSet.performOperation has cognitive complexity 36 (threshold 15). Drivers by points: if/else 32, boolean chains 1, loops 1, match/switch 1, ternaries 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4d7874b1c27f4e42cf49e4ad676c8827ae4f3b155ee0b5add22b0be984c236"}},{"ruleId":"D2","level":"warning","message":{"text":"TypedInFilter.createStringPredicate (cognitive 35): TypedInFilter.createStringPredicate has cognitive complexity 35 (threshold 15). Drivers by points: if/else 18, loops 8, ternaries 8, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/TypedInFilter.java"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"3020793d65013e4a545a281685597a153c3771bcf97e1e3502d31f7f05506117"}},{"ruleId":"D2","level":"warning","message":{"text":"Pac4jSessionStore.getCookie (cognitive 35): Pac4jSessionStore.getCookie has cognitive complexity 35 (threshold 15). Drivers by points: if/else 28, loops 7 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-pac4j/src/main/java/org/apache/druid/security/pac4j/Pac4jSessionStore.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d54e8fd75d585a812b4728476903e2decf6687097ab21c4aa255d8e46aefdd0"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldDictionaryEncodedColumn.getIdFromGlobalDictionary (cognitive 35): NestedFieldDictionaryEncodedColumn.getIdFromGlobalDictionary has cognitive complexity 35 (threshold 15). Drivers by points: if/else 33, match/switch 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldDictionaryEncodedColumn.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a85dd5cde8f4f912576908456a297ef1bd4d0e172f7d6f21fe3dc55c6a181f9"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldVirtualColumn.getIndexSupplier (cognitive 35): NestedFieldVirtualColumn.getIndexSupplier has cognitive complexity 35 (threshold 15). Drivers by points: if/else 26, boolean chains 5, ternaries 4 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"693234598ffd892f706f1f404209b39b1c625b28623f24d2a54e63cb01d003e3"}},{"ruleId":"D2","level":"warning","message":{"text":"2.updateCurrentValues (cognitive 35): 2.updateCurrentValues has cognitive complexity 35 (threshold 15). Drivers by points: if/else 23, loops 8, boolean chains 2, error handling 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/RowBasedColumnSelectorFactory.java"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"72e6fbff291aed01ea1cd75fca46179c6eee3bb774d0b51a72d19b10f03016bc"}},{"ruleId":"D2","level":"warning","message":{"text":"1.hasNext (cognitive 35): 1.hasNext has cognitive complexity 35 (threshold 15). Drivers by points: if/else 22, error handling 5, ternaries 5, boolean chains 2, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/DefaultK8sApiClient.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"5230db61497ed25427f5804d3c9d2d902c1a44d26b36f883fa95bb0903fa01a2"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionVectorSelectorBenchmark.scan (cognitive 34): ExpressionVectorSelectorBenchmark.scan has cognitive complexity 34 (threshold 15). Drivers by points: loops 19, if/else 15 (nesting depth added 20). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionVectorSelectorBenchmark.java"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"93e289b9e9d1c5a7a84780bb6036c5b487294757b3803e736ed3aef21b8a1ea4"}},{"ruleId":"D2","level":"warning","message":{"text":"CollectComparisons.collect (cognitive 34): CollectComparisons.collect has cognitive complexity 34 (threshold 15). Drivers by points: if/else 24, loops 9, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/CollectComparisons.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d27980418af135768567db32ba7bc475ca0edba9f389dcf5d4776ef021a8fad"}},{"ruleId":"D2","level":"warning","message":{"text":"AvroFlattenerMaker.transformValue (cognitive 34): AvroFlattenerMaker.transformValue has cognitive complexity 34 (threshold 15). Drivers by points: if/else 18, loops 15, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/AvroFlattenerMaker.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a5bf81c08ca9d2f64bc9e485225117dc7327ca0e1d8c2ab383e16b7ef4e9b43"}},{"ruleId":"D2","level":"warning","message":{"text":"ByteBufferMinMaxOffsetHeap.siftDown (cognitive 34): ByteBufferMinMaxOffsetHeap.siftDown has cognitive complexity 34 (threshold 15). Drivers by points: if/else 30, ternaries 3, loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"99288f09734d68f19ed061ef0462c6aa7e499948dc293029f4edbbf0cbba7447"}},{"ruleId":"D2","level":"warning","message":{"text":"LazilyDecoratedRowsAndColumns.naiveMaterialize (cognitive 34): LazilyDecoratedRowsAndColumns.naiveMaterialize has cognitive complexity 34 (threshold 15). Drivers by points: if/else 25, loops 7, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/LazilyDecoratedRowsAndColumns.java"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"825d0e5927fc382e8b63387409fffe494832db613cefe742b6d92c84dc14ad6a"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSegmentBundleCacheEntry.doMount (cognitive 34): PartialSegmentBundleCacheEntry.doMount has cognitive complexity 34 (threshold 15). Drivers by points: error handling 12, if/else 12, loops 9, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentBundleCacheEntry.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"a64e0c8a565130a65fe74d0b29c01debd3350b55b4d64b7c1f21cbe4acb4bd48"}},{"ruleId":"D2","level":"warning","message":{"text":"Projections.matchAggregators (cognitive 34): Projections.matchAggregators has cognitive complexity 34 (threshold 15). Drivers by points: if/else 25, loops 8, boolean chains 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"b739489601b0f41257edbeac2bd9f7b230e178d129f6c63e81ffeae275379704"}},{"ruleId":"D2","level":"warning","message":{"text":"Projections.matchQueryVirtualColumn (cognitive 34): Projections.matchQueryVirtualColumn has cognitive complexity 34 (threshold 15). Drivers by points: if/else 28, boolean chains 3, loops 2, ternaries 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ce7580dbe47c6c59c72708ccd5863c1e42e9e7476853815e56d69084c2f88e4"}},{"ruleId":"D2","level":"warning","message":{"text":"DimensionHandlerUtils.convertObjectToLong (cognitive 34): DimensionHandlerUtils.convertObjectToLong has cognitive complexity 34 (threshold 15). Drivers by points: if/else 33, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/DimensionHandlerUtils.java"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ce05df6deeec6c3e24edb44b18a1c0cff3b201bb3eadfe3999573721998dcc1"}},{"ruleId":"D2","level":"warning","message":{"text":"ReadableByteChunksFrameChannel.updateStreamState (cognitive 34): ReadableByteChunksFrameChannel.updateStreamState has cognitive complexity 34 (threshold 15). Drivers by points: if/else 28, boolean chains 6 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/channel/ReadableByteChunksFrameChannel.java"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"7173e47ac7aef40e3d21f2010853b150a7298fc174c61f35474ec4ee98d21adb"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameChannelMerger.writeNextFrameWithCombiner (cognitive 34): FrameChannelMerger.writeNextFrameWithCombiner has cognitive complexity 34 (threshold 15). Drivers by points: if/else 24, loops 6, boolean chains 4 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/FrameChannelMerger.java"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b0315dc4460e09135f188235744e7c1ea990532919a1dfdeb9eb9a775ba12bb"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskLockbox.revokeAllIncompatibleActiveLocksIfPossible (cognitive 33): TaskLockbox.revokeAllIncompatibleActiveLocksIfPossible has cognitive complexity 33 (threshold 15). Drivers by points: if/else 26, boolean chains 3, loops 2, match/switch 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":1538}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fce7206903e45b7b32903509b615013544f7a22ea24753bb54a13b5b9a0d0ae"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentLocalCacheManager.addFilesToCachedSegments (cognitive 33): SegmentLocalCacheManager.addFilesToCachedSegments has cognitive complexity 33 (threshold 15). Drivers by points: if/else 24, error handling 6, boolean chains 2, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eaf872714b48bfb824465d78b9b6d48748cb4445f7671325d5113d4b4e290ec"}},{"ruleId":"D2","level":"warning","message":{"text":"Metadata.merge (cognitive 33): Metadata.merge has cognitive complexity 33 (threshold 15). Drivers by points: if/else 23, ternaries 4, boolean chains 3, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/Metadata.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4517bcb4066d729b6197a098564ba354cc5e8dc360e927b0e538808af7f6355"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser.flatten (cognitive 33): Parser.flatten has cognitive complexity 33 (threshold 15). Drivers by points: if/else 33 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/Parser.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"1230e1fef1cc7854125900555a098c860c267a863dc34a0b27e65713a5bb6082"}},{"ruleId":"D2","level":"warning","message":{"text":"CompressionUtils.decompress (cognitive 33): CompressionUtils.decompress has cognitive complexity 33 (threshold 15). Drivers by points: error handling 17, if/else 16 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/utils/CompressionUtils.java"},"region":{"startLine":796}}}],"partialFingerprints":{"codehealthFindingId/v1":"86fdc2f087e55b9a47eaf0685dac4a8af62651d7ad86d355ec5b3045bbb524e1"}},{"ruleId":"D2","level":"warning","message":{"text":"IntervalsResource.getSpecificIntervals (cognitive 32): IntervalsResource.getSpecificIntervals has cognitive complexity 32 (threshold 15). Drivers by points: if/else 19, loops 13 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/IntervalsResource.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"26d2daab747c4685acaca5793236125bd6d8de4e6dafda26268514b8faade69e"}},{"ruleId":"D2","level":"warning","message":{"text":"CastOperatorConversion.toDruidExpression (cognitive 32): CastOperatorConversion.toDruidExpression has cognitive complexity 32 (threshold 15). Drivers by points: if/else 23, ternaries 6, boolean chains 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/CastOperatorConversion.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"f05bd517ef1470e95472d0d8778b17dbc1cac98c148a5bb836d815917898d158"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialDruidQuery.getTraitSet (cognitive 32): PartialDruidQuery.getTraitSet has cognitive complexity 32 (threshold 15). Drivers by points: if/else 17, loops 12, boolean chains 2, match/switch 1 (nesting depth added 20). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/PartialDruidQuery.java"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"385b478f56965e86d884880eee3c27cd5149f30edf75c9c5e63d638f01758986"}},{"ruleId":"D2","level":"warning","message":{"text":"KafkaConsumerMonitor.doMonitor (cognitive 32): KafkaConsumerMonitor.doMonitor has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20, loops 5, ternaries 4, boolean chains 3 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaConsumerMonitor.java"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"7795dfa6fe860c472f5c89adbc6b5b2b1e98a387bdce368de96ab6918992c212"}},{"ruleId":"D2","level":"warning","message":{"text":"Rows.objectToNumber (cognitive 32): Rows.objectToNumber has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, error handling 4, boolean chains 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/Rows.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"734ab92fd0ea11e0c336224b5133f5af57fba346ec6bacbff25ab1d6edf1516d"}},{"ruleId":"D2","level":"warning","message":{"text":"HllSketchSetUnionOperatorConversion.toPostAggregator (cognitive 32): HllSketchSetUnionOperatorConversion.toPostAggregator has cognitive complexity 32 (threshold 15). Drivers by points: if/else 22, error handling 9, loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchSetUnionOperatorConversion.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"258f711e4ad406b3ccc2ee652b1ed6de3ce3353bccc3c2a13ce2b552370b7539"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldColumnIndexSupplier.as (cognitive 32): NestedFieldColumnIndexSupplier.as has cognitive complexity 32 (threshold 15). Drivers by points: if/else 29, match/switch 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldColumnIndexSupplier.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ff48579c5d72410fa10da8d2df2033673a18950e6c7ef4a9fca137c81501abe"}},{"ruleId":"D2","level":"warning","message":{"text":"VariantColumnSerializer.closeForWrite (cognitive 32): VariantColumnSerializer.closeForWrite has cognitive complexity 32 (threshold 15). Drivers by points: if/else 18, loops 13, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/VariantColumnSerializer.java"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"76ba9642d5a8f7d1101ee457c1925dfa8dcf454ea3eccceb55993fa848f2cf48"}},{"ruleId":"D2","level":"warning","message":{"text":"DataSchema.validateProjections (cognitive 32): DataSchema.validateProjections has cognitive complexity 32 (threshold 15). Drivers by points: if/else 24, loops 8 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/indexing/DataSchema.java"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d29dfcd80cedbd5121cf9d0856d36129d1684482f87ad574629b843e875999"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerStageTracker.addPartialKeyInformationForWorker (cognitive 32): ControllerStageTracker.addPartialKeyInformationForWorker has cognitive complexity 32 (threshold 15). Drivers by points: if/else 29, boolean chains 2, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf19f58a2ac1877c0b524ec0c59e99b833fac5eb4470e242313f16e5604120d9"}},{"ruleId":"D2","level":"warning","message":{"text":"DumpSegment.runDumpNestedColumnPath (cognitive 32): DumpSegment.runDumpNestedColumnPath has cognitive complexity 32 (threshold 15). Drivers by points: if/else 18, loops 13, error handling 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/cli/DumpSegment.java"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f8b9814cf181b6f83253b0fb520774de2fa58433be775031f17bda318b2bfaa"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidCorrelateUnnestRel.toDruidQuery (cognitive 31): DruidCorrelateUnnestRel.toDruidQuery has cognitive complexity 31 (threshold 15). Drivers by points: if/else 30, boolean chains 1 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidCorrelateUnnestRel.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6ea436d19fa103ae93a30951192942468c3ee627aa4b967dbe2ff297224399f"}},{"ruleId":"D2","level":"warning","message":{"text":"OvershadowableManager.addChunk (cognitive 31): OvershadowableManager.addChunk has cognitive complexity 31 (threshold 15). Drivers by points: if/else 30, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4667d30e45fb814fc690b3f92044f710d7beb6413fec213f0e34b3a2b0744c7"}},{"ruleId":"D2","level":"warning","message":{"text":"KafkaEmitter.emit (cognitive 31): KafkaEmitter.emit has cognitive complexity 31 (threshold 15). Drivers by points: if/else 25, boolean chains 4, error handling 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/kafka-emitter/src/main/java/org/apache/druid/emitter/kafka/KafkaEmitter.java"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"f51d115acdc78b5feea140d543d048d4c9ceae74c49dd2b2ce46bce8dea09af9"}},{"ruleId":"D2","level":"warning","message":{"text":"LikeMatcher.from (cognitive 31): LikeMatcher.from has cognitive complexity 31 (threshold 15). Drivers by points: if/else 26, boolean chains 4, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/LikeDimFilter.java"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d927fc1dd5f23cfc48076080013aeaf554bd1246ecf92b8fbcfdb32f3b251c9"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultLimitSpec.makeComparator (cognitive 31): DefaultLimitSpec.makeComparator has cognitive complexity 31 (threshold 15). Drivers by points: if/else 21, ternaries 6, loops 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/orderby/DefaultLimitSpec.java"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b3bb64b4dd62e440b887db946ad606b8b3b4b5728b216603d2af5b4c6a3462"}},{"ruleId":"D2","level":"warning","message":{"text":"AlphanumericComparator.compareNumbers (cognitive 31): AlphanumericComparator.compareNumbers has cognitive complexity 31 (threshold 15). Drivers by points: if/else 19, boolean chains 6, loops 3, ternaries 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"481e015df70a8dbc04e76058da7ce46200f7bc0306514208e247928d6fb8e0de"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIndexed.indexOf (cognitive 31): FrontCodedIndexed.indexOf has cognitive complexity 31 (threshold 15). Drivers by points: if/else 25, ternaries 4, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIndexed.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"be004be4f005b806f476c6a959dda48463494fe273ff4a25ebba18ff4551ae31"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIntArrayIndexed.indexOf (cognitive 31): FrontCodedIntArrayIndexed.indexOf has cognitive complexity 31 (threshold 15). Drivers by points: if/else 25, ternaries 4, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIntArrayIndexed.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"59af8806295895e788c54a86c564c71e69e39fa8d31c701684b4d7fd3ac4aaca"}},{"ruleId":"D2","level":"warning","message":{"text":"OnHeapAggregateProjection.initializeAndValidateAggregators (cognitive 31): OnHeapAggregateProjection.initializeAndValidateAggregators has cognitive complexity 31 (threshold 15). Drivers by points: if/else 26, loops 4, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/OnHeapAggregateProjection.java"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8da1c938bd4682c2905c692f8cbb66d172f522c74df8d32ef975a8dc8c25ac7"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentLocalCacheManager.awaitEagerDownloadsOrClearRule (cognitive 31): SegmentLocalCacheManager.awaitEagerDownloadsOrClearRule has cognitive complexity 31 (threshold 15). Drivers by points: error handling 16, ternaries 7, if/else 5, loops 2, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1132}}}],"partialFingerprints":{"codehealthFindingId/v1":"afb78631bbf6a0b662a11e029fc5923985544a409d2ec732c3d2da23ed044e6c"}},{"ruleId":"D2","level":"warning","message":{"text":"8.computeNumbers (cognitive 31): 8.computeNumbers has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, ternaries 6, loops 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"222617ca26894d92aa285b1f3c127da9aaafee7b42b668e2f3256e80b5fa07ad"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayElementLongVectorValueSelector.computeNumbers (cognitive 31): ArrayElementLongVectorValueSelector.computeNumbers has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, ternaries 6, loops 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":1280}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b5717d9b158c2ccaf9bbb7144d58bccf21664e28456959a6ea020c01a50f7d"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayElementFloatVectorValueSelector.computeNumbers (cognitive 31): ArrayElementFloatVectorValueSelector.computeNumbers has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, ternaries 6, loops 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":1369}}}],"partialFingerprints":{"codehealthFindingId/v1":"06a3324cd6fc1fdd8f4ec53878e2d7578640474a0268938edb5de5653ec9f0f7"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayElementDoubleVectorValueSelector.computeNumbers (cognitive 31): ArrayElementDoubleVectorValueSelector.computeNumbers has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, ternaries 6, loops 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":1456}}}],"partialFingerprints":{"codehealthFindingId/v1":"84459b2f807723ea6ee95a846645a687a180a316c9aedce197883797b94f51ad"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamAppenderator.add (cognitive 31): StreamAppenderator.add has cognitive complexity 31 (threshold 15). Drivers by points: if/else 24, loops 3, ternaries 3, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/StreamAppenderator.java"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2a8bdd6b1d5178cb54f8764b2d44b2233cb3e3a19817bd9ad22816e581c8962"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexMergerV10.makeClusteredIndexFiles (cognitive 31): IndexMergerV10.makeClusteredIndexFiles has cognitive complexity 31 (threshold 15). Drivers by points: if/else 12, loops 11, ternaries 7, error handling 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a8fcf2331772ebfbd2eb866a4d35e42042549e26c18678e543b30191ef09efe"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerQueryKernel.registerStagePhaseChange (cognitive 31): ControllerQueryKernel.registerStagePhaseChange has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, boolean chains 5, loops 4 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerQueryKernel.java"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad31574741ece6c8bde0fc983d90b12280be05a3e47ba2d9653834597ad349f6"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerStageTracker.generateResultPartitionsAndBoundariesWithoutKeyStatistics (cognitive 31): ControllerStageTracker.generateResultPartitionsAndBoundariesWithoutKeyStatistics has cognitive complexity 31 (threshold 15). Drivers by points: if/else 19, loops 10, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":960}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdee3748a3fb737c2c2463db4e48b25df246557848a789a243337846615c471f"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionedIntervalTimeline.isOvershadowed (cognitive 30): VersionedIntervalTimeline.isOvershadowed has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, loops 5, boolean chains 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/VersionedIntervalTimeline.java"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"deae80d52664d03b84d0a05275b4c0b540a5c04046ace9679001efde92fdcca9"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.verifyAndMergeCheckpoints (cognitive 30): SeekableStreamSupervisor.verifyAndMergeCheckpoints has cognitive complexity 30 (threshold 15). Drivers by points: if/else 15, boolean chains 10, loops 4, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2776}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ca4b4366361ac2a85ccb0c6cb5a95bc027a622044a261240c9ef170f222724"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQueryRunnerFactory.mergeRunners (cognitive 30): ScanQueryRunnerFactory.mergeRunners has cognitive complexity 30 (threshold 15). Drivers by points: if/else 18, ternaries 5, loops 4, error handling 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/scan/ScanQueryRunnerFactory.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"53805047cccad3fe6c4f303cddf85be43b019199379554750058bafe7aa1a57a"}},{"ruleId":"D2","level":"warning","message":{"text":"DeltaInputRow.getValue (cognitive 30): DeltaInputRow.getValue has cognitive complexity 30 (threshold 15). Drivers by points: if/else 17, loops 13 (nesting depth added 12). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/DeltaInputRow.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"540f51c136a3ad23d4ba9a9132227d069f5e2b158ae5b628f40dae8c8150c4af"}},{"ruleId":"D2","level":"warning","message":{"text":"ColumnType.leastRestrictiveType (cognitive 30): ColumnType.leastRestrictiveType has cognitive complexity 30 (threshold 15). Drivers by points: if/else 24, boolean chains 6 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/column/ColumnType.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d9c043eea9586ce758ebf4f33c8bffb7feb12774ee27279ac3d622fce40edf8"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedV1.findInBucket (cognitive 30): FrontCodedV1.findInBucket has cognitive complexity 30 (threshold 15). Drivers by points: if/else 25, loops 5 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIndexed.java"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"49710ef8919bf2c7a2042bc0215c9beececae8943f770ebc7f150acc96c7d368"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIntArrayIndexed.findValueInBucket (cognitive 30): FrontCodedIntArrayIndexed.findValueInBucket has cognitive complexity 30 (threshold 15). Drivers by points: if/else 25, loops 5 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIntArrayIndexed.java"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cec01e029425f8055f3e3fef33ffcb0e3d70f645c7ec6cb35575183e66d7599"}},{"ruleId":"D2","level":"warning","message":{"text":"IncrementalIndex.toIncrementalIndexRow (cognitive 30): IncrementalIndex.toIncrementalIndexRow has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, loops 4, boolean chains 2, error handling 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"17d00ae59511301b5ec82167a7a14b71271019e017617e011c33106bd9da5dba"}},{"ruleId":"D2","level":"warning","message":{"text":"HashJoinSegmentCursorFactory.planJoinCursor (cognitive 30): HashJoinSegmentCursorFactory.planJoinCursor has cognitive complexity 30 (threshold 15). Drivers by points: if/else 16, loops 12, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/HashJoinSegmentCursorFactory.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"01ae72848a453bf983bda8ac64522013437cf241902054a90848371ff4c7fedb"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionSelectors.createBindings (cognitive 30): ExpressionSelectors.createBindings has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, boolean chains 7, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/ExpressionSelectors.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e70d4e9e27d8f0f71f64b4c7f110725c852d70d3dc13208f39d2e9e8d226442"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldVirtualColumn.makeVectorValueSelector (cognitive 30): NestedFieldVirtualColumn.makeVectorValueSelector has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, ternaries 6, boolean chains 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a786019a586ccc60397adc5fc9d48f32a4aaeef63810e0100c850858ea65759"}},{"ruleId":"D2","level":"warning","message":{"text":"StringDimensionIndexer.compareUnsortedEncodedKeyComponents (cognitive 30): StringDimensionIndexer.compareUnsortedEncodedKeyComponents has cognitive complexity 30 (threshold 15). Drivers by points: if/else 16, ternaries 12, boolean chains 1, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/StringDimensionIndexer.java"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d48d87d8ececf257be314a9c4e6e380e491131e1fa2edd32aeaacfb7d87aa0e"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByPreShuffleStageProcessor.filterBaseInput (cognitive 30): GroupByPreShuffleStageProcessor.filterBaseInput has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, boolean chains 5, loops 5 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleStageProcessor.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cb0a84bd7ec4f46c18864761a2e92a139685f6d69acdb57c2dff2c7ac51a65f"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.contains (cognitive 30): ConciseSet.contains has cognitive complexity 30 (threshold 15). Drivers by points: if/else 24, boolean chains 3, match/switch 2, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":1095}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ab7ce70d6bb48b8f1b5f54869cbe6f1e435c4aa8d911dd0c19186621b0f190e"}},{"ruleId":"D2","level":"warning","message":{"text":"ReadableInputStreamFrameChannel.startReading (cognitive 30): ReadableInputStreamFrameChannel.startReading has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, error handling 6, boolean chains 1, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/channel/ReadableInputStreamFrameChannel.java"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"76856d9f8f5b56f1e70321c76782163ef5debacec39251b5847e9cefeb45774b"}},{"ruleId":"D2","level":"warning","message":{"text":"1ExecutorRunnable.run (cognitive 30): 1ExecutorRunnable.run has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, loops 5, boolean chains 2, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/FrameProcessorExecutor.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0f1fb3df7e0cf5a363220c58f7a6d72f3a5fd134270ba1c7e59f62011a9d044"}},{"ruleId":"D2","level":"warning","message":{"text":"1.messageReceived (cognitive 30): 1.messageReceived has cognitive complexity 30 (threshold 15). Drivers by points: if/else 28, boolean chains 1, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/http/client/NettyHttpClient.java"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"371fad2977a90317f7bdea67b95e9528be5b3b7542815b1ba6320b9558a5133b"}},{"ruleId":"D2","level":"warning","message":{"text":"NativeQueryMaker.runQuery (cognitive 29): NativeQueryMaker.runQuery has cognitive complexity 29 (threshold 15). Drivers by points: if/else 23, loops 3, boolean chains 2, ternaries 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/run/NativeQueryMaker.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c23fdff47f1abdca44cfeea91f7294e7a786119c138cd0ac2448a4e4bc6d353"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionedIntervalTimelineBenchmark.setup (cognitive 29): VersionedIntervalTimelineBenchmark.setup has cognitive complexity 29 (threshold 15). Drivers by points: loops 15, if/else 13, boolean chains 1 (nesting depth added 14). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/test/java/org/apache/druid/timeline/VersionedIntervalTimelineBenchmark.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"7db41dc70eaf4f35c9485e519007f93cbc796501b11a3ee611a4930eb596974a"}},{"ruleId":"D2","level":"warning","message":{"text":"FastLineIterator.readNextLine (cognitive 29): FastLineIterator.readNextLine has cognitive complexity 29 (threshold 15). Drivers by points: if/else 20, loops 7, error handling 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/FastLineIterator.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"dadcecbc055bef14fc97846a4859c0a73933c70a583c8e2e47ee6678e3890c0e"}},{"ruleId":"D2","level":"warning","message":{"text":"StatsDEmitter.emitMetric (cognitive 29): StatsDEmitter.emitMetric has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16, match/switch 6, boolean chains 4, ternaries 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitter.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4ec84e8af960989f803aedb6078f75bf4ded3f4bab66f6aa4c65fca9c7f68e4"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentAnalyzer.analyzeStringColumn (cognitive 29): SegmentAnalyzer.analyzeStringColumn has cognitive complexity 29 (threshold 15). Drivers by points: if/else 19, error handling 3, loops 3, boolean chains 2, ternaries 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d51a4f1b5b01abbde3a6c44d629225ce725a1da194068e480fbde840b31998f"}},{"ruleId":"D2","level":"warning","message":{"text":"BasicDataSourceExt.createConnectionFactory (cognitive 29): BasicDataSourceExt.createConnectionFactory has cognitive complexity 29 (threshold 15). Drivers by points: if/else 18, error handling 8, ternaries 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07521fe1a26d239031ec29901440c64085cd2206568a6b130ddbc86945f728a"}},{"ruleId":"D2","level":"warning","message":{"text":"2.matches (cognitive 29): 2.matches has cognitive complexity 29 (threshold 15). Drivers by points: if/else 22, loops 7 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/PredicateValueMatcherFactory.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fccfd9bf3097f8ebda878c9bf6683b031ee0cfce3115fa0ea7bd992de5238a1"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionPlan.inferColumnCapabilities (cognitive 29): ExpressionPlan.inferColumnCapabilities has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/ExpressionPlan.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6c087abec198c7ada016eac70528324e479dc9dfa70f038a6c8deca08ebe45"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseAppenderatorDriver.publishInBackground (cognitive 29): BaseAppenderatorDriver.publishInBackground has cognitive complexity 29 (threshold 15). Drivers by points: if/else 23, boolean chains 3, error handling 2, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/BaseAppenderatorDriver.java"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eff4af8b8b0ac92414966c069712bfee16c059bf9bf3bc4303c0e3c7c39b433"}},{"ruleId":"D2","level":"warning","message":{"text":"SinkSchemaUtil.computeSchemaChange (cognitive 29): SinkSchemaUtil.computeSchemaChange has cognitive complexity 29 (threshold 15). Drivers by points: if/else 20, loops 7, boolean chains 1, ternaries 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/SinkSchemaUtil.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"2675496fa568433ec150c8b3742f0536dfa4a82f29a9d275735123664eb3eab4"}},{"ruleId":"D2","level":"warning","message":{"text":"DimensionHandlerUtils.convertObjectToDouble (cognitive 29): DimensionHandlerUtils.convertObjectToDouble has cognitive complexity 29 (threshold 15). Drivers by points: if/else 28, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/DimensionHandlerUtils.java"},"region":{"startLine":699}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b009ef2474143461a133f3623a19e06843b2e34b7f9f27feaf636663031a04b"}},{"ruleId":"D2","level":"warning","message":{"text":"DimensionHandlerUtils.convertObjectToFloat (cognitive 29): DimensionHandlerUtils.convertObjectToFloat has cognitive complexity 29 (threshold 15). Drivers by points: if/else 28, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/DimensionHandlerUtils.java"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"379fa36a443911a72c1a832a8a05ce61e607bf29a305ed403b3095656a6c2817"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexMergerV10.makeIndexFiles (cognitive 29): IndexMergerV10.makeIndexFiles has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14, loops 11, ternaries 3, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"edef6b6432dcffe1859f8c2411bf019ae3f97fa8029610f5e62a606d7c8d2100"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkerInputs.create (cognitive 29): WorkerInputs.create has cognitive complexity 29 (threshold 15). Drivers by points: if/else 15, loops 11, ternaries 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/WorkerInputs.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c1a328911c81a17c15f769983899b8a15115426bca8466503e0085f4659d859"}},{"ruleId":"D2","level":"warning","message":{"text":"SortMergeJoinFrameProcessor.advanceTrackersAfterEmittingRow (cognitive 29): SortMergeJoinFrameProcessor.advanceTrackersAfterEmittingRow has cognitive complexity 29 (threshold 15). Drivers by points: if/else 20, ternaries 6, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessor.java"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d2162339ba4387b43f5d6717ed098caeccf6781c59a9b4de21cfed1aba9fd00"}},{"ruleId":"D2","level":"warning","message":{"text":"ReservoirSegmentSampler.getRandomBalancerSegmentHolder (cognitive 28): ReservoirSegmentSampler.getRandomBalancerSegmentHolder has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, loops 5, boolean chains 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/balancer/ReservoirSegmentSampler.java"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"45d6a3eb56d36f5b0c7f8b8c94dbfd31eb4b76c5e129de642707ec7c84656e83"}},{"ruleId":"D2","level":"warning","message":{"text":"SearchOperatorConversion.expandSearch (cognitive 28): SearchOperatorConversion.expandSearch has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, loops 4, boolean chains 3, ternaries 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/SearchOperatorConversion.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3d7e2beee66db4344956246ee4473c5b5b3c3ddb7cae094979785dbff55c827"}},{"ruleId":"D2","level":"warning","message":{"text":"RemoveRedundantIsTrue.apply0 (cognitive 28): RemoveRedundantIsTrue.apply0 has cognitive complexity 28 (threshold 15). Drivers by points: if/else 23, loops 5 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/RemoveRedundantIsTrue.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7a4bf01d4a0cc5aa6b56c800b8ba83bdaddc561cd0d372952fb864c2883b1d3"}},{"ruleId":"D2","level":"warning","message":{"text":"Calcites.getValueTypeForRelDataTypeFull (cognitive 28): Calcites.getValueTypeForRelDataTypeFull has cognitive complexity 28 (threshold 15). Drivers by points: if/else 27, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/Calcites.java"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"aca412795c59565200cfe36db14cd330a1aebb93305d05119259373c481bb319"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidJoinRule.analyzeCondition (cognitive 28): DruidJoinRule.analyzeCondition has cognitive complexity 28 (threshold 15). Drivers by points: if/else 24, boolean chains 3, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidJoinRule.java"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"b176457645c87029f1c417be2328f6b627d9e8ee88f4b12f4c3f3a3e630688df"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.updatePartitionDataFromStream (cognitive 28): SeekableStreamSupervisor.updatePartitionDataFromStream has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, loops 6, boolean chains 1, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3208}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f8f8b9aa69aceb34caefb1cee1214c66ff37ec75620956e0fd74e2348229722"}},{"ruleId":"D2","level":"warning","message":{"text":"BloomFilterSqlAggregator.toDruidAggregation (cognitive 28): BloomFilterSqlAggregator.toDruidAggregation has cognitive complexity 28 (threshold 15). Drivers by points: if/else 23, loops 3, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/aggregation/bloom/sql/BloomFilterSqlAggregator.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"825682b4c2d44d1b15f4585b23a42b78e7341aacf9bfed6fddad8cc1b3e1411f"}},{"ruleId":"D2","level":"warning","message":{"text":"QuantileSqlAggregator.toDruidAggregation (cognitive 28): QuantileSqlAggregator.toDruidAggregation has cognitive complexity 28 (threshold 15). Drivers by points: if/else 23, loops 3, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/QuantileSqlAggregator.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c259ea722815d0284a4886ee298a2a8ae971a9315eee3436b2f3a74218b5bfa"}},{"ruleId":"D2","level":"warning","message":{"text":"ClusteredValueGroupsBaseTableSchema.\u003Cinit\u003E (cognitive 28): ClusteredValueGroupsBaseTableSchema.\u003Cinit\u003E has cognitive complexity 28 (threshold 15). Drivers by points: if/else 19, loops 4, ternaries 4, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/ClusteredValueGroupsBaseTableSchema.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ccdfe71584ca682e3f54f36a7c21447a2462a3b9251c995a7de3bcf71071ef0"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexSpec.getEffectiveSpec (cognitive 28): IndexSpec.getEffectiveSpec has cognitive complexity 28 (threshold 15). Drivers by points: if/else 28. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexSpec.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c351db9f0989bf2a79049895e25e18cb36baa81137cbad849d078c3cc65c8d"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentGenerationUtils.makeDimensionsAndAggregatorsForIngestion (cognitive 28): SegmentGenerationUtils.makeDimensionsAndAggregatorsForIngestion has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15, loops 9, boolean chains 2, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/destination/SegmentGenerationUtils.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef002c09e0b1d72b28c59dff09f60e6bb434b1310f7459125c50312fb54c187a"}},{"ruleId":"D2","level":"warning","message":{"text":"SuperSorter.getTotalMergersInLevel (cognitive 28): SuperSorter.getTotalMergersInLevel has cognitive complexity 28 (threshold 15). Drivers by points: if/else 16, loops 5, ternaries 5, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/SuperSorter.java"},"region":{"startLine":915}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdb075d35be25fa350a5bbb83f8ac6f013fc1fa62c5557446da97cd65a04c2c5"}},{"ruleId":"D2","level":"warning","message":{"text":"Expressions.toFilter (cognitive 27): Expressions.toFilter has cognitive complexity 27 (threshold 15). Drivers by points: if/else 20, loops 4, boolean chains 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/Expressions.java"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"900d253fbc5b11adfb86afc56082f12eb46b2964493f8c50ca626302cb2b49a3"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidQuery.toGroupByQuery (cognitive 27): DruidQuery.toGroupByQuery has cognitive complexity 27 (threshold 15). Drivers by points: if/else 15, boolean chains 7, error handling 3, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1366}}}],"partialFingerprints":{"codehealthFindingId/v1":"3209f03809dd1a27855194934283fcb2bc3658ed530fc0c9be3fa5154b658a9c"}},{"ruleId":"D2","level":"warning","message":{"text":"CostBasedAutoScaler.computeOptimalTaskCount (cognitive 27): CostBasedAutoScaler.computeOptimalTaskCount has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, ternaries 4, boolean chains 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"18a7f064bbd3b55c252d6b8a863cc1922d52cf881ff4d431cbf70c36a3f8152d"}},{"ruleId":"D2","level":"warning","message":{"text":"OrcStructConverter.tryConvertPrimitive (cognitive 27): OrcStructConverter.tryConvertPrimitive has cognitive complexity 27 (threshold 15). Drivers by points: if/else 27 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcStructConverter.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"b87521a908941009970ef9ba861ba02361b9137fcc1c347b05a53cd08bfb2ebc"}},{"ruleId":"D2","level":"warning","message":{"text":"HllSketchBaseSqlAggregator.toDruidAggregation (cognitive 27): HllSketchBaseSqlAggregator.toDruidAggregation has cognitive complexity 27 (threshold 15). Drivers by points: if/else 22, boolean chains 4, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"f98cad71b0f02cecea9aa2ac357d2f6e9048351f930c7d41930ab7b479ef31df"}},{"ruleId":"D2","level":"warning","message":{"text":"MovingAverageIterator.internalNext (cognitive 27): MovingAverageIterator.internalNext has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, loops 4, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/MovingAverageIterable.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"8238287eab30fbe5892fd556978ebe5d5ee25d9a43281bd7d52a5b9d9a7f3c16"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorGroupByEngineIterator.initNewDelegate (cognitive 27): VectorGroupByEngineIterator.initNewDelegate has cognitive complexity 27 (threshold 15). Drivers by points: if/else 16, loops 6, ternaries 5 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/VectorGroupByEngine.java"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d8eeb6fed0685b6cf6db32b39a4ad73ccf201b34437356f318118c60ee8857"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexerSQLMetadataStorageCoordinator.createNewSegmentsAfterReplace (cognitive 27): IndexerSQLMetadataStorageCoordinator.createNewSegmentsAfterReplace has cognitive complexity 27 (threshold 15). Drivers by points: if/else 16, loops 4, ternaries 4, boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":1885}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a1ac6a4daf74ff6713a5426e444a28046755369000fd40b256f8d45a8d7056e"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentLocalCacheManager.bootstrap (cognitive 27): SegmentLocalCacheManager.bootstrap has cognitive complexity 27 (threshold 15). Drivers by points: if/else 17, error handling 5, loops 2, ternaries 2, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1407}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4ca6e35a2b83cdaafacfdf6c5072b6ee8f289f31bae91019ce2072743f3b22a"}},{"ruleId":"D2","level":"warning","message":{"text":"CoordinatorSegmentMetadataCache.mergeOrCreateRowSignature (cognitive 27): CoordinatorSegmentMetadataCache.mergeOrCreateRowSignature has cognitive complexity 27 (threshold 15). Drivers by points: if/else 16, loops 11 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/CoordinatorSegmentMetadataCache.java"},"region":{"startLine":802}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0713bf78b49c59d6e5a1b837e9d9b9949e9ced2c7aa51266dabffcfb666c57"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamAppenderator.bootstrapSinksFromDisk (cognitive 27): StreamAppenderator.bootstrapSinksFromDisk has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, error handling 3, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/StreamAppenderator.java"},"region":{"startLine":1357}}}],"partialFingerprints":{"codehealthFindingId/v1":"90e822178dfb1a0f8c2ba9eb8dcdbc4ddf1ce9103012abc5ba4fe19789e62e36"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerImpl.generateSegmentIdsWithShardSpecsForReplace (cognitive 27): ControllerImpl.generateSegmentIdsWithShardSpecsForReplace has cognitive complexity 27 (threshold 15). Drivers by points: if/else 14, ternaries 8, loops 5 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java"},"region":{"startLine":1292}}}],"partialFingerprints":{"codehealthFindingId/v1":"e827b8ec0f8435cfe2ce9daaf0f8bce162a533cfc2383cf2a8df1c2e41e277c2"}},{"ruleId":"D2","level":"warning","message":{"text":"RunWorkOrder.stop (cognitive 27): RunWorkOrder.stop has cognitive complexity 27 (threshold 15). Drivers by points: if/else 15, error handling 8, ternaries 2, boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/RunWorkOrder.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"6394fae0e1c10809d0e5be80f248e2ac8684297a5054bc9a94e8f9c89f31cee7"}},{"ruleId":"D2","level":"warning","message":{"text":"MSQTaskSqlEngine.validateTypeChanges (cognitive 27): MSQTaskSqlEngine.validateTypeChanges has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, boolean chains 7, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/sql/MSQTaskSqlEngine.java"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce65cf8d6d5947cd5d0a44ae2c3b78e096c66325fb44c8fefbc480eab8b00f80"}},{"ruleId":"D2","level":"warning","message":{"text":"PeriodGranularity.canBeMappedTo (cognitive 27): PeriodGranularity.canBeMappedTo has cognitive complexity 27 (threshold 15). Drivers by points: if/else 20, boolean chains 7 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e94bd68fd809944fa3c5251a32e108ddd6438e22093ca703e2238103430e811"}},{"ruleId":"D2","level":"warning","message":{"text":"DiskStats.emit (cognitive 27): DiskStats.emit has cognitive complexity 27 (threshold 15). Drivers by points: if/else 14, loops 8, error handling 5 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/metrics/SysMonitor.java"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"aadebb147d04007a8c687d80fb16ee201c93c976ffc8af6dbfb7e60b954ce464"}},{"ruleId":"D2","level":"warning","message":{"text":"TieredBrokerHostSelector.select (cognitive 26): TieredBrokerHostSelector.select has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, loops 8, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"c92f54070e6d37d41566ce7d22245df37d3570ce982989c9f5c6b2f9414b3f55"}},{"ruleId":"D2","level":"warning","message":{"text":"Grouping.applyProject (cognitive 26): Grouping.applyProject has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13, loops 12, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/Grouping.java"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"63d8a41ee85ff914654b59d23aa36ab3709e5f8d5d004cf65985bbf8264bbcfc"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidUnionDataSourceRule.getColumnNamesIfTableOrUnion (cognitive 26): DruidUnionDataSourceRule.getColumnNamesIfTableOrUnion has cognitive complexity 26 (threshold 15). Drivers by points: if/else 21, loops 3, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidUnionDataSourceRule.java"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"a245f6fa125a14ef9d80848d1d1bfa8952eff339a380d9d6b60a9a49ec04fd46"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.getOffsetFromStorageForPartition (cognitive 26): SeekableStreamSupervisor.getOffsetFromStorageForPartition has cognitive complexity 26 (threshold 15). Drivers by points: if/else 26 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":4582}}}],"partialFingerprints":{"codehealthFindingId/v1":"509355d2a4323cb097f7e2eace98427e5c3ab53b9a442bff9001f10b6f3386c3"}},{"ruleId":"D2","level":"warning","message":{"text":"167771.apply (cognitive 26): 167771.apply has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, loops 7, boolean chains 3, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3969}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cdbaf063e42562c3e52554a132ef9c570b270e3bc9d43149e7994f33780341b"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskLockbox.unlock (cognitive 26): TaskLockbox.unlock has cognitive complexity 26 (threshold 15). Drivers by points: if/else 17, boolean chains 5, error handling 3, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":1102}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a178c6441acb19782ad40a0a473b39e9c8f99ee72920d5eb2551e7672da8fb5"}},{"ruleId":"D2","level":"warning","message":{"text":"1ParseJsonExpr.getArgAsObject (cognitive 26): 1ParseJsonExpr.getArgAsObject has cognitive complexity 26 (threshold 15). Drivers by points: ternaries 12, if/else 11, error handling 2, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e05292a857cee66610397502a09dc2d2cd41123560bb431d62753b39ee013d5"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayAggregateIterator.aggregateMultiValueDimsWithIntGrouper (cognitive 26): ArrayAggregateIterator.aggregateMultiValueDimsWithIntGrouper has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, loops 4, ternaries 3 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GroupByQueryEngine.java"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9523528a6fbbc7e91ffb0f720178e1cf9b09ad5adf2a39d191ec4f2dc647eaa"}},{"ruleId":"D2","level":"warning","message":{"text":"LDAPRoleProvider.getRoles (cognitive 26): LDAPRoleProvider.getRoles has cognitive complexity 26 (threshold 15). Drivers by points: if/else 20, error handling 3, loops 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/LDAPRoleProvider.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"176668d647d03ba289ac0fb3ab38a861358cef1d29cc5b74fc4de765aaa2fbdd"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonParserIterator.init (cognitive 26): JsonParserIterator.init has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, error handling 6, ternaries 5 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/client/JsonParserIterator.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"21164d8e929784dfbcec939262fd1be012f5432715a96057a61c397243815ca9"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexerSQLMetadataStorageCoordinator.createNewPendingSegment (cognitive 26): IndexerSQLMetadataStorageCoordinator.createNewPendingSegment has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13, ternaries 8, boolean chains 3, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"132092a3e67bc64fb013aa880873defd97704686cae0b7550e836daf17d2a645"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSegmentMetadataCacheEntry.applyRule (cognitive 26): PartialSegmentMetadataCacheEntry.applyRule has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, loops 5, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"235c550bd1a5190f48f278ac22866b58a22df23f04ed732cc4fe990776a7c5f2"}},{"ruleId":"D2","level":"warning","message":{"text":"FilteredVectorOffset.advanceWhileVectorIsEmptyAndPopulateOffsets (cognitive 26): FilteredVectorOffset.advanceWhileVectorIsEmptyAndPopulateOffsets has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, loops 11 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/vector/FilteredVectorOffset.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9c7131869df70f9eb545ca84e09a2cef9004adbdf16af29b92881517e7515e4"}},{"ruleId":"D2","level":"warning","message":{"text":"Sink.makeNewCurrIndex (cognitive 26): Sink.makeNewCurrIndex has cognitive complexity 26 (threshold 15). Drivers by points: if/else 21, loops 5 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/sink/Sink.java"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d04587faaa1d8bd999fa12ce8440ed659cded894526714dd3fec52178b04ac2"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByPostShuffleFrameProcessor.runIncrementally (cognitive 26): GroupByPostShuffleFrameProcessor.runIncrementally has cognitive complexity 26 (threshold 15). Drivers by points: if/else 17, loops 7, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPostShuffleFrameProcessor.java"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b9942b24c9fec6b5f8f43e970a259aa7a09ba0bb987b287e7fbf511b3f7e90f"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameChannelMerger.writeNextFrameNoCombiner (cognitive 26): FrameChannelMerger.writeNextFrameNoCombiner has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, loops 5, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/FrameChannelMerger.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e9bc30088080c8c7f241b7bcefc68fcc4965ea09865a99a696fdb81625c1a52"}},{"ruleId":"D2","level":"warning","message":{"text":"MergeCombineAction.compute (cognitive 26): MergeCombineAction.compute has cognitive complexity 26 (threshold 15). Drivers by points: if/else 22, boolean chains 2, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/guava/ParallelMergeCombiningSequence.java"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f61ae57d071e04ea0d913c03272fcb3b392f8fc375fb69e4e52f193c438ef75"}},{"ruleId":"D2","level":"warning","message":{"text":"HumanReadableBytes.parseInner (cognitive 26): HumanReadableBytes.parseInner has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13, ternaries 10, boolean chains 1, error handling 1, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/HumanReadableBytes.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1079497662a6e6de41d86e6d48c44964f75e80143f71bf933d712420f6c1e4e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionTypeConversion.leastRestrictiveType (cognitive 26): ExpressionTypeConversion.leastRestrictiveType has cognitive complexity 26 (threshold 15). Drivers by points: if/else 22, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeConversion.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"d928234cf05597990a5e3f0d095b743be29857a62b7003a1904efc4679a5368a"}},{"ruleId":"D2","level":"warning","message":{"text":"11179.onSuccess (cognitive 25): 11179.onSuccess has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, match/switch 4, error handling 3, loops 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/HttpLoadQueuePeon.java"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"379739cc9598ef3ee08e131c90cc8bddcc38b1cd9ab63da9c06b34c642b3938b"}},{"ruleId":"D2","level":"warning","message":{"text":"LookupCoordinatorManager.updateLookups (cognitive 25): LookupCoordinatorManager.updateLookups has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 9, boolean chains 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d21abc611b2eb4d4e3c3971fe3b446ba2806b6abe7fc5fbb0fbe3fda7e2d88c"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidNode.init (cognitive 25): DruidNode.init has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, boolean chains 7, ternaries 2 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/DruidNode.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee94b4d1cafd782a54bc0ca82a0e391a0be33c72c9647d85b34db7296b03e5d3"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialDruidQuery.estimateCost (cognitive 25): PartialDruidQuery.estimateCost has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, loops 6 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/PartialDruidQuery.java"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe103833306683e0ef9f745b140cbb4842c06fdad31c0e3c8d07b4db05d973a"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidAggregateCaseToFilterRule.transform (cognitive 25): DruidAggregateCaseToFilterRule.transform has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14, boolean chains 8, ternaries 3 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidAggregateCaseToFilterRule.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f10df07342e114581d991e0e07eaf4b988fcd3b63ab45d6d3cbf015d668d736"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByRules.translateAggregateCall (cognitive 25): GroupByRules.translateAggregateCall has cognitive complexity 25 (threshold 15). Drivers by points: if/else 22, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/GroupByRules.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"9383d9c55dc4a00e9d65037bf2e04077b49d50ece0323094634146789d36933c"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlQuery.from (cognitive 25): SqlQuery.from has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, error handling 8 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/http/SqlQuery.java"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"43ef1d9bd12346418b1208b83985e28e329a4327e154b3728431da7a69ee0ddc"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionedIntervalTimeline.addAtKey (cognitive 25): VersionedIntervalTimeline.addAtKey has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/VersionedIntervalTimeline.java"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"048171790c6eacc17a6b0e7db7aa5143e509680ee73bc1d2eeb6f3ea29521ffd"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamIndexTaskTuningConfig.\u003Cinit\u003E (cognitive 25): SeekableStreamIndexTaskTuningConfig.\u003Cinit\u003E has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 21, if/else 4 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskTuningConfig.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"297334c23627bb33e0862b2bf4dbc03c24532f72d20177cb847d2290872d2d77"}},{"ruleId":"D2","level":"warning","message":{"text":"InputRowSchemas.createColumnsFilter (cognitive 25): InputRowSchemas.createColumnsFilter has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 12 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/input/InputRowSchemas.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea0363111e5c1e79a204750d25659ae5438421394c54f9262209e81fe8715d4c"}},{"ruleId":"D2","level":"warning","message":{"text":"DoublesSketchApproxQuantileSqlAggregator.toDruidAggregation (cognitive 25): DoublesSketchApproxQuantileSqlAggregator.toDruidAggregation has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, loops 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchApproxQuantileSqlAggregator.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee97d41aa5589f436d7456758944cc2f8abc1df5da11e4f4e89dd1d8c56d179"}},{"ruleId":"D2","level":"warning","message":{"text":"SequenceOperator.goOrContinue (cognitive 25): SequenceOperator.goOrContinue has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, error handling 6, match/switch 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/operator/SequenceOperator.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7d89d1a8fb14ee536d5f4fea2d93155c4c2bcdeadf2e6f60dbc0ab042f6a748"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcatRowsAndColumns.findColumn (cognitive 25): ConcatRowsAndColumns.findColumn has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, loops 6 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/ConcatRowsAndColumns.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"a74f37391726008623f6e5fd0f9ac4234ae04a1cec49f912082df987b369440b"}},{"ruleId":"D2","level":"warning","message":{"text":"LazilyDecoratedRowsAndColumns.materializeCursorFactory (cognitive 25): LazilyDecoratedRowsAndColumns.materializeCursorFactory has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18, loops 5, boolean chains 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/LazilyDecoratedRowsAndColumns.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"2984d32c526426b655c486549958fdf8c3e91f2777c259d399231904101148c3"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLConnector.\u003Cinit\u003E (cognitive 25): MySQLConnector.\u003Cinit\u003E has cognitive complexity 25 (threshold 15). Drivers by points: if/else 25 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"eede642a3686d042a85d690b5e97ef59fe44f4e8ed5eb322fbd0795be705f072"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSegmentFileMapperV10.planFetchRuns (cognitive 25): PartialSegmentFileMapperV10.planFetchRuns has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18, loops 6, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/file/PartialSegmentFileMapperV10.java"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1b6f8524c9a23b28233a42a9ef805c14ca1a50c18668e8077a5303c7fc9677f"}},{"ruleId":"D2","level":"warning","message":{"text":"HiveCnfHelper.flatten (cognitive 25): HiveCnfHelper.flatten has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, loops 6, boolean chains 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/cnf/HiveCnfHelper.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"db6d75b237aa839baa8eabd23921c19e406aa34ae26a7ed763c8085530701508"}},{"ruleId":"D2","level":"warning","message":{"text":"OrFilter.makeFilterBundle (cognitive 25): OrFilter.makeFilterBundle has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, loops 3, boolean chains 1, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/OrFilter.java"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b9a19790e8084500f26bbd8a9f995f53d2b0f060f5edbda9d3d0fa9f75cb411"}},{"ruleId":"D2","level":"warning","message":{"text":"7.match (cognitive 25): 7.match has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, loops 4, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/OrFilter.java"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5d88d15186ab39351f42f3c3503e6e3af9ded5465e00d8576c4a8b641ab4350"}},{"ruleId":"D2","level":"warning","message":{"text":"CompressedNestedDataComplexColumn.readNestedFieldColumn (cognitive 25): CompressedNestedDataComplexColumn.readNestedFieldColumn has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, ternaries 6, boolean chains 1, error handling 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java"},"region":{"startLine":1082}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02fc585389d67eb19e3a4d9c1485d944593623b426c587aea1313c8ca6766e2"}},{"ruleId":"D2","level":"warning","message":{"text":"StructuredDataBuilder.buildObject (cognitive 25): StructuredDataBuilder.buildObject has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, loops 9, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/StructuredDataBuilder.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f02e90a1827ca96f29c252b6650a4a87630ab64f870239f634000583b037275"}},{"ruleId":"D2","level":"warning","message":{"text":"VariantColumnSerializer.serialize (cognitive 25): VariantColumnSerializer.serialize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, boolean chains 2, error handling 2, loops 2 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/VariantColumnSerializer.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"7739ff16b1670b8a5bb395210f0dda5f0ec0269e72b2ffbd266e959882fec19b"}},{"ruleId":"D2","level":"warning","message":{"text":"Projections.buildClusterVirtualColumnRemap (cognitive 25): Projections.buildClusterVirtualColumnRemap has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, loops 6, boolean chains 3, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"241ff74aa4553edc499cc6fbc58ca02e106fea3c066ee068688947bff73bc577"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldVirtualColumn.makeVectorObjectSelector (cognitive 25): NestedFieldVirtualColumn.makeVectorObjectSelector has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12, ternaries 10, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"d33f3e0769678bcf251bf1af59cbe81eb9656b829c97b1961db486a4bc7963d7"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexIO.validateRowValues (cognitive 25): IndexIO.validateRowValues has cognitive complexity 25 (threshold 15). Drivers by points: if/else 22, boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexIO.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"75ac464073413dfcd062de7d94f3ad7208e073fa5aec5a938b4f20e718070c9d"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexMergerV9.makeIndexFiles (cognitive 25): IndexMergerV9.makeIndexFiles has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12, loops 8, boolean chains 3, error handling 1, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV9.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac76dab7aec5e213d498f77d2329fdd8f1898260afab499a31c8c6bcb200deb7"}},{"ruleId":"D2","level":"warning","message":{"text":"UnnestCursorFactory.recursiveRewriteOnUnnestFilters (cognitive 25): UnnestCursorFactory.recursiveRewriteOnUnnestFilters has cognitive complexity 25 (threshold 15). Drivers by points: if/else 24, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/UnnestCursorFactory.java"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"664cd3089a25e4f002169cfebb5eeea09cefa9ba6c7c178fe70fc71fb02c5735"}},{"ruleId":"D2","level":"warning","message":{"text":"CachingKubernetesPeonClient.waitUntilPeonPodCreatedAndReady (cognitive 25): CachingKubernetesPeonClient.waitUntilPeonPodCreatedAndReady has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, error handling 6, ternaries 3, boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/CachingKubernetesPeonClient.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e1e992427fd3764a002b32772c9bad4a7f5b63790cddb6efc2c55bb51a30bd3"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByQueryKit.makeQueryDefinition (cognitive 25): GroupByQueryKit.makeQueryDefinition has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 11, if/else 10, boolean chains 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByQueryKit.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"c609c1e790cb938f31cc9edb5589d17753ebc4e4ab5a3eefcf68c8fc495d7ec5"}},{"ruleId":"D2","level":"warning","message":{"text":"RunAllFullyRunnable.run (cognitive 25): RunAllFullyRunnable.run has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 1, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/RunAllFullyWidget.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63d910b26e51b789cca6f5ed822186dd1399d82964cf88a13936754110cebce"}},{"ruleId":"D2","level":"warning","message":{"text":"StringFrameColumn.getRowAsObject (cognitive 25): StringFrameColumn.getRowAsObject has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 11, if/else 10, loops 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/read/columnar/StringFrameColumnReader.java"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba39900bc651cc59d8603422eaff3870013f48dd9c27cffa95d4407d85f51b2c"}},{"ruleId":"D2","level":"warning","message":{"text":"AppendableByteArrayInputStream.scanThroughBytesAndDoSomething (cognitive 25): AppendableByteArrayInputStream.scanThroughBytesAndDoSomething has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, error handling 4, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/http/client/io/AppendableByteArrayInputStream.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f46b5b1e24614376f3b276e6f700c5b845acc90b5cbdde95ada1dbaa559409"}},{"ruleId":"D2","level":"warning","message":{"text":"SearchOperatorConversion.makeIn (cognitive 24): SearchOperatorConversion.makeIn has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, ternaries 8 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/SearchOperatorConversion.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"aded5dc09cfcfeddf52645833271949fe1bc7f305ad6ccccc42494388982e378"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidSqlParserUtils.convertSqlNodeToGranularity (cognitive 24): DruidSqlParserUtils.convertSqlNodeToGranularity has cognitive complexity 24 (threshold 15). Drivers by points: if/else 21, error handling 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParserUtils.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"088421e93d94970cfe30af7db9a37e195e8c30ec115e71015ab230abaac5f550"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateMergeRule.pushProjectThroughAggregate (cognitive 24): AggregateMergeRule.pushProjectThroughAggregate has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, loops 6, ternaries 4, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/AggregateMergeRule.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"834238abe84b91dc79087949dcf99990973e82104568a0b6924b1528bd59bc14"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlResults.coerceArrayToList (cognitive 24): SqlResults.coerceArrayToList has cognitive complexity 24 (threshold 15). Drivers by points: loops 15, if/else 9 (nesting depth added 13). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/run/SqlResults.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7f0bde3f0396b4c9b97a266e9308f12b4c1a71ce2cc23b6de6b3ada6d052012"}},{"ruleId":"D2","level":"warning","message":{"text":"SyntheticStreamGenerator.run (cognitive 24): SyntheticStreamGenerator.run has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 3, error handling 2, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embedded-tests/src/test/java/org/apache/druid/testing/embedded/tools/SyntheticStreamGenerator.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f1baa56d99012f99920fb152067f584888bee6ad9356c5c82ff0e071b35260a"}},{"ruleId":"D2","level":"warning","message":{"text":"CostBasedAutoScaler.extractPollIdleRatio (cognitive 24): CostBasedAutoScaler.extractPollIdleRatio has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, loops 3, boolean chains 1, ternaries 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c52d66442123fef6e9b7a643a7564c270668438a9a298fa5e885ce09752944"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisorIOConfig.\u003Cinit\u003E (cognitive 24): SeekableStreamSupervisorIOConfig.\u003Cinit\u003E has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11, ternaries 6, boolean chains 5, loops 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorIOConfig.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"314a122a03645e436b10e3c9336b8d8d73d50fed1817c8feb06d27322db146e6"}},{"ruleId":"D2","level":"warning","message":{"text":"OverlordResource.getTaskStatus (cognitive 24): OverlordResource.getTaskStatus has cognitive complexity 24 (threshold 15). Drivers by points: ternaries 15, if/else 9 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b9b3ce4dd6238fb8815405654763a0121a29ac11e690a0f4bfa4c6579ead040"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkerSelectUtils.selectWorker (cognitive 24): WorkerSelectUtils.selectWorker has cognitive complexity 24 (threshold 15). Drivers by points: if/else 21, ternaries 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/WorkerSelectUtils.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2ccaf774c561c6234768aeca79dc4c1fa51925370469fc375b0143c844eefb5"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskLockbox.tryLock (cognitive 24): TaskLockbox.tryLock has cognitive complexity 24 (threshold 15). Drivers by points: if/else 22, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"04f811fea91ae80bda18934e46be681f7fb0d83e90aebf890f79adfb63e8e9c1"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskQueue.startPendingTaskOnRunner (cognitive 24): TaskQueue.startPendingTaskOnRunner has cognitive complexity 24 (threshold 15). Drivers by points: if/else 18, error handling 4, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskQueue.java"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed095eafdc44ba6ea4393a993e49b1fd853c87b615113bdd7b802438fd4691a"}},{"ruleId":"D2","level":"warning","message":{"text":"RetrieveUsedSegmentsAction.perform (cognitive 24): RetrieveUsedSegmentsAction.perform has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, loops 10, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/RetrieveUsedSegmentsAction.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f41ea174895c4ee8dafe2a0f207440d29623a2ae656c4b82e0e543fe82a444"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexTuningConfig.\u003Cinit\u003E (cognitive 24): IndexTuningConfig.\u003Cinit\u003E has cognitive complexity 24 (threshold 15). Drivers by points: ternaries 19, if/else 4, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":1336}}}],"partialFingerprints":{"codehealthFindingId/v1":"514bf577b3c3d1c0511c4ea129dddd8048ca4855a04ab9c89bf0528f5da5ff9e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutorLifecycle.start (cognitive 24): ExecutorLifecycle.start has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, error handling 5, loops 4, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/worker/executor/ExecutorLifecycle.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"be3d4fcc982cec5ee7f6438aef80bff8afcd3605adbf71b63c0d5876b5d10443"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetGroupConverter.convertPrimitiveField (cognitive 24): ParquetGroupConverter.convertPrimitiveField has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, match/switch 7, error handling 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/simple/ParquetGroupConverter.java"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83c1bb2d762a0bea6943dba788cf20bb403a30e8b3725437a3e22794f1480bd"}},{"ruleId":"D2","level":"warning","message":{"text":"ClusteredValueGroupsBaseTableProjectionSpec.validateVirtualColumns (cognitive 24): ClusteredValueGroupsBaseTableProjectionSpec.validateVirtualColumns has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/ClusteredValueGroupsBaseTableProjectionSpec.java"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c976584955c3367b41639574702bb6a501e4422e4b2e6a06eb8dc81574341e"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphiteEmitter.emit (cognitive 24): GraphiteEmitter.emit has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, loops 7, error handling 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/GraphiteEmitter.java"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9831c4dbaea447fddb7b34918191789c5672cd08334cf62226dd84d2e7db88d"}},{"ruleId":"D2","level":"warning","message":{"text":"KafkaEmitterConfig.equals (cognitive 24): KafkaEmitterConfig.equals has cognitive complexity 24 (threshold 15). Drivers by points: ternaries 12, if/else 11, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/kafka-emitter/src/main/java/org/apache/druid/emitter/kafka/KafkaEmitterConfig.java"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc39ce1d7af80ae65c11b7f51658b78fc4780108edf0d03219c1fc86a4e77dc2"}},{"ruleId":"D2","level":"warning","message":{"text":"ApproximateHistogram.fromBytesCompact (cognitive 24): ApproximateHistogram.fromBytesCompact has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, loops 10 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1359}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c9b3e3c8cc71ecb921119f2f806b2de85eb8e9deb1177e04b75cc2c3d144db2"}},{"ruleId":"D2","level":"warning","message":{"text":"1.match (cognitive 24): 1.match has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, loops 4 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21b61b4ad99e4cee3845f9513d22c169ee8370f8605c552f76e49fc826c1903"}},{"ruleId":"D2","level":"warning","message":{"text":"ByteBufferMinMaxOffsetHeap.bubbleUp (cognitive 24): ByteBufferMinMaxOffsetHeap.bubbleUp has cognitive complexity 24 (threshold 15). Drivers by points: if/else 24 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7db4678dba1df8284fd5f013bd383f416a797857eee2bf3a71266b75cb8e57d"}},{"ruleId":"D2","level":"warning","message":{"text":"RowBasedKeySerdeFactory.compareDimsInRowsWithAggs (cognitive 24): RowBasedKeySerdeFactory.compareDimsInRowsWithAggs has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, boolean chains 3, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java"},"region":{"startLine":1075}}}],"partialFingerprints":{"codehealthFindingId/v1":"512582dc9f4294595f7f760b4d61f0b869c194313531c976c25e2db87073b6df"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentAnalyzer.analyze (cognitive 24): SegmentAnalyzer.analyze has cognitive complexity 24 (threshold 15). Drivers by points: ternaries 10, if/else 9, error handling 2, match/switch 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"f91047cfadd9fa398a2b391ad0ab3ae0425a27aebdd9da8cd04196020ba30b46"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowOperatorQuery.\u003Cinit\u003E (cognitive 24): WindowOperatorQuery.\u003Cinit\u003E has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11, ternaries 9, loops 4 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/operator/WindowOperatorQuery.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"539b19813d4f80820830d671dfe18a95a3feed9a0860a0d0c000d44db1ed5ea2"}},{"ruleId":"D2","level":"warning","message":{"text":"SearchStrategy.getDimsToSearch (cognitive 24): SearchStrategy.getDimsToSearch has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, loops 10, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/SearchStrategy.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cc43e1fda0fa240eefd1104a038713d4389c30b0e0fad9ea2f4b83afc5d3ad8"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedV0.findInBucket (cognitive 24): FrontCodedV0.findInBucket has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, loops 5 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIndexed.java"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"423e630db3489b1016575803398f4c03c68313b1b306f6cff8ae8906a4a70ec9"}},{"ruleId":"D2","level":"warning","message":{"text":"Filters.checkFilterTuningUseIndex (cognitive 24): Filters.checkFilterTuningUseIndex has cognitive complexity 24 (threshold 15). Drivers by points: if/else 22, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/Filters.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7115bba93c021fb12d25a4881c8e02f211c1c0e2b7dfcde9388d99ab0a7daae"}},{"ruleId":"D2","level":"warning","message":{"text":"LongValueSetIndexes.forSortedValues (cognitive 24): LongValueSetIndexes.forSortedValues has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, ternaries 6, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/ScalarLongColumnAndIndexSupplier.java"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"97048b941e201a8390788e9731b77003c1bdaa0568810ad07cf6924123373f6e"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryableIndexCursorHolder.asCursor (cognitive 24): QueryableIndexCursorHolder.asCursor has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, loops 5, boolean chains 2, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/QueryableIndexCursorHolder.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ebd3acb039edb424646e2f8abb34ba9dd10b960faee7c67f5fdabc9f9d20386"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeRoleWatcher.keepWatching (cognitive 24): NodeRoleWatcher.keepWatching has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, error handling 4, match/switch 4, loops 3, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDruidNodeDiscoveryProvider.java"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef5131e873e2e425593a9dbdc2b7daafa2b0d89e88202e81b97e35fb6c1810d2"}},{"ruleId":"D2","level":"warning","message":{"text":"CachingKubernetesPeonClient.waitForPeonJobCompletion (cognitive 24): CachingKubernetesPeonClient.waitForPeonJobCompletion has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, error handling 6, boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/CachingKubernetesPeonClient.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"be837856a6a45a4eee08d49da951b88a24d78b0bd28a0abccec8e250540591db"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexerDataServerQueryHandler.fetchRowsFromDataServer (cognitive 24): IndexerDataServerQueryHandler.fetchRowsFromDataServer has cognitive complexity 24 (threshold 15). Drivers by points: if/else 18, loops 5, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/IndexerDataServerQueryHandler.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6233c6dea5585a77f27be897ba396ff2f65703977a2b598bd9ba39dfac90550"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerStageTracker.mergeClusterByStatisticsCollectorForTimeChunk (cognitive 24): ControllerStageTracker.mergeClusterByStatisticsCollectorForTimeChunk has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, boolean chains 3, ternaries 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"a161edbfae65b8d59dc403c693c3110666b48302610eaed4e43ee7a5ac0bf7fd"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQueryFrameProcessor.runWithSegment (cognitive 24): ScanQueryFrameProcessor.runWithSegment has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, ternaries 3, boolean chains 2, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"647f2360bfbcd490f8e30fa2720e9fef6a6657bdbd9157ef65ace6021528a66d"}},{"ruleId":"D2","level":"warning","message":{"text":"ExprEval.convertType (cognitive 24): ExprEval.convertType has cognitive complexity 24 (threshold 15). Drivers by points: if/else 22, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c7f3bcbf23d3c2a891feeb8fed9b6a45813aeffd4f92547e77bbe2434ae0d2d"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregatePullUpLookupRule.onMatch (cognitive 23): AggregatePullUpLookupRule.onMatch has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/AggregatePullUpLookupRule.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecf879302b6b6bb6f77fc07b545d751cf220ad58be1fbcc6bbecd15adaa0227f"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionedIntervalTimeline.findChunk (cognitive 23): VersionedIntervalTimeline.findChunk has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, loops 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/VersionedIntervalTimeline.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b7962e397283e5b2a23dfa2999f9401c427f11dcfb74ee5d07350189bcf7a1d"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.discoverTasks (cognitive 23): SeekableStreamSupervisor.discoverTasks has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, boolean chains 3, loops 2, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2392}}}],"partialFingerprints":{"codehealthFindingId/v1":"df810ee750d6ddf32102f540a6e7759ec443e139bd29892d0ee696b51cdbfd8b"}},{"ruleId":"D2","level":"warning","message":{"text":"EC2NodeData.equals (cognitive 23): EC2NodeData.equals has cognitive complexity 23 (threshold 15). Drivers by points: ternaries 12, if/else 10, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/ec2-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2NodeData.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"29d8bfcee1829a96546f526e42aea92e31def5819523989cb1cc200973faced2"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskLockbox.getActiveLocks (cognitive 23): TaskLockbox.getActiveLocks has cognitive complexity 23 (threshold 15). Drivers by points: if/else 17, loops 4, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":1013}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b21050a9dd36e6b27c7d4361c86e6149bd27d6518af1971669f38b9c1da3118"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionResource.fetchRecords (cognitive 23): PartitionResource.fetchRecords has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 7, error handling 6 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"74595cae09cadefb76303afee7ee5a23e4ae770602619ffa76edcf316742cfac"}},{"ruleId":"D2","level":"warning","message":{"text":"PrometheusEmitter.emitMetric (cognitive 23): PrometheusEmitter.emitMetric has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 2, loops 2, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/prometheus-emitter/src/main/java/org/apache/druid/emitter/prometheus/PrometheusEmitter.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0a6856750d4580775f5a0af657ff4aa4f9fb86ebc7263781844acccccc212f3"}},{"ruleId":"D2","level":"warning","message":{"text":"StringCardinalityAggregatorColumnSelectorStrategy.hashRow (cognitive 23): StringCardinalityAggregatorColumnSelectorStrategy.hashRow has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 7 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/cardinality/types/StringCardinalityAggregatorColumnSelectorStrategy.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b74e51cae915b352ecd3f67b956c05be1b3a0cc0df11a386dedc4fc067fc97a"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregatorFactory.mergeAggregators (cognitive 23): AggregatorFactory.mergeAggregators has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, error handling 5, loops 4, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/AggregatorFactory.java"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb89cf852c80f3b2e2dfa18d44a8326b39f5d030534e2a37395df73cf018e272"}},{"ruleId":"D2","level":"warning","message":{"text":"AlphanumericComparator.compare (cognitive 23): AlphanumericComparator.compare has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, ternaries 10, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"25e9ed305675a77eed4f93d4cec935d2ed4c52ad24841bc16d9d4c3b073b9305"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQueryRunnerFactory.stableLimitingSort (cognitive 23): ScanQueryRunnerFactory.stableLimitingSort has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, loops 7, boolean chains 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/scan/ScanQueryRunnerFactory.java"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"048a2b077eac5e6b0b02f4805e38317bedeed7b150849b2f1a70e2412750ff76"}},{"ruleId":"D2","level":"warning","message":{"text":"SearchBinaryFn.apply (cognitive 23): SearchBinaryFn.apply has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, boolean chains 4, ternaries 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/SearchBinaryFn.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"96882914ed6e3229423fdca67e688b31b818981c49a45a3ca7d68cf466e50bae"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientCompactionRunnerInfo.validatePartitionsSpecForMSQ (cognitive 23): ClientCompactionRunnerInfo.validatePartitionsSpecForMSQ has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 4, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/client/indexing/ClientCompactionRunnerInfo.java"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"0efeaa0273fd3c5458f668f2ed798f088e09e14c8391cdd2b5ef3d32c517da49"}},{"ruleId":"D2","level":"warning","message":{"text":"IncrementalIndexRowComparator.compare (cognitive 23): IncrementalIndexRowComparator.compare has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc272a376aca352461f252dc479adbb3296934f71838c6740b65bc48893a73b8"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageLocationVirtualStorageManager.reserveAndPopulate (cognitive 23): StorageLocationVirtualStorageManager.reserveAndPopulate has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, error handling 10, loops 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/external/StorageLocationVirtualStorageManager.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9e7a72ae2cf2524e7c463a333c335b6c3b1f4b0fcd4d1d2cd9071c31c852787"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSegmentCacheBootstrap.restoreBundlesFromDisk (cognitive 23): PartialSegmentCacheBootstrap.restoreBundlesFromDisk has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 9, error handling 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentCacheBootstrap.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b43e697bf75bc971a42cd625d9c8feffe2bac47e57875dd59907b3e630b4e0"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedDataColumnSupplierV4.read (cognitive 23): NestedDataColumnSupplierV4.read has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, boolean chains 6, error handling 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSupplierV4.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b18c7332e5db8c4aea57e1de3efa5ac1c31bfc639596e20e03a1c753d4065a0"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldColumnIndexSupplier.getLocalRangeFromDictionary (cognitive 23): NestedFieldColumnIndexSupplier.getLocalRangeFromDictionary has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, ternaries 8 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldColumnIndexSupplier.java"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"4467db8b64c16a1e9c1692e67bb3a03b99f145836ed63ed2fc6ec67078c3e3e2"}},{"ruleId":"D2","level":"warning","message":{"text":"DictionaryEncodedColumnMerger.writeMergedValueDictionary (cognitive 23): DictionaryEncodedColumnMerger.writeMergedValueDictionary has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 5, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/DictionaryEncodedColumnMerger.java"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"4daddaf5bebfa1aae46be6e1b8c05e9241bdddb2a8089b3db1c1328faaa6db54"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexMergerBase.multiphaseMerge (cognitive 23): IndexMergerBase.multiphaseMerge has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 7, error handling 3, ternaries 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerBase.java"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a11332e2ad31b1ab78d7e8c8b8815336a64f79d429a44783e25ed33de8236a9"}},{"ruleId":"D2","level":"warning","message":{"text":"UnnestCursorFactory.transformCursorBuildSpec (cognitive 23): UnnestCursorFactory.transformCursorBuildSpec has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 7 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/UnnestCursorFactory.java"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"a82ba7f82320c6057748a89627a99dc85ac3184ab1e7a5e241ef0c9749fec8ef"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryKitBasedMSQPlanner.makeQueryDefinitionInternal (cognitive 23): QueryKitBasedMSQPlanner.makeQueryDefinitionInternal has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 4, error handling 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/QueryKitBasedMSQPlanner.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f26f46783c946a9587ea0170c2a50611286b57a8996632f5e580e5487a1c64"}},{"ruleId":"D2","level":"warning","message":{"text":"MSQWorkerTaskLauncher.updateTaskTrackersAndTaskIds (cognitive 23): MSQWorkerTaskLauncher.updateTaskTrackersAndTaskIds has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, loops 3, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQWorkerTaskLauncher.java"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"280fdc73c9e97ac0ae0d0c90b8b43b2cbf1ebc7b95919ad0d27a4947bb5c7a78"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlStatementResource.getResultSetInformation (cognitive 23): SqlStatementResource.getResultSetInformation has cognitive complexity 23 (threshold 15). Drivers by points: ternaries 10, if/else 9, loops 3, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/sql/resources/SqlStatementResource.java"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f0334672148be302fa5ae45b7252e486554860bd3773d99f8eadee50ac67df6"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlStatementResourceHelper.populatePagesForDurableStorageDestination (cognitive 23): SqlStatementResourceHelper.populatePagesForDurableStorageDestination has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, loops 3, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/util/SqlStatementResourceHelper.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"75eaf19e32b1d516c2fb885324f68d426259bdac5a334c869f27ddcec598c343"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.appendFill (cognitive 23): ConciseSet.appendFill has cognitive complexity 23 (threshold 15). Drivers by points: if/else 17, boolean chains 4, ternaries 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d0d6d4a14d61a390a1da7e27871e02804d12df46d7fd9fea763b6edf356fb5f"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleDoubleAddProcessor.processVector (cognitive 23): SimdDoubleDoubleAddProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleDoubleAddProcessor.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d777dd82db8259de62df64007d8bb140eb65fe6d6092db423a55920099801cd"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleDoubleDivProcessor.processVector (cognitive 23): SimdDoubleDoubleDivProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleDoubleDivProcessor.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2581b738200b2f4f4186593c5394fc987655e081c9cfb3bb97f2340e4107f0b"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleDoubleMulProcessor.processVector (cognitive 23): SimdDoubleDoubleMulProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleDoubleMulProcessor.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"79326ab742d8cacb0a7bd18fccf838a7a64144adc2468810858b85766865ec4a"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleDoubleSubProcessor.processVector (cognitive 23): SimdDoubleDoubleSubProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleDoubleSubProcessor.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc76158dbcd1de1584b7508b5e6be06fe3fac9103fb1ad0b269e288db0c31867"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleLongAddProcessor.processVector (cognitive 23): SimdDoubleLongAddProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleLongAddProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"e023bb8d257aa287c3ac23be24c656fb3690b033428abd81601c408714183651"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleLongDivProcessor.processVector (cognitive 23): SimdDoubleLongDivProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleLongDivProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf5925e948fa6d8420ccbad8dae10e50c358e1684fb6597074368c3e471fe7d"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleLongMulProcessor.processVector (cognitive 23): SimdDoubleLongMulProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleLongMulProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"791135aa80c6b7a51a086c184db8a675d9cc84c5a949f3fa4ad753d18201da26"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdDoubleLongSubProcessor.processVector (cognitive 23): SimdDoubleLongSubProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdDoubleLongSubProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"e97a5437dbfc41a20944d70b7910e2db93bcc41d6c886f922d48f565897431be"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdLongDoubleAddProcessor.processVector (cognitive 23): SimdLongDoubleAddProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdLongDoubleAddProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e3f73ec76811e79c5fbcd3f3130c2ef028dbd6b497d829ae579979d246390a4"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdLongDoubleDivProcessor.processVector (cognitive 23): SimdLongDoubleDivProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdLongDoubleDivProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"49991c7bd44eba1be12767c2413fbeea0ca96b9ab80c67f01a6e0ff795833a74"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdLongDoubleMulProcessor.processVector (cognitive 23): SimdLongDoubleMulProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdLongDoubleMulProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"29ddd34d1b687dba6eefd3d500ff019422e01f522d01c6f17e9f92c66c1abd89"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdLongDoubleSubProcessor.processVector (cognitive 23): SimdLongDoubleSubProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdLongDoubleSubProcessor.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4aa336ca5bf58ff896119db845765f2a40988a5013b7c376bf983a7d6ebe4e4"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdLongLongAddProcessor.processVector (cognitive 23): SimdLongLongAddProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdLongLongAddProcessor.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b1d8322a010b5876dc6fcc36952a14ea81bd14af0fd5dad1f3d0d1c3e787a43"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdLongLongMulProcessor.processVector (cognitive 23): SimdLongLongMulProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdLongLongMulProcessor.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c17256b9387d854bda2c8e66c6f8b2d42844f12c7afba537ba2492cb29891e"}},{"ruleId":"D2","level":"warning","message":{"text":"SimdLongLongSubProcessor.processVector (cognitive 23): SimdLongLongSubProcessor.processVector has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/simd/SimdLongLongSubProcessor.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da0dcc8f07e1231f0b2ada8227923823c2077dd82da4e1c1eb19060a80fdcdf"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorMathBivariateProcessorFactory.asProcessor (cognitive 23): VectorMathBivariateProcessorFactory.asProcessor has cognitive complexity 23 (threshold 15). Drivers by points: if/else 23 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/VectorMathBivariateProcessorFactory.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ddb32a5bcf60a4744ddf2c9426850b1a01b9929b7dfb343be4e9ef584b7298"}},{"ruleId":"D2","level":"warning","message":{"text":"CompactSegments.createCompactionTask (cognitive 22): CompactSegments.createCompactionTask has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, boolean chains 3, error handling 3, ternaries 3 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/duty/CompactSegments.java"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f3734a0f665a34be328a0ff2fe36ed59a8e2c2272de97545cb661a92766ff68"}},{"ruleId":"D2","level":"warning","message":{"text":"TLSUtils.createSSLContext (cognitive 22): TLSUtils.createSSLContext has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 15, if/else 5, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/security/TLSUtils.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc556cfdfdb2472517f48eb00acc5db94eb42da227e43016213117b1b67a8ef"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryResultPusher.push (cognitive 22): QueryResultPusher.push has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10, error handling 8, loops 3, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/QueryResultPusher.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6cc6ba04c3bb7bf1ddfc04954981ba0a79c1684edec84bb2be323bb0c026a3d"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidQuery.toTimeBoundaryQuery (cognitive 22): DruidQuery.toTimeBoundaryQuery has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, boolean chains 6, ternaries 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda424ad19105153b2bfe4fb8a7c59c86df827be391e410cd69bb3576b0e8bc6"}},{"ruleId":"D2","level":"warning","message":{"text":"Windowing.fromCalciteStuff (cognitive 22): Windowing.fromCalciteStuff has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, loops 5, ternaries 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/Windowing.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"337d5d5df78f5e605816bcacb80c77b63e6b97684370426c250196ccad2e7211"}},{"ruleId":"D2","level":"warning","message":{"text":"DecomposeConcatShuttle.visitCall (cognitive 22): DecomposeConcatShuttle.visitCall has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, boolean chains 6, ternaries 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterDecomposeConcatRule.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"967bac8d02229e7206123c77c118588cba2b5403c03e55b643adce4016810d3b"}},{"ruleId":"D2","level":"warning","message":{"text":"LagBasedAutoScalerConfig.\u003Cinit\u003E (cognitive 22): LagBasedAutoScalerConfig.\u003Cinit\u003E has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 12, boolean chains 5, if/else 5 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/LagBasedAutoScalerConfig.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c00cf66814895b61c8326c3680dc3ffe2adad4745a4588f6b8ec02c4d1066b2"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerSideEncryptingAmazonS3.builder (cognitive 22): ServerSideEncryptingAmazonS3.builder has cognitive complexity 22 (threshold 15). Drivers by points: if/else 19, boolean chains 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/ServerSideEncryptingAmazonS3.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"f63891189770669897b686e1db225f0ad4ff55e813e6476cfeb44c4be1cecde4"}},{"ruleId":"D2","level":"warning","message":{"text":"HllSketchBuildUtil.updateSketch (cognitive 22): HllSketchBuildUtil.updateSketch has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, loops 5, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchBuildUtil.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"77b5cd7dd2276505a661c830440c176afa280a8a80b287bd62c0d6d4e3fbe678"}},{"ruleId":"D2","level":"warning","message":{"text":"ThetaSketchBaseSqlAggregator.toDruidAggregation (cognitive 22): ThetaSketchBaseSqlAggregator.toDruidAggregation has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, boolean chains 4, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/sql/ThetaSketchBaseSqlAggregator.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0962ef89f477347f4cab025cfdd335eeed81622704ec133faa80011b595436"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayOfDoublesSketchBuildAggregator.aggregate (cognitive 22): ArrayOfDoublesSketchBuildAggregator.aggregate has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 5 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildAggregator.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"82fa82135d279c0f4a8ef32c8f62eaaf5e4fd28df6530e51f7964fb3d6a8f8e6"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayOfDoublesSketchBuildBufferAggregator.aggregate (cognitive 22): ArrayOfDoublesSketchBuildBufferAggregator.aggregate has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 5 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildBufferAggregator.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ac8bf5cc2146dfc8b4ece937e68dcf1b51f0ab74ba558bef5372fe56b52cf1d"}},{"ruleId":"D2","level":"warning","message":{"text":"FixedBucketsHistogram.simpleInterpolateMerge (cognitive 22): FixedBucketsHistogram.simpleInterpolateMerge has cognitive complexity 22 (threshold 15). Drivers by points: if/else 19, loops 3 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"d01bb21713f15c241f413f34405e95fc902dcd4fe257d8bde0551b678ed5d7cc"}},{"ruleId":"D2","level":"warning","message":{"text":"NullableNumericTopNColumnAggregatesProcessor.scanAndAggregate (cognitive 22): NullableNumericTopNColumnAggregatesProcessor.scanAndAggregate has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12, loops 10 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/types/NullableNumericTopNColumnAggregatesProcessor.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"f86399be8adcffc2fc4c207af8414875205824a48c85ef2895bbbc1a47fda94d"}},{"ruleId":"D2","level":"warning","message":{"text":"ColumnValueGenerator.initDistribution (cognitive 22): ColumnValueGenerator.initDistribution has cognitive complexity 22 (threshold 15). Drivers by points: loops 13, if/else 8, match/switch 1 (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/generator/ColumnValueGenerator.java"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"2622635ed2c5f6a53e67e9e3049ad011a4f3daf517c17bebaec4ee9a8b32ed9b"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentLocalCacheManager.acquireCachedInternal (cognitive 22): SegmentLocalCacheManager.acquireCachedInternal has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, boolean chains 5, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b1423d895045b3149963a55bfe077c1c34ccf8774d75bb990ccc5b7f9b7a62c"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentLocalCacheManager.assignLocationAndMount (cognitive 22): SegmentLocalCacheManager.assignLocationAndMount has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, error handling 4, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1809}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d1dfbe2fdf27cc12df6e3b893ec22537e0edbf4f94de8e8d775af216ec76ef8"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentLocalCacheManager.getCachedSegments (cognitive 22): SegmentLocalCacheManager.getCachedSegments has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8, error handling 7, loops 6, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ac7ae9ddd7f6d6abcba0835dc8f9b39feb9050a470dcdc1284e3e88b4ba660"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldVirtualColumn.makeColumnValueSelector (cognitive 22): NestedFieldVirtualColumn.makeColumnValueSelector has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, boolean chains 6 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c5b28e62cf50ec0e55dad7f91265daf5b563ce0adce1bac63700cd691adc14"}},{"ruleId":"D2","level":"warning","message":{"text":"DataSchema.computeAndValidateOutputFieldNames (cognitive 22): DataSchema.computeAndValidateOutputFieldNames has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 4, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/indexing/DataSchema.java"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e342d5cb9a2e3fbc2b95354c17c45134cffeaf790fa4ec69a56eb6f64fb6a40"}},{"ruleId":"D2","level":"warning","message":{"text":"HdfsInputSource.getPaths (cognitive 22): HdfsInputSource.getPaths has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, loops 7 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/hdfs-storage/src/main/java/org/apache/druid/inputsource/hdfs/HdfsInputSource.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac12ea88beb76c79cf46e3376616700794dae675c8cbd221d1368908672756e9"}},{"ruleId":"D2","level":"warning","message":{"text":"MultipleKubernetesTaskRunnerConfig.fromProperties (cognitive 22): MultipleKubernetesTaskRunnerConfig.fromProperties has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10, error handling 9, boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/MultipleKubernetesTaskRunnerConfig.java"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2d7845e5e90e1acc07272e3e4cc34464430aaa809aa3c64c57c715d78f9dbb"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerImpl.publishAllSegments (cognitive 22): ControllerImpl.publishAllSegments has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, error handling 6, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java"},"region":{"startLine":1563}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccecf88c10b25f6d7fa4e866b6363001d7933f7d135595e9294949e866a744ed"}},{"ruleId":"D2","level":"warning","message":{"text":"MSQCompactionRunner.runSubtasks (cognitive 22): MSQCompactionRunner.runSubtasks has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, error handling 2, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQCompactionRunner.java"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"e01d77b7c9916b3705af5220907f291891a06bfff471572d5e59b71808c2d3c2"}},{"ruleId":"D2","level":"warning","message":{"text":"DataSourcePlan.forDataSource (cognitive 22): DataSourcePlan.forDataSource has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11, match/switch 11 (nesting depth added 10). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/DataSourcePlan.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d66a5b619609a566047a8729be982dc73714225f67a5be14b87129c26e2c6c6"}},{"ruleId":"D2","level":"warning","message":{"text":"MSQTaskSqlEngine.validateSortOrderBeginsWithTimeIfRequired (cognitive 22): MSQTaskSqlEngine.validateSortOrderBeginsWithTimeIfRequired has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, loops 6 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/sql/MSQTaskSqlEngine.java"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"1edb7dda1ae26c119890377d9c7dc65bc3c7ab03b4397b5044575445203d5831"}},{"ruleId":"D2","level":"warning","message":{"text":"ImmutableConciseSet.complement (cognitive 22): ImmutableConciseSet.complement has cognitive complexity 22 (threshold 15). Drivers by points: if/else 19, boolean chains 1, loops 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"a450506361553c73c6200a4dfb68d5cc3260f4f57ad5b093156a81b04b7b59c2"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameProcessorExecutor.logProcessorStatusString (cognitive 22): FrameProcessorExecutor.logProcessorStatusString has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, loops 5, ternaries 4 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/FrameProcessorExecutor.java"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f8cc6d888336a42108368662d7b4daae8bfef67e815c32fb9d5083ed5a2dd2d"}},{"ruleId":"D2","level":"warning","message":{"text":"StringFrameColumnWriter.addSelection (cognitive 22): StringFrameColumnWriter.addSelection has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 3, boolean chains 2, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/write/columnar/StringFrameColumnWriter.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"b94e60f5d55894f2ad7069d92dba26b083d040bf7561c1407db5e3e2284e2e16"}},{"ruleId":"D2","level":"warning","message":{"text":"TimestampParser.createTimestampParser (cognitive 22): TimestampParser.createTimestampParser has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, error handling 5, boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/parsers/TimestampParser.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"08cf61bc33f4fb0e303ca6c66268d772c09132d02b1b4d6dcafe2ec52c5d265a"}},{"ruleId":"D2","level":"warning","message":{"text":"PathChildrenAnnouncer.announce (cognitive 22): PathChildrenAnnouncer.announce has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, error handling 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/curator/announcement/PathChildrenAnnouncer.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"5634c6fe3a4b2bb74c7ec5f4898081ee1220670232d6c1924f3af6bced4740a3"}},{"ruleId":"D2","level":"warning","message":{"text":"ColumnarLongsEncodeDataFromGeneratorBenchmark.setup (cognitive 21): ColumnarLongsEncodeDataFromGeneratorBenchmark.setup has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, ternaries 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/test/java/org/apache/druid/benchmark/compression/ColumnarLongsEncodeDataFromGeneratorBenchmark.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"835d73107d91b74c0ea343e9ba8eea48cc1c25ce5e5e77dde712233a4ac2ef87"}},{"ruleId":"D2","level":"warning","message":{"text":"StrategicSegmentAssigner.updateReplicasInTierPartial (cognitive 21): StrategicSegmentAssigner.updateReplicasInTierPartial has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, boolean chains 5, ternaries 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bfc920a297e519ff8a7798d7f569a1bfb991dfb20aaf2be28dc46b0353a65e6"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientInfoResource.getDatasource (cognitive 21): ClientInfoResource.getDatasource has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/ClientInfoResource.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfef8458ca4c469d21aeb8be0f029ffedc4a3666d4dac0219b3c2059bca89fe8"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncQueryForwardingServlet.getAvaticaProtobufConnectionId (cognitive 21): AsyncQueryForwardingServlet.getAvaticaProtobufConnectionId has cognitive complexity 21 (threshold 15). Drivers by points: if/else 21. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"da18531dee2d47ab93a89b17d60d604f5adecfea4dd881ab5b56b79269ef4e05"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateMergeRule.apply (cognitive 21): AggregateMergeRule.apply has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, boolean chains 4, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/AggregateMergeRule.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbe0fb77c46583d77fb020466eddc11bc6d74260dfd697d0756bc43d88a80e4b"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterDecomposeConcatRule.tryDecomposeConcatEquals (cognitive 21): FilterDecomposeConcatRule.tryDecomposeConcatEquals has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 4, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterDecomposeConcatRule.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"815d54df14b405bec5e22045c9a7fc67cc9a20a0a1f1c771e963862401793ffc"}},{"ruleId":"D2","level":"warning","message":{"text":"ReverseLookupRule.toStringSet (cognitive 21): ReverseLookupRule.toStringSet has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, ternaries 5, loops 4, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/ReverseLookupRule.java"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"7475eaedb92a9317cee0c5b781ba2bdeeebd144843a25735856adc4e15e1ca03"}},{"ruleId":"D2","level":"warning","message":{"text":"AWSClientUtil.isClientExceptionRecoverable (cognitive 21): AWSClientUtil.isClientExceptionRecoverable has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cloud/aws-common/src/main/java/org/apache/druid/common/aws/AWSClientUtil.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"be8e88ba0562d13a83c7fc2ac5b18a47215b30f87050bd5b2aef816db23326bf"}},{"ruleId":"D2","level":"warning","message":{"text":"FlatTextInputFormat.\u003Cinit\u003E (cognitive 21): FlatTextInputFormat.\u003Cinit\u003E has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8, ternaries 8, boolean chains 3, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/FlatTextInputFormat.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba4ca827ae062436ec0dcde070cc814e344555480804b1dbc869b03535900905"}},{"ruleId":"D2","level":"warning","message":{"text":"AmbariMetricsEmitterConfig.equals (cognitive 21): AmbariMetricsEmitterConfig.equals has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, ternaries 6, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/AmbariMetricsEmitterConfig.java"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"104d78749863fbbe814584ae4eacbcb27f453300598772e84403d29449847786"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterSegmentPruner.include (cognitive 21): FilterSegmentPruner.include has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, boolean chains 3, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/FilterSegmentPruner.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0fb52c63764cefb6d59c8cd5eb84c84d041601c137aaa727490fffe81153f21"}},{"ruleId":"D2","level":"warning","message":{"text":"KafkaLookupExtractorFactory.start (cognitive 21): KafkaLookupExtractorFactory.start has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 4, error handling 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-extraction-namespace/src/main/java/org/apache/druid/query/lookup/KafkaLookupExtractorFactory.java"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f598d442fb15670c453e84540ca36fb9b744fceef8b672e5100fe18352207d8"}},{"ruleId":"D2","level":"warning","message":{"text":"HashVectorGrouper.aggregateVector (cognitive 21): HashVectorGrouper.aggregateVector has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/HashVectorGrouper.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd93ae02dda36d96a6580cce833a7ac064ba79739edfb5509785a634c3482f7b"}},{"ruleId":"D2","level":"warning","message":{"text":"RowBasedGrouperHelper.makeGrouperIterator (cognitive 21): RowBasedGrouperHelper.makeGrouperIterator has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 6, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"a291ff89abafd7ff292d197355b28cdfee2e5597a18f6e0144ced655afaef769"}},{"ruleId":"D2","level":"warning","message":{"text":"RowBasedKeySerdeFactory.objectComparatorWithAggs (cognitive 21): RowBasedKeySerdeFactory.objectComparatorWithAggs has cognitive complexity 21 (threshold 15). Drivers by points: if/else 19, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java"},"region":{"startLine":923}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f4fa9dca18a76b94f0bdc26c81de0a5162ff619ccf7b5541fc90fd45819566f"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamingMergeSortedGrouper.increaseWriteIndex (cognitive 21): StreamingMergeSortedGrouper.increaseWriteIndex has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/StreamingMergeSortedGrouper.java"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba2e5180a70a17dec7b5cdc4ce71319474373b678bd7c8e68335f955b87058bd"}},{"ruleId":"D2","level":"warning","message":{"text":"1.findRow (cognitive 21): 1.findRow has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, match/switch 3, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/semantic/DefaultSortedMatrixMaker.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"850263a8a15e89bcb5a5cbd3c22c6d88cb9525432503a80ec3c0df203b920834"}},{"ruleId":"D2","level":"warning","message":{"text":"Queries.computeRequiredColumns (cognitive 21): Queries.computeRequiredColumns has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, loops 9 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/Queries.java"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"b791ba78edcc2274b0abab80223fddc20b9d3242bf33cda3ecab2993ebacd961"}},{"ruleId":"D2","level":"warning","message":{"text":"SpatialDimensionRowTransformer.apply (cognitive 21): SpatialDimensionRowTransformer.apply has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 4, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f2e82f89ec260ec9130360f4a751aa2b00acd91ac063631d0e4ac90d742833a"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinFilterCorrelations.computeJoinFilterCorrelations (cognitive 21): JoinFilterCorrelations.computeJoinFilterCorrelations has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 7 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/filter/JoinFilterCorrelations.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf304f268d11b305c9735b4f1c3b816c5d69dfda7cbabbb069bf3f43dcd78d3d"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexedTableJoinable.getCorrelatedColumnValues (cognitive 21): IndexedTableJoinable.getCorrelatedColumnValues has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 1, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/table/IndexedTableJoinable.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed7fec6c362aff28edde864d2bc7dff51d858b09de1fecd69948e48eefe2c7a7"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalDataSegmentPuller.getSegmentFiles (cognitive 21): LocalDataSegmentPuller.getSegmentFiles has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, error handling 5, loops 2, ternaries 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/LocalDataSegmentPuller.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b7f95df1d55867bffc5e6f32c1af81924803ab402b0ee518b179696999fcfe"}},{"ruleId":"D2","level":"warning","message":{"text":"Projections.matchFilter (cognitive 21): Projections.matchFilter has cognitive complexity 21 (threshold 15). Drivers by points: if/else 19, loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a6998fc86b6d8e94c06a75b3a3d7720c8aef953575dd8246867ad709eb8100"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlStatementResource.getResultYielder (cognitive 21): SqlStatementResource.getResultYielder has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, boolean chains 4, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/sql/resources/SqlStatementResource.java"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"358301b5695193ec9aa70a85316b50041fec5fb9245c04380d797e5eb562b16b"}},{"ruleId":"D2","level":"warning","message":{"text":"RowBasedFrameWriter.writeDataUsingFieldWriters (cognitive 21): RowBasedFrameWriter.writeDataUsingFieldWriters has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, error handling 6, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/write/RowBasedFrameWriter.java"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"814bd3c3b644c719495f490a8f905e207cb92ce1de20fbeb4f77a33487194652"}},{"ruleId":"D2","level":"warning","message":{"text":"GranularityType.fromPeriod (cognitive 21): GranularityType.fromPeriod has cognitive complexity 21 (threshold 15). Drivers by points: if/else 19, loops 1, match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/granularity/GranularityType.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f1decf6b80aa48f92d1fee040b3abddf7e2ebfd1977a44ed2321ee47382cde"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourceHolderPerKey.get (cognitive 21): ResourceHolderPerKey.get has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, error handling 3, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/http/client/pool/ResourcePool.java"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"718d9d12b8df11dbc9161e9ed582160b95537038bd3cad0deb77f5d18b99b68e"}},{"ruleId":"D2","level":"warning","message":{"text":"FsStats.emit (cognitive 21): FsStats.emit has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, loops 7, error handling 5 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/metrics/SysMonitor.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"55843ba1f213717e755c15ff9a1a0f4499d26aae2ae463e9ad452373a06c0f82"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayExprEval.castTo (cognitive 21): ArrayExprEval.castTo has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, ternaries 6, loops 2, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":1295}}}],"partialFingerprints":{"codehealthFindingId/v1":"b62de0c62fa3210dd584769f2f61ba45b068af008840ceaa252c55e2e1ec3dc8"}},{"ruleId":"D2","level":"warning","message":{"text":"CloneHistoricals.run (cognitive 20): CloneHistoricals.run has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, loops 5, ternaries 3, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/duty/CloneHistoricals.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"d49f7115d3cb8f93802e3b98aa749960da6ea55d65fbefd0af9c8f8a2f0e6b84"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryResultPusher.handleDruidException (cognitive 20): QueryResultPusher.handleDruidException has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, error handling 6, boolean chains 2, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/QueryResultPusher.java"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"220e112c7d9c8a9288557262079f992bb616ffc1c85d9e0db730888d5c47e8e6"}},{"ruleId":"D2","level":"warning","message":{"text":"ConvertSelectorsToIns.splitAnd (cognitive 20): ConvertSelectorsToIns.splitAnd has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/ConvertSelectorsToIns.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcf31ecab79265ee77d708a1e3703a601e5cb95f16e85e4ae090d35c87e8d0b4"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidQuery.toScanQuery (cognitive 20): DruidQuery.toScanQuery has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 4, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1643}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a62c975f05496423212dd5e4bb4fd3d7c625561c2ca9b7fd4acfc34cdc788df"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidJoinRule.onMatch (cognitive 20): DruidJoinRule.onMatch has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6, loops 6, boolean chains 5, ternaries 3 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidJoinRule.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c35f9e1163c309e6df1637a96a90e0560aadb46d934acd3edc96356f23f9b7"}},{"ruleId":"D2","level":"warning","message":{"text":"InlineValuesRexShuttle.tryInlineIn (cognitive 20): InlineValuesRexShuttle.tryInlineIn has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 2, loops 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/InlineValuesSubQueryRule.java"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a2845c671e269e62c3e7ee60ea5fdf6cb421d880d00cf570aea9320187db12"}},{"ruleId":"D2","level":"warning","message":{"text":"1.getLeafSegmentsBundle (cognitive 20): 1.getLeafSegmentsBundle has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 2, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/ServerManagerForQueryErrorTest.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"a68f88f4447e40c0d53f61006f82e0dd32d684e094cc804d1c7c5730197d550d"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.checkpointTaskGroup (cognitive 20): SeekableStreamSupervisor.checkpointTaskGroup has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3912}}}],"partialFingerprints":{"codehealthFindingId/v1":"78df1357d8e28c1be1e8e1cc8b0c26f3183d3ebbbce94fcc9d9036124495b472"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskLockbox.resetState (cognitive 20): TaskLockbox.resetState has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 3, ternaries 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"e07209756464ba353a56534fb4cc293c0f2efe3103abe4a56957795002527d71"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentAllocateAction.perform (cognitive 20): SegmentAllocateAction.perform has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, error handling 4, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentAllocateAction.java"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"1171e0478835b8bce3ea1d3de20cd60fc2759360ed0ebfce61f61307836346da"}},{"ruleId":"D2","level":"warning","message":{"text":"ParallelIndexSupervisorTask.doGetRowStatsAndUnparseableEventsParallelMultiPhase (cognitive 20): ParallelIndexSupervisorTask.doGetRowStatsAndUnparseableEventsParallelMultiPhase has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 3, ternaries 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":1675}}}],"partialFingerprints":{"codehealthFindingId/v1":"1205ca7c1e509a975fbff8a1598eaf8b542b1c2899cee24143836cdc9bcaacfe"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractBatchIndexTask.findIntervalAndVersion (cognitive 20): AbstractBatchIndexTask.findIntervalAndVersion has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/AbstractBatchIndexTask.java"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"3048bc2b41ab5849eb55f8e86490d47601591df6e9e89974d66bf3329a2bc448"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkerTaskManager.doCompletedTasksCleanup (cognitive 20): WorkerTaskManager.doCompletedTasksCleanup has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, error handling 4, ternaries 3, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/worker/WorkerTaskManager.java"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"771066f3ae4d2d2ee800b32fbad0aa3cac5e9045fd50fdd9ba1632bd64b020e6"}},{"ruleId":"D2","level":"warning","message":{"text":"3056.apply (cognitive 20): 3056.apply has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 5 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3Utils.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"c04b447547012288fc724c5e8444146af511597c900af377cd41c58183389c96"}},{"ruleId":"D2","level":"warning","message":{"text":"InfluxdbEmitterConfig.equals (cognitive 20): InfluxdbEmitterConfig.equals has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, ternaries 4, boolean chains 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/influxdb-emitter/src/main/java/org/apache/druid/emitter/influxdb/InfluxdbEmitterConfig.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b350601f526741b0b678eeca660fb6c46c93d3fae9e90de9460b18e1b0a5f10"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultConsulApiClient.parseHealthServices (cognitive 20): DefaultConsulApiClient.parseHealthServices has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, error handling 4, boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/DefaultConsulApiClient.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"45784768ce438652bb3eed378a94c54daa98da3cb5ffe92e48db1aa13def9983"}},{"ruleId":"D2","level":"warning","message":{"text":"ApproximateHistogram.getQuantiles (cognitive 20): ApproximateHistogram.getQuantiles has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, loops 4, ternaries 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1525}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc07e262d05bd84f1aab8c87d2ff7fc853285fc486bdfaf35989e8d86e04f149"}},{"ruleId":"D2","level":"warning","message":{"text":"RangeType.of (cognitive 20): RangeType.of has cognitive complexity 20 (threshold 15). Drivers by points: ternaries 13, if/else 6, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":1083}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e591f46bcc47de016ffc420abc286175624dfd5633e667f3ddd325bdcadcec"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcurrentGrouper.iterator (cognitive 20): ConcurrentGrouper.iterator has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 2, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ConcurrentGrouper.java"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d5654ed1b20a67f1cb47319ae480862406dab72fae0cba67bb85619c88b5ea"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentAnalyzer.analyzeStringColumn (cognitive 20): SegmentAnalyzer.analyzeStringColumn has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, loops 7, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"3acf21db5d21e54e1b49359a40aaf540661e50a7f5398788d2c9355edad3fb6d"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinLogic.go (cognitive 20): JoinLogic.go has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 3, match/switch 2, boolean chains 1, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/operator/join/SortedInnerJoinOperator.java"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"584b6ac1f025e43d46cb25b9e0f13046b57727755566d8238432b34c23545869"}},{"ruleId":"D2","level":"warning","message":{"text":"SpecificQueryRunnable.computeUncoveredIntervals (cognitive 20): SpecificQueryRunnable.computeUncoveredIntervals has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 3, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/client/CachingClusteredClient.java"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cc9349000dce33e1cff94e4cd0368842f5a166e2f28d437b6b3c305e62455a1"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIndexedWriter.writeBucketV0 (cognitive 20): FrontCodedIndexedWriter.writeBucketV0 has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, loops 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIndexedWriter.java"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d00a7bddab9bbea5a3c84b13c0d0188681c62199dfcd64bca362f5dbf66f5bd"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIndexedWriter.writeBucketV1 (cognitive 20): FrontCodedIndexedWriter.writeBucketV1 has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, loops 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIndexedWriter.java"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a3b98de1dfa0b8f283187873a7728d6d50ca1d55bf809d3107bee46963aee56"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIntArrayIndexed.getFromBucket (cognitive 20): FrontCodedIntArrayIndexed.getFromBucket has cognitive complexity 20 (threshold 15). Drivers by points: loops 11, if/else 9 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIntArrayIndexed.java"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"b76a17001847e39d9362d620cc90eefcfac56d1e8520b60baba7d4ff524da798"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIntArrayIndexedWriter.getFromBucket (cognitive 20): FrontCodedIntArrayIndexedWriter.getFromBucket has cognitive complexity 20 (threshold 15). Drivers by points: loops 11, if/else 9 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIntArrayIndexedWriter.java"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b707cc1e9d83cb5dbba49a2ce6c930c0a3c2775874baf44b54086e695c5a28"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIntArrayIndexedWriter.writeBucket (cognitive 20): FrontCodedIntArrayIndexedWriter.writeBucket has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, loops 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIntArrayIndexedWriter.java"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"af6d01b011771bb1f8b9cc909332adad53e1ade2b9f9268c7fa6d1b6253afbb7"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSegmentFileMapperV10.createForFile (cognitive 20): PartialSegmentFileMapperV10.createForFile has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, error handling 2, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/file/PartialSegmentFileMapperV10.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"9712e5acee72e225b21048c8c3267e34d80184d328b10bf883d3419035a2ba6e"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSegmentMetadataCacheEntry.doMount (cognitive 20): PartialSegmentMetadataCacheEntry.doMount has cognitive complexity 20 (threshold 15). Drivers by points: error handling 11, if/else 5, boolean chains 3, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0b5745d77629bf1c996f037e506d0447197b004a6a214dc8b62528f472245a4"}},{"ruleId":"D2","level":"warning","message":{"text":"CompleteSegmentCacheEntry.mount (cognitive 20): CompleteSegmentCacheEntry.mount has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 4, error handling 2 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1993}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f05d837bd1d4439d6d8711e62129df2e195cc519f96530612b51fa2f2e5bb3"}},{"ruleId":"D2","level":"warning","message":{"text":"CoordinatorSegmentMetadataCache.refreshColdSegmentSchemas (cognitive 20): CoordinatorSegmentMetadataCache.refreshColdSegmentSchemas has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 3, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/CoordinatorSegmentMetadataCache.java"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"4226221401263bdc2f913563fb68988f16faef60d52519454c582089ee4d986f"}},{"ruleId":"D2","level":"warning","message":{"text":"BatchAppenderator.add (cognitive 20): BatchAppenderator.add has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/BatchAppenderator.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"50304008fa19d0321ac487a551d9f506c8afe8ea1f9a7030588d7c1e866bc7de"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamAppenderator.mergeAndPush (cognitive 20): StreamAppenderator.mergeAndPush has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, ternaries 6, error handling 2, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/StreamAppenderator.java"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d53c176e69bc64ee9cd6b4920d813c5400131bd9c4bbaaa9972cbfefe669600"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialQueryableIndex.\u003Cinit\u003E (cognitive 20): PartialQueryableIndex.\u003Cinit\u003E has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 4, ternaries 2, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/PartialQueryableIndex.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c50670b08fdb56a07ef5caf4afaf11132b8d2c094d81af9280dd5208cc7d44e"}},{"ruleId":"D2","level":"warning","message":{"text":"SortMergeJoinFrameProcessor.nextAwait (cognitive 20): SortMergeJoinFrameProcessor.nextAwait has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessor.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"299a16e46ffa23d5adcb8d2b797968ccca961d83abd6b5bb1246ae14981cfe25"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQueryFrameProcessor.runWithInputChannel (cognitive 20): ScanQueryFrameProcessor.runWithInputChannel has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"068a629fb8edb630dc4f8348bdb027ece3ef765e2ca5a1dbb5ca7e7207b33918"}},{"ruleId":"D2","level":"warning","message":{"text":"DimensionSchemaUtils.createDimensionSchema (cognitive 20): DimensionSchemaUtils.createDimensionSchema has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, boolean chains 4, ternaries 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/util/DimensionSchemaUtils.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"f641ebddc477b6b0febaebd9b6fbe39ac140e61596889f771e8a6bb4c21d598d"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlStatementResourceHelper.populatePageList (cognitive 20): SqlStatementResourceHelper.populatePageList has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/util/SqlStatementResourceHelper.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd91bd5631caafe63ada08ea66c3c6ca25d8f1a92e7cba46889eee778ed63983"}},{"ruleId":"D2","level":"warning","message":{"text":"GutmanSplitStrategy.split (cognitive 20): GutmanSplitStrategy.split has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 7 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/collections/spatial/split/GutmanSplitStrategy.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c7dfe6cf4d86e473914a27f5bcf3db8a9a103c5505b20a8a94dc237432032ae"}},{"ruleId":"D2","level":"warning","message":{"text":"SuperSorter.runMerger (cognitive 20): SuperSorter.runMerger has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, error handling 3, boolean chains 2, loops 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/SuperSorter.java"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"3538cb2df8ff86309cf5e8d76adc4508289417db51889110fa629ff64a293cc4"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameWriterUtils.copyByteBufferToMemory (cognitive 20): FrameWriterUtils.copyByteBufferToMemory has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 5 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/write/FrameWriterUtils.java"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea97c912e68357d61ccb1321445856132f435b18f0852175043cd9092cbe2ac8"}},{"ruleId":"D2","level":"warning","message":{"text":"FlattenerMaker.toPlainJavaType (cognitive 20): FlattenerMaker.toPlainJavaType has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/parsers/ObjectFlatteners.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"070a1d64b1c649d1caa86fdbe6b7880878874e9b0a8e3f3fdedd9dc78cb9b1bf"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorMathBivariateLongProcessorFactory.asProcessor (cognitive 20): VectorMathBivariateLongProcessorFactory.asProcessor has cognitive complexity 20 (threshold 15). Drivers by points: if/else 20 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/VectorMathBivariateLongProcessorFactory.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b65fe1bff465ac962860b273fdc046792dd2fb6e1cecf74c1d40ad5e05ce5d7"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeAnnouncer.announce (cognitive 20): NodeAnnouncer.announce has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, error handling 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/curator/announcement/NodeAnnouncer.java"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4087cd6c99fba2f502194da77ceab36ffafb6533639cd25d04b5300ca6a8f63"}},{"ruleId":"D2","level":"warning","message":{"text":"NullHandlingBitmapGetVsIteratorBenchmark.setup (cognitive 19): NullHandlingBitmapGetVsIteratorBenchmark.setup has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 4, boolean chains 2, match/switch 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/test/java/org/apache/druid/benchmark/NullHandlingBitmapGetVsIteratorBenchmark.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e1a50382ed431e576a5b2d14c8e9a2c469998410082649d2d8ec29f6c00799"}},{"ruleId":"D2","level":"warning","message":{"text":"KillUnusedSegments.killUnusedSegments (cognitive 19): KillUnusedSegments.killUnusedSegments has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 2, error handling 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/duty/KillUnusedSegments.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eb7878c4ee52ff6716a7c0b6c30d2fa8fb8d8b3bd5519d4bbd93aefcadae3cb"}},{"ruleId":"D2","level":"warning","message":{"text":"ChangeRequestHistory.getRequestsSinceWithoutWait (cognitive 19): ChangeRequestHistory.getRequestsSinceWithoutWait has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 4, ternaries 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordination/ChangeRequestHistory.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"5722cee4c0cbcc37e4f679e2071007e25cc11fe1433e10aa4fce11785d0eb12c"}},{"ruleId":"D2","level":"warning","message":{"text":"LoggingRequestLogger.logNativeQuery (cognitive 19): LoggingRequestLogger.logNativeQuery has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7, ternaries 7, loops 3, error handling 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/log/LoggingRequestLogger.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"cffc5dd5c77b255cdba1a65ba9534ff1de62b5ff2b55bc046220188b55ebd00f"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentManager.loadSegmentInternal (cognitive 19): SegmentManager.loadSegmentInternal has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, boolean chains 1, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/SegmentManager.java"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3cd0e72ff94089ecb912ef88e2066f8524f2dd4120792be82fb280180982113"}},{"ruleId":"D2","level":"warning","message":{"text":"TimeArithmeticOperatorConversion.toDruidExpression (cognitive 19): TimeArithmeticOperatorConversion.toDruidExpression has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, boolean chains 4, ternaries 4 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeArithmeticOperatorConversion.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c49a2a837a946c252a5ca60abab915798d927dc928bce8d885583320e76e892"}},{"ruleId":"D2","level":"warning","message":{"text":"PlannerContext.initializeContextFieldsAndPlannerConfig (cognitive 19): PlannerContext.initializeContextFieldsAndPlannerConfig has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerContext.java"},"region":{"startLine":675}}}],"partialFingerprints":{"codehealthFindingId/v1":"32521141639e66661a36130acef0ddfe271363d0fd711713abf9586289bc206a"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionedIntervalTimeline.lookup (cognitive 19): VersionedIntervalTimeline.lookup has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, boolean chains 5, loops 2 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/VersionedIntervalTimeline.java"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"60eaf043c334fff4115c8be3ad0ac27d4cd6cdd312f702808c0a4231211bef2e"}},{"ruleId":"D2","level":"warning","message":{"text":"KinesisIndexTaskRunner.possiblyResetDataSourceMetadata (cognitive 19): KinesisIndexTaskRunner.possiblyResetDataSourceMetadata has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, loops 5, error handling 4 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisIndexTaskRunner.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"12acfcf51d6a30eed4cf4982ea0d23395064e4b92019d89dd04ba497f5a52e70"}},{"ruleId":"D2","level":"warning","message":{"text":"ParallelIndexSupervisorTask.runHashPartitionMultiPhaseParallel (cognitive 19): ParallelIndexSupervisorTask.runHashPartitionMultiPhaseParallel has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, ternaries 3, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"c00c9846c0626e1f3f76b9dfa0369a6797c7b85398f96ef452162f407e84b515"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskMonitor.start (cognitive 19): TaskMonitor.start has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, match/switch 3, boolean chains 1, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/TaskMonitor.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"133170ccf91f8c457901ae0bc57d2c91b4a01720ef0ffa91ca36ddf228eedd5e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExistingSegmentAnalyzer.processProjections (cognitive 19): ExistingSegmentAnalyzer.processProjections has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java"},"region":{"startLine":1268}}}],"partialFingerprints":{"codehealthFindingId/v1":"10cce56d20a0c4a5e5a218f01afa1101dfa31ed0aaab57cb3b631db0cc1ce3fc"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexTask.createShardSpecsFromInput (cognitive 19): IndexTask.createShardSpecsFromInput has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, ternaries 8, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":656}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9dcd926d0b544db79116d3262d78f9e8c4906f15d989f50f4022c7a0787416e"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexTuningConfig.getPartitionsSpec (cognitive 19): IndexTuningConfig.getPartitionsSpec has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":1227}}}],"partialFingerprints":{"codehealthFindingId/v1":"8525cf055e21ee93824ecab7083a06c686f153f4b26082a8ff100376f8a9e59c"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateProjectionSpec.computeOrdering (cognitive 19): AggregateProjectionSpec.computeOrdering has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/AggregateProjectionSpec.java"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"5962650577da7cc7dbc78b001e3900cc53458402676e396f269bffef410c8f92"}},{"ruleId":"D2","level":"warning","message":{"text":"CompressedBigDecimal.directCompareCompressedBigDecimal (cognitive 19): CompressedBigDecimal.directCompareCompressedBigDecimal has cognitive complexity 19 (threshold 15). Drivers by points: ternaries 8, if/else 7, boolean chains 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/CompressedBigDecimal.java"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7854709207e50b8b03002d2a034871004607fe9366bf4898615a21a103a6e53"}},{"ruleId":"D2","level":"warning","message":{"text":"FilteredAggregatorFactory.optimizeForSegment (cognitive 19): FilteredAggregatorFactory.optimizeForSegment has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"93347cf9659a7291c1f1c5db65923c30428cf84313e190d047a764ec35bc7cb8"}},{"ruleId":"D2","level":"warning","message":{"text":"TrimStaticCharsExpr.eval (cognitive 19): TrimStaticCharsExpr.eval has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 4, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/TrimExprMacro.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"7600190d809783c98d15623c4fcc46c757ba26a26c9cea5692aa38db0674f312"}},{"ruleId":"D2","level":"warning","message":{"text":"TrimDynamicCharsExpr.eval (cognitive 19): TrimDynamicCharsExpr.eval has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/TrimExprMacro.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"d02c049790f752b383f84b3a9269ccadfed6f2dbe33420430225d6341b384969"}},{"ruleId":"D2","level":"warning","message":{"text":"GrouperBufferComparatorUtils.bufferComparatorWithAggregators (cognitive 19): GrouperBufferComparatorUtils.bufferComparatorWithAggregators has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GrouperBufferComparatorUtils.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c504363dd269b638df32795e9de55a282221e8ad9a2297bd78330e250aa39e"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByQuery.verifySubtotalsSpec (cognitive 19): GroupByQuery.verifySubtotalsSpec has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, loops 9 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d11c2ec567e78341693fd88b587b9f991f1bfa5d3b5843f3017f099100ca2ee"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByQueryQueryToolChest.mergeGroupByResultsWithoutPushDown (cognitive 19): GroupByQueryQueryToolChest.mergeGroupByResultsWithoutPushDown has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 3, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"4257f5da72cb74cd14e5e8fd574f8091e8131037c2e44a6dc67edb0c6f3966b9"}},{"ruleId":"D2","level":"warning","message":{"text":"23163.apply (cognitive 19): 23163.apply has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 2, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java"},"region":{"startLine":661}}}],"partialFingerprints":{"codehealthFindingId/v1":"2688d43e49e100892a8705d7e2713c22b7a82a5eabebe3c116def38e0c587350"}},{"ruleId":"D2","level":"warning","message":{"text":"UseIndexesStrategy.getStartIndexOfTime (cognitive 19): UseIndexesStrategy.getStartIndexOfTime has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, loops 5, ternaries 5 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"86ac7038c03d531ceb5e3b07a12533c66fa0b4508b4460120b15bb2459faa6d6"}},{"ruleId":"D2","level":"warning","message":{"text":"TimeseriesQueryEngine.processNonVectorized (cognitive 19): TimeseriesQueryEngine.processNonVectorized has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8, loops 8, boolean chains 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryEngine.java"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"65769254f4dafd15138eacfcc42ad0c5799980e6e073f1ad94c4b2b9bb7825a0"}},{"ruleId":"D2","level":"warning","message":{"text":"RowSerde.convertRowToJsonObject (cognitive 19): RowSerde.convertRowToJsonObject has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, loops 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/RowSerde.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd0aeed3fb44e695e390cc3e81d7aee7669c2371c2f1117b83df074c848cb381"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgreSQLConnector.\u003Cinit\u003E (cognitive 19): PostgreSQLConnector.\u003Cinit\u003E has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/postgresql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/postgresql/PostgreSQLConnector.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"c091fabb060edcc2699595aeb155802986e9afc75044ae91ab9eac3ae2c1fb6f"}},{"ruleId":"D2","level":"warning","message":{"text":"HeapMemorySegmentMetadataCache.markCacheSynced (cognitive 19): HeapMemorySegmentMetadataCache.markCacheSynced has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/segment/cache/HeapMemorySegmentMetadataCache.java"},"region":{"startLine":623}}}],"partialFingerprints":{"codehealthFindingId/v1":"80845c94386cf9e9774d22a23015004040fb0bdd556c6de6e8a9856f96681160"}},{"ruleId":"D2","level":"warning","message":{"text":"HiveCnfHelper.pushDownNot (cognitive 19): HiveCnfHelper.pushDownNot has cognitive complexity 19 (threshold 15). Drivers by points: loops 10, if/else 9 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/cnf/HiveCnfHelper.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"744aca8d452ca6248015b75761ea37704d660866800f5fa6502e3cfd71af94cc"}},{"ruleId":"D2","level":"warning","message":{"text":"AndFilter.makeFilterBundle (cognitive 19): AndFilter.makeFilterBundle has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/AndFilter.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"c745fd591b51e473df32606529eca0114094d22e1b00edf467634b48b3a80ab8"}},{"ruleId":"D2","level":"warning","message":{"text":"1.matches (cognitive 19): 1.matches has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 4, match/switch 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"e52fa7a0f97ddd8c1bc34c722a4f28d842633b4aa04c743e30634eb12af58758"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinFilterAnalyzer.rewriteSelectorFilter (cognitive 19): JoinFilterAnalyzer.rewriteSelectorFilter has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 7 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/filter/JoinFilterAnalyzer.java"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"782a45f9ed6beb53d4b664cf6e26bba6b5559b64ba46793cee46dda7ca9c7f08"}},{"ruleId":"D2","level":"warning","message":{"text":"StringUtf8ColumnIndexSupplier.as (cognitive 19): StringUtf8ColumnIndexSupplier.as has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, ternaries 4, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/serde/StringUtf8ColumnIndexSupplier.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1a74d5209503fa97131fb003ad6ced268b2e398d2adc298cb34b42afc62a10d"}},{"ruleId":"D2","level":"warning","message":{"text":"Transformer.transform (cognitive 19): Transformer.transform has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, loops 5, error handling 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/transform/Transformer.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"213b9303c10ae1097c6802df53234e4f406ef4710576180e7d085bf777196d96"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorSelectorUtils.populateNullVector (cognitive 19): VectorSelectorUtils.populateNullVector has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, loops 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/vector/VectorSelectorUtils.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c6f00591b11c19c8c2a2c74c75e5553df96ecd6535c50c4a82a87bfb59ec166"}},{"ruleId":"D2","level":"warning","message":{"text":"BatchAppenderator.mergeAndPush (cognitive 19): BatchAppenderator.mergeAndPush has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, ternaries 5, loops 3, error handling 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/BatchAppenderator.java"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0e6bf3e2dc722a829e47fe8098daeb8de30fda4ec3900c56bf8e8110bbfb1e4"}},{"ruleId":"D2","level":"warning","message":{"text":"SinkQuerySegmentWalker.getQueryRunnerForSegments (cognitive 19): SinkQuerySegmentWalker.getQueryRunnerForSegments has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 2, error handling 1, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/SinkQuerySegmentWalker.java"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"119adc5818135a6b5828e91432546d7145a1fdf3df52a85a1a604c69c315ae5b"}},{"ruleId":"D2","level":"warning","message":{"text":"MergingRowIterator.moveToNext (cognitive 19): MergingRowIterator.moveToNext has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/MergingRowIterator.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"15cb513b8319e143bca2a1ca15bc094dc8a550c8ae1f9023982f7fdaa37ea38c"}},{"ruleId":"D2","level":"warning","message":{"text":"UnnestCursorFactory.computeBaseAndPostUnnestFilters (cognitive 19): UnnestCursorFactory.computeBaseAndPostUnnestFilters has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/UnnestCursorFactory.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"d53788feb10b0367ed3eb44bb98eb99566f9a4f944431b9710dcdd9a3f84b741"}},{"ruleId":"D2","level":"warning","message":{"text":"MultipleKubernetesTaskRunnerFactory.build (cognitive 19): MultipleKubernetesTaskRunnerFactory.build has cognitive complexity 19 (threshold 15). Drivers by points: error handling 6, if/else 6, ternaries 4, loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/MultipleKubernetesTaskRunnerFactory.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e6eecb37ce04498a6b4430c5b0a641cb3b68bda1bc63c5a08a9fba447f2b578"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentGenerationStageSpec.getClusterByVirtualColumnMappings (cognitive 19): SegmentGenerationStageSpec.getClusterByVirtualColumnMappings has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 7 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/destination/SegmentGenerationStageSpec.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c90f7a8e619fa4111649e388688c3dc20e98d13213c9cdd88428253d830a7c"}},{"ruleId":"D2","level":"warning","message":{"text":"MSQCompactionRunner.getAggregateDimensions (cognitive 19): MSQCompactionRunner.getAggregateDimensions has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQCompactionRunner.java"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"48e2fec134b9cf600d15cdb185a6d987a199fce07d8950719eeb8842469a0f1a"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerStageTracker.mergeClusterByStatisticsCollectorForAllTimeChunks (cognitive 19): ControllerStageTracker.mergeClusterByStatisticsCollectorForAllTimeChunks has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, boolean chains 2 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"61209453019586638da5589057b329d1d7897f565cc3c58c4682620027a16e2d"}},{"ruleId":"D2","level":"warning","message":{"text":"SortMergeJoinFrameProcessor.runIncrementally (cognitive 19): SortMergeJoinFrameProcessor.runIncrementally has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 4, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessor.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"30e392866707729439f1a13aeb9e70d048f8fbedf8ca3bf124e1d4e797c6d31a"}},{"ruleId":"D2","level":"warning","message":{"text":"DimensionSchemaUtils.getDimensionType (cognitive 19): DimensionSchemaUtils.getDimensionType has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/util/DimensionSchemaUtils.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"ada93d10681d8a898304caed9e696aacd029c92bd18a8a84ab81a608573ac3f9"}},{"ruleId":"D2","level":"warning","message":{"text":"PullDependencies.downloadExtension (cognitive 19): PullDependencies.downloadExtension has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 3, error handling 2, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/cli/PullDependencies.java"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"4850740bd4465896ebc93f1746f3393a8436b04ef3959a93dfc4fa42eddee9d5"}},{"ruleId":"D2","level":"warning","message":{"text":"WrappedRoaringBitmap.add (cognitive 19): WrappedRoaringBitmap.add has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, loops 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"f079205e1982fd6882ce76cbcb88963c896d74170e1151786f9220ced0ce9de2"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.appendLiteral (cognitive 19): ConciseSet.appendLiteral has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 3 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab392e0883dcc04d163df5c9e4800f1bb85b99d6a4cc726072308be48d3c79f6"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralAndZeroFillExpander.reset (cognitive 19): LiteralAndZeroFillExpander.reset has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, ternaries 6, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":1899}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c6ed852301f3ee08d02aa8dbdbda6a841ceb89d6dc3d2ea3f677b2541ab604e"}},{"ruleId":"D2","level":"warning","message":{"text":"StringFieldReader.addStringsToList (cognitive 19): StringFieldReader.addStringsToList has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 4, match/switch 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/field/StringFieldReader.java"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"78a4cd1624f6b9698e73fbc14f6188c58c68c3c8f0e0d1a2ce84ec5da79c0f2b"}},{"ruleId":"D2","level":"warning","message":{"text":"CoalesceDoubleVectorProcessor.evalVector (cognitive 19): CoalesceDoubleVectorProcessor.evalVector has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/CoalesceDoubleVectorProcessor.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"1165fa95b12cd9a91bad957c95c72db9b0c6ae2bdc67fa08f0deb038c0630b40"}},{"ruleId":"D2","level":"warning","message":{"text":"CoalesceLongVectorProcessor.evalVector (cognitive 19): CoalesceLongVectorProcessor.evalVector has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/CoalesceLongVectorProcessor.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"0526daa42cc87d80bb44e6f33ef39913d15997935f2795154050aed574a55fa5"}},{"ruleId":"D2","level":"warning","message":{"text":"BinEqExpr.asBitmapColumnIndex (cognitive 19): BinEqExpr.asBitmapColumnIndex has cognitive complexity 19 (threshold 15). Drivers by points: ternaries 10, if/else 7, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/BinaryLogicalOperatorExpr.java"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9a046919bf6acb844bbb4e25db3de5c4c41cbaa0d181035ad7c9e9cbca543f0"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectionUriUtils.getPropertiesFromHosts (cognitive 19): ConnectionUriUtils.getPropertiesFromHosts has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/utils/ConnectionUriUtils.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cd49fb4d460dc0d0a94d58e37c19b174fd160906c24f797557c7d0b99c6fc78"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlBaseBenchmark.setup (cognitive 18): SqlBaseBenchmark.setup has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, error handling 4, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"0be25f31fde6428679243e1620daa8579d88aadb58c8138ad950863a9f0eda92"}},{"ruleId":"D2","level":"warning","message":{"text":"WeightedQueryLaningStrategy.\u003Cinit\u003E (cognitive 18): WeightedQueryLaningStrategy.\u003Cinit\u003E has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, error handling 6, boolean chains 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/scheduling/WeightedQueryLaningStrategy.java"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d3f46034bf93d77c7225dce94cf42e0adcae41ebb2c5a92f02d3dd19f3bcb62"}},{"ruleId":"D2","level":"warning","message":{"text":"SubstringOperatorConversion.toDruidExpression (cognitive 18): SubstringOperatorConversion.toDruidExpression has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, ternaries 3 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/SubstringOperatorConversion.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3a1518ff0c4ea20346d6ff05b426959a067fdb11916abfd438f90136b96950d"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidSqlParser.processStatementList (cognitive 18): DruidSqlParser.processStatementList has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParser.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"cabac9a58b9fe907a1c540da19e7e5b8dffe83689602091f6c7199d37247ff28"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidSqlParser.sqlLiteralToContextValue (cognitive 18): DruidSqlParser.sqlLiteralToContextValue has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParser.java"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad1275d99781214901805871c336860a0d82c6885e7ce56b97f5eb1ab62aa60b"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidQuery.fromPartialQuery (cognitive 18): DruidQuery.fromPartialQuery has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, ternaries 3, boolean chains 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"49dd5346455e851339513ed6d38c24d6f7d94ee40983422b03e8bbff3d40465b"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterJoinExcludePushToChildRule.perform (cognitive 18): FilterJoinExcludePushToChildRule.perform has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, boolean chains 6, ternaries 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterJoinExcludePushToChildRule.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"f730bf8b54bc0edc7653ead6bc44c61d50e8f73e7024beaf3e6fd58607be08d0"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterJoinExcludePushToChildRule.removeRedundantIsNotNullFilters (cognitive 18): FilterJoinExcludePushToChildRule.removeRedundantIsNotNullFilters has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, boolean chains 4, loops 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterJoinExcludePushToChildRule.java"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"681b25e40a4f107881a0e26ec6cc6b2fcc34c3f685544ea084c6b44cef6e80a2"}},{"ruleId":"D2","level":"warning","message":{"text":"DimensionRangeShardSpec.possibleInDomain (cognitive 18): DimensionRangeShardSpec.possibleInDomain has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 5, ternaries 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/partition/DimensionRangeShardSpec.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cba5402e385bc097b92a5bd154511008a8aa2e213b42c425a1ea68826b97aa5"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionedIntervalTimeline.addAll (cognitive 18): VersionedIntervalTimeline.addAll has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/VersionedIntervalTimeline.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8e3f621e9a19c1b25a54714d9dba47848875faf631be6f11f4960bc403fc2e6"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.hasTaskGroupReachedBoundedEnd (cognitive 18): SeekableStreamSupervisor.hasTaskGroupReachedBoundedEnd has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 4, loops 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":4698}}}],"partialFingerprints":{"codehealthFindingId/v1":"583da30dce2f7451f964dfae575e726af4d97b3cedc48880133cb037cadf30d6"}},{"ruleId":"D2","level":"warning","message":{"text":"ParallelIndexTuningConfig.\u003Cinit\u003E (cognitive 18): ParallelIndexTuningConfig.\u003Cinit\u003E has cognitive complexity 18 (threshold 15). Drivers by points: ternaries 9, if/else 6, boolean chains 3 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexTuningConfig.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf4ddeda0d0c61e34883b322ab5dcdf3b8ae037be9575b57ec7a2d4af2427ae6"}},{"ruleId":"D2","level":"warning","message":{"text":"TombstoneHelper.computeTombstoneIntervalsForReplace (cognitive 18): TombstoneHelper.computeTombstoneIntervalsForReplace has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 9 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/TombstoneHelper.java"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace47e3db949d79eddeeaf5213a2c389ade18d7da812be5ccca1224a241c513d"}},{"ruleId":"D2","level":"warning","message":{"text":"CompactionTask.\u003Cinit\u003E (cognitive 18): CompactionTask.\u003Cinit\u003E has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, ternaries 3 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"b58f07b497954530a0f0832ca91ebd01b303f7be040c07261bdd9e5f02f5982d"}},{"ruleId":"D2","level":"warning","message":{"text":"CascadingReindexingTemplate.createCompactionJobs (cognitive 18): CascadingReindexingTemplate.createCompactionJobs has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/compact/CascadingReindexingTemplate.java"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfd8dc71059bb7bc96f6b316e695616f2359413b0bb98d2df98547cf6d79d564"}},{"ruleId":"D2","level":"warning","message":{"text":"ClusteredValueGroupsBaseTableProjectionSpec.validate (cognitive 18): ClusteredValueGroupsBaseTableProjectionSpec.validate has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/ClusteredValueGroupsBaseTableProjectionSpec.java"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"5187c24cf71ad52d4d5a63b6b1f04353a909c99f0bb530aa3adb389fa1dd17a3"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpEntity.openInputStream (cognitive 18): HttpEntity.openInputStream has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 5, error handling 2, loops 2 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/HttpEntity.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dfce0c9aea456494f7655792ad27565c7c1aeb34a59e60744a70f10b28abdcb"}},{"ruleId":"D2","level":"warning","message":{"text":"MapInputRowParser.findDimensions (cognitive 18): MapInputRowParser.findDimensions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/MapInputRowParser.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"72dbeb913ab3cafa6826abb2073e24fa052a015a28d74b56317aa0847a528f10"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayOfDoublesSketchSqlAggregator.toDruidAggregation (cognitive 18): ArrayOfDoublesSketchSqlAggregator.toDruidAggregation has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/sql/ArrayOfDoublesSketchSqlAggregator.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a92a0c468f3c48d413894ea9655cbf777ed94036b1d3960b502058eebf82c03"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorMatch.isValid (cognitive 18): VectorMatch.isValid has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 6, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/VectorMatch.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"10b2b27ffe8f6589169952976193f8e024b42e1e70bf116f671eec255258e97e"}},{"ruleId":"D2","level":"warning","message":{"text":"RangeFilter.getDimensionRangeSet (cognitive 18): RangeFilter.getDimensionRangeSet has cognitive complexity 18 (threshold 15). Drivers by points: ternaries 13, if/else 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bd5b84109cec22e0c3c67c9d978b7960195dede4f968cea5bb1a3c0fd1c50fc"}},{"ruleId":"D2","level":"warning","message":{"text":"RangeFilter.makeLongPredicateSupplier (cognitive 18): RangeFilter.makeLongPredicateSupplier has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ab1cbcfd34a97521f92d31bffb8029d57236d088494df98232f0831d8f863ce"}},{"ruleId":"D2","level":"warning","message":{"text":"1ParseJsonExpr.eval (cognitive 18): 1ParseJsonExpr.eval has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5cfd52156c21047c4c2c4ffe9eb7216c27842ebb79dda3a9722f838c64c2d11"}},{"ruleId":"D2","level":"warning","message":{"text":"RowBasedGrouperHelper.createGrouperAccumulatorPair (cognitive 18): RowBasedGrouperHelper.createGrouperAccumulatorPair has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, ternaries 4, boolean chains 2. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"08c8613640d6ae44118202567c30cd1a647aae26d9d365e8ef64219bac4a962b"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByQuery.getOrderingAndDimensions (cognitive 18): GroupByQuery.getOrderingAndDimensions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b791bec9d138c3c81a54cd30dcc3f28d2f9540bc5a9ce134ffb203844d420f0"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQuery.\u003Cinit\u003E (cognitive 18): ScanQuery.\u003Cinit\u003E has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, ternaries 3, loops 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/scan/ScanQuery.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cc73255a8e2d33d05002fda1e054acfe6d01be9fd7586f67a8454cc6139db77"}},{"ruleId":"D2","level":"warning","message":{"text":"TimeseriesQueryEngine.processVectorized (cognitive 18): TimeseriesQueryEngine.processVectorized has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, error handling 3, loops 2, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryEngine.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa2e9ce97f03278ad91f1d96927d11859222ff14ef37e1cdcd9b2c571b28a836"}},{"ruleId":"D2","level":"warning","message":{"text":"LDAPRoleProvider.allowedLdapGroup (cognitive 18): LDAPRoleProvider.allowedLdapGroup has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, error handling 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/LDAPRoleProvider.java"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"98869b0b44d305814722286af1bc8c9351e1149c9c332f4525dbb6e18fc5a4bf"}},{"ruleId":"D2","level":"warning","message":{"text":"SpecificQueryRunnable.computeSegmentsToQuery (cognitive 18): SpecificQueryRunnable.computeSegmentsToQuery has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, loops 3, match/switch 3, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/client/CachingClusteredClient.java"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3785ef5d46ae2edcb70244795e0962b9e2f49fe3acc6203b5f8ae70dd0a5038"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexerSQLMetadataStorageCoordinator.createNewPendingSegment (cognitive 18): IndexerSQLMetadataStorageCoordinator.createNewPendingSegment has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8, ternaries 8, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":1404}}}],"partialFingerprints":{"codehealthFindingId/v1":"19586fb72e22110cb87051c9a808dd2155d5acb4cab922f85ba05944c75fda11"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexerSQLMetadataStorageCoordinator.createNewSegments (cognitive 18): IndexerSQLMetadataStorageCoordinator.createNewSegments has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":1311}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c61dc182a010b66d2821a040c55759619d9d4a52b5df84a30ffcc37ffc0af32"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexerSQLMetadataStorageCoordinator.updateDataSourceMetadataInTransaction (cognitive 18): IndexerSQLMetadataStorageCoordinator.updateDataSourceMetadataInTransaction has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, ternaries 5 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":2336}}}],"partialFingerprints":{"codehealthFindingId/v1":"7491da9dfbb8d17047edd0e65a09c4acd1e63e9588ca1a430f3d3b551401136a"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontCodedIndexedWriter.write (cognitive 18): FrontCodedIndexedWriter.write has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8, ternaries 6, boolean chains 2, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FrontCodedIndexedWriter.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a70a76066f04b2f1b69c93667a2d69368ebb5e3e66456b8114bfc669d0105b7"}},{"ruleId":"D2","level":"warning","message":{"text":"OnheapIncrementalIndex.initAggs (cognitive 18): OnheapIncrementalIndex.initAggs has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/OnheapIncrementalIndex.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"bed3edce27c9fe3a576d9e75c064c09ad676af9a14cfaa21d319260143dec9b8"}},{"ruleId":"D2","level":"warning","message":{"text":"DownloadableCacheEntry.mount (cognitive 18): DownloadableCacheEntry.mount has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, error handling 4, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/external/DownloadableCacheEntry.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"c52651e54c849132d7c0de8bfa5f8b11076f508d07b5aee334cd21049e6881f6"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageLocation.reclaimHelper (cognitive 18): StorageLocation.reclaimHelper has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/StorageLocation.java"},"region":{"startLine":928}}}],"partialFingerprints":{"codehealthFindingId/v1":"338a07524d2a808a48d95797609c8ffc446538eb7816e448c4615c1b398b9ea2"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedDataColumnSerializer.writeTo (cognitive 18): NestedDataColumnSerializer.writeTo has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, loops 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSerializer.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"6830eabc84073a3cf362f89fdc95ae4acc262dbfec24d38686ba5e6637e463c4"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateProjectionSchema.\u003Cinit\u003E (cognitive 18): AggregateProjectionSchema.\u003Cinit\u003E has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, ternaries 4, boolean chains 3, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/AggregateProjectionSchema.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"54a1eddd645b84cda470db82811617967ef526098f4b0c141b936d3f9f905fdd"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedFieldVirtualColumn.capabilities (cognitive 18): NestedFieldVirtualColumn.capabilities has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, ternaries 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe62d97e17de3b2285cf6e0b15e395b56eb8c28e96a8e65754d9e4056de47f3c"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSegmentMetadataCache.cacheExecLoop (cognitive 18): AbstractSegmentMetadataCache.cacheExecLoop has cognitive complexity 18 (threshold 15). Drivers by points: error handling 6, if/else 6, boolean chains 3, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/AbstractSegmentMetadataCache.java"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b60bf73792853db869bf82b70e8d66eb86c6185c37bc4971d3b93858942a5a"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentSchemaManager.persistSegmentSchema (cognitive 18): SegmentSchemaManager.persistSegmentSchema has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 6 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/SegmentSchemaManager.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"520a33bbedcd3b95bf39955a6947b566480880285511405f5b4a7a3338895bbc"}},{"ruleId":"D2","level":"warning","message":{"text":"1.after (cognitive 18): 1.after has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, error handling 6, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/SinkQuerySegmentWalker.java"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"4905c09bf022700fdaeab8184b5965fcc146c296dcd726468a9b721db3ada2ad"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleQueryableIndex.\u003Cinit\u003E (cognitive 18): SimpleQueryableIndex.\u003Cinit\u003E has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, loops 5, ternaries 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/SimpleQueryableIndex.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e5c4974e7971d6d92c2db9d14b97b2ca107a7a0e3e1a77cdfb8edacd3c28ff"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerImpl.handleQueryResults (cognitive 18): ControllerImpl.handleQueryResults has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, ternaries 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java"},"region":{"startLine":1746}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f08d09ddef7fb8878a1696ab8fa76f47085b1299d4b44e1563cb9638b6fe87"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByPreShuffleFrameProcessor.runWithDataServerQuery (cognitive 18): GroupByPreShuffleFrameProcessor.runWithDataServerQuery has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"b044f26439af0ee0630a14d118060426ea8ab19f6e946087416ec4659ce3785c"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.size (cognitive 18): ConciseSet.size has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":1175}}}],"partialFingerprints":{"codehealthFindingId/v1":"917258ae09fc7aa4b181b7652d05428040eee49246dd5c43f3c05262060d6ea8"}},{"ruleId":"D2","level":"warning","message":{"text":"1ExecutorRunnable.runProcessorNow (cognitive 18): 1ExecutorRunnable.runProcessorNow has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/FrameProcessorExecutor.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"b70e732a083a8b1046426e2890b1e8750e3c94a3d28bcc8607e036af6fa6de4a"}},{"ruleId":"D2","level":"warning","message":{"text":"HyperLogLogCollector.fold (cognitive 18): HyperLogLogCollector.fold has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, loops 4, boolean chains 1 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/hll/HyperLogLogCollector.java"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"073d38929f518c29c7e79a30ea722a1cb343845b26ea1e2268a5a443794b13c0"}},{"ruleId":"D2","level":"warning","message":{"text":"JSONToLowerParser.parseToMap (cognitive 18): JSONToLowerParser.parseToMap has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 4, error handling 1, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/parsers/JSONToLowerParser.java"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf01a03e419f26513de1e2659c41f6d39c4eaf3d59373b46dce4fc453097724"}},{"ruleId":"D2","level":"warning","message":{"text":"ReservoirSegmentSampler.pickMovableSegmentsFrom (cognitive 17): ReservoirSegmentSampler.pickMovableSegmentsFrom has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/balancer/ReservoirSegmentSampler.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab821d2d8c7da2f27a62f3910816b74ccf81c51bef4adf286947a1f0faf3ce5f"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSegmentStatusInTier.classify (cognitive 17): PartialSegmentStatusInTier.classify has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/PartialSegmentStatusInTier.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"86aaae7e7ce3445118c545df79d8bdceb9f0abc91dbbfb8cf98c3dac783544f7"}},{"ruleId":"D2","level":"warning","message":{"text":"EntryImpl.tryUpdateCache (cognitive 17): EntryImpl.tryUpdateCache has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, error handling 3, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/cache/CacheScheduler.java"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"926b8ee7a3d703f58d07cd74cd33686b1af4330619106358df33583eba825c9b"}},{"ruleId":"D2","level":"warning","message":{"text":"JdbcCacheGenerator.generateCache (cognitive 17): JdbcCacheGenerator.generateCache has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, error handling 5, ternaries 2, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/JdbcCacheGenerator.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"b48839455f9e4a61d1d34c066424c3998bd968693711aa5fb6d7e244cfd30548"}},{"ruleId":"D2","level":"warning","message":{"text":"DataSourcesResource.getServedSegmentsInInterval (cognitive 17): DataSourcesResource.getServedSegmentsInInterval has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca2edacc6d86978d9299fb9aa8e65d91cc7b96eccc1da37ac0bcb22457050e5e"}},{"ruleId":"D2","level":"warning","message":{"text":"DataSourcesResource.isHandOffComplete (cognitive 17): DataSourcesResource.isHandOffComplete has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 2, error handling 1, loops 1, ternaries 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc14604f527d2b29046afe17a703657c57e670cf491e8ba139818ecb91c81975"}},{"ruleId":"D2","level":"warning","message":{"text":"BuiltinApproxCountDistinctSqlAggregator.toDruidAggregation (cognitive 17): BuiltinApproxCountDistinctSqlAggregator.toDruidAggregation has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, ternaries 2, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BuiltinApproxCountDistinctSqlAggregator.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c69ab01a4ab6487a5cd0288d73b257ca488e69021dce7c215d73edce552c87"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidJsonValueConvertletFactory.createConvertlet (cognitive 17): DruidJsonValueConvertletFactory.createConvertlet has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, match/switch 5, boolean chains 4, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2cf17ffeb54e30659f061bc49a7b5cdecf50fa9ffcbaacb46d90b706308a4dd"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultOperandTypeChecker.checkOperandTypes (cognitive 17): DefaultOperandTypeChecker.checkOperandTypes has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/DefaultOperandTypeChecker.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"041014168e77f6c6cb741cc8642c18b61c5e988d5ee3f93587862a5bcf4a6ff8"}},{"ruleId":"D2","level":"warning","message":{"text":"OperatorConversions.toPostAggregator (cognitive 17): OperatorConversions.toPostAggregator has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/OperatorConversions.java"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ecec804d7e51c105f98d3ddd87e2a3f8b1518c07b9e3bcf7536a42f66f2b202"}},{"ruleId":"D2","level":"warning","message":{"text":"CombineAndSimplifyBounds.negate (cognitive 17): CombineAndSimplifyBounds.negate has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 11, if/else 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/CombineAndSimplifyBounds.java"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ad5e7ce953183269e1b5bab100398c870a6e977ae90922050bc9078a4afa7ed"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidSqlValidator.validateCall (cognitive 17): DruidSqlValidator.validateCall has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java"},"region":{"startLine":762}}}],"partialFingerprints":{"codehealthFindingId/v1":"f228f641a9870c650b66a15d6f6e9096e29edac0f2f344ed7b8c4948f00aaf4f"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidQuery.toTopNQuery (cognitive 17): DruidQuery.toTopNQuery has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, ternaries 5, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1263}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce31f9cd802fcd6762293462067bcede9c040507d4701da32267b10fc7058ea3"}},{"ruleId":"D2","level":"warning","message":{"text":"FlattenConcatShuttle.visitCall (cognitive 17): FlattenConcatShuttle.visitCall has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/FlattenConcatRule.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"e629452ee7fab13e03c21ae49b13b7ef610c90ff1457263db10d12fa8b378669"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlParameter.getTypedValue (cognitive 17): SqlParameter.getTypedValue has cognitive complexity 17 (threshold 15). Drivers by points: error handling 10, if/else 7 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/http/SqlParameter.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"55a7acd783298e3a97c2977feb6df6bb0c7fe138d76ccd6107011280a3605f6d"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryResultVerifier.compareResults (cognitive 17): QueryResultVerifier.compareResults has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, loops 4, boolean chains 3, ternaries 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embedded-tests/src/test/java/org/apache/druid/testing/embedded/utils/QueryResultVerifier.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec864594cddc133a235fe1e62fe5fb00b22dd8476985be133dd19b926399656f"}},{"ruleId":"D2","level":"warning","message":{"text":"WeightedCostFunction.computeCost (cognitive 17): WeightedCostFunction.computeCost has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 3, ternaries 3 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/WeightedCostFunction.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"768dec02aa911db2829c2b07e05c419968fbcdc6e222f0a30ece42638fd9722e"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.getCurrentParseErrors (cognitive 17): SeekableStreamSupervisor.getCurrentParseErrors has cognitive complexity 17 (threshold 15). Drivers by points: loops 11, if/else 6 (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1860}}}],"partialFingerprints":{"codehealthFindingId/v1":"458d97b9ee4c6c09cac4fd6b016168ad5e6a082506505a97e38c88e8ef957466"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.registerNewVersionOfPendingSegment (cognitive 17): SeekableStreamSupervisor.registerNewVersionOfPendingSegment has cognitive complexity 17 (threshold 15). Drivers by points: loops 11, if/else 6 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef8a07245e0b99b97e923f542fe6dc181c6ebc711f00b0be59c6f61237aeb2f"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskQueue.start (cognitive 17): TaskQueue.start has cognitive complexity 17 (threshold 15). Drivers by points: error handling 8, loops 5, if/else 4 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskQueue.java"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b4cbf827eba218e1d21d68c851c6c8d1f6ae076f990728bd6f209c36dee1fb"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexTask.generateAndPublishSegments (cognitive 17): IndexTask.generateAndPublishSegments has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, ternaries 4, error handling 2, loops 2, boolean chains 1, match/switch 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":808}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a05a325e05adc280e1cea96a59ac202697b635f05de0c0b8333bdabb31e896"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskLockHelper.verifyRootPartitionIsAdjacentAndAtomicUpdateGroupIsFull (cognitive 17): TaskLockHelper.verifyRootPartitionIsAdjacentAndAtomicUpdateGroupIsFull has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/TaskLockHelper.java"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4c74972ed8f725e69c61fb36e1cf65b2a1481ef9c925e0839e29e0961bdb387"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskStorageDirTracker.findExistingTaskDirs (cognitive 17): TaskStorageDirTracker.findExistingTaskDirs has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/TaskStorageDirTracker.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfe2d7a9a04d19b8232c674057076163c231bb6e11bc565263120a14754ac60c"}},{"ruleId":"D2","level":"warning","message":{"text":"AmbariMetricsEmitter.emit (cognitive 17): AmbariMetricsEmitter.emit has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 3, error handling 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/AmbariMetricsEmitter.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddfb44d1e1a7ff56596f0d9c3446122ab9097e69b97758fed6081fdf913fa4ac"}},{"ruleId":"D2","level":"warning","message":{"text":"DropwizardEmitter.emit (cognitive 17): DropwizardEmitter.emit has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/dropwizard-emitter/src/main/java/org/apache/druid/emitter/dropwizard/DropwizardEmitter.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4e534cc511eefac003cab31fd3daef02199c3d3be83370a04f52d324d329b71"}},{"ruleId":"D2","level":"warning","message":{"text":"Utils.objToCompressedBigDecimal (cognitive 17): Utils.objToCompressedBigDecimal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, error handling 3 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/Utils.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bf31bb938ce6c2d24dcc0a8df72b2333eb23dcae1510338f209f8e799041b0d"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsulDruidNodeAnnouncer.updateHealthChecks (cognitive 17): ConsulDruidNodeAnnouncer.updateHealthChecks has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, error handling 6, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeAnnouncer.java"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"324e25ee74a227e1f03317b3235b35e335dc694719f9262873d490fc76a96645"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsulLeaderSelector.unregisterListener (cognitive 17): ConsulLeaderSelector.unregisterListener has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, error handling 8 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulLeaderSelector.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"950666ac6615c0d67875de44923bca8697c004c1e89c39a22987bae5ec06fe99"}},{"ruleId":"D2","level":"warning","message":{"text":"3.match (cognitive 17): 3.match has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 4, boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"778c8fad8bed198978ca89505a8cbfebe5eeb0c3eb273413fb0cf1e266f77608"}},{"ruleId":"D2","level":"warning","message":{"text":"TypedInFilter.\u003Cinit\u003E (cognitive 17): TypedInFilter.\u003Cinit\u003E has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 3, loops 3 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/TypedInFilter.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"b10a6077ed32af4fb6c69465065130288d822f2c3c22c965b6228cf42e434c16"}},{"ruleId":"D2","level":"warning","message":{"text":"ImmutableLookupExtractor.unapplyInternal (cognitive 17): ImmutableLookupExtractor.unapplyInternal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 4, loops 4 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/lookup/ImmutableLookupMap.java"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdab0389e3ca265308b91e707e809c38a6ea3cd80624ee0b97bef0bc3896d873"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByQuery.compareDims (cognitive 17): GroupByQuery.compareDims has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, ternaries 3, boolean chains 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java"},"region":{"startLine":747}}}],"partialFingerprints":{"codehealthFindingId/v1":"462f803cd684d5ab09757b695be799bbe241e755a66226d43ece5c879e83cc4d"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupingEngine.getCardinalityForArrayAggregation (cognitive 17): GroupingEngine.getCardinalityForArrayAggregation has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java"},"region":{"startLine":945}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d18cea60a465a43b7a0b4573d7993e2cfe120dd3777ccb806adc26eaa54eb5"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentAnalyzer.analyzeComplexColumn (cognitive 17): SegmentAnalyzer.analyzeComplexColumn has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, ternaries 4, loops 3, boolean chains 2, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b5d3273e1981f6846440c0b757d53f8553648b1049ca2ee6e7c883a1935a687"}},{"ruleId":"D2","level":"warning","message":{"text":"StringTopNColumnAggregatesProcessor.scanAndAggregateWithCardinalityKnown (cognitive 17): StringTopNColumnAggregatesProcessor.scanAndAggregateWithCardinalityKnown has cognitive complexity 17 (threshold 15). Drivers by points: loops 9, if/else 8 (nesting depth added 11). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/types/StringTopNColumnAggregatesProcessor.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac53c33978d5fa104b1fa1d363795a3db2d45bec63db4461036019e1f27fcb2e"}},{"ruleId":"D2","level":"warning","message":{"text":"CursorGranularizer.advanceToBucket (cognitive 17): CursorGranularizer.advanceToBucket has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 4, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/CursorGranularizer.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f63047ef53c4b509d73e8eff4c5999da4e5ab35edd712264e879384ce68b65"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataStorageConnectorConfig.equals (cognitive 17): MetadataStorageConnectorConfig.equals has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 9, if/else 8 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/metadata/MetadataStorageConnectorConfig.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"39992a3db771770f6c2e700ae72b03003dd3223d66f5fcb08e449a261f0f9c6a"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayTypeStrategy.equals (cognitive 17): ArrayTypeStrategy.equals has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 4, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/column/TypeStrategies.java"},"region":{"startLine":680}}}],"partialFingerprints":{"codehealthFindingId/v1":"604c7a6c0b5440b893df31f3e94e78872b696757b24e8b64b5f6985003d682ce"}},{"ruleId":"D2","level":"warning","message":{"text":"FixedIndexed.getRange (cognitive 17): FixedIndexed.getRange has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, ternaries 7 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/FixedIndexed.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed43b9abec1b4cbfca99dfab55e3ff6f0d7c993383ab33e7ddec45ef741c9164"}},{"ruleId":"D2","level":"warning","message":{"text":"HiveCnfHelper.convertToCnfWithLimit (cognitive 17): HiveCnfHelper.convertToCnfWithLimit has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/cnf/HiveCnfHelper.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba792e7037afa2119d1eb308dd41df57f134986a65be7492a0a5a33960c82d5"}},{"ruleId":"D2","level":"warning","message":{"text":"HiveCnfHelper.generateAllCombinations (cognitive 17): HiveCnfHelper.generateAllCombinations has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 7 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/filter/cnf/HiveCnfHelper.java"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"7377e4ffc34cb9d49b0efad20f931c3ae1d624c8ac3ed644bb0b92b1f24abbd9"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexedUtf8LexicographicalRangeIndexes.getRange (cognitive 17): IndexedUtf8LexicographicalRangeIndexes.getRange has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, ternaries 7 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/index/IndexedUtf8LexicographicalRangeIndexes.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"816b26b838e97c54326cfa97fe9ba66125b4efa6f266d7cf298c2271837e6ac0"}},{"ruleId":"D2","level":"warning","message":{"text":"1.findNext (cognitive 17): 1.findNext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 4, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldColumnIndexSupplier.java"},"region":{"startLine":1497}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7710f45acb7fba925b206b60b5fbdffad4b45f22311b001c10de8058075247"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedPathFinder.toNormalizedJsonPath (cognitive 17): NestedPathFinder.toNormalizedJsonPath has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedPathFinder.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee7ca6e4b0264661893d7247281f562530c0f2d65804bc8be47a7c305c9af1ed"}},{"ruleId":"D2","level":"warning","message":{"text":"Projections.findMatchingProjection (cognitive 17): Projections.findMatchingProjection has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"31661261593cb4ff92030651a152ab476d1bf17b56ff90fb52ac36ee259465e8"}},{"ruleId":"D2","level":"warning","message":{"text":"ListFilteredLexicographicalRangeIndexes.getRange (cognitive 17): ListFilteredLexicographicalRangeIndexes.getRange has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, ternaries 7 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/ListFilteredVirtualColumn.java"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"f43b5f3f27785f9018e4ade2effeea7e4a77e6effad53df072707cb6403583b2"}},{"ruleId":"D2","level":"warning","message":{"text":"LazilyAllocatingHeapWriteOutBytes.ensureBytes (cognitive 17): LazilyAllocatingHeapWriteOutBytes.ensureBytes has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, match/switch 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/writeout/LazilyAllocatingHeapWriteOutBytes.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2b01dd099aa7e6e9b2cc6bf5887ebf59461ce10e5931c121ede782e0e92965f"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamAppenderatorDriver.startJob (cognitive 17): StreamAppenderatorDriver.startJob has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 6, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/StreamAppenderatorDriver.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"0398a4911f09ba36d475f040442cc8dd3e4cd658512ec7762db3e7917b5ed5c6"}},{"ruleId":"D2","level":"warning","message":{"text":"FireHydrant.swapSegment (cognitive 17): FireHydrant.swapSegment has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 3, ternaries 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/FireHydrant.java"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dbaa8fcbd78ccb16ee5201f669a29376e45ebefa9c61ea4edb94b989275f108"}},{"ruleId":"D2","level":"warning","message":{"text":"S3InputSourceDefn.convertArgsToSourceMap (cognitive 17): S3InputSourceDefn.convertArgsToSourceMap has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 6, loops 2 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/s3-extensions/src/main/java/org/apache/druid/catalog/model/table/S3InputSourceDefn.java"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ecb15c1be2c6cf7a933f9d1aa3196a7b34809a170bba477dd896a8c24769685"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQueryKit.makeQueryDefinition (cognitive 17): ScanQueryKit.makeQueryDefinition has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, ternaries 4, boolean chains 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryKit.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a49608e32c4980987a522f34471c39a5261b252fe278120ccd7a976660bbb1d"}},{"ruleId":"D2","level":"warning","message":{"text":"AppendableMemory.reserveAdditional (cognitive 17): AppendableMemory.reserveAdditional has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/allocation/AppendableMemory.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf47a9570a2ad52dea7881337aa2f4d5830fabc7e5059c4a3a4dbecb41b40b0"}},{"ruleId":"D2","level":"warning","message":{"text":"StringFieldWriter.writeUtf8ByteBuffers (cognitive 17): StringFieldWriter.writeUtf8ByteBuffers has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/field/StringFieldWriter.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e89f700bb3d358a94b67ccd77615fcac5b4d3843fae85fa79963229500818a0"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameFile.open (cognitive 17): FrameFile.open has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, error handling 1, ternaries 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/file/FrameFile.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"e302561acc4b502ff89c44458fe92fb49bb814defae699fabd2d442df1ef02ea"}},{"ruleId":"D2","level":"warning","message":{"text":"SuperSorter.setAllDoneIfPossible (cognitive 17): SuperSorter.setAllDoneIfPossible has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, loops 5, boolean chains 3, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/SuperSorter.java"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3316c7bfe9f456a2e5f2f78823ce26a5069cfebc8eb8b5b33805e751c4c8b41"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorMathBivariateDoubleProcessorFactory.asProcessor (cognitive 17): VectorMathBivariateDoubleProcessorFactory.asProcessor has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/VectorMathBivariateDoubleProcessorFactory.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2f9cec1e2dade1ce3d29e525f7aa0ecfbc06354339c5f549678f4287c4ce9a6"}},{"ruleId":"D2","level":"warning","message":{"text":"ServiceLocation.fromUri (cognitive 17): ServiceLocation.fromUri has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, ternaries 5, boolean chains 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/rpc/ServiceLocation.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"c75805ffb53cd0c25debd5ef5b69ed7de057c1145528d9e74ccac4be3cd7d329"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexedTableJoinCursorBenchmark.processRowsDimensionSelectors (cognitive 16): IndexedTableJoinCursorBenchmark.processRowsDimensionSelectors has cognitive complexity 16 (threshold 15). Drivers by points: loops 11, if/else 5 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/test/java/org/apache/druid/benchmark/IndexedTableJoinCursorBenchmark.java"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f7017a27bad9dd09b3cfa5c78ccecbc0abd85f6c11470efebb870f43d123ab"}},{"ruleId":"D2","level":"warning","message":{"text":"CloneHistoricals.createCurrentStatusMap (cognitive 16): CloneHistoricals.createCurrentStatusMap has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/duty/CloneHistoricals.java"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b9cb930ddb4849b2f09dd77b869177d4dd107a2032c796aedde91baf300621"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpLoadQueuePeon.doSegmentManagement (cognitive 16): HttpLoadQueuePeon.doSegmentManagement has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 3, error handling 1, loops 1 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/HttpLoadQueuePeon.java"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cde0897f68aff1038f07de5c29cd7269ec4c52f7c90be7aa25546c5f924f838"}},{"ruleId":"D2","level":"warning","message":{"text":"StrategicSegmentAssigner.broadcastSegment (cognitive 16): StrategicSegmentAssigner.broadcastSegment has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, ternaries 6, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aeb24d268305ac7fc90dbecbf69e03c7357ed6c82ca7b8f3bda5e8732d0e894"}},{"ruleId":"D2","level":"warning","message":{"text":"UriCacheGenerator.generateCache (cognitive 16): UriCacheGenerator.generateCache has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 4, ternaries 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/UriCacheGenerator.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"917cc5545c59f26e9d4bb5d1c5398f5cfc53025042cc0ad533f8ce0896862ccc"}},{"ruleId":"D2","level":"warning","message":{"text":"LookupLoadingSpec.createFromContext (cognitive 16): LookupLoadingSpec.createFromContext has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 5, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/lookup/cache/LookupLoadingSpec.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"4da7efa54db1d47ca816ec75164ec3f16c11ccc85825efd1132d0e6e32407e88"}},{"ruleId":"D2","level":"warning","message":{"text":"BroadcastDatasourceLoadingSpec.createFromContext (cognitive 16): BroadcastDatasourceLoadingSpec.createFromContext has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 5, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordination/BroadcastDatasourceLoadingSpec.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea2d0c5fc431db1f05b4878c04ce4736d649655ec978d5aa81bdba82de0bee6c"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentManager.dropSegment (cognitive 16): SegmentManager.dropSegment has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, ternaries 4, error handling 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/SegmentManager.java"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"06a302cf53b303a1f546b007e06a117d2268e72e26d19704dad516329e72f28c"}},{"ruleId":"D2","level":"warning","message":{"text":"MetricsEmittingProxyResponseListener.onFailure (cognitive 16): MetricsEmittingProxyResponseListener.onFailure has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, error handling 4, ternaries 4, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":864}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec0612c846df0d272569824b2e9f356134d9796d15666300c251f1f9c0f2f651"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentsTable.scan (cognitive 16): SegmentsTable.scan has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 10, if/else 6 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"13307b31e208b31467f0ef0974a6579f36b8da7ad88b6590c78a2ae23a893372"}},{"ruleId":"D2","level":"warning","message":{"text":"Bounds.toRange (cognitive 16): Bounds.toRange has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 13, if/else 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/Bounds.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"fac7b59fe1e923e98b17f79b1b2fa72efc3aec688e323ed132502c72c367b8b3"}},{"ruleId":"D2","level":"warning","message":{"text":"Ranges.toRange (cognitive 16): Ranges.toRange has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 13, if/else 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/Ranges.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"d97b6271fb20dd3e15886ca147106ab58352544be99941c1a6a928a3257b4a8e"}},{"ruleId":"D2","level":"warning","message":{"text":"Ranges.toRange (cognitive 16): Ranges.toRange has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 13, if/else 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/Ranges.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f205198891e4164aaec050b9bdb389fe1d783b3f1e0a8479f85d7fc190c1a51"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidSqlParser.getUnexpectedTokenString (cognitive 16): DruidSqlParser.getUnexpectedTokenString has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 3, match/switch 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParser.java"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1a2689d4b1d364e83859c2bf28fed622b26c3de4bace04db400ddcbe9bae559"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidSqlParser.translateParseException (cognitive 16): DruidSqlParser.translateParseException has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, loops 7, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParser.java"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"8715cee2bf04851ab1520bd1e3e3b2e1d7f558cd19ede4bd8ba72c51214dbd39"}},{"ruleId":"D2","level":"warning","message":{"text":"DruidSqlValidator.getNthExpr (cognitive 16): DruidSqlValidator.getNthExpr has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"81f42c1e7444e6b5056c6674b70023b96820040b5657aef6eba09342a0ee13d8"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryHandler.plan (cognitive 16): QueryHandler.plan has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, error handling 3, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/QueryHandler.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"b516872658852da5427fae1aca28d39c43c5d39c9d636dd6d647055457fe837a"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlResourceCollectorShuttle.visit (cognitive 16): SqlResourceCollectorShuttle.visit has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/SqlResourceCollectorShuttle.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7d06fd79bc761f7d1c91214b8f102cba04c8e82f9c21725abd1d230899fe32d"}},{"ruleId":"D2","level":"warning","message":{"text":"OvershadowableManager.checkVisibleIsFullyAvailableAndTryToMoveOvershadowedToVisible (cognitive 16): OvershadowableManager.checkVisibleIsFullyAvailableAndTryToMoveOvershadowedToVisible has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"597607f47b3d0ec7b4f8391549fc180eda353f109115fa427a69d9e1ae25d4dd"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionedIntervalTimeline.remove (cognitive 16): VersionedIntervalTimeline.remove has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 5 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/VersionedIntervalTimeline.java"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"a94a246f367bc8cd7e84af8d08cca0d1ef61c694a1c947c54b724c3873849aed"}},{"ruleId":"D2","level":"warning","message":{"text":"SeekableStreamSupervisor.getCurrentStats (cognitive 16): SeekableStreamSupervisor.getCurrentStats has cognitive complexity 16 (threshold 15). Drivers by points: loops 10, if/else 6 (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1785}}}],"partialFingerprints":{"codehealthFindingId/v1":"55bca9d72a2a1a2f5a4c72420878e0674902e94a1ad494d259cd88ebd6a2ee1d"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseRestorableTaskRunner.restore (cognitive 16): BaseRestorableTaskRunner.restore has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 4, boolean chains 1, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/BaseRestorableTaskRunner.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"f931e43a3c2b77ed4f3ac2d27d5ec5e1b66088e29f9dcc6d38b2359773a36802"}},{"ruleId":"D2","level":"warning","message":{"text":"6590.call (cognitive 16): 6590.call has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, error handling 5, boolean chains 2, ternaries 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ThreadingTaskRunner.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dc4838077316d3e2302909abfb6bd11922ab5577766493d8054adf50f13ee71"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialDimensionDistributionTask.determineDistribution (cognitive 16): PartialDimensionDistributionTask.determineDistribution has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 3, boolean chains 2, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionDistributionTask.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"c07139ec5d7b74b5613cf35977e52a96840a3cd34519cc11d6c2895abb76878d"}},{"ruleId":"D2","level":"warning","message":{"text":"ReindexingConfigBuilder.applyToWithDetails (cognitive 16): ReindexingConfigBuilder.applyToWithDetails has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, ternaries 4, loops 2, boolean chains 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/compact/ReindexingConfigBuilder.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d9140bfa678f40133864cc6327533c13f1271b2535e50d1d356dcffd6b8750d"}},{"ruleId":"D2","level":"warning","message":{"text":"RetryingInputStream.openWithRetry (cognitive 16): RetryingInputStream.openWithRetry has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, error handling 6, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/data/input/impl/RetryingInputStream.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"69e6d2a0473e9705e74473fdd7aac107789d196110ab8476960f788311e96ef1"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphiteEmitterConfig.equals (cognitive 16): GraphiteEmitterConfig.equals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, ternaries 4 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/GraphiteEmitterConfig.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ade6bab4d78177f67ad786e53c7fedb835a7b9f2e1c0811fa4e3e78b38fe7c5"}},{"ruleId":"D2","level":"warning","message":{"text":"PrometheusEmitter.start (cognitive 16): PrometheusEmitter.start has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, error handling 3, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/prometheus-emitter/src/main/java/org/apache/druid/emitter/prometheus/PrometheusEmitter.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"353ca2848aac7b6514d226464ea8edb3e471acdb527fd6761eb95688a94c654b"}},{"ruleId":"D2","level":"warning","message":{"text":"PrometheusEmitterConfig.\u003Cinit\u003E (cognitive 16): PrometheusEmitterConfig.\u003Cinit\u003E has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, ternaries 3, boolean chains 1, loops 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/prometheus-emitter/src/main/java/org/apache/druid/emitter/prometheus/PrometheusEmitterConfig.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"eae89a8c40396150236180c362aa43fdef99db128b0d82f5ebfdd11a70d2ed1f"}},{"ruleId":"D2","level":"warning","message":{"text":"TDigestGenerateSketchSqlAggregator.toDruidAggregation (cognitive 16): TDigestGenerateSketchSqlAggregator.toDruidAggregation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestGenerateSketchSqlAggregator.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"725eb4746bade43d90707aaba11c7e61d5e8cfecc7cd7dde065eba88f38dc528"}},{"ruleId":"D2","level":"warning","message":{"text":"HllSketchBuildAggregatorFactory.formulateSketchUpdater (cognitive 16): HllSketchBuildAggregatorFactory.formulateSketchUpdater has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, match/switch 2, boolean chains 1, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchBuildAggregatorFactory.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"8592306fe07e92eb3d9dc14fb4797825dc9b9b190f319b2d9d51bc9cbb9f1553"}},{"ruleId":"D2","level":"warning","message":{"text":"ApproximateHistogram.sum (cognitive 16): ApproximateHistogram.sum has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, ternaries 6, boolean chains 2, loops 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1458}}}],"partialFingerprints":{"codehealthFindingId/v1":"08798230e19ce11f119acb4aad02fdc8ab8c65a956d494604fe30e8ff9ae1939"}},{"ruleId":"D2","level":"warning","message":{"text":"ApproximateHistogram.toBytesCompact (cognitive 16): ApproximateHistogram.toBytesCompact has cognitive complexity 16 (threshold 15). Drivers by points: loops 10, if/else 6 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1247}}}],"partialFingerprints":{"codehealthFindingId/v1":"40789a708454c6c2efd8a4345ae2c8529d492551d77fb5bc9c2dff1f000857a5"}},{"ruleId":"D2","level":"warning","message":{"text":"1.extractValue (cognitive 16): 1.extractValue has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramFoldingSerde.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8dde6554217690c3850c70360225b382ff45839953967e5718040f01cb1d572"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericFirstAggregator.aggregate (cognitive 16): NumericFirstAggregator.aggregate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/NumericFirstAggregator.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f20d096d92ceade299b253c5f3fe14cba06ef887cf37751fa2e111db0232457"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericFirstBufferAggregator.aggregate (cognitive 16): NumericFirstBufferAggregator.aggregate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/NumericFirstBufferAggregator.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"22bad898da76131be4562ce38c6e88ec85809833459838bad6294886c8346953"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericLastAggregator.aggregate (cognitive 16): NumericLastAggregator.aggregate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/NumericLastAggregator.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d0109789b6ef080bef3bceb748b55796b1b2f4b24b637586357c78ff931f56f"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericLastBufferAggregator.aggregate (cognitive 16): NumericLastBufferAggregator.aggregate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/NumericLastBufferAggregator.java"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbc1431bae36da0cdee61bf711722576f7d10f39bda6784aa84f9c545963bab7"}},{"ruleId":"D2","level":"warning","message":{"text":"NullableNumericVectorAggregator.aggregate (cognitive 16): NullableNumericVectorAggregator.aggregate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/NullableNumericVectorAggregator.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2718189ebb410798dd26185c90f5d8d9971241e525406d12afe25fe394f05cd"}},{"ruleId":"D2","level":"warning","message":{"text":"RowBucketIterator.next (cognitive 16): RowBucketIterator.next has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/RowBucketIterable.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"b18fef8af6395dfe6ee0cf86aef3c2bc041e710a15472268ea35c9de19b05b3e"}},{"ruleId":"D2","level":"warning","message":{"text":"4.match (cognitive 16): 4.match has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"9263964716380b63b4bd76ae0298691fc441bc6b2c3875e843991047b64667a3"}},{"ruleId":"D2","level":"warning","message":{"text":"5.match (cognitive 16): 5.match has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"4262b108cde1ab6a4f375d9edbc20b37afd4a3cb0b7d3366d5cf7dd4dd65c540"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundDimFilter.getDimensionRangeSet (cognitive 16): BoundDimFilter.getDimensionRangeSet has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 11, if/else 4, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/BoundDimFilter.java"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e3bfa73a94ef43902500efef57a8c479372a9004d06283d00f3f732cbaa39f"}},{"ruleId":"D2","level":"warning","message":{"text":"RangeFilter.getBitmapColumnIndex (cognitive 16): RangeFilter.getBitmapColumnIndex has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, ternaries 6 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b29f60074b4847f3b20034d9c8139863e46902015be7f670d01356de30bc6f3"}},{"ruleId":"D2","level":"warning","message":{"text":"VectorGroupByEngineIterator.hasNext (cognitive 16): VectorGroupByEngineIterator.hasNext has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 4, loops 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/VectorGroupByEngine.java"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c96d81ff70c68ca018c256ab3498e372f4c46136137ccc472e7781dfb3ea3e"}},{"ruleId":"D2","level":"warning","message":{"text":"ByteBufferHashTable.adjustTableWhenFull (cognitive 16): ByteBufferHashTable.adjustTableWhenFull has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferHashTable.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"c68e70b47c7e6538c9d51c643107d4819a993b9a469155119666a509edbfaca3"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultLimitSpec.dimensionOrdering (cognitive 16): DefaultLimitSpec.dimensionOrdering has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, ternaries 2 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/orderby/DefaultLimitSpec.java"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"23ec5c764ed4f3344b9c305b4a450d382013daf64a4bf10b9b9f78517046724b"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQueryLimitRowIterator.next (cognitive 16): ScanQueryLimitRowIterator.next has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6, ternaries 6, boolean chains 2, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/scan/ScanQueryLimitRowIterator.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f974964cf42f42168874e850786a92acdd0ea3be59ee3cc047bd578b32fd24a"}},{"ruleId":"D2","level":"warning","message":{"text":"TopNBinaryFn.apply (cognitive 16): TopNBinaryFn.apply has cognitive complexity 16 (threshold 15). Drivers by points: loops 9, if/else 7 (nesting depth added 5). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/TopNBinaryFn.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"b161f05461869b4b32c6e9f0383c85e54c2e1812a1df7549be63909cf1047535"}},{"ruleId":"D2","level":"warning","message":{"text":"CoordinatorBasicAuthorizerMetadataStorageUpdater.initSuperUsersAndGroupMapping (cognitive 16): CoordinatorBasicAuthorizerMetadataStorageUpdater.initSuperUsersAndGroupMapping has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, boolean chains 5, ternaries 4 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/db/updater/CoordinatorBasicAuthorizerMetadataStorageUpdater.java"},"region":{"startLine":1141}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c8c9e82e446d139c039f1ecc64ef5f29c76ce374f6ee9790eb89d20622cb3ba"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlSegmentsMetadataQuery.buildSegmentsTableQuery (cognitive 16): SqlSegmentsMetadataQuery.buildSegmentsTableQuery has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, ternaries 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/SqlSegmentsMetadataQuery.java"},"region":{"startLine":1610}}}],"partialFingerprints":{"codehealthFindingId/v1":"611b56f07bfd06c05442f94a70c29bb07580e0cb5824f6c94a0e4c200b671e78"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlSegmentsMetadataQuery.markSegmentsUnused (cognitive 16): SqlSegmentsMetadataQuery.markSegmentsUnused has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/SqlSegmentsMetadataQuery.java"},"region":{"startLine":812}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f7a3615c88cef0f22ea81b6e90047d2535b7129c7a69b7fcbcb0d68fff6afde"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiValueStringVectorObjectSelector.getObjectVector (cognitive 16): MultiValueStringVectorObjectSelector.getObjectVector has cognitive complexity 16 (threshold 15). Drivers by points: loops 9, if/else 7 (nesting depth added 6). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/column/StringUtf8DictionaryEncodedColumn.java"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"910903a71c2450699cc04ae2cac11bc409925ab63a41956a9ea940a34ded981b"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentFileBuilderV10.close (cognitive 16): SegmentFileBuilderV10.close has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6, loops 4, boolean chains 3, ternaries 3 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/file/SegmentFileBuilderV10.java"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b8388785936a01e340e0348730127e0b81059df352104aa6e7dc301721f7cf8"}},{"ruleId":"D2","level":"warning","message":{"text":"LookupJoinMatcher.matchCondition (cognitive 16): LookupJoinMatcher.matchCondition has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/lookup/LookupJoinMatcher.java"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"3db4fa4ea3348ae35b65e299332abb5517a4c8f4c2ada152ac2fbda7687d1e89"}},{"ruleId":"D2","level":"warning","message":{"text":"LookupJoinable.getCorrelatedColumnValues (cognitive 16): LookupJoinable.getCorrelatedColumnValues has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/lookup/LookupJoinable.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"925316f1406fe9d9ba68e7ac749ee9fd261d8e1ccedf0964c49737501895cccf"}},{"ruleId":"D2","level":"warning","message":{"text":"BroadcastSegmentIndexedTable.\u003Cinit\u003E (cognitive 16): BroadcastSegmentIndexedTable.\u003Cinit\u003E has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 4, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/table/BroadcastSegmentIndexedTable.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f111a3a99d2f25c8f10bef7793566484402bc4710c09ff94b260bc162002762"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameBasedIndexedTable.\u003Cinit\u003E (cognitive 16): FrameBasedIndexedTable.\u003Cinit\u003E has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 5, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/table/FrameBasedIndexedTable.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e1e63e1d4f5136242ede87d8ac735a1ef32cf77912504d5aaffbc5706a8268a"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinableFactoryWrapper.convertJoinsToFilters (cognitive 16): JoinableFactoryWrapper.convertJoinsToFilters has cognitive complexity 16 (threshold 15). Drivers by points: loops 9, if/else 6, boolean chains 1 (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/JoinableFactoryWrapper.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"47f5153577d26a7f0d90f40836bb1e6199ab77ef0aa920ee70a2e94fae9e19ff"}},{"ruleId":"D2","level":"warning","message":{"text":"SegmentLocalCacheManager.load (cognitive 16): SegmentLocalCacheManager.load has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1349}}}],"partialFingerprints":{"codehealthFindingId/v1":"9714244cbaa0f82ac682068428004acc8575b79ba776cfb69f185f52ea19ef69"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedDataColumnSupplier.read (cognitive 16): NestedDataColumnSupplier.read has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, error handling 2, ternaries 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSupplier.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3ca80478f1439128a6ab90ce6ed0b876a9e0a1f5597f25fc982124910b8625f"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedVariantIndexes.getIndexes (cognitive 16): NestedVariantIndexes.getIndexes has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldColumnIndexSupplier.java"},"region":{"startLine":1290}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f484a088631fc36249d9b861d384554b801e036f671d6c7ac5c70ad5adb8f23"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedPathArrayElement.find (cognitive 16): NestedPathArrayElement.find has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedPathArrayElement.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccdc81beef78f1f189b00fb743c73e7706b89abc4d32b920cf13b1b63f76a052"}},{"ruleId":"D2","level":"warning","message":{"text":"DoubleValueSetIndexes.forSortedValues (cognitive 16): DoubleValueSetIndexes.forSortedValues has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, ternaries 6, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/ScalarDoubleColumnAndIndexSupplier.java"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff5dc91838c7710ac29d8ce2d1cffec002b717240117458107396cce2119cc6"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSegmentMetadataCache.addSegment (cognitive 16): AbstractSegmentMetadataCache.addSegment has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, ternaries 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/AbstractSegmentMetadataCache.java"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff68a7e54fbd93cef29064be55277e61cb7a95f46d02054b41fed26ee7c4a060"}},{"ruleId":"D2","level":"warning","message":{"text":"Metadata.mergeOrderings (cognitive 16): Metadata.mergeOrderings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/Metadata.java"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f7f771937fac45db7b47b6e880fc7ebc0e54d7711e8674fc5c0ec418806a5b"}},{"ruleId":"D2","level":"warning","message":{"text":"MSQWorkerTaskLauncher.mainLoop (cognitive 16): MSQWorkerTaskLauncher.mainLoop has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, error handling 3, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQWorkerTaskLauncher.java"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01a9d43d2acc23dc9ad18de6f8cf3aef1e449315029c188d6dc5e55e1d944ac"}},{"ruleId":"D2","level":"warning","message":{"text":"ControllerStageTracker.setResultsCompleteForWorker (cognitive 16): ControllerStageTracker.setResultsCompleteForWorker has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, ternaries 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"b846f3c4a2058117b650103099a25ed14d0f9b07f67be748b3856af60fae7b9a"}},{"ruleId":"D2","level":"warning","message":{"text":"SortMergeJoinStageProcessor.collectAndReadPartitions (cognitive 16): SortMergeJoinStageProcessor.collectAndReadPartitions has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 7 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/common/SortMergeJoinStageProcessor.java"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"62d4242134f60b5727cea99f2b1b244bbb605a015c53e954a85717d478a60fbc"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupByPreShuffleFrameProcessor.runWithSegment (cognitive 16): GroupByPreShuffleFrameProcessor.runWithSegment has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"4626a4b5404e606b13e10e4eb3db3f18fe47b3d81109db61888fddd8f0019ee3"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanQueryFrameProcessor.runWithDataServerQuery (cognitive 16): ScanQueryFrameProcessor.runWithDataServerQuery has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"c676aabd12f33260bbe9fe9152a9b8d9249b3a0390ceb148325bf5b7b791072b"}},{"ruleId":"D2","level":"warning","message":{"text":"CoordinatorCustomDutyGroupsProvider.get (cognitive 16): CoordinatorCustomDutyGroupsProvider.get has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 3, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/cli/CliCoordinator.java"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ed19c4238af87e3477ff5296726093e2edc726239614394deb9e7161bf97407"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSet.maxLiteralLengthModulus (cognitive 16): ConciseSet.maxLiteralLengthModulus has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 11, if/else 5 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"5744fc393f5c01a2db884500248746f27711a193cd8125d90a330e621ae03277"}},{"ruleId":"D2","level":"warning","message":{"text":"ConciseSetUtils.maxLiteralLengthModulus (cognitive 16): ConciseSetUtils.maxLiteralLengthModulus has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 11, if/else 5 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSetUtils.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bd9ad2366aa734e5045e7ca17beb88ca6a58ee03f70d6317522128228d6b43b"}},{"ruleId":"D2","level":"warning","message":{"text":"RetryUtils.retry (cognitive 16): RetryUtils.retry has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, error handling 2, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/RetryUtils.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5f25059e2b41e70d95d1feb2f50041d4a6a21a03e01ecd2ab8f0874da002b5a"}},{"ruleId":"D2","level":"warning","message":{"text":"IfDoubleVectorProcessor.evalVector (cognitive 16): IfDoubleVectorProcessor.evalVector has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 3, boolean chains 2 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/IfDoubleVectorProcessor.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5064f094f84991bd6e359a0ebf996d2a49a178cf58d5b5aa5878021e56a52be"}},{"ruleId":"D2","level":"warning","message":{"text":"IfLongVectorProcessor.evalVector (cognitive 16): IfLongVectorProcessor.evalVector has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 3, boolean chains 2 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/IfLongVectorProcessor.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c8a9100a4139c87ac057b16ebfd82a2207b70dc22f4a1592c072deefb969a7"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayExpr.stringify (cognitive 16): ArrayExpr.stringify has cognitive complexity 16 (threshold 15). Drivers by points: loops 9, if/else 6, ternaries 1 (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ConstantExpr.java"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc500a94fc724028286705383dccca4bf5c639e5e3269dbfd1a232294feb3e2"}},{"ruleId":"D2","level":"warning","message":{"text":"StringExprEval.castTo (cognitive 16): StringExprEval.castTo has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, ternaries 7, match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":1112}}}],"partialFingerprints":{"codehealthFindingId/v1":"e91f9b92828242c90ed5dda1d2abb2d3dff440bcd2542b1ae9a704f757c012fe"}},{"ruleId":"D2","level":"warning","message":{"text":"7909.handleRedirect (cognitive 16): 7909.handleRedirect has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/rpc/ServiceClientImpl.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a5b722cbaca13adae72a736df8c85fa40f42b601f664c3d24bfd62ab836f52"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: supervisor/SeekableStreamSupervisor.java: FileTooLong \u2014 3240 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: SeekableStreamSupervisor (159-5655). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a44d77923f46f54ea738624c2b887068cab70fe6223df74450937552a5b00426"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expr/Function.java: FileTooLong \u2014 2435 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: Function (75-4790). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/Function.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2d9eea7416d006cb96f68e8896579e300b7485752788e48ae4dfe185c539610"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SeekableStreamSupervisor: TooManyMethods \u2014 144 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"78587f5c08e4f3e53797867d10e5e3184a2fc1eeab1dd70eba61e47691f4b8d8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: exec/ControllerImpl.java: FileTooLong \u2014 1859 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a5dc826d2f5ddc6039e13ec41c2909d050a85e5f37a9b5bef8e2c64b05841c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metadata/IndexerSQLMetadataStorageCoordinator.java: FileTooLong \u2014 1796 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: IndexerSQLMetadataStorageCoordinator (103-2905). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"006602fb67db8fe8bbe62e84ebf77564d36ebc6ad5c82ad766cef2f8a2340c7e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: QueryContext: TooManyMethods \u2014 97 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/QueryContext.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b32cd6b8a784f9812b3fea9eeba1e804010f91b519d73ce617debd6f24eb583"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: seekablestream/SeekableStreamIndexTaskRunner.java: FileTooLong \u2014 1410 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: SeekableStreamIndexTaskRunner (150-2384). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cd4e75a26cd74833ae4248c9649b92b98f1e0d8837bb927c38c51817b530928"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: epinephelinae/RowBasedGrouperHelper.java: FileTooLong \u2014 1398 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: RowBasedGrouperHelper (114-2230). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85a67e5c81dac58d5d091d1127540e3e7dc1d89d7d47ef74f3ab6707379c4ba8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SeekableStreamIndexTaskRunner: TooManyMethods \u2014 83 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef1824ef0b86aafb8eb892f21c5d4017aa2d9cc9585c610e30e00ac7aaa82926"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IndexerSQLMetadataStorageCoordinator: TooManyMethods \u2014 83 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"c03c712e3b14efd101029e1b37a803ea4ead3559e7a55f29e5480e3ca1846068"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: loading/SegmentLocalCacheManager.java: FileTooLong \u2014 1283 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: SegmentLocalCacheManager (84-2354). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f226346e529315172ff6584b9f5f7a2ed30e3727d584fa4fd7e13dd121c06c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ParallelIndexSupervisorTask: TooManyMethods \u2014 76 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a02153041b4c2da761ca096352c7b96892c9317defa3cd989cc89a95302b5b6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: parallel/ParallelIndexSupervisorTask.java: FileTooLong \u2014 1253 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: ParallelIndexSupervisorTask (137-2017). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5860a0a4745b12b7f5776a0ef76a35343838f603faaeeafb1e749003367aad84"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metadata/SqlSegmentsMetadataQuery.java: FileTooLong \u2014 1172 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: SqlSegmentsMetadataQuery (84-2083). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/SqlSegmentsMetadataQuery.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"12dcd587b1d9f6a6afb2d2d6f1c2af6e095ae51115d2fdb495825f79e998f78c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: task/IndexTask.java: FileTooLong \u2014 1151 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: IndexTask (130-1705). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"75dae30f8171457849bcedf7de8ed20322fd21d5869d92460a180551889204ce"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: task/CompactionTask.java: FileTooLong \u2014 1146 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: CompactionTask (146-1734). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b475c5e0d6d2fa77be101f49173a86d98d691334902e442e4f2e5ca761fbd338"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hrtr/HttpRemoteTaskRunner.java: FileTooLong \u2014 1146 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: HttpRemoteTaskRunner (126-1881). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6176143a43bcb03476cb8b96a3d7a28c0bce6de9bee5ba603f1925e698bbdf2a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: appenderator/StreamAppenderator.java: FileTooLong \u2014 1144 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: StreamAppenderator (119-1889). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/StreamAppenderator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe6db924bed76073588a3ffd7565cb27a5458e2d455d5c92a7e1ae23ccb8f47e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SqlSegmentsMetadataQuery: TooManyMethods \u2014 67 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/SqlSegmentsMetadataQuery.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dae9b9e3289baf3cdeed032bb60effff89b7c1f5aa907bdc6ed97e10eec0281"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ControllerImpl: TooManyMethods \u2014 66 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d887c06f6cc47bf7686364dbde1dc9944c9611f6e5551a48ef65a3e99a9ce97"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SQLMetadataConnector: TooManyMethods \u2014 66 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/SQLMetadataConnector.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d4edc8bf80a29727c117871db08bbfa6dc8e60a609144487495bc50d9d750b5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: nested/NestedFieldColumnIndexSupplier.java: FileTooLong \u2014 1083 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: NestedFieldColumnIndexSupplier (91-1732). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldColumnIndexSupplier.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68d3725db33152510b951ab656c3319f7c3ccba61812a8ff007edc94b32ad789"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rel/DruidQuery.java: FileTooLong \u2014 1056 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: DruidQuery (126-1741). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3889a353a4bb6d7f9d99a115a729d8acde0d197df0821885edd1b860cfd7de7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultQueryMetrics: TooManyMethods \u2014 62 methods. Most of these members implement query.QueryMetrics (53 of 60 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/DefaultQueryMetrics.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"32143f6d2812c1ffe4662bb39384296b013ce7b4957dcbad4dbadb21ad1d00b5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: overlord/TaskLockbox.java: FileTooLong \u2014 1029 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: TaskLockbox (88-1864). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e018b29b9c7578fc5cb9d5bdac9919d7b09aa579356a0fc8ff968d0f19877a8f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SafeWritableBuffer: TooManyMethods \u2014 61 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/SafeWritableBuffer.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"0de2fbc5e765f8547c2131c0bdc7ec4e9682295aa08ad45985e745a8647ae62b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: virtual/NestedFieldVirtualColumn.java: FileTooLong \u2014 1007 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: NestedFieldVirtualColumn (117-1652). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd4169f6dab0870bb10203893ef0183caf2fd3dd4e043e795e09dab10e9da433"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ApproximateHistogram: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a967150980d6f19c5d39c9e2b767362c43319a47d60e87875e1dfcc445e5953"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IntervalTreeMap: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/IntervalTreeMap.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"64b9e406721359533f322b087ad7461dbc43563db77bce3295a4b3f464bf4148"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HttpRemoteTaskRunner: TooManyMethods \u2014 58 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f67b02c812ffba5ff0db105abe0e368bc67dbfebc4054cb19f200b3294f19c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GroupByQuery: TooManyMethods \u2014 58 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"56c4b12e1d67540aa2e84b2a0b1a79026548af7b02e2f7b1985ca6d7d83aa213"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultSearchQueryMetrics: TooManyMethods \u2014 58 methods. Most of these members implement query.QueryMetrics (54 of 56 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/DefaultSearchQueryMetrics.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"154680563ba50bdf38a549159212ce086cae05a71e96c3c8a471c746e5268274"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: intset/ConciseSet.java: FileTooLong \u2014 961 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: ConciseSet (54-2183). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd4d972aa973a1e466a463bdb1c56dae56345fc9ae72d477b04c9c68ee29c04e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PlannerContext: TooManyMethods \u2014 57 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerContext.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae80be44023b18821221e9e0c4e735518707d9396b4061fa77205500390e2166"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BloomKFilter: TooManyMethods \u2014 55 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7c5d5446c043096af9dfb764c2ca9df141fe145382cf870d4f2438e2a9e589"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataSegment: TooManyMethods \u2014 54 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/DataSegment.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"4faee4aa7a7071f937eccb786525e18d11957c9cf97def65423131c184170c31"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: nested/CompressedNestedDataComplexColumn.java: FileTooLong \u2014 897 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: CompressedNestedDataComplexColumn (114-1369). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2235cff9b60fba0d067385596055a7230bfef63f97c50119d9095536761db13d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CoordinatorBasicAuthorizerMetadataStorageUpdater: TooManyMethods \u2014 53 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/db/updater/CoordinatorBasicAuthorizerMetadataStorageUpdater.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"d026f5295bef558c76d4ffced249b0c8504ea04b4754dff029a63386dd150ed9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: segment/IndexMergerBase.java: FileTooLong \u2014 874 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: IndexMergerBase (76-1239). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerBase.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1334af5e99ba676992b2d87202f75b24b93802dc50c03ba9d5233d155d9f8326"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: histogram/ApproximateHistogram.java: FileTooLong \u2014 873 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: ApproximateHistogram (36-1694). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1a56b1365f7f7507a6621cd96e1a9908be6042ef261a8cd74af8cd48e4ee5b4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IncrementalIndex: TooManyMethods \u2014 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebad60b19eaf52a4be8aff7af05f536247bcd42ee94fd15fddce4b4613f293a0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expr/ExprEval.java: FileTooLong \u2014 864 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: ExprEval (45-1546). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"39d9ddf687a900e3566d4ff501f67280b717574d0de1cda7af03b8cf9fe2fed5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: guava/ParallelMergeCombiningSequence.java: FileTooLong \u2014 858 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: ParallelMergeCombiningSequence (62-1563). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/guava/ParallelMergeCombiningSequence.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3b099baf83afc28c52cbb96c564fdb27dc83c0557ac351878e518dba5d6ae9b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ControllerQueryKernel: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerQueryKernel.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b7fb2bd5d8fdb4336f4a4e8b992f9cce38ce27edb646bbc67f913d0762065c3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SegmentLocalCacheManager: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"67d5483ae95eb81cbde51a0316d4545355a29967c2351a08d1ddaa5f54e65d3d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StreamAppenderator: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/StreamAppenderator.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"6efaa6aaa6b38206034ab659e37860299f68ca449f146de1864f6b9d348d1e69"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: schema/SystemSchema.java: FileTooLong \u2014 850 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: SystemSchema (105-1387). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2571a61e487668dc4dbb6df87221e953904da8415abc4923e17639eb4d542321"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaskToolbox: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolbox.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c131747e73c541dbc411ad28f42b1c23ab8c142d7a0e64b18684b687d66450b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MultiStageQueryContext: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/util/MultiStageQueryContext.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"beb51eab88861b303918b6ee656664a767428ebf5c6ff8bb0af00957a427063d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HeapMemoryDatasourceSegmentCache: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/segment/cache/HeapMemoryDatasourceSegmentCache.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd48ac9c206fdc907b95448e6954b95b6bc3303483ed42e9da40fbc8aef1cadd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: segment/IndexIO.java: FileTooLong \u2014 826 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: IndexIO (104-1235). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexIO.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2923fb56600414863024d788ce439654a21ca40a37aa41c554f6594b33c3835c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metadata/SQLMetadataConnector.java: FileTooLong \u2014 821 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: SQLMetadataConnector (70-1420). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/SQLMetadataConnector.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6d9782d882308ca163fd2fbf5772980842cb47e2966ed9e4b30124541d171e7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HyperLogLogCollector: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/hll/HyperLogLogCollector.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"35c4b939ef7d651cf47186498b786baf9ea8e1edf13fe6d0e07d7f33633e7602"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: appenderator/BatchAppenderator.java: FileTooLong \u2014 792 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: BatchAppenderator (104-1325). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/BatchAppenderator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"823f06f356a0538a91bc50216078205159b58d6cf3e77a5d5cbd920c66ffe4d1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PartialSegmentMetadataCacheEntry: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e1711fa91b8ce1f4b776986c1ad614b6eca79b86e0827a330755639fab43cc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: groupby/GroupByQuery.java: FileTooLong \u2014 780 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: GroupByQuery (89-1356). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f58553b07a28093ffd7ccd3f05592376e7d709857cbec3a939645a03dccffa95"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: updater/CoordinatorBasicAuthorizerMetadataStorageUpdater.java: FileTooLong \u2014 769 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: CoordinatorBasicAuthorizerMetadataStorageUpdater (75-1195). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/db/updater/CoordinatorBasicAuthorizerMetadataStorageUpdater.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9597f63db9c3b7097715ca9dad4138b1a70b808fba707b6e6582329f459d4f43"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FixedBucketsHistogram: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeea639237272ecaa213b548f4a3c2f276225704379c9766d385e194d627d08e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Builder: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolbox.java"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"b753d46212e059e758537612dbd3b0a21a786a21bef77bfc200955f84b963a54"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ConciseSet: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"4381fe5bb62ed0984d804e5e1083105910a11b51a1da100615d92bc54c25b65c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StringUtils: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/StringUtils.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"69d68dc4a2e1cf2734377561317ff9f045c9853ea12af4c87ebbe57e4542ae75"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: incremental/IncrementalIndex.java: FileTooLong \u2014 760 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: IncrementalIndex (112-1374). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndex.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9c1e16bd143cbdd42fa47f369f5a558abe714c87b03a6abfb9685741d503e34"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: filter/RangeFilter.java: FileTooLong \u2014 752 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: RangeFilter (68-1126). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ed51654f9feb4e5889b6fdc41d92ad8c980c27c4d26cb9897eca0b2a0c88061"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaskLockbox: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18df7d6c0e5d71835125e5d6a74cd17ad1566ffa7e3677dd8dbad9027b62e23"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: loading/PartialSegmentMetadataCacheEntry.java: FileTooLong \u2014 734 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: PartialSegmentMetadataCacheEntry (92-1568). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de100e96c991577ac132cf125a0e59a9924f291b3038d03c31caf8ed35a8ed8d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: resources/SqlStatementResource.java: FileTooLong \u2014 721 significant lines (blank, comment-only and punctuation-only lines excluded), about 86% of them inside a single declaration: SqlStatementResource (127-1073). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/sql/resources/SqlStatementResource.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d44dc61a250dc54a81d12c7d0aebdbc9c2c62008c0f86a85ad3909db6595e7f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HeapMemorySegmentMetadataCache: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/segment/cache/HeapMemorySegmentMetadataCache.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"9184bc4c2432190c6eb20659e326631b32a795cbd0b018625a09906c39b0016c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StorageLocation: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/StorageLocation.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e9aaefeed0a7b029d125632bec7b4550ef18720b9682f09e3f47ff050cad335"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ServerHolder: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/ServerHolder.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"4937edfe357621b36d783c7c8437e85809f13534c04f00e7a2cf6a828aaffe94"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/VSizeLongSerde.java: FileTooLong \u2014 714 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: VSizeLongSerde (38-1151). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/VSizeLongSerde.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"32d85559faa646b57de37be4b2eec0d2815ce3ad0f9d9bcb923a11225fdc7556"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: partition/OvershadowableManager.java: FileTooLong \u2014 711 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: OvershadowableManager (72-1356). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c945003985a5f65d3241971d044448027b0f7c0b21fd48f6b3ac271f8a805a3f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: loading/StorageLocation.java: FileTooLong \u2014 710 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: StorageLocation (94-1446). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/StorageLocation.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d866ef173f8913de5ce37dd1e290cf5ecdbc469a0758119f45d25a2d9a7f20c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaskQueue: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskQueue.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"530f1d20427b122dccb379b220dbc669aab0081197f1a335c526d1057346f041"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SafeWritableMemory: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/SafeWritableMemory.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"7795e0157ac86464d3b521da88cc2a730a19999496b505f1dd457d2c56307b25"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PartialSegmentFileMapperV10: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/file/PartialSegmentFileMapperV10.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eea9b47007ffeab7d8a1747173573564a0bfb718c7de09d86eefa9444b04fd6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractSegmentMetadataCache: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/AbstractSegmentMetadataCache.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"79677bdf5c1ec5ac4ff364d4af9b8ca642067b97dcce36e27086f1ae3b042640"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BatchAppenderator: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/BatchAppenderator.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"4344e036f7741b5c36b21fc9848be535e124692fbbaddac9a526495d8135c1ac"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DruidMeta: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"da082151fc013d1c98b5d946b991efdd3f751958d84d61ea485014025271da1f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DruidExpression: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/DruidExpression.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"04462606e71b9258c7d90e61f8c13a3e827a90ff8bcafdcec99c6a4e29b0fdc7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: histogram/FixedBucketsHistogram.java: FileTooLong \u2014 697 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: FixedBucketsHistogram (39-1404). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cc6f2d826119fb1cadc6fb0f5c7bf8db8528af44de46b5f961c3677c934f076"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CascadingReindexingTemplate: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/compact/CascadingReindexingTemplate.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3054074df0751f2b12769a8be185b2ae8e04bc54fd92b57505a9af390d3a675"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExprEval: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ExprEval.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d0356f9abfff9ca2046dc26f1253f94f3060f36132adce5df5770ac83ef11a3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Builder: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java"},"region":{"startLine":946}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a05ef85a2496b8f899947e703fccfe9b41457c30206938e4114cc3422e6a72e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: exec/WorkerImpl.java: FileTooLong \u2014 679 significant lines (blank, comment-only and punctuation-only lines excluded), about 87% of them inside a single declaration: WorkerImpl (117-1306). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d06e6273f6d04cae2b90988228e635eeb84168b8dc632f7842ad343e3e3ed7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: builtin/NestedDataOperatorConversions.java: FileTooLong \u2014 671 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: NestedDataOperatorConversions (79-1063). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ced762897df57f900daefbc569a5ebec3a6359c567ba913f64fb9e72b819a945"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: http/DataSourcesResource.java: FileTooLong \u2014 667 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: DataSourcesResource (108-1020). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"98a37cbb19eca559a62e6195a747463a2747001e8fc353ea183fd1b919e1e669"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractBatchIndexTask: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/AbstractBatchIndexTask.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"09314868f8c58620310a87669c8ff6527f4d3fd71edb9df878ac9818ee2b5b9f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ControllerStageTracker: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"e314cc4711a7773f96e86c528ad74d17df63f19c91ede5cb063a75a89eb4977a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SqlSegmentMetadataTransaction: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/segment/SqlSegmentMetadataTransaction.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"784f6780a898ddafc07810247bf274a66b82e689bd687f2009b8be1ecbbbf3c7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: kinesis/KinesisRecordSupplier.java: FileTooLong \u2014 665 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: KinesisRecordSupplier (100-1126). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f892d8941d56c181dc1f4cd810a79a314e8175e9e253a817256250f16d80f143"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: overlord/TaskQueue.java: FileTooLong \u2014 661 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: TaskQueue (108-1239). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskQueue.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b09ac4638ab71f7307d9d2741d555740ab31c38a94f4b02030cc17d25f36176f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cache/HeapMemorySegmentMetadataCache.java: FileTooLong \u2014 661 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: HeapMemorySegmentMetadataCache (98-1295). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/segment/cache/HeapMemorySegmentMetadataCache.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"04ec0d3a51b499b5fd8ae26ddf2799ec740184aab18947bafe87a953e7d2ad71"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file/PartialSegmentFileMapperV10.java: FileTooLong \u2014 655 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: PartialSegmentFileMapperV10 (99-1309). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/file/PartialSegmentFileMapperV10.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25833689a8d002285a7666abe06f7a8a3729f65df6254c5b03290b340241f1a6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: nested/NestedFieldDictionaryEncodedColumn.java: FileTooLong \u2014 651 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: NestedFieldDictionaryEncodedColumn (77-1063). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/NestedFieldDictionaryEncodedColumn.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f0466acdd038b25b3d3d9d2e543b2a06b99b1282550e66b67518c62dee5f054"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CachedSegmentMetadataTransaction: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/metadata/segment/CachedSegmentMetadataTransaction.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"522740ee38fd38c5d3c9f59854f9fd9dbb2c964277e20ebb19da81a80fadf4c8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/AsyncQueryForwardingServlet.java: FileTooLong \u2014 649 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: AsyncQueryForwardingServlet (89-1016). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1cffb74d9553be60cc6964d1c992ba47faf4bcbf815f333afa400b9622be705"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: topn/PooledTopNAlgorithm.java: FileTooLong \u2014 641 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: PooledTopNAlgorithm (69-972). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/PooledTopNAlgorithm.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"79fdfdcf3007be91480d12fd5af9acc877017e35786cb21ba49d0d7400bf5965"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/ClientQuerySegmentWalker.java: FileTooLong \u2014 639 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: ClientQuerySegmentWalker (100-975). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bef4fcf00be15d0c1029f8a763719fa8d459152df4a435d471619a5e393abc85"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SafeWritableBase: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/data/SafeWritableBase.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"23ff9f45d3a11dab8e666c787497297be8db2498bd8234f3e149c44f6f726f26"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: OvershadowableManager: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d570c6ddbf39fc6cac692b5f51b8b6902563c357f95c5c3214b7a6af85deac9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SegmentGenerationMetrics: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/realtime/SegmentGenerationMetrics.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb4d8b44a088ea1e881a5d65838822af123aad43bf2915ce413936cec6c080f9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: incremental/OnheapIncrementalIndex.java: FileTooLong \u2014 631 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: OnheapIncrementalIndex (84-1082). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/incremental/OnheapIncrementalIndex.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f65ba3348c8584726828138fba139fbde1abd6a4807c5a9454d24a59a613759f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: nested/VariantColumn.java: FileTooLong \u2014 630 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: VariantColumn (84-1027). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/VariantColumn.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"81a966d5a25797b4e6d1d16e01ba1fbf02d25c36684b4baf22b5373f5c548a0d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScanQuery: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/scan/ScanQuery.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecc42b3a68e2ce6b696111f5a80e5bca1a3a7756bab1617402a5aeeea0622e60"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DimensionHandlerUtils: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/DimensionHandlerUtils.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf8c08c210554a6a682e188b580b360bad5758708f572ca0301d37ff64a445a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expression/Expressions.java: FileTooLong \u2014 616 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: Expressions (83-1003). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/Expressions.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"48aebe1a89efdf8e32b8e21cbafe39f1fa8a1104fcec16211bb9096e90292c45"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metadata/SQLMetadataStorageActionHandler.java: FileTooLong \u2014 611 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: SQLMetadataStorageActionHandler (71-970). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/metadata/SQLMetadataStorageActionHandler.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cfffd5a5a0ae805cf14e090005826a02bcbaef981e0dc5313016d7e18792449"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: http/OverlordResource.java: FileTooLong \u2014 610 significant lines (blank, comment-only and punctuation-only lines excluded), about 86% of them inside a single declaration: OverlordResource (109-887). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"538a38eb07e35c4bb931711086da7d1288059f41842a98d5c518b838184196a5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: groupby/GroupingEngine.java: FileTooLong \u2014 606 significant lines (blank, comment-only and punctuation-only lines excluded), about 86% of them inside a single declaration: GroupingEngine (113-1090). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2e48c6ea3996f301c459d54faacdba12d82db479c55f0d8caadf336b52797f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: projections/Projections.java: FileTooLong \u2014 605 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: Projections (76-1093). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e15385b89b7182f37329743e9328d1b3a6a29f1738083ae8729105d97776898"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: controller/ControllerStageTracker.java: FileTooLong \u2014 604 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4240a866075979444d972c3280d5cdd0c1b1da0d9228626b8b59ce9b48547b7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metadata/AbstractSegmentMetadataCache.java: FileTooLong \u2014 603 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: AbstractSegmentMetadataCache (116-1226). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/AbstractSegmentMetadataCache.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f4fd8495296dfdcbb06d6d200347313eb5d948ab9737bc8d671f8ea5beeeae6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: overlord/ForkingTaskRunner.java: FileTooLong \u2014 602 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: ForkingTaskRunner (96-998). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c3133ef5dce47c80320d9451e31914bd3b20998b3ba49a4ac24383d5938bc94"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CoordinatorBasicAuthorizerResourceHandler: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/endpoint/CoordinatorBasicAuthorizerResourceHandler.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"c48b292ddc635aec256571da471fdccd3553d49cbcb07630253ca771a43d2bce"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KafkaSupervisor: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"33866ab17c8da377d23db6bd5d8c6a226e3c436fba92bea4442861d1421038d6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SQLMetadataStorageActionHandler: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/metadata/SQLMetadataStorageActionHandler.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"8339d47e78daea349c2292ff568add53a72d50bfcc1e25bf13d565b32371d8b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HttpPostEmitter: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/emitter/core/HttpPostEmitter.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee0441bbbf281b52c3de933e534d9ea6deaf105e61a4c30bc3355de00b6761f4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PartialQueryableIndex: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/PartialQueryableIndex.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"450bf31c3f93bf22fed83599136c7124ad91f52a7051b7cdc62f39ff6a5f234b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DruidQuery: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf822ce85df5c9d810f4040d65d631753136c13c6f3f4248a78f979d473bb357"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: intset/ImmutableConciseSet.java: FileTooLong \u2014 599 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: ImmutableConciseSet (37-1002). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff8c62e44085897a1e8fef6262e52b41cb0af55c080b06a23713ae74555e5bac"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: task/AbstractBatchIndexTask.java: FileTooLong \u2014 592 significant lines (blank, comment-only and punctuation-only lines excluded), about 85% of them inside a single declaration: AbstractBatchIndexTask (115-1022). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/AbstractBatchIndexTask.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4943e8b7ce50dd5c9e02d572320ab6cba5b5c318b11482a447647b6cd7c4b9fb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/CachingClusteredClient.java: FileTooLong \u2014 588 significant lines (blank, comment-only and punctuation-only lines excluded), about 85% of them inside a single declaration: CachingClusteredClient (117-919). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/client/CachingClusteredClient.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"356acc6fbd68acbe84ed1af6d3742027405dfd20e45020b35601f8879a9a6d7b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Logger: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/common/logger/Logger.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87da07f93afd5d981c79fc319338504be7bfb0467554c2e6db4a23aef8f6392"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RangeFilter: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c73d536d33e8fa54665a305136313fc02fa63bb3d376ddc3ddef485591103f3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CompressedNestedDataComplexColumn: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"8910935f973e807622795150cd307e5e7ebc68202088973c2e60f46aac6ffba4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PartialDruidQuery: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/PartialDruidQuery.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc8427fadae0abf4650dfc4bad801b5255d9f43cc3bc2cb347210db919036dd5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: common/SortMergeJoinFrameProcessor.java: FileTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: SortMergeJoinFrameProcessor (105-1194). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessor.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"abf441991672b30fd79cfa4e9f744c0b3aa2094ab7e362b9facf7a2767d1dc5a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: avatica/DruidMeta.java: FileTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: DruidMeta (75-972). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5113b17243d6b1c5df98675b61b55f7a4dc542a6ea46365a394b9079bd9b2868"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: common/TaskToolbox.java: FileTooLong \u2014 576 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: TaskToolbox (82-949). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolbox.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebbfba2b09d1f61fc9b9304f0e7bb10a5bae92981649f32e99a1d89a8ce03acc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: epinephelinae/GroupByQueryEngine.java: FileTooLong \u2014 576 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: GroupByQueryEngine (87-967). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GroupByQueryEngine.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"02c1fbe11238980ceb0f154ae91f31fca1913ab56c91f338296f08fd724a9159"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: processor/SuperSorter.java: FileTooLong \u2014 574 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: SuperSorter (122-1074). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/frame/processor/SuperSorter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf48d9ae874902874b2fa7ec16028520ce8987cb8a01ca22a33bc3df04001f3f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cli/DumpSegment.java: FileTooLong \u2014 573 significant lines (blank, comment-only and punctuation-only lines excluded), about 83% of them inside a single declaration: DumpSegment (120-787). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/cli/DumpSegment.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"43c1534b4f7bcea20dc353bc0c692610d0b5fba0ffbdaa845b01507297315a6c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: query/Druids.java: FileTooLong \u2014 572 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: Druids (73-1075). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/Druids.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21aac81a25c7a48ff6962b5d0622d49e095b5806cb92335de308c59f465b6d9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IndexTask: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"28435d616147a6f0bfcc5f3a63f76092df358b7c958a7f9c4486fd76891766f3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WorkerTaskManager: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/worker/WorkerTaskManager.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"b97e07ccd06c0c8bafa1fa4066f3700185f622a3429b49b286f364ae5755b8a1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ResponseContext: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/context/ResponseContext.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"4834d1804fe35f0687d5c88ea4481e9eda43c99d1118f5b156200570fec2b5f0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DruidServer: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/client/DruidServer.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2a0b7b00e4e0d0d9ea29377e8e11ac3bb18a31f93f362f69a53736f803a797e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ServerConfig: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/initialization/ServerConfig.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"be0365e8bfd976a8a13e24976aa5edc1bf4d20268131466cb353b7056818f1a1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: indexing/MSQCompactionRunner.java: FileTooLong \u2014 562 significant lines (blank, comment-only and punctuation-only lines excluded), about 85% of them inside a single declaration: MSQCompactionRunner (109-860). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQCompactionRunner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9758fb526e606da59653f2d1547f879baae2268496396eb394e70aa64310fa8b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: segment/PartialQueryableIndex.java: FileTooLong \u2014 554 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: PartialQueryableIndex (86-1042). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/PartialQueryableIndex.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bfcefdd3aa1f2664b1af7278f15aff8abe1d8b35b1321d2edc0c0aa697657cd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KubernetesTaskRunner: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesTaskRunner.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc81bb7387adf613f2dca88cf7099dbd52e9872df92e2566f300050391b7dd5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IndexTuningConfig: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java"},"region":{"startLine":1186}}}],"partialFingerprints":{"codehealthFindingId/v1":"43146f1bad21266e2498da4ebb359d976690359a807fed50edac75a5b5acb22b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: OverlordResource: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"3413c9796c061b78d4984712df769f6ce95fefdc342001b0cf56c0bc33399c3d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SupervisorManager: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorManager.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"d36a44f46ade8ae680c5770c414e91624e8aa897a642659a4f7572f9395b7e51"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WorkerImpl: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb6459111fcf6112a8cc6cb820d2df29519ce0aab4dda5d75978100c12edd41a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MSQWorkerTaskLauncher: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQWorkerTaskLauncher.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed29b10841dec9f2facf3a20ef4277e6710ab4c79c9b1ca8da1018a0393b6a4d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GeneratorColumnSchema: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/generator/GeneratorColumnSchema.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"145010757db00ddfcb9d484e758f8314351caf43fbed56b9cdd0d821a0f2774b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataSchema: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/indexing/DataSchema.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"1902658211df495a189d435ebbdd04d46c5d31a9db076622faafd415c6c6329e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: indexing/MSQWorkerTaskLauncher.java: FileTooLong \u2014 547 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: MSQWorkerTaskLauncher (78-996). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/indexing/MSQWorkerTaskLauncher.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5840e22905a531aa0809d0c351657155f9f75242e0b47c8ff1496a28ef638b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: segment/IndexMergerV10.java: FileTooLong \u2014 545 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: IndexMergerV10 (78-800). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c73b9f982979ec73c541d12864c344a0dbed3a2cf867eb20b850367504736ea"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cache/LookupCoordinatorManager.java: FileTooLong \u2014 545 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: LookupCoordinatorManager (93-909). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31c206784465c7566c0ddb11ddcd5fc5bf5a32f9aa81ec992af19e32e847ad62"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sql/SQLCatalogManager.java: FileTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: SQLCatalogManager (61-784). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-catalog/src/main/java/org/apache/druid/catalog/storage/sql/SQLCatalogManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"29aa81607beba2d39c2962fa48dadd104046ecb0a9a873ea4fe116315189eaff"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: groupby/GroupByQueryQueryToolChest.java: FileTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: GroupByQueryQueryToolChest (88-859). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df62edc231d6b6f962a000adc3292be9c0166518d0940f6fd0ed16e493148aa5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metadata/CoordinatorSegmentMetadataCache.java: FileTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: CoordinatorSegmentMetadataCache (102-911). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/metadata/CoordinatorSegmentMetadataCache.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb7f52df0e2a373079a72ee122edddfd25f4c9735994cb42ccb38e2c102b99d3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CompressedBigDecimal: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/CompressedBigDecimal.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"056a005edb288ccf44cdfd07944016e582f4178ce10e917e7c769903d6ac823e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KinesisSupervisor: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisor.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e86d0f816d2c30647f7718240dffb31aca109f2c987603f0cf7a98b9b51e18d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VirtualColumns: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/VirtualColumns.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"e948dc2a70be398621bf6b0839087de54823bb1aa8797f8f66de86da60dbee51"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NestedFieldVirtualColumn: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/virtual/NestedFieldVirtualColumn.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d378c2e2df7b2269458b0a5ac23ed7f902ebe1199a36c9d8e145a0a58045727"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StrategicSegmentAssigner: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"71633fbe40dd986672bccb27259d560aca138fda7330a4d5304b74a299395741"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: coordinator/DruidCoordinator.java: FileTooLong \u2014 533 significant lines (blank, comment-only and punctuation-only lines excluded), about 83% of them inside a single declaration: DruidCoordinator (118-863). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/DruidCoordinator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e824f6b96c4792b4a2b75b8eef9f3de3b577d3f54762ee71c4185eac99ec04c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: core/HttpPostEmitter.java: FileTooLong \u2014 531 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: HttpPostEmitter (62-966). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/emitter/core/HttpPostEmitter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a51deac9e922737e1af9b67732f628e5c9bc7447adbbe3adb818ecea5a639419"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: loading/StrategicSegmentAssigner.java: FileTooLong \u2014 527 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: StrategicSegmentAssigner (56-992). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"528f0829e52c6d37f1bd3ded222a25864d50bb85491ee14eb4ddbdc14e8b2e87"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: supervisor/SupervisorResource.java: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: SupervisorResource (82-801). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ed5236d04dab326fbc2323436ae33e88a9068101ced54721eb5806869b9a581"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: vector/VectorProcessors.java: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: VectorProcessors (35-924). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/vector/VectorProcessors.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf7083a015d2fd33e1489cc18ada81bf515e50adda62ef85c09e1e68778b2ba7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: timeline/VersionedIntervalTimeline.java: FileTooLong \u2014 521 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: VersionedIntervalTimeline (75-983). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/VersionedIntervalTimeline.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"36905d77f28eb43cba5717bdb082f980626990d27db555f47197cb04c53f41c5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: compaction/CompactionStatus.java: FileTooLong \u2014 520 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: CompactionStatus (59-886). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/compaction/CompactionStatus.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"14ba4116c592a2dfb84ebd3c1de3ee6c559d850f9e036028e69deb2e29555f58"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: segment/DictionaryEncodedColumnMerger.java: FileTooLong \u2014 519 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: DictionaryEncodedColumnMerger (79-870). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/DictionaryEncodedColumnMerger.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5304ebc20da011dec69bec1552c670301106115e36016948d20fe6cfdca48c51"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KinesisRecordSupplier: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"58ddba0c823f63f8a6cb0f4aa225522531cc8ecaf1cfa473b55ece24154d14c6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KubernetesAndWorkerTaskRunner: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesAndWorkerTaskRunner.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1a139bab5b2e9be2ee2e6d6058f81307e39f2a66caa320f4839256da7e2ca53"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractTask: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/AbstractTask.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"2df801062700bd3c7a5bc682ae67e75a2f0a56c5245aa61e8e7c8f2bca23d270"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SeekableStreamIndexTaskTuningConfig: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskTuningConfig.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"35b3f9282c1ea340cba938c60b02f2f1d47bd66260988ebcc6cfc2bfc0082e8d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StageDefinition: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/kernel/StageDefinition.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ed54b9f1ead1c2d96b6b5fb01c513f6aeae7eecb7917755be92a80cf397a32e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExpressionLambdaAggregatorFactory: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/ExpressionLambdaAggregatorFactory.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"06a37468a4f33ac86aa5de82d405f3c156ad3e24dca3a8566607eddb6e3a8069"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CoordinatorDynamicConfig: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/CoordinatorDynamicConfig.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c4bc0fd7e9e254f7aa6d4c8c78bf99083aee4dad395e1ec169a9630896cc1f3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: planner/DruidSqlValidator.java: FileTooLong \u2014 512 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidSqlValidator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c086468c27b46a8d3175be1ece1b97ef2594a2be82da8108028c8a729d8d13"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expr/ApplyFunction.java: FileTooLong \u2014 510 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: ApplyFunction (43-1006). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/math/expr/ApplyFunction.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"47b22ed2e35bfaeadad21916a836804eca3fcbc34f5dcd63bf43e01487d4e87a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: segment/QueryableIndexCursorHolder.java: FileTooLong \u2014 509 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: QueryableIndexCursorHolder (71-837). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/QueryableIndexCursorHolder.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3c85424888e8ba6a7e0e588726198e296553bb8a7950e3e1732911243661c6b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: worker/WorkerTaskManager.java: FileTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: WorkerTaskManager (86-902). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/worker/WorkerTaskManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"574bbb3d04190d9e8c7566583165a75e9ba47db04950dfa5a358b985a172cbd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java:52-82 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexTuningConfig.java:82-112 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java:52\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"db542d316a995a567e41b09e0072cc5b00981e52d2a742336c8d2e0b820c99d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:967-992 | sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:1091-1116 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:967\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java"},"region":{"startLine":967}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b7855dc75bdcc57e35ec22f23f6e5670f4a19787b4c2c03af42171ac92110f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchAggregatorFactory.java:161-182 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchAggregatorFactory.java:161-182 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchAggregatorFactory.java:161\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchAggregatorFactory.java"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"d264cc147aa3ef6ee6e5873f06c22aaee46a061a6a436f97a9c6013caff35f39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:324-344 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/data/input/kinesis/KinesisInputReader.java:231-251 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:324\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5e83d7348d1e24377b3b0caa15619bedd882d9db2df123f66aa0c6baecd6717"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java:206-226 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java:239-259 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java:206\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"35457adc111d8f3515b038c12cfb0ccc29aff53d5b3f779bc46814129e8559f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java:117-136 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java:135-155 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java:117\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"90f5a4697345c71c262fbafa6ea45b40db5ff1c3a40f574b2ea338e73eeda65d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssStorageDruidModule.java:48-66 | extensions-contrib/cassandra-storage/src/main/java/org/apache/druid/storage/cassandra/CassandraDruidModule.java:54-72 | extensions-core/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureStorageDruidModule.java:56-74 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3StorageDruidModule.java:65-83 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 4 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssStorageDruidModule.java:48\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssStorageDruidModule.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2febae3efd48c8782a8f987b9b02d3af2b034a126509ea2e3b0c50f6cc97660"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesStorageDruidModule.java:56-74 | extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleStorageDruidModule.java:56-74 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesStorageDruidModule.java:56\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesStorageDruidModule.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf1ca9b185fa856fc32c45fd674766fdc2d5886630f9e7c7f366e72ce97cd38b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/MovingAverageQueryRunner.java:131-149 | extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/MovingAverageQueryRunner.java:171-189 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/MovingAverageQueryRunner.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bbf44940f819dfb8ef1b30e5a79ede2caa0312cffa5d80879324c64f188200f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java:715-732 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java:739-756 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java:954-971 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java:715\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisRecordSupplier.java"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"28eaa33350d81b3c883f6099f8a3515aa2d4d2e78a6ee1d62de87d5548793a72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/SegmentListerResource.java:138-155 | indexing-service/src/main/java/org/apache/druid/indexing/worker/http/TaskManagementResource.java:122-139 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/SegmentListerResource.java:138\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/SegmentListerResource.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"904af3165e1885312c0245bbfb022dbae7715f64ee906a2b299918bf6dbb8532"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:478-495 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:563-580 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:478\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e155e2b9eb8b60a0a4b29911f0144b9d2b6efd6b09e946dfbde587b8b1b2305"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java:108-125 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamStartSequenceNumbers.java:125-142 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java:108\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e7035cc1273751622262c6f3045002eaa31a67829a593e0156d3ad80714aadf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1173-1190 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java:900-918 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1173\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"cddfb83f00958a0c6e6c49d50560f687dfb1f0c043e906426cc5a4f2f8608622"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java:162-179 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java:193-210 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc40c1144f6e391ae041a892ee5b98ec7c8df44d42a600634c6a35b44bdce46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouper.java:247-265 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/LimitedBufferHashGrouper.java:361-378 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouper.java:247\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouper.java"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"9866d3f3325408fc1530bbcc04e04c2451db5d3b92f2db9a9a3bc9db2bcff3ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:399-416 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:479-495 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:564-580 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:399\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"d848ef699cc6e0cbda2a68a8daaadc3f62447f00b2448c67224adb643ceef566"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/StringSqlAggregator.java:157-173 | sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/StringSqlAggregator.java:180-196 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/StringSqlAggregator.java:157\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/StringSqlAggregator.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"a363c1524edf37849ccb02b3b30eee14feb401123a82898ea1d4146c236018bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): processing/src/main/java/org/apache/druid/common/config/JacksonConfigManager.java:133-149 | processing/src/main/java/org/apache/druid/common/config/JacksonConfigManager.java:161-177 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/common/config/JacksonConfigManager.java:133\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/common/config/JacksonConfigManager.java"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b2db2fb8640a52948ec6e24d59d8902ededeecd67b1e29f78f1429db7532a0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/WorkerHolder.java:352-368 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/WorkerHolder.java:395-411 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/WorkerHolder.java:352\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/WorkerHolder.java"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e642988cea9891cd038356130cc93891249d101d1414aa6ccdb03d712c8b7fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:250-266 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/data/input/kinesis/KinesisInputReader.java:165-181 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:250\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7c5635831c152539b71741202ea325ef4f698cb063fd08fb916ce5daddd0d34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchSingleArgBaseOperatorConversion.java:73-89 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/sql/ThetaSketchEstimateWithErrorBoundsOperatorConversion.java:81-97 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchSingleArgBaseOperatorConversion.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"a78aa25e92c0aa4fb52c6aa1125f3f03787b6c791054085ba3d2943132bcf238"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/scan/SettableCursorColumnSelectorFactory.java:82-98 | processing/src/main/java/org/apache/druid/query/scan/SettableCursorColumnSelectorFactory.java:109-125 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/scan/SettableCursorColumnSelectorFactory.java:82\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/scan/SettableCursorColumnSelectorFactory.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eae74450cdcafb2ba5bd843e8534d1923de8601986ed847c22acb66de6b23e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/vector/VectorCursorGranularizer.java:58-74 | processing/src/main/java/org/apache/druid/query/CursorGranularizer.java:62-78 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/vector/VectorCursorGranularizer.java:58\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/vector/VectorCursorGranularizer.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae50f412733531d71bf7f608dc3aaa1a81a83f091f82b90fd092c1d1a599f91a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArrayConcatSqlAggregator.java:109-124 | sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArrayConcatSqlAggregator.java:128-143 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArrayConcatSqlAggregator.java:109\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArrayConcatSqlAggregator.java"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1ef1ae503a528d61d2092b66cf195df9eda7d0553c9842490ebe7b92c7af277"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArraySqlAggregator.java:119-134 | sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArraySqlAggregator.java:138-153 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArraySqlAggregator.java:119\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArraySqlAggregator.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f21e69d976d2eeb0ded0a4fc50fda521dfba8d89bb8ac277a6935cba0a4de97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/LPadOperatorConversion.java:71-86 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RPadOperatorConversion.java:71-86 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/LPadOperatorConversion.java:71\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/LPadOperatorConversion.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"df076dc16f94b82c67beea868658cff95d4d02ced018981913ff29f1efa63c0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java:490-506 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/ThreadingTaskRunner.java:296-311 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java:490\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"82081687d80d3e07fc03f65a664ececb1e0c26ebb687b933d97dbcf1868d83c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java:249-264 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisorTuningConfig.java:247-262 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ad36b1b2b770897f5bdbb3c57055511e0969705cda2c16e49dff419ae18cd29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitStreamIndexTaskTuningConfig.java:215-230 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTaskTuningConfig.java:147-162 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitStreamIndexTaskTuningConfig.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c88c25812bd1c6fec7b81ca3b2a18a55d527e45ad4d28b4b523f56410f08433"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisorTuningConfig.java:255-270 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTaskTuningConfig.java:155-170 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisorTuningConfig.java:255\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisorTuningConfig.java"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fca39161b0889ce5c91f2608b30c09521e338c93e41edbf231cb780263dc75f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java:306-321 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisIndexTaskTuningConfig.java:283-298 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java:306\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"02e7dc006dd8867c2e6b28d67fb3a8a1859e9eb83d1469b4219343ae23867429"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentTransactionalAppendAction.java:208-223 | indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentTransactionalInsertAction.java:247-263 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentTransactionalAppendAction.java:208\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentTransactionalAppendAction.java"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c2d70cb093a9cd7f398933231226a747f766e4c68f2a87ea1f5c6f78b4606e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/SinglePhaseSubTask.java:457-472 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java:1009-1024 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/SinglePhaseSubTask.java:457\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/SinglePhaseSubTask.java"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"79574b36045ba3ba04ba0bf894349da129e2e69a86bbb2fc564f6eabeb832b94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/tasklogs/SwitchingTaskLogStreamer.java:70-85 | indexing-service/src/main/java/org/apache/druid/indexing/common/tasklogs/SwitchingTaskLogStreamer.java:109-124 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/tasklogs/SwitchingTaskLogStreamer.java:70\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/tasklogs/SwitchingTaskLogStreamer.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac9b0f2fe08545803bf42b024eacc4e54dfe5bd3969fbb9fd265f66251191e40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestGenerateSketchSqlAggregator.java:124-139 | extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchQuantileSqlAggregator.java:142-157 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchQuantileSqlAggregator.java:142\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestGenerateSketchSqlAggregator.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3b86a337acb42a1d4c814ed7a6d7fe683439eb69ac13a0531dffba5c1aaee79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:176-191 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/QuantileSqlAggregator.java:139-154 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:176\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"766e9b32805d53b72210bfdbd1b72acfe736b6e7e650fc11eabbd4a9f7fbae4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/NumericFirstBufferAggregator.java:106-121 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/NumericLastBufferAggregator.java:110-125 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/NumericFirstBufferAggregator.java:106\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/NumericFirstBufferAggregator.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fdd71bae0bddd9a3ed100060f369b289c0494009106ab3319eed70c254fe972"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/LeftOperatorConversion.java:60-74 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RepeatOperatorConversion.java:60-74 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RightOperatorConversion.java:60-74 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/LeftOperatorConversion.java:60\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/LeftOperatorConversion.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe784ce2ad26d24c5610f247a3e817d038005791772b6da455b6e5a675dc1560"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/security/RulesResourceFilter.java:74-88 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/security/TaskResourceFilter.java:91-105 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/security/RulesResourceFilter.java:74\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/security/RulesResourceFilter.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"771a76c71902e16ad474323a888d41bf6cbdf5483e5617e9a3e0f0a3a9d5fe6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/SegmentListerResource.java:180-194 | indexing-service/src/main/java/org/apache/druid/indexing/worker/http/TaskManagementResource.java:164-178 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/SegmentListerResource.java:180\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/SegmentListerResource.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"368095654223a7e21947c6fb082be1560b20fb72f6c0f1b9abf112117052117b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java:189-203 | services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java:276-291 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java:189\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b9058015cba19a38f305de0098eb6f6e29f0a7e9da00812cd084ce7116e2926"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:932-946 | sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:1062-1076 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:932\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java"},"region":{"startLine":932}}}],"partialFingerprints":{"codehealthFindingId/v1":"413d250a7158d72987aa18a29cda1ac2967a89ac671e0d81fc6921d22f016aea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java:616-630 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/ThreadingTaskRunner.java:439-453 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java:616\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"785094553daa82211a45852b92870dd395eb63522d8f63514193263468ca7e14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitStreamIndexTask.java:63-77 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTask.java:76-90 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitStreamIndexTask.java:63\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitStreamIndexTask.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"01e1a19733aa715f50cf33ce3a96d42e55eafe64f70601e473e8c6da61724a51"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java:145-159 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java:165-179 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java:145\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d245a9bfee008c91d579bce25836966ee65f1be49881e70de3d3f9570fda4a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionCardinalityTask.java:177-191 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionDistributionTask.java:231-245 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionCardinalityTask.java:177\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionCardinalityTask.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"0af4353f9122d5afe5100b37a7f353fcb915c0a835ae8d0c71a8b6c7602872e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java:100-114 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentMover.java:122-136 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"6af5ce8ff882a3a0b2836369182a41257c9d7653ae0d9c1fa5afb3f06a3934e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java:124-138 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPuller.java:132-146 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java:124\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPuller.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"27b4c6310a6251819b57b751b68509443f31ef3bd008cc0cd504e6d1192ab3ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimatePostAggregator.java:154-168 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchMergeAggregatorFactory.java:204-218 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimatePostAggregator.java:154\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimatePostAggregator.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"0788ed7e7290460ff8568be13ce49f154c1f2bca92202626be2fb3fdb81342dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstBufferAggregator.java:79-93 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/StringLastBufferAggregator.java:79-93 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstBufferAggregator.java:79\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstBufferAggregator.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebd5eb290fa95729706716d88ce208351c70f4d9eb382361ed11a611ec5e3df6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java:83-97 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringSimpleStagedSerde.java:73-87 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java:83\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"d721d0370e473cab0afd3d713a02c4d3a084ac6792ec13ae0e1c187062c75d8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouper.java:225-239 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouper.java:261-275 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouper.java:225\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/BufferHashGrouper.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"a08f7821cdefb538c2d241c5fdd91de8032604d772cf6c23fc7c34a585b73327"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): extensions-contrib/druid-exact-count-bitmap/src/main/java/org/apache/druid/query/aggregation/exact/count/bitmap64/sql/Bitmap64ExactCountSqlAggregator.java:155-168 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java:137-150 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/sql/ArrayOfDoublesSketchSqlAggregator.java:119-132 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/druid-exact-count-bitmap/src/main/java/org/apache/druid/query/aggregation/exact/count/bitmap64/sql/Bitmap64ExactCountSqlAggregator.java:155\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/druid-exact-count-bitmap/src/main/java/org/apache/druid/query/aggregation/exact/count/bitmap64/sql/Bitmap64ExactCountSqlAggregator.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"886d884d4cf4856f50108065e9e2d29194dbe282a06054707745d78144b9979b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:276-289 | processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:322-335 | processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:368-381 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:276\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"d058daadd31f1affdd97d909c9023709b33fed4a3a5e11fcce38955ee2525486"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:805-818 | server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:856-872 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:805\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f447c8f8aff5b2d8e8236e00a41abcd543ac17e19cb50868ec765e35fb0014d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BuiltinApproxCountDistinctSqlAggregator.java:120-133 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java:155-169 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BuiltinApproxCountDistinctSqlAggregator.java:120\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BuiltinApproxCountDistinctSqlAggregator.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"42aadb2b4b999561f1fc5a910ee4ec754dbe6b64e2566105e3f2ea429d53f522"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidAggregateCaseToFilterRule.java:238-251 | sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidAggregateCaseToFilterRule.java:287-302 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidAggregateCaseToFilterRule.java:238\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidAggregateCaseToFilterRule.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"f47b76ed8959ffa1cfbe18f6d1843a15b73533cb74d39826a63756643cf7f966"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/ArchiveTask.java:88-101 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/MoveTask.java:96-109 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/ArchiveTask.java:88\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/ArchiveTask.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"044abf78a7c0ce2cd9d600099748fff4add9894df3ba7ecb23d76cb1b0525538"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:112-125 | processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:191-204 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:112\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8ed0c05920dcb1a19da3a14683fcb890125fac29398658db4f6295b466b4f71"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/StreamingMergeSortedGrouper.java:304-317 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/StreamingMergeSortedGrouper.java:323-336 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/StreamingMergeSortedGrouper.java:304\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/StreamingMergeSortedGrouper.java"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"718e3f15dd69c620d895ee30872191488515d2d7e4143bd45253513c965dd6dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchQuantileSqlAggregator.java:91-105 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchApproxQuantileSqlAggregator.java:90-102 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:80-92 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/QuantileSqlAggregator.java:83-95 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 4 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchQuantileSqlAggregator.java:91\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchQuantileSqlAggregator.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d3c5bed4346c3f9ac20ddcaf6c05646561c523589500fc3a58dc6e47744f4af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongDoubleDeltaEncodedStagedSerde.java:41-53 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongFloatDeltaEncodedStagedSerde.java:41-53 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongLongDeltaEncodedStagedSerde.java:41-53 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java:107-119 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongDoubleDeltaEncodedStagedSerde.java:41\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongDoubleDeltaEncodedStagedSerde.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"764375f3000585c3ac8bc488869380d62f60b39a2a67cf7b1f10ad6a9b69b431"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java:87-99 | processing/src/main/java/org/apache/druid/query/filter/vector/FloatVectorValueMatcher.java:90-102 | processing/src/main/java/org/apache/druid/query/filter/vector/LongVectorValueMatcher.java:89-101 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java:87\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ca4387438376813f64568998bd4f6970f37ff9839e36d1f8883e774d58867bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/rowsandcols/column/DoubleArrayColumn.java:58-70 | processing/src/main/java/org/apache/druid/query/rowsandcols/column/IntArrayColumn.java:58-70 | processing/src/main/java/org/apache/druid/query/rowsandcols/column/LongArrayColumn.java:58-70 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/rowsandcols/column/DoubleArrayColumn.java:58\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/column/DoubleArrayColumn.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"970b03a7798d92fc38e03a4cbdf427a4ac72e469c6e138aa870b4b03df1ffe9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java:385-397 | server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java:475-487 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java:385\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"644b35deddd7b63dd49f016a56a43f5ad0d3a2d71d6f60faa484ff03a24b622d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayContainsOperatorConversion.java:93-105 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayOverlapOperatorConversion.java:93-105 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayContainsOperatorConversion.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"e843d56dcaeff2423d25cdbbb5a081e8e3c7f2efc007491e17b857fc70672285"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayContainsOperatorConversion.java:179-191 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayOverlapOperatorConversion.java:190-202 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ArrayContainsOperatorConversion.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"415595def53672f42b58b024bea378c39b547067228c803dbb93fd0919e6c4f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:429-441 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:562-575 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:429\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"bed121df4e047552485a7b28aeb0121c4a34977c9e36b306107430ed7d36ce5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeShiftOperatorConversion.java:69-83 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TrimOperatorConversion.java:89-101 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeShiftOperatorConversion.java:69\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeShiftOperatorConversion.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"aed36e9aaa85abac9b59531e77e1ca5f4ca2d8ddd967bfa05171bb4bafe178dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:2226-2238 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:2299-2311 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:2226\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2226}}}],"partialFingerprints":{"codehealthFindingId/v1":"18ddfdc151353857607dfa9703d7076b3b442001b52c56acb1aaff3f56b17812"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): extensions-core/ec2-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScaler.java:272-284 | extensions-core/ec2-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScaler.java:312-324 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/ec2-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScaler.java:272\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/ec2-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScaler.java"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"a23811da5f63438f709a83c253e1a1dc675561860516d1b8eaa135b26fd26458"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:171-183 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:137-154 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:171\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"b31bbf5a77b72f75b4e988d020862baeef9b5e18aa37c40a19ae19be980cb314"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:788-800 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:815-827 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:788\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e1d517f1ede8cf0f4411390377537281dd494d2a755d4e669da044e13116d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:809-821 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:916-928 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f76ef05cf4004306e33a9cbba32e33a50cbb392ee30b2dd050d11285feed633"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:841-853 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:947-959 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:841\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"076168f3b292db99a0cb40b90763fe9b37c7319e937e9788ed67b4bd70192494"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/AmbariMetricsEmitter.java:122-134 | extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/GraphiteEmitter.java:114-126 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/AmbariMetricsEmitter.java:122\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/AmbariMetricsEmitter.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a70b177e2ee95e9bf6cc4a9a2f05a77ca462190f1c5a44ae179bfad4daa930c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java:78-90 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java:78-90 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java:78\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"430dd701f3ce52ae371898ef26c5dc7190cff9d815fa6e64a1a341c012b4fbfe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java:57-69 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringSimpleStagedSerde.java:56-68 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java:57\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fc34fb766954c1d6d2dcedabb45c4d282ad39d9a89ca4e2536062b5ed6e2862"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java:501-513 | extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java:579-593 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"91846bfeb29bfe00c8c4353b8093664dcd09450e36bc26b6b72b4b5bb4f47e15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/expression/TrimExprMacro.java:150-162 | processing/src/main/java/org/apache/druid/query/expression/TrimExprMacro.java:225-237 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/expression/TrimExprMacro.java:150\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/TrimExprMacro.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"76cd7fd14fb26f3a972043ff69cb3a3041ec8e54548ce696a11daf3eca1f5f4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GrouperBufferComparatorUtils.java:69-81 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GrouperBufferComparatorUtils.java:201-213 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GrouperBufferComparatorUtils.java:69\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GrouperBufferComparatorUtils.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf01a7074906ff1f5c57351ee2aeb7b9ea19e98a30ca7aaa6e7bc03d688dddac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/rowsandcols/concrete/ColumnBasedFrameRowsAndColumns.java:48-60 | processing/src/main/java/org/apache/druid/query/rowsandcols/concrete/RowBasedFrameRowsAndColumns.java:49-61 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/rowsandcols/concrete/ColumnBasedFrameRowsAndColumns.java:48\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/concrete/ColumnBasedFrameRowsAndColumns.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"5037b4b4792c2158b8419a897dfe71f77fdf34ef54d542caeff6a12d149d4082"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java:480-493 | processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java:571-583 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1e7f5b0503bef9594b3b9907e5967ae7b088fd5b49ffac3eb34674f22d5e964"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/rowsandcols/column/DoubleArrayColumn.java:156-167 | processing/src/main/java/org/apache/druid/query/rowsandcols/column/IntArrayColumn.java:174-185 | processing/src/main/java/org/apache/druid/query/rowsandcols/column/LongArrayColumn.java:169-180 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/column/DoubleArrayColumn.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"7320c96b746b6cfa57cf48da0216563e6c8c29212c4711f055cd726b620e228f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): server/src/main/java/org/apache/druid/server/initialization/AuthenticatorMapperModule.java:115-126 | server/src/main/java/org/apache/druid/server/initialization/AuthorizerMapperModule.java:146-157 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/initialization/AuthenticatorMapperModule.java:115\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/initialization/AuthenticatorMapperModule.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"31abdae2cae7a1b74474b46182135c5341949c4024381f49222be5a6b8e659e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ContainsOperatorConversion.java:99-110 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RegexpLikeOperatorConversion.java:83-94 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/ContainsOperatorConversion.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b580f9d4b68808f14fea43c14b5af602dfd393f26baec857bcff2e42eb59dd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:388-399 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:519-530 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e052d62990ea4cfbe10e5b1df5aa8fce969ee7a84dffc2c2ece62f9eadd54b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:524-535 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:695-707 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:524\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea5d112d2ebb8f4da892713765d33b217ac6fe778687a35adf0cf1afa6d6ac43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/avatica/DruidConnection.java:110-121 | sql/src/main/java/org/apache/druid/sql/avatica/DruidConnection.java:148-159 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/avatica/DruidConnection.java:110\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/avatica/DruidConnection.java"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ec3dbfa9261b97e0d126845478a354b2392640a23ff64049c58ce4ebab0c997"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1795-1806 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1814-1825 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1795}}}],"partialFingerprints":{"codehealthFindingId/v1":"2093650c7629e1466e1ace4d277109be66e402250341f0c87ad372fafc2c393c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1868-1879 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1887-1898 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1868\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1868}}}],"partialFingerprints":{"codehealthFindingId/v1":"d610ff245784208851c77cd578b262aa2e0da045db2c256f1038fc89854843aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamDataSourceMetadata.java:87-98 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamDataSourceMetadata.java:105-116 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamDataSourceMetadata.java:87\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamDataSourceMetadata.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"f324ccf9c53abd31ba7b09522d0567b4987d35c9a47ebb514ab3127bd071fb4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskTuningConfig.java:194-205 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java:1385-1396 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskTuningConfig.java:194\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskTuningConfig.java"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7ab3c87eda2cb8ad1f3bd9d984998e38129900d41f8dd9f1cfa07fef3ca0bfd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java:219-230 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java:244-255 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"8801b0da879108914a9a5fac2b7de4519cb925e59684bd623d6866e6e7ad1798"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java:221-232 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisorTuningConfig.java:200-211 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ae9ac322f68af43fe0488ebb0130fe492eb7177c1ee876af0557c82cff312c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentMetadataUpdateAction.java:84-95 | indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentNukeAction.java:94-105 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentMetadataUpdateAction.java:84\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentMetadataUpdateAction.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"0debd195fa68516d2929262b5768505006f45c5e052d9950a3eb98896eb9257e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java:86-97 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentMover.java:107-118 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java:86\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"bae8d1b4598a35ce66fbe4e39db9d5e429caecd22b23e1cca0fa4c43665e1800"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleExportStorageProvider.java:103-114 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/output/S3ExportStorageProvider.java:152-163 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleExportStorageProvider.java:103\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleExportStorageProvider.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"9918845744c83d22b7752ef3d329080d230d0b8849effd65e46ba5c3f7da3eb6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsStorageDruidModule.java:94-105 | extensions-contrib/druid-ranger-security/src/main/java/org/apache/druid/security/ranger/authorizer/RangerSecurityDruidModule.java:54-65 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsStorageDruidModule.java:94\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsStorageDruidModule.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"b956ca925a405e26c75e5b8441c2aca6f86a8d8005ea9453efe58f06ef9f9ceb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:771-782 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:803-814 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:771\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"361ff36bd4818db50b520c137571b3a9095908b208823540a6ccbdd537f32b44"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java:122-133 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringSimpleStagedSerde.java:103-114 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc73e4a459b85495e725e1202151c1d905666b90d3f657a1786c9ce22d37c7b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/expression/IPv4AddressParseExprMacro.java:73-84 | processing/src/main/java/org/apache/druid/query/expression/IPv4AddressStringifyExprMacro.java:72-83 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/expression/IPv4AddressParseExprMacro.java:73\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/IPv4AddressParseExprMacro.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac539d588556a8780019c85b5a5e9a0bd6316cce95dfaa27f16c6b7f6e224263"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java:186-196 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchToHistogramPostAggregator.java:186-196 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java:186-196 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java:186\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"33771ec70bcabe57d6c8e96c9efe2e696b92edf6f83758104e231584ca56d0ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchApproxQuantileSqlAggregator.java:128-138 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:162-173 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/QuantileSqlAggregator.java:125-136 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchApproxQuantileSqlAggregator.java:128\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchApproxQuantileSqlAggregator.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3af2ab9d78fd5e7f5af6b0fb5629175655603e79cb59ed0ca6222d760f1e7c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceDoubleVectorAggregator.java:63-73 | extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceFloatVectorAggregator.java:63-73 | extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceLongVectorAggregator.java:63-73 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceDoubleVectorAggregator.java:63\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceDoubleVectorAggregator.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ba371c839202582e0aecc483012b64b88adfc4b5f87bfba2b00172402cfcde0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java:267-278 | server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java:320-330 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java:267\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"1716342711538474dbfc1d24fc9bdd393ef337adb1a682a1749b1a465eb2b283"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java:672-682 | server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java:702-712 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java"},"region":{"startLine":672}}}],"partialFingerprints":{"codehealthFindingId/v1":"b619e1d2bbbae75f68c55c5a43f061c7309f44d89dea35116838318b770455ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java:812-822 | services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java:895-905 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java:812\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":812}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e4f1dd26ca541afa55de787740c728e9dd6ebbb8b403f70519ad78a21c816e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeParseOperatorConversion.java:78-88 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeShiftOperatorConversion.java:87-97 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeParseOperatorConversion.java:78\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeParseOperatorConversion.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc0780b6fa1038a3c8fe82cccc3aa3c1d042db380e6b31a2212676e40be6e15b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterDecomposeCoalesceRule.java:59-69 | sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterDecomposeConcatRule.java:62-72 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterDecomposeCoalesceRule.java:59\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/FilterDecomposeCoalesceRule.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7cdfa3f72afe6c274fcbd7d57817326a7b5cabaa97d712b20647464d1352fff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:2169-2179 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:2802-2813 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":2169}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc9b3a8031b806dabdebe17ea373f22af9315183fa6e33eb72493e11e359a93d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamEndSequenceNumbers.java:160-170 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamStartSequenceNumbers.java:174-184 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamEndSequenceNumbers.java:160\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamEndSequenceNumbers.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"420f830d2fe7f51b4742e312b87419ee77554a726a5a4ceca94b539023140945"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java:935-945 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java:961-971 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":935}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb26395e78bd07c7f900d8c044783f72c9c7b85295ed38bcc14f3aad24145749"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java:226-236 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/SimpleWorkerProvisioningStrategy.java:171-181 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java:226\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"a06961f28a046bca19d9057e3ecf91df98892d2ebe79195f64ca66e2c14c0f39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java:415-425 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/SimpleWorkerProvisioningStrategy.java:260-270 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java:415\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"23e910cd790a917ee080f8f6874be654e8ecd9d3e429de37f7adba6e669d21b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitStreamIndexTaskTuningConfig.java:269-279 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTaskTuningConfig.java:177-187 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitStreamIndexTaskTuningConfig.java"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"88bd0de9c4826e67d191d0b6ebd739b98661bf276e764c5b0047216a0cbee169"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java:86-96 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamStartSequenceNumbers.java:90-100 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java:86\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b373eec56d78b42e28f628a7c5eda83ab84b50c74cbbc9298683ee8b0cefb5e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java:255-265 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisIndexTaskTuningConfig.java:341-351 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/supervisor/KinesisSupervisorTuningConfig.java"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"92c6fe0d5d120b6f01bf9543d2f2dc29ef08290109b586bb550a51652aebb40d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-core/azure-extensions/src/main/java/org/apache/druid/data/input/azure/AzureInputSource.java:114-124 | extensions-core/azure-extensions/src/main/java/org/apache/druid/data/input/azure/AzureStorageAccountInputSource.java:127-137 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/azure-extensions/src/main/java/org/apache/druid/data/input/azure/AzureInputSource.java:114\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/azure-extensions/src/main/java/org/apache/druid/data/input/azure/AzureInputSource.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"2946221c5eb6da066595c72c5a4fc2015bfb925923dcd9eb30d87a17fe2b61f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleStorageConnector.java:68-79 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/output/S3StorageConnector.java:75-85 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleStorageConnector.java:68\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleStorageConnector.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"bddd9902cbe4a87c145af24d27da7ec2530105d6258dc4a0c3d5801615b74e6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:112-122 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:126-136 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:112\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"575cec9b229a1c5fe31ecd3ed8ffce619fbcd8c3fbea8833a9418190c2cdb50e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:711-721 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:729-739 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:711\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab0b91e15a5287fc039dc75cf15a1544fac5da73d7ef82d5d6f1fffae76910e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregator.java:64-74 | processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyBufferAggregator.java:78-88 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregator.java:64\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregator.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"802b12efecc2c24bfcaf282d915b7fce1576d24b810370180234f354c269cd22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesBufferAggregator.java:78-88 | processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesVectorAggregator.java:92-102 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesBufferAggregator.java:78\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesBufferAggregator.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e13a6d55e880dfb04098cd85ba25942c7c1a7416101dbf72230d3809c47b29e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/AbstractSerializablePairLongObjectDeltaEncodedStagedSerde.java:76-86 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringDeltaEncodedStagedSerde.java:71-81 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/AbstractSerializablePairLongObjectDeltaEncodedStagedSerde.java:76\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/AbstractSerializablePairLongObjectDeltaEncodedStagedSerde.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e0e6bc2466507d72747f384e20b48d535f50d97b1c567c541bf1f6d5a3e9aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/MovingAverageQuery.java:167-177 | processing/src/main/java/org/apache/druid/query/groupby/GroupByQuery.java:900-910 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/MovingAverageQuery.java:167\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/MovingAverageQuery.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"deaf91c9368aa536e91964ffbe09eb7c255cacf8400a5cf2670afe5b5c4ca01b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java:123-133 | processing/src/main/java/org/apache/druid/query/filter/vector/SingleValueStringVectorValueMatcher.java:130-140 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java:123\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"839d9ff24f5a8d2fe8abeadc8fde5aed829cd1e0d7487a46dbe2b0b748a7c816"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java:154-164 | processing/src/main/java/org/apache/druid/query/filter/vector/SingleValueStringVectorValueMatcher.java:151-161 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java:154\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b6385d5a2e1fc7be844a5f897b5b391b59b75af90da77cab992839d0af595f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:163-173 | processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:201-211 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:163\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a7d42981a09ef554de4445e1788356764e1a3ad4646111dbd270370873bf0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:1106-1116 | processing/src/main/java/org/apache/druid/query/DimensionComparisonUtils.java:73-87 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:1106\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"80aa5a92d42ce2c50998a1ca182595b8d1bd42bee16a02e7f46581aa41413a2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/topn/TopNLexicographicResultBuilder.java:86-96 | processing/src/main/java/org/apache/druid/query/topn/TopNNumericResultBuilder.java:108-118 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/topn/TopNLexicographicResultBuilder.java:86\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/TopNLexicographicResultBuilder.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c04cfb27247e09f1bd20558b7aebd9d8b5658d981414bd585f64987b5593887"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 16): server/src/main/java/org/apache/druid/server/coordinator/AutoCompactionSnapshot.java:87-96 | server/src/main/java/org/apache/druid/server/coordinator/CoordinatorDynamicConfig.java:594-603 | server/src/main/java/org/apache/druid/server/coordinator/DruidCoordinatorRuntimeParams.java:71-80 | server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java:138-147 | server/src/main/java/org/apache/druid/server/QueryLifecycle.java:131-140 | server/src/main/java/org/apache/druid/server/QueryLifecycleFactory.java:66-75 | server/src/main/java/org/apache/druid/server/ServerManager.java:128-139 | services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java:166-175 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:143-152 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/LockRequestForNewSegment.java:62-71 | indexing-service/src/main/java/org/apache/druid/indexing/common/config/TaskConfig.java:147-156 | indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolbox.java:189-198 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:84-93 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java:204-213 | processing/src/main/java/org/apache/druid/query/groupby/GroupByStatsProvider.java:115-124 | processing/src/main/java/org/apache/druid/query/metadata/metadata/SegmentAnalysis.java:78-87 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 16 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 16 times. Note what the matched lines are: every one of them assigns one field to another, so the block is a hand-written mapper between two data shapes rather than behaviour with a helper inside it. Extracting one shared function only works if both sites map the SAME pair of types in the same direction \u2014 check that first, because inverse or differently-typed mappers have no single function they can both call. Where they do not, the moves that exist are a generated or reflective mapper, a common embedded/base type the fields live on once, or accepting the run and covering it with a test that fails when a field is added to one side only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/AutoCompactionSnapshot.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"6df511225e019780c4db7bc74145ecd6a082eae46cf3fcc0924c86e07b9093f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerToolbox.java:68-77 | sql/src/main/java/org/apache/druid/sql/calcite/rel/PartialDruidQuery.java:156-165 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:131-140 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerToolbox.java:68\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/PlannerToolbox.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"5639bb40be3822c7cf9fe3be0daff89d107b18957afe3806c62d386cd42e9c2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/ParquetInputFormat.java:65-74 | extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsStorageDruidModule.java:93-102 | extensions-contrib/druid-ranger-security/src/main/java/org/apache/druid/security/ranger/authorizer/RangerSecurityDruidModule.java:53-62 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/ParquetInputFormat.java:65\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/ParquetInputFormat.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab4b5761d58a5a285c500405e3e7415c362f0e62e986e6c6ffb3295980321f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:255-264 | processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:303-312 | processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:349-358 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java:255\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/AggregatorUtil.java"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a440a6e447d608ef9f3086914b2a517c3a75e9dcc551a26a5119846d829ea0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/SimpleDoubleAggregatorFactory.java:218-227 | processing/src/main/java/org/apache/druid/query/aggregation/SimpleFloatAggregatorFactory.java:205-214 | processing/src/main/java/org/apache/druid/query/aggregation/SimpleLongAggregatorFactory.java:208-217 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/SimpleDoubleAggregatorFactory.java"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"36e9896c60f4bebfb6e303536db07a0e6d90c2d4786f73f10bacd4bb4d19cff7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): server/src/main/java/org/apache/druid/server/coordinator/InlineSchemaDataSourceCompactionConfig.java:113-122 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ConcurrentGrouper.java:188-197 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note what the matched lines are: every one of them assigns one field to another, so the block is a hand-written mapper between two data shapes rather than behaviour with a helper inside it. Extracting one shared function only works if both sites map the SAME pair of types in the same direction \u2014 check that first, because inverse or differently-typed mappers have no single function they can both call. Where they do not, the moves that exist are a generated or reflective mapper, a common embedded/base type the fields live on once, or accepting the run and covering it with a test that fails when a field is added to one side only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/InlineSchemaDataSourceCompactionConfig.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"27b2506a616c5fc3094b3fa54147a84b17a8f810012dd3e2340509d8cedfc752"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/CoordinatorBrokerConfigsResource.java:103-112 | server/src/main/java/org/apache/druid/server/http/CoordinatorDynamicConfigsResource.java:101-110 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/CoordinatorBrokerConfigsResource.java:103\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/CoordinatorBrokerConfigsResource.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"abecc2dd73b5625cdc36a54406490ce1e0cce4fb526a397563b78515a6f41079"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:412-421 | server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:459-468 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:412\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b55d0c51b3538ac88ad8cc724b4d943ced05deac81be77c3b373343e921ece0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): server/src/main/java/org/apache/druid/server/initialization/AuthenticatorMapperModule.java:94-103 | server/src/main/java/org/apache/druid/server/initialization/AuthorizerMapperModule.java:124-134 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/initialization/AuthenticatorMapperModule.java:94\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/initialization/AuthenticatorMapperModule.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"79fee876747a50da4fbc80845ec8a0dbdd1f5d751d2380f8288f62d85b1f80f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): server/src/main/java/org/apache/druid/server/initialization/ServerConfig.java:98-107 | indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolbox.java:220-229 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note what the matched lines are: every one of them assigns one field to another, so the block is a hand-written mapper between two data shapes rather than behaviour with a helper inside it. Extracting one shared function only works if both sites map the SAME pair of types in the same direction \u2014 check that first, because inverse or differently-typed mappers have no single function they can both call. Where they do not, the moves that exist are a generated or reflective mapper, a common embedded/base type the fields live on once, or accepting the run and covering it with a test that fails when a field is added to one side only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/initialization/ServerConfig.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"13fbc36a883ee7ce4e9ea4b997bd52478887b63c5cbdcdfbe543d2d2ac8e0ec2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): server/src/main/java/org/apache/druid/server/log/FileRequestLogger.java:174-183 | indexing-service/src/main/java/org/apache/druid/indexing/common/tasklogs/FileTaskLogs.java:135-145 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/log/FileRequestLogger.java:174\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/log/FileRequestLogger.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed74d4de4a737b6542c1ed675d973911e24746dadb195b00ec1ac6c69e5d6620"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): server/src/main/java/org/apache/druid/server/QueryLifecycle.java:275-284 | server/src/main/java/org/apache/druid/server/QueryLifecycle.java:313-322 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/QueryLifecycle.java:275\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/QueryLifecycle.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f84e70372d58b7cd069b3447ebdddd9196a2dcb0b2007263fa21a0a88cd8606"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:714-723 | sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:743-752 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:714\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"00df1a35185c21f374b62cc725760bd04976bbcff872ad3265260194964d01df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:215-224 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:393-402 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:215\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5a889e65dea1dbec572ae3d6e40590c14a660fc5cc84fcd43e6276a921e9516"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeFormatOperatorConversion.java:68-77 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeParseOperatorConversion.java:65-74 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeFormatOperatorConversion.java:68\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/TimeFormatOperatorConversion.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd364b0168cf5aa8615d6cb0c4d45a6fa79abc69cbd04e173a5e07f1e4607b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java:629-638 | sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java:729-739 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java:629\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d3af8b88e3a45ee608cc107be5c158e7f086ea6e6037f28d57a82fc6124b422"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java:660-669 | sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java:716-725 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java:660\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff34206e0fe01dd524f9e0f6c594aeba995a404c6fbfee193a80b25650b5e739"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java:841-850 | processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java:886-895 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java:841\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"d34e108487a401bd1769bfda17a194f1c3c3afe05847dbc50be8e9930281eafa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1959-1968 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1991-2000 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1959\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1959}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c4cde728a8d7af9599ec190ad5d2f952b53de78c209ad6ccb1a93aa104fb2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorReportPayload.java:72-81 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisorReportPayload.java:79-88 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorReportPayload.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fd83a1e09a8913198f556f8b2681426ebc117d6b422f4c727abfcc9370f7579"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1196-1205 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java:928-937 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":1196}}}],"partialFingerprints":{"codehealthFindingId/v1":"43cd55fc8a8908c99eeb0a56a3b1a661eaa70fbdb34df43e0b38a056aeb0ca92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolbox.java:199-208 | indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolboxFactory.java:185-194 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/TaskToolbox.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c64b01d933326cd9fe02479237ce284e85e5b54c8c8fdb6b5c0daf9196119be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:240-249 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/data/input/kinesis/KinesisInputReader.java:155-164 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:240\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"7890dbecb799dd4ecc8d93ffebd4b29abf990c45cd9a42f067d2a70336536a53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsStorageAuthentication.java:65-74 | extensions-contrib/druid-iceberg-extensions/src/main/java/org/apache/druid/iceberg/input/HiveIcebergCatalog.java:119-128 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsStorageAuthentication.java:65\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsStorageAuthentication.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"93e129b85a4d62630870c5b242cb2c72ce816d3825f35fe5c195dbdaa7ec69a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java:143-153 | extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/WhiteListBasedConverter.java:171-180 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java:143\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"22510c718c32ab68ba85f4294ca4c08b9e83a84f03a01d5c86b6833768c5769b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-contrib/ddsketch/src/main/java/org/apache/druid/query/aggregation/ddsketch/DDSketchUtils.java:86-95 | extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchUtils.java:91-100 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/ddsketch/src/main/java/org/apache/druid/query/aggregation/ddsketch/DDSketchUtils.java:86\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ddsketch/src/main/java/org/apache/druid/query/aggregation/ddsketch/DDSketchUtils.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"27d68bd087d8f4e3444aed8b15a956428f488c61341fcd4338005a3199171253"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java:84-93 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/sql/ThetaSketchBaseSqlAggregator.java:82-91 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java:84\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c29175f98b20e28fec0bfe4da43e16ec828d02774496a8ee152c904a77dc51d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchObjectSqlAggregator.java:91-101 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/sql/FixedBucketsHistogramQuantileSqlAggregator.java:94-103 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchObjectSqlAggregator.java:91\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/sql/DoublesSketchObjectSqlAggregator.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7db7ab613707324206a79df862c63058065b3f664bed8cf7f30117c7440abb3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstAggregatorFactory.java:143-152 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/StringLastAggregatorFactory.java:108-117 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstAggregatorFactory.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"a82a00a8ad666bbcca4cc2707032ab226c8516bfac0be4075a777ac381fd6b3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMeanVectorAggregator.java:83-92 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleSumVectorAggregator.java:83-92 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMeanVectorAggregator.java:83\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMeanVectorAggregator.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"92751846151e6ad494511c10ffacd60832fa932c4a611c60cda34841d2b05522"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/SimpleFloatAggregatorFactory.java:62-71 | processing/src/main/java/org/apache/druid/query/aggregation/SimpleLongAggregatorFactory.java:68-77 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/SimpleFloatAggregatorFactory.java:62\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/SimpleFloatAggregatorFactory.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7ac32da1541bcaef3e05fca679416866c0f0cf536a2f47e6a8c2ffd12a3cdd9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java:94-103 | processing/src/main/java/org/apache/druid/query/filter/vector/StringObjectVectorValueMatcher.java:86-95 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java:94\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e2f2df6aa4b8780d1e5987e1f808b2f56f45e7873f3c734e57fefa5c9cf79ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:87-96 | processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:159-168 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:87\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3eb056278e299c266352ee9fe15e99b3e37bac9cbe2806ee8ea47e642ec13d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/expression/IPv4AddressMatchExprMacro.java:86-95 | processing/src/main/java/org/apache/druid/query/expression/IPv6AddressMatchExprMacro.java:75-84 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/expression/IPv4AddressMatchExprMacro.java:86\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/IPv4AddressMatchExprMacro.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff1951e106882ac2dde9b3d9db9ad6b10cdf1d9d5153e52c45bd14172ede14be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java:906-915 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java:993-1002 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java:993\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/RowBasedGrouperHelper.java"},"region":{"startLine":906}}}],"partialFingerprints":{"codehealthFindingId/v1":"f32de04f6766347440b3207497320edd5273279aca1d67f79cef5a61c35a6109"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/topn/PooledTopNAlgorithm.java:146-155 | processing/src/main/java/org/apache/druid/query/topn/PooledTopNAlgorithm.java:171-180 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/topn/PooledTopNAlgorithm.java:146\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/PooledTopNAlgorithm.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfc9de54210e2589f6be89fa1fc93115f58ad85f8e0a17abdb2de90e3a0e3d40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/common/DeltaLakeDruidModule.java:57-66 | extensions-contrib/druid-iceberg-extensions/src/main/java/org/apache/druid/iceberg/common/IcebergDruidModule.java:66-75 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/common/DeltaLakeDruidModule.java:57\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/common/DeltaLakeDruidModule.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"181b23d67357faea92eff3423789cef5a2a303b4b283ef22957e8283ee7ea134"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authentication/endpoint/CoordinatorBasicAuthenticatorResourceHandler.java:58-67 | extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authentication/endpoint/DefaultBasicAuthenticatorResourceHandler.java:55-64 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authentication/endpoint/CoordinatorBasicAuthenticatorResourceHandler.java:58\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authentication/endpoint/CoordinatorBasicAuthenticatorResourceHandler.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"24a9f877efdfba8c81376735755c3ccf4b2c53fb4cd1eabd4c5d53675f1f80bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java:60-68 | sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java:74-82 | sql/src/main/java/org/apache/druid/sql/calcite/filtration/RemoveRedundantIsTrue.java:62-70 | sql/src/main/java/org/apache/druid/sql/calcite/filtration/RemoveRedundantIsTrue.java:76-84 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java:60\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"7884f9e0f3d815a3f4368b40ba0a8e0d23e4744a8d329cd5ecc5dfd2d3b24b0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:294-302 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:314-322 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:361-374 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:388-401 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:294\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"57309d1f183bd1e454e067951ef8e75d9c974083954535dd05b641bcf88e4dae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): processing/src/main/java/org/apache/druid/query/filter/vector/ArrayVectorValueMatcher.java:65-73 | processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java:96-104 | processing/src/main/java/org/apache/druid/query/filter/vector/ObjectVectorValueMatcher.java:74-82 | processing/src/main/java/org/apache/druid/query/filter/vector/StringObjectVectorValueMatcher.java:88-96 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/ArrayVectorValueMatcher.java:65\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/ArrayVectorValueMatcher.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"7823265db6ee04397cde4fc4e20cbdb9f47636453a7b1c74427597593ae1980c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): server/src/main/java/org/apache/druid/server/http/MetadataResource.java:419-427 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java:218-226 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java:243-251 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/MetadataResource.java:419\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/MetadataResource.java"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"af7e4722044e58a347849233a625b4f3775d2b55d7b58f01fca0bc0084c65ef9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulMetrics.java:36-44 | extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulMetrics.java:53-61 | extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulMetrics.java:71-79 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulMetrics.java:36\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulMetrics.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbd711ed1c351f87eb9412e6e9353404044a7e38e4c2123426ce1d23348ba05b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactory.java:63-71 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstAggregatorFactory.java:142-151 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/StringLastAggregatorFactory.java:107-116 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactory.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"c84fee9021ad98bafcc5753c4a0b3bfb546e7bf7dfad22bb827dfe03a9776397"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/DoubleCardinalityVectorProcessor.java:47-55 | processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/FloatCardinalityVectorProcessor.java:47-55 | processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/LongCardinalityVectorProcessor.java:47-55 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/DoubleCardinalityVectorProcessor.java:47\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/DoubleCardinalityVectorProcessor.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"d97155e601cee87073b097cd7d61ae768ba55418c4dfb172145baa98bad203ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): server/src/main/java/org/apache/druid/server/ClientInfoResource.java:235-243 | server/src/main/java/org/apache/druid/server/ClientInfoResource.java:265-273 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/ClientInfoResource.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"522df9ce644ffd6b5cdfbf743697e9a4ffd80affd9b8770fed302debe848593d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/schema/InformationSchema.java:235-243 | sql/src/main/java/org/apache/druid/sql/calcite/schema/InformationSchema.java:339-347 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/schema/InformationSchema.java:235\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/InformationSchema.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"00abfa691403e6ab734502dc486a235b7247731f7770b97ba044bbfddd77bfce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BuiltinApproxCountDistinctSqlAggregator.java:94-102 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/sql/HllSketchBaseSqlAggregator.java:115-123 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BuiltinApproxCountDistinctSqlAggregator.java:94\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BuiltinApproxCountDistinctSqlAggregator.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b52dca245cfede3e77ec0328103d698024f91168623be2a00b2ea90226686c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/EarliestLatestAnySqlAggregator.java:212-220 | sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/EarliestLatestBySqlAggregator.java:84-92 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/EarliestLatestAnySqlAggregator.java"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1405e2811a36c1676a32618218e1898e8d7e2730ad54d1517525700f8ec4c3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/CeilOperatorConversion.java:57-65 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/FloorOperatorConversion.java:57-65 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/CeilOperatorConversion.java:57\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/CeilOperatorConversion.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6607450cf748d4f990c35b86782f50363c7e6bb3472cf67a29cab8ed24c2123"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:416-424 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:547-555 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:416\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddbb593dc95a8fc43a80fe514cdad2e221f8b643a3919138f54ba6b243b224f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/QueryLookupOperatorConversion.java:75-83 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RegexpExtractOperatorConversion.java:65-73 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/QueryLookupOperatorConversion.java:75\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/QueryLookupOperatorConversion.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"83c165e369fc12d78ddda20d84e6a99d13dc5d40adc4131a2d10782ebf4eb8d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/http/ArrayWriter.java:113-121 | sql/src/main/java/org/apache/druid/sql/http/ArrayWriter.java:142-150 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/http/ArrayWriter.java:113\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/http/ArrayWriter.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ea0c445eb28db3af613aeb49ae148c428b89b76247270a024a1e72afd16db1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java:369-377 | processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java:398-406 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java:369\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/partition/OvershadowableManager.java"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"764e1cedd96d15ef4ae50461b8a581aa0fa0fa96f9c790f253187abe4af9bf93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java:433-441 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java:473-481 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java:433\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"04dbad30b7e6b9ef37fd7aeab52a016bd5dc353ca9b56183ad1495c0a59ff9d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-contrib/gce-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/gce/GceAutoScaler.java:228-236 | extensions-contrib/gce-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/gce/GceAutoScaler.java:321-329 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/gce-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/gce/GceAutoScaler.java:228\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/gce-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/gce/GceAutoScaler.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"87313ec7515140fdee78ffc6665d404e937e43033341af041f909150b370e184"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:1511-1519 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:1560-1568 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:1511\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":1511}}}],"partialFingerprints":{"codehealthFindingId/v1":"530918c17cf85d08f1ef4f9f8701fb24970b2784622519c6f750826378c7cd7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisor.java:197-205 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java:221-229 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisor.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"512b4722b9fa99446612b10412b76b71d67dee6a9b8ebd760bcd577086e92c6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java:452-460 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java:561-569 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java:452\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e9bb3bee8933e5c3fae3d13d2d04bed52728d62fda4d19e502c1311bdebecd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcExtensionsModule.java:62-70 | extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/ParquetExtensionsModule.java:67-75 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcExtensionsModule.java:62\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcExtensionsModule.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d88adb5ad942723049d8b2cf5d4489a12683dcb4d1391935fb4ce7e4fea3cae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchMergeBufferAggregatorHelper.java:92-100 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchBufferAggregatorHelper.java:85-93 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchMergeBufferAggregatorHelper.java:92\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchMergeBufferAggregatorHelper.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"4920826dee561acfb0553d8a05245738df22d96f8a3b734e634a4bac55c3627d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/sql/ArrayOfDoublesSketchSetBaseOperatorConversion.java:89-97 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/sql/ArrayOfDoublesSketchSqlAggregator.java:87-95 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/sql/ArrayOfDoublesSketchSetBaseOperatorConversion.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"e376c322a2f483e98b7fc91907d7b70511b871ecbda104b5b20e38c835906e4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildAggregator.java:98-106 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildBufferAggregator.java:113-121 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildAggregator.java:98\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildAggregator.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ecb464916e5e223952109e7eeaef4497a3243c0ccf48ab36a4ceba8cb4159f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java:365-373 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramFoldingAggregatorFactory.java:176-184 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"068cf1ba003800f412ccb29b5d51f8abb1f33ebe4a8aff6c17b311db1caf64f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/ZtestPostAggregator.java:70-78 | processing/src/main/java/org/apache/druid/query/aggregation/JavaScriptAggregatorFactory.java:83-92 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/ZtestPostAggregator.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a806874f3af572d406f4e60a1a0a002de4e5421526324fe8ca7d9c58ca7d3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyBufferAggregator.java:96-104 | processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyVectorAggregator.java:141-149 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyBufferAggregator.java:96\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyBufferAggregator.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"85e01a96fc2d5a12b5255934146aedb83316c98eb215ac679f81e511390f3122"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java:239-247 | processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesAggregatorFactory.java:207-215 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java:239\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"d337d06a63e5cc77623a62184e476cd0c48872613a84e24730b9c93214b7bf5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/DoubleFirstAggregatorFactory.java:183-191 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/DoubleLastAggregatorFactory.java:177-185 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/DoubleFirstAggregatorFactory.java:183\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/DoubleFirstAggregatorFactory.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"007cf192f2f70f3edf9908363b328440a75ff9a19ede900cc8436dcf0e9ecc8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/FloatFirstAggregatorFactory.java:177-185 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/FloatLastAggregatorFactory.java:175-183 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/FloatFirstAggregatorFactory.java:177\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/FloatFirstAggregatorFactory.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"319c15a277fa1180e0b25cfb2285ba5eaef5eff24e6e3ced570d5d2fcedb1c62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/LongFirstAggregatorFactory.java:176-184 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/LongLastAggregatorFactory.java:174-182 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/LongFirstAggregatorFactory.java:176\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/LongFirstAggregatorFactory.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f2255bd3b51a38a1df8ae6c78e347c96f1d7561f5a50d8e29abd565c9573da5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/post/JavaScriptPostAggregator.java:57-65 | processing/src/main/java/org/apache/druid/query/extraction/JavaScriptExtractionFn.java:44-52 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/post/JavaScriptPostAggregator.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"910aa6cb65226a03621c56e5ec0e94f88514c199bc01c60f101135dc353c9728"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/ExpressionLambdaAggregatorFactory.java:372-380 | processing/src/main/java/org/apache/druid/query/aggregation/ExpressionLambdaAggregatorFactory.java:405-413 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/ExpressionLambdaAggregatorFactory.java:372\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/ExpressionLambdaAggregatorFactory.java"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"63ac5bdf96f1122691444ad4ce5f5051ce7f0f3bf002bda9bc1e3696c0b277b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/FloatVectorValueMatcher.java:73-81 | processing/src/main/java/org/apache/druid/query/filter/vector/FloatVectorValueMatcher.java:109-117 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/FloatVectorValueMatcher.java:73\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/FloatVectorValueMatcher.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df711ef8bafe5be5c17042cdda7066e5a72069d6c74b6417a4eac5f835d94df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/LongVectorValueMatcher.java:72-80 | processing/src/main/java/org/apache/druid/query/filter/vector/LongVectorValueMatcher.java:108-116 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/LongVectorValueMatcher.java:72\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/LongVectorValueMatcher.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24597c8d6743975936e766e3b00f376233fee2e17cfd69994fffa809ee29d24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java:45-53 | processing/src/main/java/org/apache/druid/query/filter/vector/StringObjectVectorValueMatcher.java:47-55 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java:45\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a01878c5e4c8172e0b06d8a4fe40dddef6ca39697d4686091707b45cacf91b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java:60-68 | processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java:178-186 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java:60\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringVectorValueMatcher.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec0a98e958015458be58fef6ebd8b541e8137d1d3b1e6f7d83c59049cf0e96fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/SingleValueStringVectorValueMatcher.java:70-78 | processing/src/main/java/org/apache/druid/query/filter/vector/SingleValueStringVectorValueMatcher.java:172-180 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/SingleValueStringVectorValueMatcher.java:70\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/SingleValueStringVectorValueMatcher.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"85061b866addc5770ff87513ccc8196cca3474937b4a1651e61083fd6b4eb82a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java:412-420 | extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java:515-523 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"46939cf7ee47836a8541f5cdd18686c987a0daf9e23c46b38cf53d28efdcab42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/VectorGroupByEngine.java:458-470 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GroupByQueryEngine.java:364-372 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/VectorGroupByEngine.java:458\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/VectorGroupByEngine.java"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c4364d2b2fe882f0c6584ba135cdb074a05cc344109fadebfe23595fcfd9cb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java:188-196 | processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java:199-207 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java:188\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a14b50948bc650830834fc2ceb7bc6f5e9b762bfcf46bb46dede0a9b614183"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/planning/JoinDataSourceAnalysis.java:174-182 | processing/src/main/java/org/apache/druid/query/JoinDataSource.java:525-533 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/planning/JoinDataSourceAnalysis.java:174\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/planning/JoinDataSourceAnalysis.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"528ed19b2c32a19a78501f0eed2cea4d633f30239115450655260dea1b804a4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/search/SearchQueryQueryToolChest.java:220-228 | processing/src/main/java/org/apache/druid/query/search/SearchQueryQueryToolChest.java:252-260 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/search/SearchQueryQueryToolChest.java:220\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/SearchQueryQueryToolChest.java"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"1616e423099642b04c267ddb159c81064106cb58d9b9b12d147c52b881755db2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:210-218 | server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:245-253 | server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:291-298 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:210\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6643f386fd3872d70503529d8b1f992c321261c9751da573bf4ae5430aaad84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): extensions-contrib/opentsdb-emitter/src/main/java/org/apache/druid/emitter/opentsdb/EventConverter.java:109-116 | extensions-contrib/prometheus-emitter/src/main/java/org/apache/druid/emitter/prometheus/Metrics.java:135-142 | extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/DimensionConverter.java:81-88 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/opentsdb-emitter/src/main/java/org/apache/druid/emitter/opentsdb/EventConverter.java:109\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/opentsdb-emitter/src/main/java/org/apache/druid/emitter/opentsdb/EventConverter.java"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"865a3eec2dbf6da67ad82bea10bf2b68633fb6d7956f8499c1194f1dcdd7c14a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/aggregator/max/CompressedBigDecimalMaxAggregatorFactory.java:125-132 | extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/aggregator/min/CompressedBigDecimalMinAggregatorFactory.java:131-138 | extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/aggregator/sum/CompressedBigDecimalSumAggregatorFactory.java:131-138 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/aggregator/max/CompressedBigDecimalMaxAggregatorFactory.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"0735ee2bbb6c8a9c6f987cc0e96bafe25204825026143340adbb2b7ba2dbd687"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMaxVectorAggregator.java:85-92 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdFloatMaxVectorAggregator.java:85-92 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdLongMaxVectorAggregator.java:85-92 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMaxVectorAggregator.java:85\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMaxVectorAggregator.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"64865b4ce7c6816191df3d1635d186c4aa99614104f599df01f4988605856f1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMinVectorAggregator.java:85-92 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdFloatMinVectorAggregator.java:85-92 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdLongMinVectorAggregator.java:85-92 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMinVectorAggregator.java:85\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMinVectorAggregator.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"77959945c7c0d0e422159bd94b1a253780fa4e5471d56deaf7d4934cd10cf971"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java:250-258 | server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java:304-311 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java:250\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb1ca262f99b51005e0a9998b866a66fc588822c428f0e14feb587ba4a438081"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:190-197 | server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:224-231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:190\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cde89ea6812fb8313f9f4d54a1db3531c00ae122a56af3594d6e2bd2df15959"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:645-652 | server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:691-698 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:645\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java"},"region":{"startLine":645}}}],"partialFingerprints":{"codehealthFindingId/v1":"a76de43ff21b76cc71d9d6156478eb124bd62dd76ad61027a05ac66955ef970b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): server/src/main/java/org/apache/druid/server/initialization/jetty/ChatHandlerServerModule.java:72-79 | server/src/main/java/org/apache/druid/server/initialization/jetty/CliIndexerServerModule.java:92-99 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/initialization/jetty/ChatHandlerServerModule.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"85930e2f96796d8b91cb75e72407b1e8e88c533860a23c62001be426cf6e51ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java:784-791 | services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java:873-880 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java:784\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java"},"region":{"startLine":784}}}],"partialFingerprints":{"codehealthFindingId/v1":"ada15cb6937fb11579fe6d5cd5e07504899e9a7335504cf779f2519fdc90c132"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:413-420 | sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:449-456 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:413\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"2618778974df2693734fa4b7b3ed1b157ac51ad6a6902f66eb481706d4de447e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArrayConcatSqlAggregator.java:78-85 | sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArraySqlAggregator.java:80-88 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArrayConcatSqlAggregator.java:78\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/ArrayConcatSqlAggregator.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b582876240d15fd5ef9b00ce63ffda6742a92f1274f53213114426f4860d852"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:239-246 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:559-566 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:239\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"073d2d991b5a8f0edb3c151743f475556a4a0645a22e71dcec2eb39adb87ff32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlInsert.java:112-119 | sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlReplace.java:135-143 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlInsert.java:112\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlInsert.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"b235f0dc9081ba2b7a227439226ebd6fdd5d5221d437337bc89f36413431a479"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlInsert.java:129-136 | sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlReplace.java:162-169 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlInsert.java:129\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlInsert.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"123858b1bb35239bc701ac217b62cf03c29379a4d53d23ccfe39ead7949bb431"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java:172-179 | sql/src/main/java/org/apache/druid/sql/calcite/rel/PartialDruidQuery.java:154-161 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3eeaa507c6e354af6cf454ac5751cdf9fc3e6210bbb5572dc1669c17198929a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/timeline/IntervalTreeMap.java:533-540 | processing/src/main/java/org/apache/druid/timeline/IntervalTreeMap.java:560-567 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/timeline/IntervalTreeMap.java:533\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/timeline/IntervalTreeMap.java"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"08fff8ccb7a26c45446376756a013e0bf5562d0c1e6b5059d54e464eb2e7c71c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:4381-4388 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:4394-4401 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:4381\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":4381}}}],"partialFingerprints":{"codehealthFindingId/v1":"7264676b2820db5e264eaf0d93290e5fb638c82f57d4bd1ccfb3424ddc7497a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:5565-5572 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:5573-5580 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:5565\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":5565}}}],"partialFingerprints":{"codehealthFindingId/v1":"70f9bd9e41e350e5943a7afc6300795fd235e61c31bafa670680c401a6b2ba81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskClientAsyncImpl.java:307-314 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskClientAsyncImpl.java:324-331 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskClientAsyncImpl.java:307\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskClientAsyncImpl.java"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"d018405fc37edc754516f77fed6bb6597eca7b32c7e999dab79c0cff16abf9a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:917-924 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:956-963 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:917\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":917}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b5c807df21f8caa45156ea2af22003c2f308e760bff301b5c4017c1ad457922"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:995-1002 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/BaseRestorableTaskRunner.java:147-154 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java:995\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":995}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ee10ea91bdd61992284a17918827c790b04a8f10b6f3f865f75651eb8eb9cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java:134-141 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java:173-180 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java:134\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordDataSourcesResource.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cc81feb53044daeb2a7695154c9ca85eacb3f66365b162d073b50e752a2bc58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:308-315 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:330-337 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:308\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"591fe16bfaa42edf6bbed51e3fa233b6455bee7ce89c4cedd58b79a68ed69839"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:488-495 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:644-651 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java:488\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorResource.java"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab3ac5b8f91f2b04198417b4186f95d6c2a8fe262d3406d9774cddf6196261ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java:185-192 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/ThreadingTaskRunner.java:170-178 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java:185\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"2392632e68e65d2c16ae1e0d0fb366fc8f3ffd77567ae924a1d588b831e97683"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java:222-229 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/ThreadingTaskRunner.java:202-209 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc2310a8b665edf857698b9a370d80c9d44202ec38f981efe6f1c1afbf75370"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionCardinalityTask.java:152-159 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionDistributionTask.java:200-207 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionCardinalityTask.java:152\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionCardinalityTask.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"c43cbf5a2b1323968dcd158907bab236cce590deb5eb6a4c2aa2666e26c55015"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java:650-657 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java:721-728 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java:650\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/CompactionTask.java"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"e171b1bfa5c70d1368ee3d1713e0b8b7c011cf67bd90f79135307bbc75390519"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/worker/shuffle/DeepStorageIntermediaryDataManager.java:74-81 | indexing-service/src/main/java/org/apache/druid/indexing/worker/shuffle/LocalIntermediaryDataManager.java:294-301 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/worker/shuffle/DeepStorageIntermediaryDataManager.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7888c35d3cc8a304dee4ddf0d46c4aed0401be2d18d918468e43b00fd4b9c4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPusher.java:68-75 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentPusher.java:80-87 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPusher.java:68\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentPusher.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b0c4814fefe034530d7433ceb9426b572984cacfd04f734ed05bfcc3a34ef23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java:118-125 | extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/WhiteListBasedConverter.java:146-153 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java:118\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe614041ad1aee27d14f760eb2eecd34838a94eae27de2bef4f86da1830ee491"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java:209-216 | extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/WhiteListBasedConverter.java:275-282 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java:209\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"f03f547dfc5a93c98ac209d639d48eabc2d41a1476e8aa2ea913661e7f661109"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/DoubleHllSketchBuildVectorProcessor.java:49-56 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/LongHllSketchBuildVectorProcessor.java:49-56 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/DoubleHllSketchBuildVectorProcessor.java:49\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/DoubleHllSketchBuildVectorProcessor.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"83d0f0361e92827f71cc27d120770e9941cef637c8d477472a5c48bbee3c1693"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchAggregatorFactory.java:273-280 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchMergeAggregatorFactory.java:172-180 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchAggregatorFactory.java:273\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchAggregatorFactory.java"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"31a1481eb1b084838c74933b82037cb94bb6178876b06467326314002867460e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java:996-1003 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java:1037-1044 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java"},"region":{"startLine":996}}}],"partialFingerprints":{"codehealthFindingId/v1":"79b25ed6aa9a9146acf0b0a5b28f34b34548ee0a6e9912447ee2eb9d0fa8a495"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyBufferAggregator.java:60-67 | processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyVectorAggregator.java:161-168 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyBufferAggregator.java:60\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyBufferAggregator.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"616b5c53afb8f288a387666a24b93527466e8bed46588e58b8b6eaa16b575fab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/MultiValueStringCardinalityVectorProcessor.java:87-94 | processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/SingleValueStringCardinalityVectorProcessor.java:78-85 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/MultiValueStringCardinalityVectorProcessor.java:87\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/MultiValueStringCardinalityVectorProcessor.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c42922e1a4d9306fbed641c89bce7d68ebe6475d8375817b9d196fdbdf69fa7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstAggregatorFactory.java:207-214 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/StringLastAggregatorFactory.java:180-187 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstAggregatorFactory.java:207\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/StringFirstAggregatorFactory.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef0f7ae83385535c110867d83eeed29da933feb43b1e1828985fc0875eac0e37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/DoubleMaxVectorAggregator.java:45-52 | processing/src/main/java/org/apache/druid/query/aggregation/DoubleMinVectorAggregator.java:45-52 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/DoubleMaxVectorAggregator.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"f56e98d1275e8ec4416820136bd60e77c01291b86a5d6789c192ffadaab10b0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/FloatMaxVectorAggregator.java:45-52 | processing/src/main/java/org/apache/druid/query/aggregation/FloatMinVectorAggregator.java:45-52 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/FloatMaxVectorAggregator.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b6ac2ce0a035ec3d686ff2cc7bf1bc8b8b88b3943c57c65c7a178f8e824d6a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/LongMaxVectorAggregator.java:45-52 | processing/src/main/java/org/apache/druid/query/aggregation/LongMinVectorAggregator.java:45-52 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/LongMaxVectorAggregator.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"566edc1501a24e1b52788517719f3a79bbf3437cacba6e9688dfd44c335ad9fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringComplexMetricSerde.java:237-244 | processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringSimpleStagedSerde.java:101-109 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringComplexMetricSerde.java:237\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/SerializablePairLongStringComplexMetricSerde.java"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1ef45082b6a0cb4c51d241131cf761ddeeabd7fbb4e609678887b3f662a7f29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java:118-125 | extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java:259-266 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java:118\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bac9ec974d7f9feebd4a4c29c6d410adc648ee6d549f88c53c3773b7776690f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/expression/TimestampExtractExprMacro.java:189-196 | processing/src/main/java/org/apache/druid/query/expression/TimestampExtractExprMacro.java:254-261 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/expression/TimestampExtractExprMacro.java:189\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/TimestampExtractExprMacro.java"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ed69ee0372a221e5c90472b700e3f822fb089e50f69a72e06acd3e3a3bef580"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/rowsandcols/semantic/DefaultClusteredGroupPartitioner.java:84-91 | processing/src/main/java/org/apache/druid/query/rowsandcols/ArrayListRowsAndColumns.java:482-489 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/rowsandcols/semantic/DefaultClusteredGroupPartitioner.java:84\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/semantic/DefaultClusteredGroupPartitioner.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"a91fa94a8a6e6eb9c862a308b1c54f72d6690ef98d54e4a004b3a212dae1ad55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java:380-387 | processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java:404-411 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java:380\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"147e5d9ad1970cc0bd48065275a6693195638c97c30aa31c4fc2fc59d55d69c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java:191-198 | processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java:231-238 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java:191\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f563941b9582981bdcbac22c9b2f47be2e73ed6d8e84526e3017eeb653d7a49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 7): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:293-299 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionCardinalityTask.java:140-146 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialDimensionDistributionTask.java:188-194 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialHashSegmentGenerateTask.java:136-142 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/PartialRangeSegmentGenerateTask.java:154-160 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/SinglePhaseSubTask.java:197-203 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/IndexTask.java:305-311 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 7 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 7 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:293\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"5989a04310e6199a2d48bd1d31ace1891738aa718377391fe2c12e64e8025463"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:5558-5564 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:5566-5572 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:5574-5580 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:5558\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":5558}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4f9e5a1d8891f9584bfc589eb901e057acd17074f72fe42e46f1938b642f28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java:57-63 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchToHistogramPostAggregator.java:57-63 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java:57-63 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce0aae420d4be6b1b16dd417a05a61a13a604d1f17249ea6020c30313c9c61c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMeansPostAggregator.java:61-67 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMetricsSumEstimatePostAggregator.java:64-70 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToVariancesPostAggregator.java:61-67 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMeansPostAggregator.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"65b5a8399c9109da2edc20bbcae7cc23458830281fa83782a83418706474c82a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/util/ToObjectVectorColumnProcessorFactory.java:92-98 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/util/ToObjectVectorColumnProcessorFactory.java:109-115 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/util/ToObjectVectorColumnProcessorFactory.java:126-132 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/util/ToObjectVectorColumnProcessorFactory.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ee6d1387fa064fb6860bd542199a592cb05d5be66026015ab1dd5cd6bfde92a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:587-593 | server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:696-702 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java:587\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/LookupCoordinatorResource.java"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"246c0f2a6122a64139d27cab6264b9efe9f6b024984af785a7e8cf94a3730f9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): server/src/main/java/org/apache/druid/server/security/TLSUtils.java:185-191 | server/src/main/java/org/apache/druid/server/security/TLSUtils.java:201-207 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/security/TLSUtils.java:185\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/security/TLSUtils.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf83b14c6b050dbfff432c7cfe7a46ae71cfc299b1003b13b4f8d50eb9b9bffb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:724-730 | sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java:794-800 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"88b3b139b1caff9250e45730188c94eb742c41cde1154d6964e6b24c53748acc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BitwiseSqlAggregator.java:121-127 | sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/StringSqlAggregator.java:102-108 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BitwiseSqlAggregator.java:121\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/aggregation/builtin/BitwiseSqlAggregator.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4f32b626865ecfb967488c25812209fe40020741d5815e61eda084f58bc85cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:228-234 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java:708-714 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"abad50dcf3f93f387196fe393cb544c35d1f518d4247b1d0a423dae15ce712d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java:48-54 | sql/src/main/java/org/apache/druid/sql/calcite/filtration/RemoveRedundantIsTrue.java:48-54 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java:48\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/BottomUpTransform.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"f908526028fcaf11f7ba4504aea67ec2d18b14c6d84b8682da647042fe9432bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/planner/IngestHandler.java:280-286 | sql/src/main/java/org/apache/druid/sql/calcite/planner/IngestHandler.java:347-355 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/planner/IngestHandler.java:280\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/IngestHandler.java"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff9821d5b064cc299c8ebddc171f69fa0b815afd2f7ded2c7f15b75480a47772"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidCorrelateUnnestRel.java:228-234 | sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidCorrelateUnnestRel.java:259-265 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidCorrelateUnnestRel.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7dad3b3228e5b30a568cf0a4a3bf869fa7d9c41c542724a1db03d41ddb83057"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidCorrelateUnnestRule.java:143-149 | sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidJoinRule.java:188-194 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidCorrelateUnnestRule.java:143\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidCorrelateUnnestRule.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a47dfac8afbd9fbbb025a760450bc31322b43c8718f2336a70391abf7cf69d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/GlobalTaskLockbox.java:326-332 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/GlobalTaskLockbox.java:352-358 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/GlobalTaskLockbox.java"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"3787ca029104c67b88fab4f0fdef6e66c3c2e216d313d1d5abc6a883cebbaf48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java:77-83 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3DataSegmentMover.java:74-80 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java:77\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/aliyun-oss-extensions/src/main/java/org/apache/druid/storage/aliyun/OssDataSegmentMover.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae1c8460fe5986adf9a632f1ce59d1050a350bbfefdb6ee49515477390902337"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): extensions-core/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java:66-73 | extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusher.java:269-275 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f7549a8598a73a837c8833820fcf7c65ec1c44d903ab9cf2e6c26a20d4086c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/ByteBufferCompressedBigDecimal.java:80-86 | extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/ByteBufferCompressedBigDecimal.java:91-97 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/ByteBufferCompressedBigDecimal.java:80\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/compressed-bigdecimal/src/main/java/org/apache/druid/compressedbigdecimal/ByteBufferCompressedBigDecimal.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"efdf4958a9e6218218b39a3efa073e701c074478567a929623d20fa3473fe2d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/DoubleHllSketchBuildVectorProcessor.java:66-72 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/LongHllSketchBuildVectorProcessor.java:66-72 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/DoubleHllSketchBuildVectorProcessor.java:66\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/DoubleHllSketchBuildVectorProcessor.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8045dff95ac8999dc2af84d58b345b467b0f11985cae682015a64b214b48209"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:1377-1383 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:1393-1399 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java:1377\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1377}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5717bd9dbe6ee0a304f26ae8ad5dff0dabbb48f144e778fba1537c315752af0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMeanVectorAggregator.java:99-105 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleSumVectorAggregator.java:54-60 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMeanVectorAggregator.java:99\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMeanVectorAggregator.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"a47a7a6b53bf2c24c66f7fc1db20a345f4456c3141dbe1075b4361d56299cd52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:130-136 | processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:276-282 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java:130\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/VectorValueMatcher.java"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"06c1487f89909b09102a461528dd061bcf8b2d4f98c12cb36f06289df40ddd6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:665-671 | processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:678-684 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:665\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3e0ca319ca97e82e35d812eef2ec6ccf651c561f1b2425076f88a73bd903986"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:989-995 | processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:998-1004 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java:989\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16d58f7070011c3390997480d87e510b6c4b0ca15933ddea0c6da090b2ad3cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:287-293 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:346-352 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:287\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"54775ba885634581e209a3041631d3613d1bc8b40ed2731d7f015a840d79f4ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GroupByMergingQueryRunner.java:401-407 | processing/src/main/java/org/apache/druid/query/ChainedExecutionQueryRunner.java:177-183 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GroupByMergingQueryRunner.java:401\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/GroupByMergingQueryRunner.java"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba39390b3bc839fa2f452afc767d6acbaf1302e09e3a32f980d417204fff9129"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java:413-420 | processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java:1081-1087 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java:413\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"96941cacaea8050a02fb92208e68e111b58337e1d8a2002bcc177e4567d48ad8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java:925-931 | processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryEngine.java:330-336 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java:925\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/GroupingEngine.java"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"75e3d70dd320f85e642dacdeeb4a36df12866d5f40d880fc726dbe9ea16ccbc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryQueryToolChest.java:390-396 | processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryQueryToolChest.java:400-406 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryQueryToolChest.java:390\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/metadata/SegmentMetadataQueryQueryToolChest.java"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"73fa1fc2e20cde75a98f4abea5aed61fb5371757483942be83ed5455463b49fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java:287-293 | processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java:301-307 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java:287\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/timeseries/TimeseriesQueryQueryToolChest.java"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae91df7bb8003eb0d352a96097c54199d43f510916632f1d9d058a18aa72e72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/topn/types/NullableNumericTopNColumnAggregatesProcessor.java:125-131 | processing/src/main/java/org/apache/druid/query/topn/types/StringTopNColumnAggregatesProcessor.java:89-95 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/topn/types/NullableNumericTopNColumnAggregatesProcessor.java:125\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/types/NullableNumericTopNColumnAggregatesProcessor.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"40cf3c7027905ccc7d9685008816596c2e929d306c1190f7fe441837eca3d602"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/topn/Generic1AggPooledTopNScannerPrototype.java:55-61 | processing/src/main/java/org/apache/druid/query/topn/Generic2AggPooledTopNScannerPrototype.java:58-64 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/topn/Generic1AggPooledTopNScannerPrototype.java:55\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/Generic1AggPooledTopNScannerPrototype.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c17bd092823e48d533300c3948385ef3dce5657c83da1203e62bf6cd2ea5150"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java:298-304 | processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java:320-326 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/TopNQueryQueryToolChest.java"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fccb62b2a91c16dd7ca89efa6dceb900dfeb2a0c061ada21749387b2e87e0df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/DeltaInputSource.java:164-171 | extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/DeltaInputSource.java:222-228 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/DeltaInputSource.java:164\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/druid-deltalake-extensions/src/main/java/org/apache/druid/delta/input/DeltaInputSource.java"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e3a0838a5d5bfb7ae2bcabbef201df4a7c95fe3434c41a6205f1ba0964285b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1491-1496 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1505-1510 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1519-1524 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1533-1538 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1547-1552 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java:1491\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/ParallelIndexSupervisorTask.java"},"region":{"startLine":1491}}}],"partialFingerprints":{"codehealthFindingId/v1":"6680e8dca1e2b8437122c6d6379872847b143b6c25ba5127ed182b21507f4d92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchTTestPostAggregator.java:102-107 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMeansPostAggregator.java:61-66 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMetricsSumEstimatePostAggregator.java:64-69 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToVariancesPostAggregator.java:61-66 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchTTestPostAggregator.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"89b3f7b4a6f5bb2dae2b0776ebae43948687ccc1043a50b1123b174d98c7924c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:263-268 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:287-292 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:319-324 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:346-351 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef8451f12f3d8582182d38460b0a15bf7f9ff29cfa716c2aeda0dbe4f1911cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): server/src/main/java/org/apache/druid/server/metrics/HistoricalMetricsMonitor.java:87-93 | server/src/main/java/org/apache/druid/server/metrics/HistoricalMetricsMonitor.java:102-107 | server/src/main/java/org/apache/druid/server/metrics/SegmentStatsMonitor.java:81-86 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/metrics/HistoricalMetricsMonitor.java:102\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/metrics/HistoricalMetricsMonitor.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f75f6393b1660a9efc41f8763255e2c489b386f69ab89ca4798343d86395b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentAllocateAction.java:110-118 | indexing-service/src/main/java/org/apache/druid/indexing/common/SegmentLock.java:63-68 | indexing-service/src/main/java/org/apache/druid/indexing/common/TimeChunkLock.java:57-62 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentAllocateAction.java"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"70866a3996b9fad736ca76e7c4d9944fe60580f2203620d719bf0f0e899a5d72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchBuildVectorAggregator.java:77-82 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchBuildVectorAggregator.java:77-82 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchBuildVectorAggregator.java:77-82 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchBuildVectorAggregator.java:77\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchBuildVectorAggregator.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"b50ace1c4c993bbdb916ed5e99891293a2d2adb413c385e42ca7b46f34b893fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchBuildVectorAggregator.java:74-80 | extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramVectorAggregator.java:74-79 | processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/FloatCardinalityVectorProcessor.java:74-79 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchBuildVectorAggregator.java:74\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchBuildVectorAggregator.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bc93b2d90506567f8cc74abf330230366125e876e1a8c8f10b72d7cc5a51cc3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceBufferAggregator.java:134-139 | extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceBufferAggregator.java:166-171 | extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceBufferAggregator.java:198-203 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceBufferAggregator.java:134\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceBufferAggregator.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"575b4638ae9eb24bf6f0d1e1601770ba9d655aee69c40ec9fd289445ecc3687e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceDoubleVectorAggregator.java:91-96 | extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceFloatVectorAggregator.java:91-96 | extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceLongVectorAggregator.java:91-96 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceDoubleVectorAggregator.java:91\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceDoubleVectorAggregator.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"86fff2c552fab98f6ba785fc44ee4399dfabdba3242cf26bc5044c0cdc8f3885"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java:119-124 | processing/src/main/java/org/apache/druid/query/filter/vector/FloatVectorValueMatcher.java:121-126 | processing/src/main/java/org/apache/druid/query/filter/vector/LongVectorValueMatcher.java:120-125 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java:119\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5183e23111430dad69e117faaf448be0f20fe764e7047101b796485a59b94f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): server/src/main/java/org/apache/druid/server/coordinator/rules/CompositePartialLoadMatcher.java:161-166 | server/src/main/java/org/apache/druid/server/coordinator/rules/ProjectionPartialLoadMatcher.java:70-75 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/coordinator/rules/CompositePartialLoadMatcher.java:161\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/rules/CompositePartialLoadMatcher.java"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"8db6abda3d56b03eeb7ed9c35e3768baa5d629b376ebc52086ae9bf3eb5e6443"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/BaseDynamicConfigSyncer.java:275-280 | indexing-service/src/main/java/org/apache/druid/indexing/compact/OverlordCompactionScheduler.java:508-513 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/http/BaseDynamicConfigSyncer.java:275\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/BaseDynamicConfigSyncer.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"4feb8a2918079dbcdcfd6419cc6609a12638027196e7923f8792583fc503763f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): server/src/main/java/org/apache/druid/server/http/CoordinatorResource.java:71-76 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java:233-238 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/http/CoordinatorResource.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bfb7eb59b332b9f696ac53110dd9b056880599fb1613cf7c139fa06d21a1ccb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:468-473 | sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:553-558 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java:468\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/MultiValueStringOperatorConversions.java"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f753f825235b549f23c5d3820c3899ba27f05d9a5b52098ef9fb9c599b6ca96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/filtration/Ranges.java:82-87 | sql/src/main/java/org/apache/druid/sql/calcite/filtration/Ranges.java:103-108 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/filtration/Ranges.java:82\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/filtration/Ranges.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"922d91c97e8c822610376acc4b132213ae087eb9ba0b1fe0f95ec4afffc2176c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidRexExecutor.java:162-167 | sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidRexExecutor.java:194-199 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidRexExecutor.java:162\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidRexExecutor.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9c8d1ce22b9262327efeb05104c9cfc72dfbf8c6fc74af7bb0791bb3ea434cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/http/CsvWriter.java:79-84 | sql/src/main/java/org/apache/druid/sql/http/CsvWriter.java:105-110 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/http/CsvWriter.java:79\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/http/CsvWriter.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8a0443b95f5584492d084b2b6db1f738b95538904daeb15022403e70b0d8193"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/http/SqlResource.java:103-108 | indexing-service/src/main/java/org/apache/druid/indexing/input/DruidInputSource.java:216-221 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/http/SqlResource.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"298ba9570e6eb6d434f7136c9d8b755e7e40e559dcbfb30fa11389c84e007a77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1677-1682 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1706-1711 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:1677\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1677}}}],"partialFingerprints":{"codehealthFindingId/v1":"2938647422bb17f7c82f2c0c3a0891ecfeff8bbf257da94c351186e87bf9867a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:3920-3925 | indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:4219-4225 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java:3920\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":3920}}}],"partialFingerprints":{"codehealthFindingId/v1":"cded10805ea7f1c0a1dd4dd7b35436ea64e39dab3be9bde06be23d7a912ba036"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java:207-212 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/SimpleWorkerProvisioningStrategy.java:152-157 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java:207\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/PendingTaskBasedWorkerProvisioningStrategy.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a58dc243ecd991a6d77321a30aaff172d1f1b93fb521ed0eb2f656559fccda6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java:1441-1446 | indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java:1471-1476 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java:1441\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskLockbox.java"},"region":{"startLine":1441}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5cff72b003d80afc7fbec29ab0829297930f6ed420d604af37beb2ece8ab270"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java:158-164 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamStartSequenceNumbers.java:189-194 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java:158\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSeekableStreamEndSequenceNumbers.java"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"eefc83c68747de24623524d4f19b5178ec2a30b79f14ccdc27944e1ab52be797"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentTransactionalInsertAction.java:322-327 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/TaskLockHelper.java:236-241 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentTransactionalInsertAction.java:322\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentTransactionalInsertAction.java"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee76f91f1355923315da3bf88a61a51c4c2bcb83b5a78e0ab0805f51dcc9a9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/InlineSchemasAvroBytesDecoder.java:117-122 | extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/SchemaRepoBasedAvroBytesDecoder.java:80-85 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/InlineSchemasAvroBytesDecoder.java:117\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/InlineSchemasAvroBytesDecoder.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4a21c6e48169249ea391238d1568643f9e737a9b58de7f50d3a94a83ed3b70e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:174-179 | extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/data/input/kinesis/KinesisInputReader.java:111-116 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java:174\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputReader.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d26548187b354ed6075134f97c99c1e304c3319f0f299b9c65ad5cd27f62724"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleExportStorageProvider.java:118-123 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/output/S3ExportStorageProvider.java:167-172 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleExportStorageProvider.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"46ffbde23ba43e1040ee08f2ade18a4cfa197b2d42bb0cbf9f9dd2f69ea9000d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleStorageConnector.java:190-195 | extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/output/S3StorageConnector.java:126-131 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/google-extensions/src/main/java/org/apache/druid/storage/google/output/GoogleStorageConnector.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"2868dcaf7209d84e287fec24703a6feeeaf41020cda8c240f3be8b7c82e83f2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/SendAllTimelineEventConverter.java:88-93 | extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/WhiteListBasedDruidToTimelineEventConverter.java:192-197 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/ambari-metrics-emitter/src/main/java/org/apache/druid/emitter/ambari/metrics/SendAllTimelineEventConverter.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb9a430de883174feb3b71bd605e8755b96206b2e4d92642daeae185abc4f0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-contrib/dropwizard-emitter/src/main/java/org/apache/druid/emitter/dropwizard/DropwizardEmitter.java:102-107 | extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitter.java:117-123 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/dropwizard-emitter/src/main/java/org/apache/druid/emitter/dropwizard/DropwizardEmitter.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"779ac1a48e5ba01980666d8ae030e444b514f589b9a1ce9b5c6ea591a90130e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/SendAllGraphiteEventConverter.java:101-106 | extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/WhiteListBasedConverter.java:214-219 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/SendAllGraphiteEventConverter.java:101\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/SendAllGraphiteEventConverter.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"6899c4401e77e0c899ce44d2259e50da68d65aeb5c3b6bba15171c58a8b1f218"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/LongHllSketchBuildVectorProcessor.java:61-66 | processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/LongCardinalityVectorProcessor.java:74-79 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/LongHllSketchBuildVectorProcessor.java:61\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/vector/LongHllSketchBuildVectorProcessor.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"af26fc90af46755941f75f8ef51b2cf5528c1daa48b6fc50f45db9ba431dc687"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java:108-113 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java:108-113 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java:108\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchToHistogramPostAggregator.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"34e2fa81a71eda61cd7b1a6f4b64e6bb4aaa786a1219a8ac45d42ab6598da2ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildAggregator.java:115-120 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildBufferAggregator.java:129-134 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildAggregator.java:115\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchBuildAggregator.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcfffeef19bebb1347b85605f88682e99f9c2ffb8f98769560f4f3ac779f8bc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramVectorAggregator.java:75-80 | processing/src/main/java/org/apache/druid/query/aggregation/mean/DoubleMeanVectorAggregator.java:74-79 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramVectorAggregator.java:75\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramVectorAggregator.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"c50343371ddb1114f2d884ba5434674962609c84d61225aa1892fbdd97318674"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleGreatestPostAggregator.java:84-89 | processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java:84-89 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleGreatestPostAggregator.java:84\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleGreatestPostAggregator.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e9a14fdba3fd0d4508e0f8ce46838cb18c38ebb9f912ed4c143db9fcee0a384"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/post/LongGreatestPostAggregator.java:84-89 | processing/src/main/java/org/apache/druid/query/aggregation/post/LongLeastPostAggregator.java:84-89 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/post/LongGreatestPostAggregator.java:84\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/post/LongGreatestPostAggregator.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bcc74d253aa14e69ad65a542062a0c2c4456ba886e2870ac5c4ec56a4c564f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/DoubleMeanAverager.java:33-38 | extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/DoubleMeanNoNullAverager.java:33-38 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/DoubleMeanAverager.java:33\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/DoubleMeanAverager.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa3c3204a316594aadacc710b816b85273bb3a7316b74bd1ddbedac912aca878"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/LongMeanAverager.java:33-38 | extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/LongMeanNoNullAverager.java:33-38 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/LongMeanAverager.java:33\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/averagers/LongMeanAverager.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a3899f46cb048a89e817c617bc39e30035e62c7ffa32b875edc5ff1230a9a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java:84-89 | processing/src/main/java/org/apache/druid/query/filter/vector/StringObjectVectorValueMatcher.java:76-81 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java:84\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/MultiValueStringObjectVectorValueMatcher.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"2042de848847161ba875ec2e7c151b57c0c2b527c69eb6b61ed8287b7e9ad901"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): extensions-core/lookups-cached-global/src/main/java/org/apache/druid/query/lookup/namespace/UriExtractionNamespace.java:315-320 | extensions-core/lookups-cached-global/src/main/java/org/apache/druid/query/lookup/namespace/UriExtractionNamespace.java:445-450 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/lookups-cached-global/src/main/java/org/apache/druid/query/lookup/namespace/UriExtractionNamespace.java:315\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/lookups-cached-global/src/main/java/org/apache/druid/query/lookup/namespace/UriExtractionNamespace.java"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc523769a4ecae467ca11d3d4aa6161c484656fe86b79801e7fb73b2c3db8e6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferHashTable.java:214-219 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/LimitedBufferHashGrouper.java:555-561 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferHashTable.java"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b9ad155223fdd6c486675a3b252e0cd5cf5643e9bf094e6b33d3458572fc604"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:244-249 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java:330-335 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"f62ad8dea296d8fa6eff3788a7fd56cf1344f1493435663a11f4d6f389019607"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/rowsandcols/MapOfColumnsRowsAndColumns.java:101-106 | processing/src/main/java/org/apache/druid/query/rowsandcols/MapOfColumnsRowsAndColumns.java:121-127 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/rowsandcols/MapOfColumnsRowsAndColumns.java:101\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/MapOfColumnsRowsAndColumns.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ebedb5cc2c927266225cbbfb9d51a24e9df3cd7c5b4ed14e060da175cd96633"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java:296-301 | processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java:318-323 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java:296\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/search/UseIndexesStrategy.java"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b696ee4dfac9e35af199d43741071d34d85ee03059e5412fded7adec36c492"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/topn/types/StringTopNColumnAggregatesProcessor.java:152-157 | processing/src/main/java/org/apache/druid/query/topn/types/StringTopNColumnAggregatesProcessor.java:196-201 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/topn/types/StringTopNColumnAggregatesProcessor.java:152\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/topn/types/StringTopNColumnAggregatesProcessor.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f651b7df4b59f023ad54995b1a3b40fd61be70852ae890bc68ff579618da539"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskQueue.java:187-191 | indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentAllocateAction.java:109-116 | indexing-service/src/main/java/org/apache/druid/indexing/common/SegmentLock.java:62-66 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskQueue.java"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9cac2389fbb48c647016899df7bafec84e422ce8804412285276b406503d2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/DoubleCardinalityVectorProcessor.java:77-81 | processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/FloatCardinalityVectorProcessor.java:77-81 | processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/LongCardinalityVectorProcessor.java:77-81 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/DoubleCardinalityVectorProcessor.java:77\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/cardinality/vector/DoubleCardinalityVectorProcessor.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d49bf20bd3c4a82a1f349a1176dd60fcb8fdb38a6c0bed44a8877b1d1034592"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/NullableDoubleGroupByVectorColumnSelector.java:53-57 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/NullableFloatGroupByVectorColumnSelector.java:53-57 | processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/NullableLongGroupByVectorColumnSelector.java:53-57 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/NullableDoubleGroupByVectorColumnSelector.java:53\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/NullableDoubleGroupByVectorColumnSelector.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"5039073cde282093efcda3dc5a1fae8ec4f76ad078330fb4c671ba71259fe19a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): server/src/main/java/org/apache/druid/server/coordinator/loading/SegmentReplicationStatus.java:103-107 | server/src/main/java/org/apache/druid/server/coordinator/loading/SegmentReplicationStatus.java:142-146 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060server/src/main/java/org/apache/druid/server/coordinator/loading/SegmentReplicationStatus.java:103\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/SegmentReplicationStatus.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"937bb0bc3726544a7891523b38f0bf29f966a2b839fb6c3334120c97166cd881"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidCorrelateUnnestRule.java:130-134 | sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidJoinRule.java:149-155 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidCorrelateUnnestRule.java:130\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidCorrelateUnnestRule.java"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fed01ce7ec5073504fd70aa64c630e2b2c3d02b8816f3321bf48189e53949e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java:199-203 | extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisorTuningConfig.java:230-234 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/supervisor/RabbitStreamSupervisorTuningConfig.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"193ecd7d44258022dde4f051c7c4cbd8beef08f23de1a4aa87d9a6c0d9361439"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/SinglePhaseSubTask.java:434-438 | indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/SinglePhaseSubTask.java:446-450 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/SinglePhaseSubTask.java"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"661eb11cf68aae604fdde8626ff19f15378639275d0dec7f9279c4d0b15bd56e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): indexing-service/src/main/java/org/apache/druid/indexing/common/SegmentLock.java:205-210 | indexing-service/src/main/java/org/apache/druid/indexing/common/TimeChunkLock.java:186-190 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/SegmentLock.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ec06e5ed5f143f26d1bf25cb4a03c135f0763680a5bed2170d6155ccc6c314"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllSketchBuildBufferAggregatorHelper.java:60-64 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllSketchMergeBufferAggregatorHelper.java:69-73 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllSketchBuildBufferAggregatorHelper.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ce2ce5fc61344185d4564900c2a909bce6319e976fafa109774d00d9f84ece"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogramVectorAggregator.java:71-75 | extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceDoubleVectorAggregator.java:86-90 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogramVectorAggregator.java:71\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogramVectorAggregator.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0170acf71da0f0e9d7d67009ec5beba8bb122804da057242aecfd9228fa55e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/DoubleFirstAggregatorFactory.java:213-217 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/DoubleLastAggregatorFactory.java:207-211 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/DoubleFirstAggregatorFactory.java"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"703241712a5a9b0d108256675a92fc348393437c71f43cce157193d56a9378a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/FloatFirstAggregatorFactory.java:208-212 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/FloatLastAggregatorFactory.java:205-209 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/FloatFirstAggregatorFactory.java"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e057326c6af1a76184d2288943dce68aa53071e630f99a99f959b20a4461530"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/LongFirstAggregatorFactory.java:206-210 | processing/src/main/java/org/apache/druid/query/aggregation/firstlast/last/LongLastAggregatorFactory.java:204-208 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/firstlast/first/LongFirstAggregatorFactory.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5f64d00b6c55bff394f2a632d43ebdf28c2b5994b7bc74bf9ed396cc2d00449"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java:86-90 | processing/src/main/java/org/apache/druid/query/aggregation/post/LongLeastPostAggregator.java:86-90 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java:86\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"364311f9b239fa6d0473cfcc7bc5cd9242e60579dba16b79594270ca6c35deb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java:62-66 | processing/src/main/java/org/apache/druid/query/filter/vector/FloatVectorValueMatcher.java:64-68 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/vector/DoubleVectorValueMatcher.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d975924cc67812ebb26e02a693cae1b8501016a76852cbf9d78beb562f4706c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java:473-477 | processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java:513-517 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java:473\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/expression/NestedDataExpressions.java"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"767e56073ad8a97c0ea2e3d2ccaa39f415fd88b46cf49b44d7d1e0409babe1c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/operator/window/ranking/WindowDenseRankProcessor.java:48-52 | processing/src/main/java/org/apache/druid/query/operator/window/ranking/WindowRankProcessor.java:78-83 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060processing/src/main/java/org/apache/druid/query/operator/window/ranking/WindowDenseRankProcessor.java:48\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/operator/window/ranking/WindowDenseRankProcessor.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"837226b39770d4cfba2511b6a99f459367a2b94a3ca1e31ce97fd3c3513fc1e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputFormat.java:210-227 | processing/src/main/java/org/apache/druid/timeline/CompactionState.java:154-171 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/data/input/kafkainput/KafkaInputFormat.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"225aa02f1f470a919413297f7340183c6c422a3dc3053f72bbff60fa5044dda2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (41 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchComplexMetricSerde.java:49-89 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchComplexMetricSerde.java:49-89 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchComplexMetricSerde.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"4663ccd988fda09ed6380813899b2fcbdf2330e911bb3fa36cf938166a690cb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchComplexMetricSerde.java:62-87 | extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchComplexMetricSerde.java:62-87 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllDoublesSketchComplexMetricSerde.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"229c7422918fba9c86db5672a9f1a2d638ed3679c946d53a506647006a23cfd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMaxVectorAggregator.java:52-67 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMinVectorAggregator.java:52-67 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdDoubleMaxVectorAggregator.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"665839bd93ff8e2e500d3f15f8e49ee54a37c5fa819ad7c0676161198d1cd7c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdFloatMaxVectorAggregator.java:52-67 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdFloatMinVectorAggregator.java:52-67 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdFloatMaxVectorAggregator.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"beee7ffd90001a831df93fee979d9c8e8b32b41ce79f932e2d8bdbb144ec1e51"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdLongMaxVectorAggregator.java:52-67 | processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdLongMinVectorAggregator.java:52-67 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/aggregation/simd/SimdLongMaxVectorAggregator.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"32af7d680c5a4b0a2c88de7ecfa2cbd989718d13f7b6ed120fe40fd87b278e42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): processing/src/main/java/org/apache/druid/query/filter/ArrayContainsElementFilter.java:184-206 | processing/src/main/java/org/apache/druid/query/filter/EqualityFilter.java:181-203 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/filter/ArrayContainsElementFilter.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"72e9c06f32d97abfbff298e7813f24aec73234a7bbdc95716c1c2e17823e9470"}},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cb1485703b6cc27d6293274c31a2d2ca89ef28c885c13d8c87292ee40ec8a563"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java: indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java changed 7 times in last 90 days, max complexity 69. 2 of those changes were fix/bug commits, and the other 5 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"803781307c8191eadafdc219278c6c2bf7247de0f377071fb666e2e21a2798b4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java: server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java changed 17 times in last 90 days, max complexity 17. 7 of those changes were fix/bug commits, and the other 10 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/SegmentLocalCacheManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e4b7dc1c84935111a1a43e72fd1c510dfeb6eddaff01b4790592c5e3d58b81a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java: indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java changed 9 times in last 90 days, max complexity 23. 2 of those changes were fix/bug commits, and the other 7 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisor.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40b6fb8b97cd046ac09c4354d1c2d2f20b86698050516c91eac205a544d85692"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java: indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java changed 8 times in last 90 days, max complexity 22. 1 of those changes was a fix/bug commit, and the other 7 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/seekablestream/supervisor/autoscaler/CostBasedAutoScaler.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"76a244e1cfecfb17e9b42de233da515df534f03ab6183d2ab746d29dc147c1b8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java: indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java changed 4 times in last 90 days, max complexity 42. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/ForkingTaskRunner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8525a289cdb76de89a46a59747779c6e51073bfef0c7071ba2fed422fd2fb566"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: processing/src/main/java/org/apache/druid/segment/projections/Projections.java: processing/src/main/java/org/apache/druid/segment/projections/Projections.java changed 6 times in last 90 days, max complexity 27. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/projections/Projections.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf106ba10c57683e467fc351902cd4b640a4885750f32c3bee91e511cdc7166e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java: server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java changed 8 times in last 90 days, max complexity 19. 1 of those changes was a fix/bug commit, and the other 7 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/segment/loading/PartialSegmentMetadataCacheEntry.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ff4fab4a8a0a2be034f1c6d1ce1160e6c93bb92777a0bb86ae9e458badb408f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java: processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java changed 5 times in last 90 days, max complexity 18. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea3a808db8b4b2b2f13c26ffcb0bbd0878be88243b19e19f9141c438398286aa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java: server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java changed 5 times in last 90 days, max complexity 17. 1 of those changes was a fix/bug commit, and the other 4 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/loading/StrategicSegmentAssigner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7ce6db8732a8881c63eba56196be7eb6fbb0dbf21559b5caaeb8fb4f8863719"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java: indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java changed 3 times in last 90 days, max complexity 26. 1 of those changes was a fix/bug commit, and the other 2 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/hrtr/HttpRemoteTaskRunner.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"071316d0ae4d5f5b1132fa3cfd198147a5e91a99ee970b7245db32867d622242"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 61 significant file(s) lose their only recent owner: processing/src/main/java/org/apache/druid/segment/file/PartialSegmentFileMapperV10.java, processing/src/main/java/org/apache/druid/segment/IndexMergerBase.java, processing/src/main/java/org/apache/druid/segment/PartialQueryableIndex.java, processing/src/main/java/org/apache/druid/segment/IndexMergerV10.java, services/src/main/java/org/apache/druid/cli/DumpSegment.java, processing/src/main/java/org/apache/druid/math/expr/vector/VectorProcessors.java, server/src/main/java/org/apache/druid/segment/indexing/DataSchema.java, processing/src/main/java/org/apache/druid/segment/UnnestCursorFactory.java (\u002B53 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7995b8498cad97557412e85a5fae47fdf233d6fdbe8b859bb02f8a06fd08beef"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 33 significant file(s) lose their only recent owner: multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java, multi-stage-query/src/main/java/org/apache/druid/msq/kernel/controller/ControllerStageTracker.java, processing/src/main/java/org/apache/druid/frame/processor/SuperSorter.java, processing/src/main/java/org/apache/druid/query/filter/TypedInFilter.java, processing/src/main/java/org/apache/druid/frame/processor/FrameChannelMerger.java, processing/src/main/java/org/apache/druid/frame/processor/FrameProcessorExecutor.java, multi-stage-query/src/main/java/org/apache/druid/msq/exec/std/StandardShuffleOperations.java, sql/src/main/java/org/apache/druid/sql/calcite/expression/DruidExpression.java (\u002B25 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b536b8a6230c4c84157d49bee9e025f3bf3de2564df2fb28b6d37a4fe88dfd0f"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 24 significant file(s) lose their only recent owner: web-console/src/views/datasources-view/datasources-view.tsx, web-console/src/views/workbench-view/column-tree/column-tree.tsx, web-console/src/utils/sampler.ts, web-console/src/views/tasks-view/tasks-view.tsx, web-console/src/views/explore-view/modules/time-chart-module/continuous-chart-render.tsx, web-console/src/druid-models/workbench-query/workbench-query.ts, web-console/src/views/explore-view/explore-view.tsx, web-console/src/helpers/spec-conversion.ts (\u002B16 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a339bc0edc259e69b370160cd01152c62ad098760b254087ad2f2d05705134e7"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 10 significant file(s) lose their only recent owner: extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authentication/validator/LDAPCredentialsValidator.java, extensions-contrib/spectator-histogram/src/main/java/org/apache/druid/spectator/histogram/SpectatorHistogramAggregatorFactory.java, server/src/main/java/org/apache/druid/server/coordinator/loading/SegmentReplicationStatus.java, processing/src/main/java/org/apache/druid/query/aggregation/mean/DoubleMeanAggregatorFactory.java, indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskRunnerUtils.java, processing/src/main/java/org/apache/druid/segment/transform/Transformer.java, server/src/main/java/org/apache/druid/server/coordinator/balancer/DiskNormalizedCostBalancerStrategy.java, cloud/aws-common/src/main/java/org/apache/druid/common/aws/AWSClientUtil.java (\u002B2 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4585823f3a5af36c2b4f5480c282da4284ceef763276ac75bf2dd94457e16567"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #5: If anonymized user #5 becomes unavailable, 6 significant file(s) lose their only recent owner: indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentAllocationQueue.java, extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/db/cache/CoordinatorPollingBasicAuthorizerCacheManager.java, indexing-service/src/main/java/org/apache/druid/indexing/overlord/duty/UnusedSegmentsKiller.java, indexing-service/src/main/java/org/apache/druid/indexing/common/actions/SegmentAllocateAction.java, indexing-service/src/main/java/org/apache/druid/indexing/scheduledbatch/ScheduledBatchTaskManager.java, extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesWorkItem.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"68534a062573f950138a805bcffd8806c14d635f15368ed177eeb4a7694e21f1"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #6: If anonymized user #6 becomes unavailable, 6 significant file(s) lose their only recent owner: sql/src/main/java/org/apache/druid/sql/calcite/schema/InformationSchema.java, sql/src/main/java/org/apache/druid/sql/calcite/parser/DruidSqlParser.java, processing/src/main/java/org/apache/druid/query/aggregation/SimpleDoubleAggregatorFactory.java, processing/src/main/java/org/apache/druid/query/aggregation/SimpleLongAggregatorFactory.java, processing/src/main/java/org/apache/druid/query/aggregation/SimpleFloatAggregatorFactory.java, sql/src/main/java/org/apache/druid/sql/calcite/rule/logical/UnnestInputCleanupRule.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dcb034ea97d9ab6c0a03bcf968d3856f45111a56c561faae0a46540fef2afa06"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #7: If anonymized user #7 becomes unavailable, 5 significant file(s) lose their only recent owner: server/src/main/java/org/apache/druid/server/compaction/InlineReindexingRuleProvider.java, web-console/src/druid-models/compaction-dynamic-config/compaction-dynamic-config.tsx, server/src/main/java/org/apache/druid/server/compaction/ReindexingRuleProvider.java, server/src/main/java/org/apache/druid/server/compaction/ComposingReindexingRuleProvider.java, web-console/src/dialogs/compaction-dynamic-config-dialog/compaction-dynamic-config-completions.ts. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9eaaa98c86873b998a9ff95fbfe5f4c62dcdaf12eff5d9bf4d7a440f7d9d39f0"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #8: If anonymized user #8 becomes unavailable, 4 significant file(s) lose their only recent owner: services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java, extensions-contrib/prometheus-emitter/src/main/java/org/apache/druid/emitter/prometheus/PrometheusEmitter.java, extensions-contrib/prometheus-emitter/src/main/java/org/apache/druid/emitter/prometheus/DimensionsAndCollector.java, web-console/src/dialogs/supervisor-reset-to-latest-dialog/supervisor-reset-to-latest-dialog.tsx. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"337728c44cf8c8907fa22e81a17508d36fba4e9eb46970c49e8f0321209ec6d2"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #9: If anonymized user #9 becomes unavailable, 4 significant file(s) lose their only recent owner: processing/src/main/java/org/apache/druid/query/ChainedExecutionQueryRunner.java, processing/src/main/java/org/apache/druid/query/groupby/GroupByStatsProvider.java, server/src/main/java/org/apache/druid/indexing/overlord/supervisor/SupervisorStatus.java, services/src/main/java/org/apache/druid/guice/SegmentSchemaCacheModule.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c1de94ab46e737d6c9152757988eb5d596f836627be6f436406b87f4f95cccc2"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #10: If anonymized user #10 becomes unavailable, 4 significant file(s) lose their only recent owner: services/src/main/java/org/apache/druid/cli/BrokerRealtimeSelectorModule.java, server/src/main/java/org/apache/druid/server/DefaultQueryBlocklistRule.java, server/src/main/java/org/apache/druid/server/log/FilteredRequestLoggerProvider.java, server/src/main/java/org/apache/druid/server/metrics/MonitorsConfig.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"93f7ce8b8b749e89accd1f59df63a3618f5e653101c4f78e4c754e940db8b261"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #11: If anonymized user #11 becomes unavailable, 3 significant file(s) lose their only recent owner: processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/LimitedTemporaryStorage.java, extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchHolder.java, processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/SpillOutputStream.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a24d4363bc57ddb5ae40ce14b057c69beaa3fffbd4b44b6893581c7acbc9aee3"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #12: If anonymized user #12 becomes unavailable, 3 significant file(s) lose their only recent owner: multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerClient.java, extensions-core/druid-catalog/src/main/java/org/apache/druid/catalog/sync/CatalogUpdateReceiver.java, extensions-core/druid-catalog/src/main/java/org/apache/druid/catalog/sync/CacheNotifier.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0df329575996546e5dfee7729eccf956d2b1fefe9fe6f873fc6301982d754a09"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 17 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (188 single-owned of 2885 analysed files in total, counted over production source files of roughly 100 lines or more, excluding tests, vendored, generated and example/demo trees, largest first). They are anonymized user #13 (2 file(s)), anonymized user #14 (2 file(s)), anonymized user #15 (2 file(s)), anonymized user #16 (2 file(s)), anonymized user #17 (2 file(s)), anonymized user #18 (2 file(s)) (\u002B11 more) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"be26f1de00149e885b08fd2466effa9f62d139856d9dc117c969e67038e5c56c"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e3bcd169333e46cdca864bf889d402bbd16552ebcbf47b938fdd5ff5d5dd360e"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a3c5462e178b4296a5c65fd340fe571f526b822b05f0dff620b10dadd73205ba"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7e7a9646efb77ca8f14f4d1deb41fba6622a508f69555f4d9045f684b63b3417"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1419b98aed6d57e5f8faeed8e1046b9631282c301b2a8a105d15fe9736068148"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d57441b75c4c23f615c2d9e77a664ec35e91035587c3f675f50fc80fd8444356"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1cc244eccf0b4e306c821f6a2925adda2cdd468b263434816ee70c06e76dff85"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"321109d5b3a0787b2c7e1b459819409a70d14be87579e7a110758ecc343956ee"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3b72a4844c3187ddaf1a0030991d6f4dd427e3adf1886c965f118498d48918eb"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"67e97882c65a43a8ed13cca93b84c03d415d3280518780666d0fd59733bc0370"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c26eaf826a74d27b4e1cebf0e4022e513e20a091eb4029e6cf890d68b608052e"}},{"ruleId":"D28","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8a5f5fbe04da6825b9f6a89f39d7aae94418d05cb2be6d55a674054ffa1088c5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bddbca9c804db274cab60d4e7683499ab56a35eafecf2d57c041bec73838e45c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ab4903871d5f8fa542503e175de8c2f95a9526487bf8e8da40c6d57a2f371ec9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c730a413e06e31e38b9ce0614b4c1d4ecab89394ada4ef2802711e4baa76ec61"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fef619f91c5faf1a613330588a66207696827c9b7efcd6ebbc0ab5e65ada51f3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ce02062495f433e0ad4ff905b3c6758e3305f60e9d1e0f8cc7f14144cb2cac54"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"57d4a28e3ce991bc00ac8c7b7aa4aa70dd87f7f9922a2aa3ac9dc44014f8ec4e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9d8137e2843a4d9ace312984d4d1b8b07998cf19f7a31e2c7e904de2ca9c84a6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d45147f58f236ce7e143d02cca026c11736e7309c4132af7e36a28ec0880de13"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a7f761ccc121ea4b513515f5ad87b8c053c440ee9a92244feced1c90223c086b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ab8d83539c5ebe567cb6deae98d392d6617f9ea4001a34a9a21fb3f393c0be8f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"741babd38e21925629413fd6013b02e8c72bcb09f4651867ed2b1c5fc22d5aad"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b4e06a9c47d63dd4e7bbbd785db0e543f6b6fadecbb94c74c59eb9d4fb0789d5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1c2898ab774dfb1e8a97dfa69176243bb74c39d3379c5ba6e5e968a76714961a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5c39008a94640e47e5403a819794baaa9220374b5ca78dab1aa89aa456753173"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"45680573a310d24d5a62f174316c8d9cafaae5e9ab19e9ff31005b0411d1edc6"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed004b9b9b614c790f9cccdebdcd2cc8662bd2292b668be6e6c6928c004b342e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"58382ac7676d4e77890806e862af4390900b1472a25f3d268c439baa5cac5b58"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"48134be3a91bd385b55e92787439c40145eee3898ba90c52859400701879800a"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8987b407f580c35fa820eaeeac4b42be12587575524ce64ad9f79833b8b41d38"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1c60c1ba6413354d54373adcc04c76808092194f01a14ede3d5d6b6dea7a6636"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a887e52570a304976dccc80f54b1328ddeda7e411b081606113175c997e8063f"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8d01dd9cbac05d0b7820b8257618251c53d22bc37155ad7c10617728278b30e3"},"taxa":[{"id":"CWE-326","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e9b8267ec1455ea54c2716af73d88d22503fec8847cb1c2f38961be70420770c"},"taxa":[{"id":"CWE-326","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bd2ceaffb5e1583b3b7b14e06bd73a4f39b6a5f03ba9c9bf34fbfd6e2b05a15c"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c71bbb72c1b4e2459bcfb488db4e9cf4b99c9964d2ff7100487bb8ecb1ad1bdd"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"46d028b31f621df81ae491b4b6ac313daf35aaab46c909e384d6cceb74c199c6"},"taxa":[{"id":"CWE-326","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3c7b5ea5b5fcc8594225f7fc8483d91b3ec110633eee45f2b64d7b908e970ee7"},"taxa":[{"id":"CWE-328","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a1f2e325bd3f390730eef2e9684b0b2312282d451f39e8aea52961d0e390040"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"56b40877fa88a82ff2aa341e43ed64d4f774a0cb667492c36262c304baa8dc99"},"taxa":[{"id":"CWE-295","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed6cbe57f725d591e93a31e592f1cb46ff4a4c597d4108121e34850933f53478"},"taxa":[{"id":"CWE-295","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a320df9dfc9acabc91e02a2c9b758c18890210c14c3c4d2ac711cc830fcb2ac3"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"be7bc59b90a4725377caefb5c0c46ea3f3b6428a7aff3756c0a7b4446e76927f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a8b2b80fa61003e9c46b0c8305d7510cddf186e5674e7ccf5d7bef25f3e66cbd"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7bc01c798bc9b3460ad9ddce38ca70af2bbd9ba2c41076572abfddf02e3233f6"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6de42d701ea2d2153a958238a1d5777d407ece653e2014c4a7e456c37b9109df"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6214ff0829bac8e4c5e56ddc4042472f2fbba725607452cdac3d21ab207d137b"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3d1697f9a214d60027c99b7248c18dc7704506b2bf754f21cd37d9bb682fb0bc"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"309896346dfb6da42aff26ede4f031cfa2bcb142768411e07830b4f4d2f762da"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be6628b7fee1daf34fcbc8fc4619d0c31980fd2dc8c988a0961363a5f0db9235"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/db/updater/CoordinatorBasicAuthorizerMetadataStorageUpdater.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"087ecc793fa15c4a451cf1599025853e6b9b14756ae7860e16626dfb7116455e"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/java/util/emitter/core/HttpPostEmitter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c3c871a45c2588250ac3b0bc0e02c52aa6aac3d93660605b162da421fb56b7d"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb9e4f22645c38d0a1316d36d2b97f511a1486be029597c48f446f883a6f5600"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/context/ResponseContext.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f07d1b49a7242f8e644263f147bdc5db7a97413f140facd32a80e7a4b7532819"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-catalog/src/main/java/org/apache/druid/catalog/storage/sql/SQLCatalogManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ced879221c36825646f3c2f515e5683b6a12b5ba1671eb7e10579b127e13980f"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDiscoveryConfig.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c3fc6eec6daf115bf31521fb8fa1e8a558ac35dfd6874b145d85487551e6c6b"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/authorization/endpoint/CoordinatorBasicAuthorizerResourceHandler.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53cece2a05b69c4b4f2c15b2cc3e6d3ec300fc5cfaf3649c649cadba853056f8"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/hll/HyperLogLogCollector.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de4fe25ac130107a29f2dd1c60b9ede0e3f921bac20482dff13602f90189f922"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidCorrelateUnnestRel.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d8e16e78a1c41405f9f187d6d4ac66f2acc3e21b2e3706f0542e89704f5f829"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sql/src/main/java/org/apache/druid/sql/calcite/rel/Windowing.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"28acd032af1a733b85e23bf2cde73d16ddff55aa67260520a3a8ae57542e32e6"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/segment/join/filter/JoinFilterAnalyzer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6a70c46003569d6e49315f14c364183932ae49e36b7bd61367d335e8703d12e"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/client/cache/MemcachedCache.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"33c8a5bf57014ed215182adb8311352a9faff042501310a0bd910d04b49302ec"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/task/batch/parallel/TaskMonitor.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"18512ca83b5aa1a76f70781ce44108eb7520e39133a3be1d3d15dc9ab166ecef"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/operator/join/SortedInnerJoinOperator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ae4c0da7b6fd770e0a047840358198ac6e596541442cf1130f345c69778f2ce"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulLeaderSelector.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ef5b538d64e70ca4ee91189d5442cb32058c080c63c5782a58138da150f2149"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/query/rowsandcols/ArrayListRowsAndColumns.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5684d2d50dc7afb34aa486863d0cc6376778cd1daada40950a9060b242f3270"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 563 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than listed individually (581 orphaned of 3000 analysed files in total, counted over production source files of roughly 100 lines or more, excluding tests, vendored, generated and example/demo trees, largest first)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: ExpressionModule.java \u2194 DruidOperatorTable.java: \u0060processing/src/main/java/org/apache/druid/guice/ExpressionModule.java\u0060 (context processing) and \u0060sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidOperatorTable.java\u0060 (context sql) sit in DIFFERENT parts of the tree yet change together 73% of the time (8 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"processing/src/main/java/org/apache/druid/guice/ExpressionModule.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"731d1b192f224fddc21479ccc4345ef1bdbbef4bc50f1aa635974bf21bea4228"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: TaskAction.java \u2194 IndexerMetadataStorageCoordinator.java: \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/actions/TaskAction.java\u0060 (context indexing-service) and \u0060server/src/main/java/org/apache/druid/indexing/overlord/IndexerMetadataStorageCoordinator.java\u0060 (context main) sit in DIFFERENT parts of the tree yet change together 70% of the time (7 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/TaskAction.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f178b9afedce2ecf1d8796631b9d50bb7706101cadf3b92488be8c613772758d"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: TaskAction.java \u2194 IndexerSQLMetadataStorageCoordinator.java: \u0060indexing-service/src/main/java/org/apache/druid/indexing/common/actions/TaskAction.java\u0060 (context indexing-service) and \u0060server/src/main/java/org/apache/druid/metadata/IndexerSQLMetadataStorageCoordinator.java\u0060 (context main) sit in DIFFERENT parts of the tree yet change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/common/actions/TaskAction.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0866cc9860e40804f289a242c297e61e4f191d3f87b2a65ead68f8efa20ddca6"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling clique: CliOverlord.java, CoordinatorJettyServerInitializer.java, MiddleManagerJettyServerInitializer.java, QueryJettyServerInitializer.java, RouterJettyServerInitializer.java: 5 files \u2014 \u0060services/src/main/java/org/apache/druid/cli/CliOverlord.java\u0060, \u0060services/src/main/java/org/apache/druid/cli/CoordinatorJettyServerInitializer.java\u0060, \u0060services/src/main/java/org/apache/druid/cli/MiddleManagerJettyServerInitializer.java\u0060, \u0060services/src/main/java/org/apache/druid/cli/QueryJettyServerInitializer.java\u0060, \u0060services/src/main/java/org/apache/druid/cli/RouterJettyServerInitializer.java\u0060 \u2014 all change together with no explicit dependency: a fully-connected co-change clique, not 10 separate couplings. They share one concern (thin parallel siblings over a common abstraction), so extract the shared part into ONE unit and the whole clique\u0027s coupling clears at once \u2014 you do not need to break each pair individually."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"services/src/main/java/org/apache/druid/cli/CliOverlord.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d58bb6fd011755cd27b21d22f48e36b385bff2e8a64c0908942ab1296311c0d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling clique: HeapMemoryTaskStorage.java, MetadataTaskStorage.java, TaskQueryTool.java: 3 files \u2014 \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/HeapMemoryTaskStorage.java\u0060, \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/MetadataTaskStorage.java\u0060, \u0060indexing-service/src/main/java/org/apache/druid/indexing/overlord/TaskQueryTool.java\u0060 \u2014 all change together with no explicit dependency: a fully-connected co-change clique, not 3 separate couplings. They share one concern (thin parallel siblings over a common abstraction), so extract the shared part into ONE unit and the whole clique\u0027s coupling clears at once \u2014 you do not need to break each pair individually."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"indexing-service/src/main/java/org/apache/druid/indexing/overlord/HeapMemoryTaskStorage.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"09682abf11570625bb0d6aa8d0868423698bbc8449faa9f64c8ab42fb3707135"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: GroupByQueryKit.java \u2194 ScanQueryKit.java: \u0060multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByQueryKit.java\u0060 and \u0060multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryKit.java\u0060 change together 91% of the time (10 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByQueryKit.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c3c368c404426401e9a89a13d723d9c75459208756e0697cae5468cf3514e0a"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: DruidCompactionConfig.java \u2194 CoordinatorCompactionConfigsResource.java: \u0060server/src/main/java/org/apache/druid/server/coordinator/DruidCompactionConfig.java\u0060 and \u0060server/src/main/java/org/apache/druid/server/http/CoordinatorCompactionConfigsResource.java\u0060 change together 80% of the time (8 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/src/main/java/org/apache/druid/server/coordinator/DruidCompactionConfig.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f089c75a90e0c750d6838e2aad8f84506b0b1d5611895d1e156b52257f1e89"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e46639b30d04869783c5174cd47ae1250899863c0af4397c11ed26a169fe0284"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"db73981baf386834f358e67d348fc57fe04f0e72e0abc1cbdda72a7a381d1e42"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8f85c3627e895b010e68d26d0268cdfc03c5acf82bc16653003973f808968130"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b9827b3546e66333bc6d71743d6ada6c087a46190752f574e56b06814cf62aae"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6b5e1d3a1f5564a070a0aa459a7d5de5ad51053df80ca084bb6fc355e6e21515"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4aa0f869082f298fcddb5cb9eab4cfd02f1f787b1672d4c876ffde01c7c07611"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"049a52e72969a2c8f343aa0c850ae8ad6895933527e73121de0044a8c7c22100"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fd91a88b5909520594b048ae69bdb18b48baf64ef0a1b0065a3ec0e58b9aba84"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6ff35e286c9efa949cacda6ce5bbb9012c372444994532aac577184c7c89b60f"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8b7668567bb8a75c5019bbb3cbfca7032f72afdafa5b2389079f2c04cd5f56bf"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"41cdd4d6e55a503447206be057aae44e50dce75ebf1096996b131a94d7edc6ee"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7e0e27a15629a9fa30dbce03da680e5cc68f4efe114d29204dce5999f8535b7"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c231b4bcca04095e1888d353306b038538685450903d5b57383a6cf586d89b2e"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a8540399b80846386470722b3e58d39759bb0485d163ac6df6692cc8511d5ed1"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fb85ac92a4117c37f614b897fbaaf342c3d989b114f80e0ea849cbb486e27eab"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9e6b0c0a9abc65201a8456b6dd33a33a5a728f7f78908c35a461fa3a98aa68fd"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"09a05981dbc38c58959584e31b24df1e49d00016d290ae7e7d1b40c22ba996a7"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"01c57316da0dc7bcbc27dd875d62c5251fde1c0bf07d4505d945e32c86fa889f"}},{"ruleId":"D38","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2f61f262539119b27a318479ed60e8477c816ed21e35e97897b5605553b57217"}},{"ruleId":"D38","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f585fc4a7700c685d41738298af981136fdc4011250bd5555eb34da3aec2f016"}},{"ruleId":"D38","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"691ad4e0cf51740de1a59b60a18a6119e2f91793566872896d144bd80965545f"}},{"ruleId":"D38","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d7fe538027c00c581bbd48a21e15dc30d36b9409e6ea810e7f127f6acc849994"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-295","guid":"a706c4e2-1232-8859-ae2e-17aa2d41f8e2","name":"CWE-295","shortDescription":{"text":"CWE-295"},"helpUri":"https://cwe.mitre.org/data/definitions/295.html"},{"id":"CWE-319","guid":"7af97476-9f0d-4458-9163-3d2043918a1a","name":"CWE-319","shortDescription":{"text":"CWE-319"},"helpUri":"https://cwe.mitre.org/data/definitions/319.html"},{"id":"CWE-326","guid":"7ee78bef-7589-f65f-a9d7-619f3485e844","name":"CWE-326","shortDescription":{"text":"CWE-326"},"helpUri":"https://cwe.mitre.org/data/definitions/326.html"},{"id":"CWE-328","guid":"f0ffc869-97c3-dc5c-8825-be1159f1fc5f","name":"CWE-328","shortDescription":{"text":"CWE-328"},"helpUri":"https://cwe.mitre.org/data/definitions/328.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-502","guid":"f7d3b296-aac0-5c5a-b706-e07faba26c36","name":"CWE-502","shortDescription":{"text":"CWE-502"},"helpUri":"https://cwe.mitre.org/data/definitions/502.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":74,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}