Skip to content

Commit

Permalink
Merge tag 'v14.12.0' into next-major
Browse files Browse the repository at this point in the history
  • Loading branch information
jedelbo committed Aug 12, 2024
2 parents 6c1d0d7 + c2552e1 commit 43c2548
Show file tree
Hide file tree
Showing 33 changed files with 1,297 additions and 516 deletions.
28 changes: 28 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,34 @@

----------------------------------------------

# 14.12.0 Release notes

### Enhancements
* Improve sync bootstrap performance by reducing the number of table selections in the replication logs for embedded objects. ([#7945](https://github.com/realm/realm-core/issues/7945))
* Released a read lock which was pinned for the duration of a mutable subscription even after commit. This frees resources earlier, and may improve performance of sync bootstraps where the starting state is large. ([#7946](https://github.com/realm/realm-core/issues/7946))
* Client reset cycle detection now checks if the previous recovery attempt was made by the same core version, and if not attempts recovery again ([PR #7944](https://github.com/realm/realm-core/pull/7944)).
* Updated bundled OpenSSL version to 3.3.1. (PR [#7947](https://github.com/realm/realm-core/pull/7947))

### Fixed
* Fixed an "invalid column key" exception when using a RQL "BETWEEN" query on an int or timestamp property across links. ([#7935](https://github.com/realm/realm-core/issues/7935), since v14.10.1)
* Fixed conflict resolution bug related to ArrayErase and Clear instructions, which could sometimes cause an "Invalid prior_size" exception to prevent synchronization ([#7893](https://github.com/realm/realm-core/issues/7893), since v14.8.0).
* Fixed bug which would prevent eventual consistency during conflict resolution. Affected clients would experience data divergence and potentially consistency errors as a result. ([PR #7955](https://github.com/realm/realm-core/pull/7955), since v14.8.0)
* Fixed issues loading the native Realm libraries on Linux ARMv7 systems when they linked against our bundled OpenSSL resulting in errors like `unexpected reloc type 0x03`. ([#7947](https://github.com/realm/realm-core/issues/7947), since v14.1.0)
* `Realm::convert()` would sometimes incorrectly throw an exception claiming that there were unuploaded local changes when the source Realm is a synchronized Realm ([#7966](https://github.com/realm/realm-core/issues/7966), since v10.7.0).

### Breaking changes
* None.

### Compatibility
* Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

-----------

### Internals
* Reverted the bfd linker override in the Linux-armv7 toolchain file because the upstream OpenSSL issue it was working around was resolved.

----------------------------------------------

# 14.11.2 Release notes

### Enhancements
Expand Down
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import PackageDescription
import Foundation

let versionStr = "14.11.2"
let versionStr = "14.12.0"
let versionPieces = versionStr.split(separator: "-")
let versionCompontents = versionPieces[0].split(separator: ".")
let versionExtra = versionPieces.count > 1 ? versionPieces[1] : ""
Expand Down
4 changes: 2 additions & 2 deletions dependencies.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PACKAGE_NAME: realm-core
VERSION: 14.11.2
OPENSSL_VERSION: 3.2.0
VERSION: 14.12.0
OPENSSL_VERSION: 3.3.1
ZLIB_VERSION: 1.2.13
# https://github.com/10gen/baas/commits
# 2f308db is 2024 July 10
Expand Down
62 changes: 47 additions & 15 deletions evergreen/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -305,24 +305,25 @@ functions:
fi
# NOTE: These two values will be ANDed together for matching tests
TEST_FLAGS=
TEST_FLAGS="--no-tests=error ${test_flags|} "
if [[ -n "${test_label}" ]]; then
TEST_FLAGS="-L ${test_label} "
TEST_FLAGS+="-L ${test_label} "
fi
if [[ -n "${test_filter}" ]]; then
TEST_FLAGS+="-R ${test_filter} "
fi
if [[ -n "${verbose_test_output}" ]]; then
TEST_FLAGS="$TEST_FLAGS -VV"
export UNITTEST_THREADS=1
export UNITTEST_LOG_LEVEL="${test_logging_level|debug}"
TEST_FLAGS+="-VV "
if [[ "$UNITTEST_LOG_LEVEL" = "all" ]]; then
TEST_FLAGS+="-O $(./evergreen/abspath.sh test_${task_id}.log) -Q "
fi
else
TEST_FLAGS="$TEST_FLAGS -V"
TEST_FLAGS+="-V "
fi
TEST_FLAGS="--no-tests=error $TEST_FLAGS ${test_flags|}"
if [[ -n "${disable_tests_against_baas|}" ]]; then
unset BAASAAS_API_KEY
unset BAASAAS_REF_SPEC
Expand All @@ -331,9 +332,18 @@ functions:
if [[ -n "${c_compiler}" && "$(basename ${c_compiler})" = "clang" && -f "$(dirname ${c_compiler})/llvm-symbolizer" ]]; then
LLVM_SYMBOLIZER="$(dirname ${c_compiler})/llvm-symbolizer"
# we don't want to put all of the llvm bin-dir onto the path, so make a new directory, as-needed,
# and put a symlink to llvm-symbolizer in it. This is for ubsan, which doesn't have an
# environment variable to specify the path to the llvm-symbolizer.
if [[ ! ./llvm_symbolizer_bindir/llvm-symbolizer -ef "$LLVM_SYMBOLIZER" ]]; then
mkdir llvm_symbolizer_bindir
ln -s "$(./evergreen/abspath.sh $LLVM_SYMBOLIZER)" llvm_symbolizer_bindir/llvm-symbolizer
fi
export PATH="$(./evergreen/abspath.sh llvm_symbolizer_bindir)":$PATH
export ASAN_SYMBOLIZER_PATH="$(./evergreen/abspath.sh $LLVM_SYMBOLIZER)"
export TSAN_OPTIONS="external_symbolizer_path=$(./evergreen/abspath.sh $LLVM_SYMBOLIZER)"
fi
if [[ -n "${enable_llvm_coverage}" ]]; then
if [[ -z "${test_executable_name}" ]]; then
echo "Missing executable name"
Expand Down Expand Up @@ -375,16 +385,12 @@ functions:
fi
cd build
if ! "$CTEST" -C ${cmake_build_type|Debug} $TEST_FLAGS; then
BAAS_PID=$(pgrep baas_server)
if [[ -n "$BAAS_PID" ]]; then
echo "Dumping baas to log file"
kill -3 $BAAS_PID
sleep 15
fi
exit 1
fi
"$CTEST" -C ${cmake_build_type|Debug} $TEST_FLAGS
if [[ -f ../test_${task_id}.log ]]; then
# If the test succeeded, then we don't need to save any trace level logs.
rm ../test_${task_id}.log
fi
"upload test results":
- command: attach.results
params:
Expand Down Expand Up @@ -477,6 +483,17 @@ functions:
content_type: text/plain
display_name: baas proxy logs
optional: true
- command: s3.put
params:
aws_key: '${artifacts_aws_access_key}'
aws_secret: '${artifacts_aws_secret_key}'
local_file: 'realm-core/test_${task_id}.log'
remote_file: 'realm-core-stable/${branch_name}/${task_id}/${execution}/test.log'
bucket: mciuploads
permissions: public-read
content_type: text/plain
display_name: trace level test logs
optional: true

"upload fuzzer results":
- command: shell.exec
Expand Down Expand Up @@ -1987,6 +2004,21 @@ buildvariants:
tasks:
- name: compile_test

- name: ubuntu-trace-logging
display_name: "Ubuntu (Trace Logging Enabled)"
run_on: ubuntu2204-arm64-large
allowed_requesters: [ "patch", "ad_hoc" ]
expansions:
fetch_missing_dependencies: On
cmake_build_type: Debug
c_compiler: "/opt/clang+llvm/bin/clang"
cxx_compiler: "/opt/clang+llvm/bin/clang++"
test_logging_level: all
enable_ubsan: On
verbose_test_output: true
tasks:
- name: compile_test

- name: ubuntu-no-app-services
display_name: "Ubuntu (AppServices Disabled)"
run_on: ubuntu2204-arm64-large
Expand Down
2 changes: 1 addition & 1 deletion src/realm/parser/driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -644,7 +644,7 @@ Query BetweenNode::visit(ParserDriver* drv)

auto tmp = prop->visit(drv);
const ObjPropertyBase* obj_prop = dynamic_cast<const ObjPropertyBase*>(tmp.get());
if (obj_prop) {
if (obj_prop && !obj_prop->links_exist()) {
if (tmp->get_type() == type_Int) {
auto min_val = min->visit(drv, type_Int);
auto max_val = max->visit(drv, type_Int);
Expand Down
42 changes: 12 additions & 30 deletions src/realm/query_conditions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,26 +31,8 @@

namespace realm {

// Quick hack to make "Queries with Integer null columns" able to compile in Visual Studio 2015 which doesn't full
// support sfinae
// (real cause hasn't been investigated yet, cannot exclude that we don't obey c++11 standard)
struct HackClass {
template <class A, class B, class C>
bool can_match(A, B, C)
{
REALM_ASSERT(false);
return false;
}
template <class A, class B, class C>
bool will_match(A, B, C)
{
REALM_ASSERT(false);
return false;
}
};

// Does v2 contain v1?
struct Contains : public HackClass {
struct Contains {
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
{
return v2.contains(v1);
Expand Down Expand Up @@ -108,7 +90,7 @@ struct Contains : public HackClass {
};

// Does v2 contain something like v1 (wildcard matching)?
struct Like : public HackClass {
struct Like {
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
{
return v2.like(v1);
Expand Down Expand Up @@ -172,7 +154,7 @@ struct Like : public HackClass {
};

// Does v2 begin with v1?
struct BeginsWith : public HackClass {
struct BeginsWith {
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
{
return v2.begins_with(v1);
Expand Down Expand Up @@ -223,7 +205,7 @@ struct BeginsWith : public HackClass {
};

// Does v2 end with v1?
struct EndsWith : public HackClass {
struct EndsWith {
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
{
return v2.ends_with(v1);
Expand Down Expand Up @@ -363,7 +345,7 @@ struct NotEqual {
};

// Does v2 contain v1?
struct ContainsIns : public HackClass {
struct ContainsIns {
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
bool = false) const
{
Expand Down Expand Up @@ -449,7 +431,7 @@ struct ContainsIns : public HackClass {
};

// Does v2 contain something like v1 (wildcard matching)?
struct LikeIns : public HackClass {
struct LikeIns {
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
bool = false) const
{
Expand Down Expand Up @@ -534,7 +516,7 @@ struct LikeIns : public HackClass {
};

// Does v2 begin with v1?
struct BeginsWithIns : public HackClass {
struct BeginsWithIns {
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
bool = false) const
{
Expand Down Expand Up @@ -600,7 +582,7 @@ struct BeginsWithIns : public HackClass {
};

// Does v2 end with v1?
struct EndsWithIns : public HackClass {
struct EndsWithIns {
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
bool = false) const
{
Expand Down Expand Up @@ -666,7 +648,7 @@ struct EndsWithIns : public HackClass {
static const int condition = -1;
};

struct EqualIns : public HackClass {
struct EqualIns {
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
bool = false) const
{
Expand Down Expand Up @@ -738,7 +720,7 @@ struct EqualIns : public HackClass {
static const int condition = -1;
};

struct NotEqualIns : public HackClass {
struct NotEqualIns {
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
bool = false) const
{
Expand Down Expand Up @@ -944,7 +926,7 @@ struct Less {
}
};

struct LessEqual : public HackClass {
struct LessEqual {
static const int avx = 0x12; // _CMP_LE_OQ
template <class T>
bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const
Expand Down Expand Up @@ -984,7 +966,7 @@ struct LessEqual : public HackClass {
static const int condition = -1;
};

struct GreaterEqual : public HackClass {
struct GreaterEqual {
static const int avx = 0x1D; // _CMP_GE_OQ
template <class T>
bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const
Expand Down
Loading

0 comments on commit 43c2548

Please sign in to comment.