Skip to content

Commit 14d1a5d

Browse files
committed
Merge tag 'v14.12.0' into next-major
2 parents 6c1d0d7 + c2552e1 commit 14d1a5d

33 files changed

+1295
-516
lines changed

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,34 @@
2121

2222
----------------------------------------------
2323

24+
# 14.12.0 Release notes
25+
26+
### Enhancements
27+
* 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))
28+
* 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))
29+
* 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)).
30+
* Updated bundled OpenSSL version to 3.3.1. (PR [#7947](https://github.com/realm/realm-core/pull/7947))
31+
32+
### Fixed
33+
* 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)
34+
* 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).
35+
* 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)
36+
* 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)
37+
* `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).
38+
39+
### Breaking changes
40+
* None.
41+
42+
### Compatibility
43+
* 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.
44+
45+
-----------
46+
47+
### Internals
48+
* Reverted the bfd linker override in the Linux-armv7 toolchain file because the upstream OpenSSL issue it was working around was resolved.
49+
50+
----------------------------------------------
51+
2452
# 14.11.2 Release notes
2553

2654
### Enhancements

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import PackageDescription
44
import Foundation
55

6-
let versionStr = "14.11.2"
6+
let versionStr = "14.12.0"
77
let versionPieces = versionStr.split(separator: "-")
88
let versionCompontents = versionPieces[0].split(separator: ".")
99
let versionExtra = versionPieces.count > 1 ? versionPieces[1] : ""

dependencies.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
PACKAGE_NAME: realm-core
2-
VERSION: 14.11.2
3-
OPENSSL_VERSION: 3.2.0
2+
VERSION: 14.12.0
3+
OPENSSL_VERSION: 3.3.1
44
ZLIB_VERSION: 1.2.13
55
# https://github.com/10gen/baas/commits
66
# 2f308db is 2024 July 10

evergreen/config.yml

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -305,24 +305,25 @@ functions:
305305
fi
306306
307307
# NOTE: These two values will be ANDed together for matching tests
308-
TEST_FLAGS=
308+
TEST_FLAGS="--no-tests=error ${test_flags|} "
309309
if [[ -n "${test_label}" ]]; then
310-
TEST_FLAGS="-L ${test_label} "
310+
TEST_FLAGS+="-L ${test_label} "
311311
fi
312312
if [[ -n "${test_filter}" ]]; then
313313
TEST_FLAGS+="-R ${test_filter} "
314314
fi
315315
316316
if [[ -n "${verbose_test_output}" ]]; then
317-
TEST_FLAGS="$TEST_FLAGS -VV"
318317
export UNITTEST_THREADS=1
319318
export UNITTEST_LOG_LEVEL="${test_logging_level|debug}"
319+
TEST_FLAGS+="-VV "
320+
if [[ "$UNITTEST_LOG_LEVEL" = "all" ]]; then
321+
TEST_FLAGS+="-O $(./evergreen/abspath.sh test_${task_id}.log) -Q "
322+
fi
320323
else
321-
TEST_FLAGS="$TEST_FLAGS -V"
324+
TEST_FLAGS+="-V "
322325
fi
323326
324-
TEST_FLAGS="--no-tests=error $TEST_FLAGS ${test_flags|}"
325-
326327
if [[ -n "${disable_tests_against_baas|}" ]]; then
327328
unset BAASAAS_API_KEY
328329
unset BAASAAS_REF_SPEC
@@ -331,9 +332,18 @@ functions:
331332
332333
if [[ -n "${c_compiler}" && "$(basename ${c_compiler})" = "clang" && -f "$(dirname ${c_compiler})/llvm-symbolizer" ]]; then
333334
LLVM_SYMBOLIZER="$(dirname ${c_compiler})/llvm-symbolizer"
335+
# we don't want to put all of the llvm bin-dir onto the path, so make a new directory, as-needed,
336+
# and put a symlink to llvm-symbolizer in it. This is for ubsan, which doesn't have an
337+
# environment variable to specify the path to the llvm-symbolizer.
338+
if [[ ! ./llvm_symbolizer_bindir/llvm-symbolizer -ef "$LLVM_SYMBOLIZER" ]]; then
339+
mkdir llvm_symbolizer_bindir
340+
ln -s "$(./evergreen/abspath.sh $LLVM_SYMBOLIZER)" llvm_symbolizer_bindir/llvm-symbolizer
341+
fi
342+
export PATH="$(./evergreen/abspath.sh llvm_symbolizer_bindir)":$PATH
334343
export ASAN_SYMBOLIZER_PATH="$(./evergreen/abspath.sh $LLVM_SYMBOLIZER)"
335344
export TSAN_OPTIONS="external_symbolizer_path=$(./evergreen/abspath.sh $LLVM_SYMBOLIZER)"
336345
fi
346+
337347
if [[ -n "${enable_llvm_coverage}" ]]; then
338348
if [[ -z "${test_executable_name}" ]]; then
339349
echo "Missing executable name"
@@ -375,16 +385,12 @@ functions:
375385
fi
376386
377387
cd build
378-
if ! "$CTEST" -C ${cmake_build_type|Debug} $TEST_FLAGS; then
379-
BAAS_PID=$(pgrep baas_server)
380-
if [[ -n "$BAAS_PID" ]]; then
381-
echo "Dumping baas to log file"
382-
kill -3 $BAAS_PID
383-
sleep 15
384-
fi
385-
exit 1
386-
fi
388+
"$CTEST" -C ${cmake_build_type|Debug} $TEST_FLAGS
387389
390+
if [[ -f ../test_${task_id}.log ]]; then
391+
# If the test succeeded, then we don't need to save any trace level logs.
392+
rm ../test_${task_id}.log
393+
fi
388394
"upload test results":
389395
- command: attach.results
390396
params:
@@ -477,6 +483,17 @@ functions:
477483
content_type: text/plain
478484
display_name: baas proxy logs
479485
optional: true
486+
- command: s3.put
487+
params:
488+
aws_key: '${artifacts_aws_access_key}'
489+
aws_secret: '${artifacts_aws_secret_key}'
490+
local_file: 'realm-core/test_${task_id}.log'
491+
remote_file: 'realm-core-stable/${branch_name}/${task_id}/${execution}/test.log'
492+
bucket: mciuploads
493+
permissions: public-read
494+
content_type: text/plain
495+
display_name: trace level test logs
496+
optional: true
480497

481498
"upload fuzzer results":
482499
- command: shell.exec
@@ -1984,6 +2001,19 @@ buildvariants:
19842001
extra_flags: -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_ARCHITECTURES=arm64
19852002
compress: On
19862003
cmake_build_type: Debug
2004+
2005+
- name: ubuntu-trace-logging
2006+
display_name: "Ubuntu (Trace Logging Enabled)"
2007+
run_on: ubuntu2204-arm64-large
2008+
allowed_requesters: [ "patch", "ad_hoc" ]
2009+
expansions:
2010+
fetch_missing_dependencies: On
2011+
cmake_build_type: Debug
2012+
c_compiler: "/opt/clang+llvm/bin/clang"
2013+
cxx_compiler: "/opt/clang+llvm/bin/clang++"
2014+
test_logging_level: all
2015+
enable_ubsan: On
2016+
verbose_test_output: true
19872017
tasks:
19882018
- name: compile_test
19892019

src/realm/parser/driver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ Query BetweenNode::visit(ParserDriver* drv)
644644

645645
auto tmp = prop->visit(drv);
646646
const ObjPropertyBase* obj_prop = dynamic_cast<const ObjPropertyBase*>(tmp.get());
647-
if (obj_prop) {
647+
if (obj_prop && !obj_prop->links_exist()) {
648648
if (tmp->get_type() == type_Int) {
649649
auto min_val = min->visit(drv, type_Int);
650650
auto max_val = max->visit(drv, type_Int);

src/realm/query_conditions.hpp

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,8 @@
3131

3232
namespace realm {
3333

34-
// Quick hack to make "Queries with Integer null columns" able to compile in Visual Studio 2015 which doesn't full
35-
// support sfinae
36-
// (real cause hasn't been investigated yet, cannot exclude that we don't obey c++11 standard)
37-
struct HackClass {
38-
template <class A, class B, class C>
39-
bool can_match(A, B, C)
40-
{
41-
REALM_ASSERT(false);
42-
return false;
43-
}
44-
template <class A, class B, class C>
45-
bool will_match(A, B, C)
46-
{
47-
REALM_ASSERT(false);
48-
return false;
49-
}
50-
};
51-
5234
// Does v2 contain v1?
53-
struct Contains : public HackClass {
35+
struct Contains {
5436
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
5537
{
5638
return v2.contains(v1);
@@ -108,7 +90,7 @@ struct Contains : public HackClass {
10890
};
10991

11092
// Does v2 contain something like v1 (wildcard matching)?
111-
struct Like : public HackClass {
93+
struct Like {
11294
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
11395
{
11496
return v2.like(v1);
@@ -172,7 +154,7 @@ struct Like : public HackClass {
172154
};
173155

174156
// Does v2 begin with v1?
175-
struct BeginsWith : public HackClass {
157+
struct BeginsWith {
176158
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
177159
{
178160
return v2.begins_with(v1);
@@ -223,7 +205,7 @@ struct BeginsWith : public HackClass {
223205
};
224206

225207
// Does v2 end with v1?
226-
struct EndsWith : public HackClass {
208+
struct EndsWith {
227209
bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const
228210
{
229211
return v2.ends_with(v1);
@@ -363,7 +345,7 @@ struct NotEqual {
363345
};
364346

365347
// Does v2 contain v1?
366-
struct ContainsIns : public HackClass {
348+
struct ContainsIns {
367349
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
368350
bool = false) const
369351
{
@@ -449,7 +431,7 @@ struct ContainsIns : public HackClass {
449431
};
450432

451433
// Does v2 contain something like v1 (wildcard matching)?
452-
struct LikeIns : public HackClass {
434+
struct LikeIns {
453435
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
454436
bool = false) const
455437
{
@@ -534,7 +516,7 @@ struct LikeIns : public HackClass {
534516
};
535517

536518
// Does v2 begin with v1?
537-
struct BeginsWithIns : public HackClass {
519+
struct BeginsWithIns {
538520
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
539521
bool = false) const
540522
{
@@ -600,7 +582,7 @@ struct BeginsWithIns : public HackClass {
600582
};
601583

602584
// Does v2 end with v1?
603-
struct EndsWithIns : public HackClass {
585+
struct EndsWithIns {
604586
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
605587
bool = false) const
606588
{
@@ -666,7 +648,7 @@ struct EndsWithIns : public HackClass {
666648
static const int condition = -1;
667649
};
668650

669-
struct EqualIns : public HackClass {
651+
struct EqualIns {
670652
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
671653
bool = false) const
672654
{
@@ -738,7 +720,7 @@ struct EqualIns : public HackClass {
738720
static const int condition = -1;
739721
};
740722

741-
struct NotEqualIns : public HackClass {
723+
struct NotEqualIns {
742724
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false,
743725
bool = false) const
744726
{
@@ -944,7 +926,7 @@ struct Less {
944926
}
945927
};
946928

947-
struct LessEqual : public HackClass {
929+
struct LessEqual {
948930
static const int avx = 0x12; // _CMP_LE_OQ
949931
template <class T>
950932
bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const
@@ -984,7 +966,7 @@ struct LessEqual : public HackClass {
984966
static const int condition = -1;
985967
};
986968

987-
struct GreaterEqual : public HackClass {
969+
struct GreaterEqual {
988970
static const int avx = 0x1D; // _CMP_GE_OQ
989971
template <class T>
990972
bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const

0 commit comments

Comments
 (0)