Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
e92ab77
OBSDATA-8616 Apply Confluent Patches on top of Druid 30.0.1 (#268)
suraj-goel Feb 3, 2025
4d0b98e
Move dockerfile steps to add the extra jars and removing vulnerable d…
rbankar7 Feb 11, 2025
7dc0a37
[rcca-25570] Add log lines in pause method (#304)
suraj-goel Feb 11, 2025
5805a03
[rcca-25570] Handle intermediate change of status and add more log li…
suraj-goel Feb 13, 2025
f61e165
Handle intermediate change of status in SeekableStreamIndexTaskRunner…
suraj-goel Feb 17, 2025
1bc5165
OBSDATA-9613 Run "services" tests separately on semaphore (#312)
suraj-goel Mar 26, 2025
d32f160
[OBSDATA-8872]Add maxInterval to kill config and make kill tasks effi…
chetanpatidar26 Mar 27, 2025
b4ba11d
Reduce the poll duration for CoordinatorBasedSegmentHandoffNotifierCo…
rbankar7 Apr 9, 2025
cb2beda
OBSDATA-9685 Add RDS root CA certs to Dockerfile (#319)
saithal-confluent Apr 10, 2025
125526a
Remove logic to disable "hard rest" and "set offsets" button when sup…
suraj-goel Apr 10, 2025
34c3446
Modify "maxRowsInMemory"and "maxBytesInMemory" to use values from con…
suraj-goel Apr 17, 2025
106cbd7
[WIP] OBSDATA-8643 Adding a column in druid metric (#316)
igarse Apr 23, 2025
5d7cf7e
Revert "Modify "maxRowsInMemory"and "maxBytesInMemory" to use values …
suraj-goel Apr 24, 2025
c16a283
Install druid-kubernetes-overlord-extension (#326)
saithal-confluent May 8, 2025
37a0f38
OBSDATA-1134 Fix k8s-overlord extension path in deps profile (#327)
saithal-confluent May 8, 2025
44b11f2
OBSDATA-10018 Upgrade dependencies to fix CVEs (#328)
ashibhardwaj May 14, 2025
29b8fa6
OBSDATA-10018 Upgrade dependencies to fix CVEs (#329)
ashibhardwaj May 14, 2025
87cf5c1
Upgrade Netty 4 version to fix multiple CVEs (#330)
ashibhardwaj May 15, 2025
eb01130
Upgrade protobuf version to fix multiple CVEs (#331)
ashibhardwaj May 15, 2025
3a56563
OBSDATA-10018 Upgrade dependencies to fix CVEs (#332)
ashibhardwaj May 16, 2025
834ac9f
Add support to detect abrupt termination of a node in the k8s based s…
rbankar7 May 30, 2025
4d8d7cb
Add support to terminate the pod without the announcement to repro th…
rbankar7 Jun 4, 2025
d899f6c
Add config support to control the frequency of the kubernetes pod per…
rbankar7 Jun 4, 2025
40d2d9e
Revert changes from the lifecycle added for the abrupt termination (#…
rbankar7 Jun 7, 2025
191b081
OBSDATA-10784: Semaphore high build duration in druid-30 (#349)
pinaki-basu Jul 1, 2025
d8125ca
[Druid-30] OBSDATA-10784: Fix cc-druid distribution module build-time…
pinaki-basu Jul 3, 2025
f39567a
OBSDATA-11013 Upgrade pac4j to v5 (#360)
ashibhardwaj Jul 16, 2025
4f84d0f
OBSDATA-11108 Upgrade jackson core to resolve CVEs (#365)
ashibhardwaj Jul 17, 2025
cb86557
Fix licenses.yaml (#366)
ashibhardwaj Jul 17, 2025
7f57978
Upgrade commons-beanutils to fix CVE (#367)
ashibhardwaj Jul 17, 2025
0709e6c
Upgrade kafka client version to fix cve (#368)
ashibhardwaj Jul 17, 2025
3fb8cc5
Upgrade commons-lang3 to fix cve (#369)
ashibhardwaj Jul 17, 2025
60483ec
OBSDATA-11015 Upgrade commons-io (#370)
ashibhardwaj Jul 18, 2025
19c59f3
Upgrade okio in kubernetes-overlord-extensions (#371)
ashibhardwaj Jul 18, 2025
b3f9b59
Update truststore url for fedramp (#374)
ashibhardwaj Jul 24, 2025
9e4b5c8
Upgrade grpc protobuf version in opencensus (#375)
ashibhardwaj Jul 25, 2025
f1b661e
Upgrade nimbus-jose-jwt (#376)
ashibhardwaj Jul 25, 2025
fddb127
Add loglines to debug issue of consumer lag on overlord leader switch…
rbankar7 Aug 22, 2025
bea3936
[OBSDATA-11562] Add Pre-Ingestion filtering capability based on Kafka…
suraj-goel Sep 10, 2025
c6505e4
Rename headerBasedFilterConfig config to headerBasedInclusionConfig (…
suraj-goel Sep 19, 2025
bf9924f
Upgrade netty 4 version (#387)
ashibhardwaj Oct 14, 2025
2c05f1a
[OBSDATA-11562] Use hashset to optimize large number of values in "IN…
suraj-goel Oct 15, 2025
9a71b7f
TransformSpec for Resource-id-to-name naming in Druid (#390)
pinaki-basu Oct 29, 2025
885b36e
Build lookup related extensions for Druid (#392)
pinaki-basu Nov 3, 2025
0dee35d
Add client-connector prefix in Druid-30 (#395)
pinaki-basu Nov 10, 2025
27ac44a
[OBSDATA-11562] Sync KafkaHeaderBasedFilter Feature with upstream PR …
suraj-goel Nov 13, 2025
c4a0704
Wrap lookup-enrichment around a try-catch Druid-30 (#400)
pinaki-basu Dec 4, 2025
17fa014
Fix postgres metadata storage warning logs because of tablename causi…
pinaki-basu Dec 29, 2025
79e8eb7
[CONMON-19002/CONMON-18997]: Exclude older okhttp and update lz4-java…
Pankaj260100 Jan 15, 2026
b7e7b8f
[CONMON-19002]: Update Lz4 version to resolve CVEs. (#412)
Pankaj260100 Jan 16, 2026
63d72b0
[Conmon-19002]: Exclude older version of lz4-java dependency to fix C…
Pankaj260100 Jan 27, 2026
431b3dc
Add length checks to LDAPCredentialsValidator (#18959) (#18997) (#438)
mukul1987 Mar 6, 2026
019fc35
OBSDATA-13070 Bake awscli and async-prof tools into dockerfile (#443)
saithal-confluent Mar 20, 2026
77a8670
Add monitor to find length of queue at Routers
ravisharm Apr 19, 2026
41bb96a
Fix compile error
ravisharm Apr 20, 2026
17c024d
Fix failing test
ravisharm Apr 20, 2026
bf3fe2d
Fix failing test
ravisharm Apr 20, 2026
c813d8d
Add router/http/numRequestsQueued to Prometheus emitter metrics map
ravisharm Apr 26, 2026
a254bf4
Revert "Add router/http/numRequestsQueued to Prometheus emitter metri…
ravisharm Apr 26, 2026
dab0e2d
Add metric druid.router.http.numRequestsQueued to statsd-emitter
ravisharm Apr 27, 2026
f41f94c
Revert semaphore.yml changes
ravisharm Apr 27, 2026
a4efacc
Fix build failure due to absence of cache
ravisharm Apr 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
# under the License.

.git
**/*.jar
**/*.class
dist
target
Expand Down
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @confluentinc/obs-data
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ target
*.swo
*.pyc
.classpath
.idea
.idea/
.project
.PVS-Studio
.settings/
Expand Down
3 changes: 1 addition & 2 deletions .idea/misc-for-inspection.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

157 changes: 157 additions & 0 deletions .semaphore/semaphore.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
version: v1.0
name: Apache Druid
agent:
machine:
type: s1-prod-ubuntu24-04-amd64-3
execution_time_limit:
hours: 3
blocks:
- name: "Install"
task:
env_vars: &env_vars
- name: MVN
value: "mvn -B"
- name: MAVEN_OPTS
value: "-Dmaven.repo.local=.m2"
- name: MAVEN_SKIP
value: >
-Danimal.sniffer.skip=true
-Dcheckstyle.skip=true
-Ddruid.console.skip=true
-Denforcer.skip=true
-Dforbiddenapis.skip=true
-Dmaven.javadoc.skip=true
-Dpmd.skip=true
-Dspotbugs.skip=true

- name: MAVEN_SKIP_TESTS
value: "-DskipTests -Djacoco.skip=true"
prologue:
commands:
- echo $SEMAPHORE_WORKFLOW_ID
- sem-version java 17
- checkout
jobs:
- name: "Install"
commands:
# This is a change meant to validate semaphore public builds
# so thus removing configurations for Confluent's internal CodeArtifact
- rm ~/.m2/settings.xml
- >
MAVEN_OPTS="${MAVEN_OPTS} -Xmx3000m" ${MVN} clean install
-q -ff ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} -T1C
# downstream tests depend on artifacts installed by mvn install into .m2
# also cache target to avoid the cost of recompiling tests
- tar zcf cache-post-install.tgz .m2 target
- artifact push workflow cache-post-install.tgz

- name: "Tests"
task:
env_vars: *env_vars
prologue:
commands:
- echo $SEMAPHORE_WORKFLOW_ID
- sem-version java 17
- checkout
- artifact pull workflow cache-post-install.tgz
- tar zxf cache-post-install.tgz
# This is a change meant to validate semaphore public builds
# so thus removing configurations for Confluent's internal CodeArtifact
- rm ~/.m2/settings.xml
jobs:
- name: "animal sniffer checks"
commands:
- ${MVN} test-compile ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS}
- ${MVN} animal-sniffer:check --fail-at-end

- name: "checkstyle"
commands:
- ${MVN} checkstyle:checkstyle --fail-at-end

- name: "enforcer checks"
commands:
- ${MVN} enforcer:enforce --fail-at-end

- name: "forbidden api checks"
commands:
- ${MVN} test-compile ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS}
- ${MVN} forbiddenapis:check forbiddenapis:testCheck --fail-at-end

- name: "pmd checks"
commands:
- ${MVN} pmd:check --fail-at-end # TODO: consider adding pmd:cpd-check

- name: "spotbugs checks"
commands:
- ${MVN} spotbugs:check --fail-at-end -pl '!benchmarks'

- name: "analyze dependencies"
commands:
- >
${MVN} ${MAVEN_SKIP} dependency:analyze -DoutputXML=true -DignoreNonCompile=true -DfailOnWarning=true --fail-at-end || { echo "

The dependency analysis has found a dependency that is either:
1) Used and undeclared: These are available as a transitive dependency but should be explicitly
added to the POM to ensure the dependency version. The XML to add the dependencies to the POM is
shown above.
2) Unused and declared: These are not needed and removing them from the POM will speed up the build
and reduce the artifact size. The dependencies to remove are shown above.
If there are false positive dependency analysis warnings, they can be suppressed:
https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#usedDependencies
https://maven.apache.org/plugins/maven-dependency-plugin/examples/exclude-dependencies-from-dependency-analysis.html
For more information, refer to:
https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html
" && false; }

- name: "Confluent Extensions"
env_vars:
- name: MAVEN_PROJECTS
value: extensions-contrib/confluent-extensions
commands: &run_tests
- >
MAVEN_OPTS="${MAVEN_OPTS} -Xmx1g" ${MVN} test -pl ${MAVEN_PROJECTS}
${MAVEN_SKIP} -Dremoteresources.skip=true

- name: "Server"
env_vars:
- name: MAVEN_PROJECTS
value: server
commands: *run_tests

- name: "Processing"
env_vars:
- name: MAVEN_PROJECTS
value: processing
commands: *run_tests

- name: "Indexing Service"
env_vars:
- name: MAVEN_PROJECTS
value: indexing-service
commands: *run_tests

- name: "Kafka Indexing Service"
env_vars:
- name: MAVEN_PROJECTS
value: extensions-core/kafka-indexing-service
commands: *run_tests

- name: "Web Console"
env_vars:
- name: MAVEN_PROJECTS
value: web-console
commands: *run_tests

- name: "Services"
env_vars:
- name: MAVEN_PROJECTS
value: services
- name: MAVEN_OPTS
value: "-Dmaven.repo.local=.m2 -DforkCount=1 -DreuseForks=false"
commands: *run_tests

- name: "Other Tests"
env_vars:
- name: MAVEN_PROJECTS
value: '!server,!processing,!indexing-service,!extensions-core/kafka-indexing-service,!extensions-contrib/confluent-extensions,!integration-tests-ex/cases,!web-console,!services'
commands: *run_tests
4 changes: 4 additions & 0 deletions codestyle/checkstyle-suppressions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,8 @@
<suppress checks="ImportOrder" message="^'java\..*'.*" />

<suppress checks="AvoidStaticImport" files="[\\/]src[\\/](test)[\\/]"/>

<!-- Confluent Extensions -->
<suppress checks="Header" files="[\\/]io[\\/]confluent[\\/]" />
<suppress checks="PackageName" files="[\\/]io[\\/]confluent[\\/]" />
</suppressions>
127 changes: 94 additions & 33 deletions distribution/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#

ARG JDK_VERSION=17
ARG BASE_IMAGE=gcr.io/distroless/java$JDK_VERSION-debian12

# The platform is explicitly specified as x64 to build the Druid distribution.
# This is because it's not able to build the distribution on arm64 due to dependency problem of web-console. See: https://github.com/apache/druid/issues/13012
Expand All @@ -36,7 +37,7 @@ RUN export DEBIAN_FRONTEND=noninteractive \
COPY . /src
WORKDIR /src
RUN --mount=type=cache,target=/root/.m2 if [ "$BUILD_FROM_SOURCE" = "true" ]; then \
mvn -B -ff -q \
mvn -B -ff -q dependency:go-offline \
install \
-Pdist,bundle-contrib-exts \
-Pskip-static-checks,skip-tests \
Expand All @@ -49,56 +50,116 @@ RUN --mount=type=cache,target=/root/.m2 VERSION=$(mvn -B -q org.apache.maven.plu
&& tar -zxf ./distribution/target/apache-druid-${VERSION}-bin.tar.gz -C /opt \
&& mv /opt/apache-druid-${VERSION} /opt/druid

FROM alpine:3 as bash-static
FROM busybox:1.34.1-glibc as busybox

FROM $BASE_IMAGE

LABEL maintainer="Apache Druid Developers <dev@druid.apache.org>"

USER root

COPY --from=busybox /bin/busybox /busybox/busybox
RUN ["/busybox/busybox", "sh", "-c", "if [ ! -x \"$(command -v bash)\" ]; then \
/busybox/busybox --install /bin; \
else \
rm /busybox/busybox; \
fi;"]
# Predefined builtin arg, see: https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
ARG TARGETARCH

#
# Download bash-static binary to execute scripts that require bash.
# Although bash-static supports multiple platforms, but there's no need for us to support all those platform, amd64 and arm64 are enough.
#
ARG BASH_URL_BASE="https://github.com/robxu9/bash-static/releases/download/5.1.016-1.2.3"
RUN if [ "$TARGETARCH" = "arm64" ]; then \
BASH_URL="${BASH_URL_BASE}/bash-linux-aarch64" ; \
elif [ "$TARGETARCH" = "amd64" ]; then \
BASH_URL="${BASH_URL_BASE}/bash-linux-x86_64" ; \
RUN if [ ! -x "$(command -v bash)" ]; then \
if [ "$TARGETARCH" = "arm64" ]; then \
BASH_URL="${BASH_URL_BASE}/bash-linux-aarch64" ; \
elif [ "$TARGETARCH" = "amd64" ]; then \
BASH_URL="${BASH_URL_BASE}/bash-linux-x86_64" ; \
else \
echo "Unsupported architecture ($TARGETARCH)" && exit 1; \
fi; \
echo "Downloading bash-static from ${BASH_URL}" \
&& wget ${BASH_URL} -O /bin/bash \
&& chmod 755 /bin/bash; \
fi;

RUN if [ ! -x "$(command -v useradd)" ]; then \
addgroup -S -g 1000 druid \
&& adduser -S -u 1000 -D -H -h /opt/druid -s /bin/sh -g '' -G druid druid; \
else \
echo "Unsupported architecture ($TARGETARCH)" && exit 1; \
fi; \
echo "Downloading bash-static from ${BASH_URL}" \
&& wget ${BASH_URL} -O /bin/bash

FROM busybox:1.35.0-glibc as busybox

FROM gcr.io/distroless/java$JDK_VERSION-debian12
LABEL maintainer="Apache Druid Developers <dev@druid.apache.org>"

COPY --from=busybox /bin/busybox /busybox/busybox
RUN ["/busybox/busybox", "--install", "/bin"]


RUN addgroup -S -g 1000 druid \
&& adduser -S -u 1000 -D -H -h /opt/druid -s /bin/sh -g '' -G druid druid


COPY --from=bash-static /bin/bash /bin/bash
RUN chmod 755 /bin/bash
groupadd --system --gid 1000 druid \
&& useradd --system --uid 1000 -M --home /opt/druid --shell /bin/sh -c '' --gid 1000 druid; \
fi;

COPY --chown=druid:druid --from=builder /opt /opt
COPY distribution/docker/druid.sh /druid.sh
COPY distribution/docker/peon.sh /peon.sh
COPY distribution/docker/deduplicate_jars.sh /deduplicate_jars.sh
COPY --chown=druid:druid distribution/docker/extra_jars/ /opt/druid/lib/

# create necessary directories which could be mounted as volume
# copy and de-duplicate jars from builder in same layer to reduce image size
# /opt/druid/var is used to keep individual files(e.g. log) of each Druid service
# /opt/shared is used to keep segments and task logs shared among Druid services
RUN --mount=type=bind,from=builder,source=/opt,target=/builder/opt \
mkdir -p /opt/druid/var /opt/shared \
&& cp -r /builder/opt/druid /opt/ \
&& /deduplicate_jars.sh /opt/druid \
&& chown -R druid:druid /opt/druid /opt/shared \
RUN mkdir /opt/druid/var /opt/shared \
&& chown druid:druid /opt/druid/var /opt/shared \
&& chmod 775 /opt/druid/var /opt/shared

# Install iproute2 to get the ip command needed to set config of druid.host IP address
# Command needed in druid.sh Line 140;
RUN if [ ! -x "$(command -v ip)" ]; then \
if [ -x "$(command -v apt)" ]; then \
apt update \
&& apt install -y iproute2; \
else \
apk add iproute2; \
fi; \
fi;

# OBSDATA-13070: Bake AWS CLI v2 and async-profiler into the image.
# Shoreline notebooks previously downloaded these at runtime from the public internet
# without integrity verification. Installing at build time eliminates supply chain risk.
ARG AWS_CLI_VERSION=2.34.11
ARG ASYNC_PROFILER_VERSION=4.3
RUN set -e \
&& if [ "$TARGETARCH" = "arm64" ]; then ARCH=aarch64; AP_ARCH=arm64; else ARCH=x86_64; AP_ARCH=x64; fi \
&& if [ -x "$(command -v apt)" ]; then \
apt-get update && apt-get install -y --no-install-recommends curl htop strace bind-tools netcat unzip \
&& CLEANUP="apt-get purge -y unzip && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*"; \
else \
apk add --no-cache curl htop strace bind-tools netcat-openbsd unzip \
&& CLEANUP="apk del unzip"; \
fi \
&& curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-${ARCH}-${AWS_CLI_VERSION}.zip" -o /tmp/awscli.zip \
&& unzip -q /tmp/awscli.zip -d /tmp \
&& /tmp/aws/install \
&& rm -rf /tmp/aws /tmp/awscli.zip \
&& curl -fsSL "https://github.com/async-profiler/async-profiler/releases/download/v${ASYNC_PROFILER_VERSION}/async-profiler-${ASYNC_PROFILER_VERSION}-linux-${AP_ARCH}.tar.gz" \
-o /tmp/ap.tar.gz \
&& mkdir -p /opt/async-profiler \
&& tar xzf /tmp/ap.tar.gz -C /opt/async-profiler --strip-components=1 \
&& rm /tmp/ap.tar.gz \
&& ln -s /opt/async-profiler/bin/asprof /usr/local/bin/asprof \
&& eval "$CLEANUP" \
&& aws --version \
&& asprof --version

USER druid
VOLUME /opt/druid/var
WORKDIR /opt/druid

# org.apache.derby:derby is impacted by https://github.com/advisories/GHSA-rcjc-c4pj-xxrp.
# Fixing it requires upgrading to Java 21 and Derby to 10.17.1.0.
# However, since Derby is not used in production, we can safely exclude it from the Druid image.
RUN rm /opt/druid/lib/derby-10.14.2.0.jar /opt/druid/lib/derbyclient-10.14.2.0.jar /opt/druid/lib/derbynet-10.14.2.0.jar

# Create directory for PostgreSQL certificates
RUN mkdir -p /opt/druid/.postgresql

# Download RDS root CA certificates for both commercial and us-gov regions
RUN curl -s https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem -o /opt/druid/.postgresql/root.crt && \
curl -s https://truststore.pki.us-gov-west-1.rds.amazonaws.com/global/global-bundle.pem -o /opt/druid/.postgresql/root-fedramp.crt && \
chmod 644 /opt/druid/.postgresql/root.crt /opt/druid/.postgresql/root-fedramp.crt && \
chown -R druid:druid /opt/druid/.postgresql

ENTRYPOINT ["/druid.sh"]
Loading