• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ExpediaGroup / drone-fly / #139

26 Mar 2026 08:11PM UTC coverage: 34.545% (-21.6%) from 56.14%
#139

push

web-flow
feat: Upgrade JDK to Java 21 (#55)

* Migrate project to Java 21

- Upgrade Hive metastore 2.3.9 -> 4.0.1 and Apiary Extensions 6.0.2 -> 8.1.15
- Add hadoop-client-runtime:3.3.6 to provide shaded WoodStox XML parser classes
- Upgrade Spring Boot 2.7.10 -> 3.4.13 (Spring Framework 6.1)
- Migrate javax.annotation.PreDestroy -> jakarta.annotation.PreDestroy
- Exclude DataSourceAutoConfiguration to suppress Hive transitive JDBC drivers
- Upgrade Guava 27.1-jre -> 33.4.0-jre, MSK IAM Auth 1.1.9 -> 2.2.0
- Drop explicit Dropwizard/JUnit/Mockito/AssertJ/Logback/Log4j version pins (Boot BOM manages)
- Set jdk.version=21 and maven.compiler.release=21
- Upgrade Spotless 2.4.1 -> 2.43.0 (Java 21 compatible, google-java-format 1.19.2)
- Upgrade JaCoCo 0.8.6 -> 0.8.12 and Surefire 3.0.0-M5 -> 3.2.5
- Add .mvn/jvm.config with --add-exports for google-java-format on JDK 21
- Add Surefire --add-opens argLine for Hadoop/Hive/Mockito runtime reflection
- Update Docker base image openjdk:8-jdk -> eclipse-temurin:21-jre
- Add Jib container --add-opens JVM flags for Hadoop/Hive runtime
- Update GitHub Actions workflows: Java 21, temurin, checkout@v4, setup-java@v4
- Fix Hive 4.x API changes: HMSHandler constructor, event constructors, JavaUtils package
- Migrate commons-lang -> commons-lang3 (StringUtils)
- Replace deprecated org.awaitility.Duration with java.time.Duration
- Upgrade SpotBugs plugin to 4.8.6 for Java 21 compatibility
- Switch JDK distribution from Eclipse Temurin to Amazon Corretto
- Change Docker base image to Amazon Corretto on Amazon Linux 2023

* Fix integration tests: add Hive 3.x/4.x compatibility shims

apiary-hive-events:8.1.15 was compiled against Hive 3.x and is
incompatible with hive-metastore:4.0.1 at runtime. Three layers of
incompatibility are resolved via classpath shims in drone-fly-app:

1. HiveMetaStore.java: re-introduces HiveMetaStore$HMSHandler as an
   inner class (removed in Hive 4.x, now a standalone HMSHandler).
   Required by Json... (continued)

12 of 164 new or added lines in 14 files covered. (7.32%)

133 of 385 relevant lines covered (34.55%)

0.35 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/drone-fly-app/src/main/java/org/apache/hadoop/hive/metastore/api/StringColumnStatsData.java
1
/**
2
 * Copyright (C) 2020-2026 Expedia, Inc.
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 * http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
package org.apache.hadoop.hive.metastore.api;
17

18
import java.io.Serializable;
19

20
/**
21
 * Compatibility shim for {@code StringColumnStatsData}. The Hive 4.x Thrift-generated class has
22
 * both {@code setBitVectors(byte[])} and {@code setBitVectors(ByteBuffer)}, which causes Jackson
23
 * {@code InvalidDefinitionException}. This shim exposes only the {@code byte[]} setter.
24
 */
25
public class StringColumnStatsData implements Serializable {
26

27
  private long maxColLen;
28
  private double avgColLen;
29
  private long numNulls;
30
  private long numDVs;
31
  private byte[] bitVectors;
32

NEW
33
  public StringColumnStatsData() {}
×
34

35
  public long getMaxColLen() {
NEW
36
    return maxColLen;
×
37
  }
38

39
  public void setMaxColLen(long maxColLen) {
NEW
40
    this.maxColLen = maxColLen;
×
NEW
41
  }
×
42

43
  public double getAvgColLen() {
NEW
44
    return avgColLen;
×
45
  }
46

47
  public void setAvgColLen(double avgColLen) {
NEW
48
    this.avgColLen = avgColLen;
×
NEW
49
  }
×
50

51
  public long getNumNulls() {
NEW
52
    return numNulls;
×
53
  }
54

55
  public void setNumNulls(long numNulls) {
NEW
56
    this.numNulls = numNulls;
×
NEW
57
  }
×
58

59
  public long getNumDVs() {
NEW
60
    return numDVs;
×
61
  }
62

63
  public void setNumDVs(long numDVs) {
NEW
64
    this.numDVs = numDVs;
×
NEW
65
  }
×
66

67
  public byte[] getBitVectors() {
NEW
68
    return bitVectors;
×
69
  }
70

71
  public void setBitVectors(byte[] bitVectors) {
NEW
72
    this.bitVectors = bitVectors;
×
NEW
73
  }
×
74
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc