av9ash/GitBugs huggingface dataset:
Bug: Typo in sql-migration-guide.md
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 01/May/23 13:04
Affects Version/s: 3.2.0

There is a minor typo in [sql-migration-guide.md|#L154]

 
| - In Spark 3.2, `TRANSFORM` operator can support `ArrayType/MapType/StructType` without Hive SerDe, in this mode, we use `StructsToJosn` to convert `ArrayType/MapType/StructType` column to `STRING` and use `JsonToStructs` to parse `STRING` to `ArrayType/MapType/StructType`. In Spark 3.1, Spark just support case `ArrayType/MapType/StructType` column as `STRING` but can't support parse `STRING` to `ArrayType/MapType/StructType` output columns.|

 

StructsToJosn -> StructsToJson
Bug: History Server delete event log of running Spark applicaiton
Status: Open | Priority: Minor | Resolution: 
Created: 29/May/23 06:53
Affects Version/s: 3.4.0

When enable Spark history cleaner:

{noformat}
spark.history.fs.cleaner.enabled=true
spark.history.fs.cleaner.interval=1d
spark.history.fs.cleaner.maxAge=7d
spark.history.fs.cleaner.maxNum=10
{noformat}

Spark will delete history for running Spark applications, following is some message picked from the spark log:

{noformat}
153 23/05/26 14:19:43 INFO FsHistoryProvider: Parsing /tmp/spark-events/local-1685081895370 to re-build UI...
154 23/05/26 14:19:43 INFO FsHistoryProvider: Finished parsing /tmp/spark-events/local-1685081895370
155 23/05/28 13:09:53 INFO FsHistoryProvider: Deleting expired event log for app-20230524141002-0000
156 23/05/29 13:09:53 INFO FsHistoryProvider: Deleting expired event log for local-1684999095807
157 23/05/29 13:09:53 INFO FsHistoryProvider: Deleting expired event log for app-20230524171730-0000.inprogress
158 23/05/29 13:34:24 INFO ApplicationCache: Failed to load application attempt app-20230524171730-0000/
{noformat}
Bug: Special handling of JSON type for MySQL connector
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 03/May/23 22:58
Affects Version/s: 3.4.0

MySQL JSON type is converted into JDBC {{VARCHAR}} type with precision of -1 on some MariaDB drivers.
When receiving {{VARCHAR}} with negative precision, Spark will throw an error.

This ticket purposes to special case this scenario by directly converting JSON type into StringType in MySQLDialect.
Bug: Versions of the package net.sourceforge.htmlunit:htmlunit from 0 and before 3.0.0 are vulnerable to Remote Code Execution (RCE) via XSTL
Status: Open | Priority: Minor | Resolution: 
Created: 29/May/23 10:10
Affects Version/s: 3.4.0

CVE-2023-26119 Detail: [https://nvd.nist.gov/vuln/detail/CVE-2023-26119]

It is recommended to replace 'net.sourceforge.htmlunit'' by 'org.htmlunit' in spark
{code:java}
    <dependency>
      <groupId>org.htmlunit</groupId>
      <artifactId>htmlunit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.htmlunit</groupId>
      <artifactId>htmlunit-core-js</artifactId>
      <scope>test</scope>
    </dependency> {code}
see: [https://www.htmlunit.org/migration.html]
Bug: Drop does not work when passed a string with an alias
Status: Open | Priority: Minor | Resolution: 
Created: 10/May/23 18:12
Affects Version/s: 3.4.0

When passing a string to the drop method, if the string contains an alias, the column is not dropped. However, passing a column object with the same name and alias, it works.
{code:python}
from pyspark.sql import SparkSession
import pyspark.sql.functions as F

spark = SparkSession.builder.master("local[1]").appName("local-spark-session").getOrCreate()

df = spark.createDataFrame([(1, 10)], ["any", "hour"]).alias("a")

j = df.drop("a.hour")
print(j)  # DataFrame[any: bigint, hour: bigint]

jj = df.drop(F.col("a.hour"))
print(jj)  # DataFrame[any: bigint]
{code}
 

Related issues:

https://issues.apache.org/jira/browse/SPARK-31123

https://issues.apache.org/jira/browse/SPARK-14759
Bug: Change CheckConnectJvmClientCompatibility to deny list to increase the API check coverage
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 23/May/23 21:37
Affects Version/s: 3.5.0

The current compatibility check only checks selected classes. So when adding a new class, if a developer forgets to add this class into the checklist, then this API is not covered in compatibility tests. Thus we should change this API check to always include all APIs by default.
Bug: Add operating system ,Java, Python version information to application log
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 11/May/23 19:03
Affects Version/s: 3.4.0

Include the operating system and Java version, python version information in the Application log. This will provide useful context and aid in troubleshooting and debugging any issues that may arise, particularly when Spark runs across heterogeneous environments (systems with varying operating systems and Java versions).
Bug: Implement 'levenshtein(str1, str2[, threshold])' functions in python client
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 24/May/23 08:32
Affects Version/s: 3.5.0

After Add a max distance argument to the levenshtein() function We have already implemented it on the scala side, so we need to align it on `pyspark` & `connect python`
Bug: Enable fast hashmap for distinct queries
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 30/May/23 03:41
Affects Version/s: 3.5.0

Spark will enable fast hash map for primitive data types in HashAggregateExec.

Could we also enable this for distinct queries which bufferSchema is empty.

For example, we can also build a fast hash map with the key a + b for query
{code:sql} SELECT distinct a, b from tab {code}
Bug: Move version configuration in `connect` module to parent
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 24/May/23 07:47
Affects Version/s: 3.5.0

In the pom file of the submodule, there are some common version properties, eg:
 * guava.version
 * guava.failureaccess.version

that need to be moved to the parent pom for better management
Bug: Address DOI comments about /etc/passwd
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 04/May/23 02:50
Affects Version/s: 3.5.0

chgrp root /etc/passwd && chmod ug+rw /etc/passwd

Wider permissions on /etc/passwd is concerning. What use case is broken if the running user id doesn't exist?

echo ... >> /etc/passwd

Having the entrypoint itself modify /etc/passwd is fragile. Are there features that are broken if the user doesn't exist in /etc/passwd (like PostgreSQL's initdb that refuses to run)? Minimally, this should probably use useradd and usermod rather than hand editing.
Bug: Address comments about /etc/pam.d/su
Status: Open | Priority: Minor | Resolution: 
Created: 04/May/23 02:51
Affects Version/s: 3.5.0

echo "auth required pam_wheel.so use_uid" >> /etc/pam.d/su &&

I am unsure what this is for? 😕 As far as I can tell, this means that only members of the administrative group wheel (or 0 if there is no wheel) can switch to another user using the su command. That might make sense on a regular multi-user system, but I am unsure why it would matter for a container.
Bug: Support log level configuration with static Spark conf
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 24/May/23 23:56
Affects Version/s: 3.5.0

Today users are using {{sc.setLogLevel}} to configure the current log level using {{SparkContext}} accessible from within the {{{}SparkSession{}}}. It is a convenient alternative to directly depending on the Log4j mechanism like statically changing the {{log4j.xml}} or dynamically invoke the Log4j API.

It would be great to allow the configuration of the log level using a static Spark conf that has the same kind of simplicity, which comes in handy when we don't want to manually change the {{{}log4j.xml{}}}. This is particularly helpful in the Spark Connect scenario where there’s no way for the client to call {{setLogLevel}} because {{SparkContext}} is not yet supported in its API, and when it connects to a platform where it can't easily change the Log4j config file.
./bin/pyspark --conf spark.log.level ERROR
Bug: Upgrade `cyclonedx-maven-plugin` from 2.7.6 to 2.7.9
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 30/May/23 06:10
Affects Version/s: 3.5.0

* [https://github.com/CycloneDX/cyclonedx-maven-plugin/releases/tag/cyclonedx-maven-plugin-2.7.9]
 * [https://github.com/CycloneDX/cyclonedx-maven-plugin/releases/tag/cyclonedx-maven-plugin-2.7.8]
 * [https://github.com/CycloneDX/cyclonedx-maven-plugin/releases/tag/cyclonedx-maven-plugin-2.7.7]
Bug: Update scalatest and scalatestplus related dependencies to newest version
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 27/May/23 11:25
Affects Version/s: 3.5.0

# scalatest: upgrade scalatest from 3.2.15 to 3.2.16
   
 # mockito
   - mockito-core: upgrade from 4.6.1 to 4.11.0
   - mockito-inline: upgrade from 4.6.1 to 4.11.0
   
 # selenium-java: upgrade from 4.7.2 to 4.9.1
 
 # htmlunit-driver: upgrade from 4.7.2 to 4.9.1
 
 # htmlunit: upgrade from 2.67.0 to 2.70.0 
 
 # scalatestplus
   - scalacheck-1-17: upgrade from 3.2.15.0 to 3.2.16.0
   - mockito: upgrade from `mockito-4-6` 3.2.15.0 to `mockito-4-11` 3.2.16.0
   - selenium: upgrade from `selenium-4-7` 3.2.15.0 to `selenium-4-9` 3.2.16.0
Bug: Non-existent column in projection of full outer join with USING results in StringIndexOutOfBoundsException
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 28/May/23 18:48
Affects Version/s: 3.5.0

The following query throws a {{StringIndexOutOfBoundsException}}:
{noformat}
with v1 as (
 select * from values (1, 2) as (c1, c2)
),
v2 as (
  select * from values (2, 3) as (c1, c2)
)
select v1.c1, v1.c2, v2.c1, v2.c2, b
from v1
full outer join v2
using (c1);
{noformat}
The query should fail anyway, since {{b}} refers to a non-existent column. But it should fail with a helpful error message, not with a {{StringIndexOutOfBoundsException}}.

The issue seems to be in {{StringUtils#orderSuggestedIdentifiersBySimilarity}}. {{orderSuggestedIdentifiersBySimilarity}} assumes that a list of candidate attributes with a mix of prefixes will never have an attribute name with an empty prefix. But in this case it does ({{c1}} from the {{coalesce}} has no prefix, since it is not associated with any relation or subquery):
{noformat}
+- 'Project [c1#5, c2#6, c1#7, c2#8, 'b]
   +- Project [coalesce(c1#5, c1#7) AS c1#9, c2#6, c2#8] <== c1#9 has no prefix, unlike c2#6 (v1.c2) or c2#8 (v2.c2)
      +- Join FullOuter, (c1#5 = c1#7)
         :- SubqueryAlias v1
         :  +- CTERelationRef 0, true, [c1#5, c2#6]
         +- SubqueryAlias v2
            +- CTERelationRef 1, true, [c1#7, c2#8]
{noformat}
Because of this, {{orderSuggestedIdentifiersBySimilarity}} returns a sorted list of suggestions like this:
{noformat}
ArrayBuffer(.c1, v1.c2, v2.c2)
{noformat}
{{UnresolvedAttribute.parseAttributeName}} chokes on an attribute name that starts with a namespace separator ('.').
Bug: Make the prompt for `findJar` method in IntegrationTestUtils clearer
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 27/May/23 00:50
Affects Version/s: 3.5.0

When I am running tests in ClientE2ETestSuite, I often cannot locate them through error prompts when they fail, and I can only search for specific reasons through code
 * Before applying this patche, the error prompt is as follows:
Exception encountered when invoking run on a nested suite - Failed to find the jar inside folder: .../spark-community/connector/connect/server/target

 
 * After applying this patche, The error prompt is as follows:
Exception encountered when invoking run on a nested suite - Failed to find the jar: {color:#ff0000}spark-connect-assembly(.{*}).jar or spark-connect(.{*})3.5.0-SNAPSHOT.jar {color}inside folder: .../spark-community/connector/connect/server/target. {color:#ff0000}This file can be generated by similar to the following command: build/sbt package|assembly{color}
Bug: request unlimited DecimalType
Status: Open | Priority: Minor | Resolution: 
Created: 24/May/23 06:13
Affects Version/s: 3.4.0

In https://issues.apache.org/jira/browse/SPARK-9069 we removed unlimited DecimalType, and add a limit of precision could not exceed 38.

While is is insufficient for decoding UInt256 (e.g. from clickhouse).

Shall we increase the limitation or introduce a new Type like `UnlimitedDecimalType`
Bug: Refactor `INVALID_SQL_SYNTAX` for avoiding to embed error's text in source code
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 22/May/23 01:55
Affects Version/s: 3.5.0

As discussed in PR(https://github.com/apache/spark/pull/41214), embed error's text in source code is unfriendly, such as hindering the internationalization of subsequent error messages.
Bug: When formatting file `error-classes.json` with `SparkThrowableSuite`, the last line of the file should be empty line
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 22/May/23 11:28
Affects Version/s: 3.5.0

1.When I execute: SPARK_GENERATE_GOLDEN_FILES=1 build/sbt         "core/testOnly *SparkThrowableSuite -- -t \"Error classes are correctly formatted\""

 

2.After reformat file, I found:

!https://user-images.githubusercontent.com/15246973/239896762-49d7a7e8-140f-41ac-985f-8213bad69ad1.png!
Bug: There will be many invalid tasks when `Range.numSlices` > `Range.numElements`
Status: Open | Priority: Minor | Resolution: 
Created: 19/May/23 04:57
Affects Version/s: 3.5.0

For example, start a spark shell with `--master "local[100]"`, then run `spark.range(10).map(_ + 1).reduce(_ + _)`, there will be 100 tasks in the job, although there are only 10 elements in the Range:

!image-2023-05-19-13-01-19-589.png|width=733,height=203!
Bug: Spark Homebrew Formulae currently depends on non-officially-supported Java 20
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 17/May/23 09:42
Affects Version/s: 3.2.4

I am not sure if homebrew-related issues can also be reported here? The Homebrew formulae for apache-spark runs on (latest) openjdk 20.

[https://formulae.brew.sh/formula/apache-spark]

However, Apache Spark is documented to work with Java 8/11/17:

[https://spark.apache.org/docs/latest/]

Is this an overlook, or is Java 20 officially supported, too?

Thanks!
Bug: Wrong error message used for `ambiguousRelationAliasNameInNestedCTEError`
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 12/May/23 13:51
Affects Version/s: 3.4.0

The batch of errors migrated to error classes as part of spark-40540 contains an error that got mixed up with the wrong error message:

[ambiguousRelationAliasNameInNestedCTEError|https://github.com/apache/spark/commit/43a6b932759865c45ccf36f3e9cf6898c1b762da#diff-744ac13f6fe074fddeab09b407404bffa2386f54abc83c501e6e1fe618f6db56R1983] uses the same error message as the following commandUnsupportedInV2TableError:

 
{code:java}
WITH t AS (SELECT 1), t2 AS ( WITH t AS (SELECT 2) SELECT * FROM t) SELECT * FROM t2;
AnalysisException: t is not supported for v2 tables
{code}
The error should be:
{code:java}
AnalysisException: Name tis ambiguous in nested CTE.
Please set spark.sql.legacy.ctePrecedencePolicy to CORRECTED so that name defined in inner CTE takes precedence. If set it to LEGACY, outer CTE definitions will take precedence. See more details in SPARK-28228.{code}
Bug: Add log4j-1.2-api and log4j-slf4j2-impl to classpath if active hadoop-provided
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 17/May/23 07:08
Affects Version/s: 3.4.0

Build Spark:
{code:sh}
./dev/make-distribution.sh --name default --tgz -Phive -Phive-thriftserver -Pyarn -Phadoop-provided
tar -zxf spark-3.5.0-SNAPSHOT-bin-default.tgz {code}
Remove the following jars from spark-3.5.0-SNAPSHOT-bin-default:
{noformat}
jars/log4j-1.2-api-2.20.0.jar
jars/log4j-slf4j2-impl-2.20.0.jar
{noformat}
Add a new log4j2.properties to spark-3.5.0-SNAPSHOT-bin-default/conf:
{code:none}
rootLogger.level = info
rootLogger.appenderRef.file.ref = File
rootLogger.appenderRef.stderr.ref = console

appender.console.type = Console
appender.console.name = console
appender.console.target = SYSTEM_ERR
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss,SSS} %p [%t] %c{2}:%L : %m%n

appender.file.type = RollingFile
appender.file.name = File
appender.file.fileName = /tmp/spark/logs/spark.log
appender.file.filePattern = /tmp/spark/logs/spark.%d{yyyyMMdd-HH}.log
appender.file.append = true
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss,SSS} %p [%t] %c{2}:%L : %m%n
appender.file.policies.type = Policies
appender.file.policies.time.type = TimeBasedTriggeringPolicy
appender.file.policies.time.interval = 1
appender.file.policies.time.modulate = true
appender.file.policies.size.type = SizeBasedTriggeringPolicy
appender.file.policies.size.size = 256M
appender.file.strategy.type = DefaultRolloverStrategy
appender.file.strategy.max = 100
{code}

Start Spark thriftserver:
{code:java}
sbin/start-thriftserver.sh
{code}

Check the log:
{code:sh}
cat /tmp/spark/logs/spark.log
{code}
Bug: Update some maven plugins to newest version
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 19/May/23 23:08
Affects Version/s: 3.5.0

Update some maven plugins to newest version. include:
 * exec-maven-plugin from 1.6.0 to 3.1.0
 * scala-maven-plugin from 4.8.0 to 4.8.1
 * maven-antrun-plugin from 1.8 to 3.1.0
 * maven-enforcer-plugin from 3.2.1 to 3.3.0
 * build-helper-maven-plugin from 3.3.0 to 3.4.0
 * maven-surefire-plugin from 3.0.0 to 3.1.0
 * maven-assembly-plugin from 3.1.0 to 3.6.0
 * maven-install-plugin from 3.1.0 to 3.1.1
 * maven-deploy-plugin from 3.1.0 to 3.1.1
 * maven-checkstyle-plugin from 3.2.1 to 3.2.2
Bug: Update sbt-assembly, sbt-revolver, sbt-mima-plugin plugins
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 19/May/23 03:01
Affects Version/s: 3.5.0

Update some sbt plugins to newest version. include:
 * sbt-assembly from 2.1.0 to 2.1.1
 * sbt-mima-plugin from 1.1.0 to 1.1.2
 * sbt-revolver from 0.9.1 to 0.10.0
Bug: Read and write csv and json files. Archive files such as zip or gz are supported
Status: Open | Priority: Minor | Resolution: 
Created: 05/May/23 07:42
Affects Version/s: 3.5.0

snowflake data import and export, support fixed files. For example:

 
{code:java}
COPY INTO @mystage/data.csv.gz 
 
COPY INTO mytable 
FROM @my_ext_stage/tutorials/dataloading/sales.json.gz; 
FILE_FORMAT = (TYPE = 'JSON') 
MATCH_BY_COLUMN_NAME='CASE_INSENSITIVE'; 
 
{code}
Can spark directly read archive files?
{code:java}
spark.read.csv("/tutorials/dataloading/sales.json.gz")

{code}
@[~kaifeiYi]
Bug: Assign a name to the error class _LEGACY_ERROR_TEMP_1206
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 02/May/23 19:39
Affects Version/s: 3.5.0

Choose a proper name for the error class *_LEGACY_ERROR_TEMP_1206* defined in {*}core/src/main/resources/error/error-classes.json{*}. The name should be short but complete (look at the example in error-classes.json).

Add a test which triggers the error from user code if such test still doesn't exist. Check exception fields by using {*}checkError(){*}. The last function checks valuable error fields only, and avoids dependencies from error text message. In this way, tech editors can modify error format in error-classes.json, and don't worry of Spark's internal tests. Migrate other tests that might trigger the error onto checkError().

If you cannot reproduce the error from user space (using SQL query), replace the error by an internal error, see {*}SparkException.internalError(){*}.

Improve the error message format in error-classes.json if the current is not clear. Propose a solution to users how to avoid and fix such kind of errors.

Please, look at the PR below as examples:
 * [https://github.com/apache/spark/pull/38685]
 * [https://github.com/apache/spark/pull/38656]
 * [https://github.com/apache/spark/pull/38490]
Bug: Assign a name to the error class _LEGACY_ERROR_TEMP_0041
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 02/May/23 19:38
Affects Version/s: 3.5.0

Choose a proper name for the error class *_LEGACY_ERROR_TEMP_0041* defined in {*}core/src/main/resources/error/error-classes.json{*}. The name should be short but complete (look at the example in error-classes.json).

Add a test which triggers the error from user code if such test still doesn't exist. Check exception fields by using {*}checkError(){*}. The last function checks valuable error fields only, and avoids dependencies from error text message. In this way, tech editors can modify error format in error-classes.json, and don't worry of Spark's internal tests. Migrate other tests that might trigger the error onto checkError().

If you cannot reproduce the error from user space (using SQL query), replace the error by an internal error, see {*}SparkException.internalError(){*}.

Improve the error message format in error-classes.json if the current is not clear. Propose a solution to users how to avoid and fix such kind of errors.

Please, look at the PR below as examples:
 * [https://github.com/apache/spark/pull/38685]
 * [https://github.com/apache/spark/pull/38656]
 * [https://github.com/apache/spark/pull/38490]
Bug: DELETE from Hive table result in INTERNAL error
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 03/May/23 18:43
Affects Version/s: 3.4.0

spark-sql (default)> CREATE TABLE T1(c1 INT);
spark-sql (default)> DELETE FROM T1 WHERE c1 = 1;
[INTERNAL_ERROR] Unexpected table relation: HiveTableRelation [`spark_catalog`.`default`.`t1`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, Data Cols: [c1#3], Partition Cols: []]

org.apache.spark.SparkException: [INTERNAL_ERROR] Unexpected table relation: HiveTableRelation [`spark_catalog`.`default`.`t1`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, Data Cols: [c1#3], Partition Cols: []]
	at org.apache.spark.SparkException$.internalError(SparkException.scala:77)
	at org.apache.spark.SparkException$.internalError(SparkException.scala:81)
	at org.apache.spark.sql.execution.datasources.v2.DataSourceV2Strategy.apply(DataSourceV2Strategy.scala:310)
	at org.apache.spark.sql.catalyst.planning.QueryPlanner.$anonfun$plan$1(QueryPlanner.scala:63)
	at scala.collection.Iterator$$anon$11.nextCur(Iterator.scala:486)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:492)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:491)
	at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:93)
	at org.apache.spark.sql.execution.SparkStrategies.plan(SparkStrategies.scala:70)
	at org.apache.spark.sql.catalyst.planning.QueryPlanner.$anonfun$plan$3(QueryPlanner.scala:78)
Bug: Upgrade RoaringBitmap to 0.9.44
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 14/May/23 13:05
Affects Version/s: 3.5.0

* [https://github.com/RoaringBitmap/RoaringBitmap/releases/tag/0.9.40]
 * [https://github.com/RoaringBitmap/RoaringBitmap/releases/tag/0.9.41]
 * [https://github.com/RoaringBitmap/RoaringBitmap/releases/tag/0.9.44]