From 18bac818962ca0f3feed04af4b8206b475193ff6 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Thu, 5 Sep 2024 03:37:43 +0300 Subject: [PATCH] import libldb-2.8.0-2.el9_4 --- .gitignore | 2 +- .libldb.metadata | 2 +- ...ix-few-SyntaxWarnings-caused-by-regu.patch | 182 --------------- SOURCES/ldb-2.7.2.tar.asc | 11 - SOURCES/ldb-2.8.0.tar.asc | 11 + SOURCES/libldb-fix-indexes-performance.patch | 221 ++++++++++++++++++ SPECS/libldb.spec | 18 +- 7 files changed, 246 insertions(+), 201 deletions(-) delete mode 100644 SOURCES/0001-PATCH-wafsamba-Fix-few-SyntaxWarnings-caused-by-regu.patch delete mode 100644 SOURCES/ldb-2.7.2.tar.asc create mode 100644 SOURCES/ldb-2.8.0.tar.asc create mode 100644 SOURCES/libldb-fix-indexes-performance.patch diff --git a/.gitignore b/.gitignore index 556ee70..b6308ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/ldb-2.7.2.tar.gz +SOURCES/ldb-2.8.0.tar.gz SOURCES/ldb.keyring diff --git a/.libldb.metadata b/.libldb.metadata index d103e8a..4bae07e 100644 --- a/.libldb.metadata +++ b/.libldb.metadata @@ -1,2 +1,2 @@ -94c3957196f0e4c2f88af159a92a5adb08fd15c9 SOURCES/ldb-2.7.2.tar.gz +cf5c3d8a15c0666cc980a8cf7227ae711664f5a3 SOURCES/ldb-2.8.0.tar.gz 8ac6d09878c4218fb8e365fcf5a877a621dd40f9 SOURCES/ldb.keyring diff --git a/SOURCES/0001-PATCH-wafsamba-Fix-few-SyntaxWarnings-caused-by-regu.patch b/SOURCES/0001-PATCH-wafsamba-Fix-few-SyntaxWarnings-caused-by-regu.patch deleted file mode 100644 index 7742479..0000000 --- a/SOURCES/0001-PATCH-wafsamba-Fix-few-SyntaxWarnings-caused-by-regu.patch +++ /dev/null @@ -1,182 +0,0 @@ -From d4e0a07a24c16b38de58c14a38b418c63106ad09 Mon Sep 17 00:00:00 2001 -From: Lukas Slebodnik -Date: Sat, 24 Aug 2019 16:46:30 +0200 -Subject: [PATCH] [PATCH] wafsamba: Fix few SyntaxWarnings caused by regular - expressions - -./buildtools/wafsamba/samba_utils.py:258: SyntaxWarning: invalid escape sequence \$ - lst = re.split('(\$\{\w+\})', string) -./buildtools/wafsamba/samba_utils.py:261: SyntaxWarning: invalid escape sequence \$ - if re.match('\$\{\w+\}', v): -./buildtools/wafsamba/samba_cross.py:80: SyntaxWarning: invalid escape sequence \( - m = re.match('\(\s*(-?\d+)\s*,\s*\"(.*)\"\s*\)', ans) -./buildtools/wafsamba/samba_conftests.py:400: SyntaxWarning: invalid escape sequence \s - m = re.search('MAN%sEXT\s+=\s+(\w+)' % section, man) -./buildtools/wafsamba/samba_abi.py:24: SyntaxWarning: invalid escape sequence \$ - sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}$', r'\1', sig) -./buildtools/wafsamba/samba_abi.py:25: SyntaxWarning: invalid escape sequence \$ - sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}(\s0x[0-9a-f]+\s<\w+>)+$', r'\1', sig) -./buildtools/wafsamba/samba_abi.py:26: SyntaxWarning: invalid escape sequence \$ - sig = re.sub('^\$[0-9]+\s=\s(0x[0-9a-f]+)\s?(<\w+>)?$', r'\1', sig) -./buildtools/wafsamba/samba_abi.py:33: SyntaxWarning: invalid escape sequence \* - m = m.replace('*', '\*') -./buildtools/wafsamba/samba_abi.py:44: SyntaxWarning: invalid escape sequence \s - sig = re.sub(',\s\.\.\.', '', sig) -./buildtools/wafsamba/samba_headers.py:22: SyntaxWarning: invalid escape sequence \s - re_header = re.compile('^\s*#\s*include[ \t]*"([^"]+)"', re.I | re.M) -./buildtools/wafsamba/symbols.py:122: SyntaxWarning: invalid escape sequence \[ - re_sharedlib = re.compile(b'Shared library: \[(.*)\]') -./buildtools/wafsamba/symbols.py:124: SyntaxWarning: invalid escape sequence \[ - re_rpath = re.compile(b'Library (rpath|runpath): \[(.*)\]') -./buildtools/wafsamba/pkgconfig.py:12: SyntaxWarning: invalid escape sequence \w - a = re.split('(@\w+@)', s) -./buildtools/wafsamba/pkgconfig.py:17: SyntaxWarning: invalid escape sequence \w - if re.match('@\w+@', v): -./buildtools/wafsamba/configure_file.py:16: SyntaxWarning: invalid escape sequence \w - a = re.split('(@\w+@)', s) -./buildtools/wafsamba/configure_file.py:19: SyntaxWarning: invalid escape sequence \w - if re.match('@\w+@', v): ---- - buildtools/wafsamba/configure_file.py | 4 ++-- - buildtools/wafsamba/pkgconfig.py | 4 ++-- - buildtools/wafsamba/samba_abi.py | 12 ++++++------ - buildtools/wafsamba/samba_conftests.py | 2 +- - buildtools/wafsamba/samba_cross.py | 2 +- - buildtools/wafsamba/samba_headers.py | 2 +- - buildtools/wafsamba/samba_utils.py | 4 ++-- - buildtools/wafsamba/symbols.py | 4 ++-- - 8 files changed, 17 insertions(+), 17 deletions(-) - -diff --git a/buildtools/wafsamba/configure_file.py b/buildtools/wafsamba/configure_file.py -index 6ad43546249fba7b4c0a037035e8574e7a9d2753..98a58a4604513e3633317e73299c1c9280c250d2 100644 ---- a/buildtools/wafsamba/configure_file.py -+++ b/buildtools/wafsamba/configure_file.py -@@ -13,10 +13,10 @@ def subst_at_vars(task): - s = task.inputs[0].read() - - # split on the vars -- a = re.split('(@\w+@)', s) -+ a = re.split(r'(@\w+@)', s) - out = [] - for v in a: -- if re.match('@\w+@', v): -+ if re.match(r'@\w+@', v): - vname = v[1:-1] - if not vname in task.env and vname.upper() in task.env: - vname = vname.upper() -diff --git a/buildtools/wafsamba/pkgconfig.py b/buildtools/wafsamba/pkgconfig.py -index b83d5f382a58352bb3318b594aa2b45fc02d87d5..b77bd618c8903789c7ba9e64a6972a4e080f1821 100644 ---- a/buildtools/wafsamba/pkgconfig.py -+++ b/buildtools/wafsamba/pkgconfig.py -@@ -9,12 +9,12 @@ def subst_at_vars(task): - - s = task.inputs[0].read() - # split on the vars -- a = re.split('(@\w+@)', s) -+ a = re.split(r'(@\w+@)', s) - out = [] - done_var = {} - back_sub = [ ('PREFIX', '${prefix}'), ('EXEC_PREFIX', '${exec_prefix}')] - for v in a: -- if re.match('@\w+@', v): -+ if re.match(r'@\w+@', v): - vname = v[1:-1] - if not vname in task.env and vname.upper() in task.env: - vname = vname.upper() -diff --git a/buildtools/wafsamba/samba_abi.py b/buildtools/wafsamba/samba_abi.py -index 5e7686da3d68b1ebcd842b8a319a5997fa9cf600..761667fcfe1f3937be22c8261b45dcb3979ae4cd 100644 ---- a/buildtools/wafsamba/samba_abi.py -+++ b/buildtools/wafsamba/samba_abi.py -@@ -21,16 +21,16 @@ version_key = lambda x: list(map(int, x.split("."))) - def normalise_signature(sig): - '''normalise a signature from gdb''' - sig = sig.strip() -- sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}$', r'\1', sig) -- sig = re.sub('^\$[0-9]+\s=\s\{(.+)\}(\s0x[0-9a-f]+\s<\w+>)+$', r'\1', sig) -- sig = re.sub('^\$[0-9]+\s=\s(0x[0-9a-f]+)\s?(<\w+>)?$', r'\1', sig) -- sig = re.sub('0x[0-9a-f]+', '0xXXXX', sig) -+ sig = re.sub(r'^\$[0-9]+\s=\s\{(.+)\}$', r'\1', sig) -+ sig = re.sub(r'^\$[0-9]+\s=\s\{(.+)\}(\s0x[0-9a-f]+\s<\w+>)+$', r'\1', sig) -+ sig = re.sub(r'^\$[0-9]+\s=\s(0x[0-9a-f]+)\s?(<\w+>)?$', r'\1', sig) -+ sig = re.sub(r'0x[0-9a-f]+', '0xXXXX', sig) - sig = re.sub('", ', r'\1"', sig) - - for t in abi_type_maps: - # we need to cope with non-word characters in mapped types - m = t -- m = m.replace('*', '\*') -+ m = m.replace('*', r'\*') - if m[-1].isalnum() or m[-1] == '_': - m += '\\b' - if m[0].isalnum() or m[0] == '_': -@@ -41,7 +41,7 @@ def normalise_signature(sig): - - def normalise_varargs(sig): - '''cope with older versions of gdb''' -- sig = re.sub(',\s\.\.\.', '', sig) -+ sig = re.sub(r',\s\.\.\.', '', sig) - return sig - - -diff --git a/buildtools/wafsamba/samba_conftests.py b/buildtools/wafsamba/samba_conftests.py -index ef632ba903369e4211991f17a3b204bcd96c3a2f..63e50567860ff890b00b0ce6c7607c917b7329d1 100644 ---- a/buildtools/wafsamba/samba_conftests.py -+++ b/buildtools/wafsamba/samba_conftests.py -@@ -397,7 +397,7 @@ WriteMakefile( - - if section: - man = Utils.readf(os.path.join(bdir,'Makefile')) -- m = re.search('MAN%sEXT\s+=\s+(\w+)' % section, man) -+ m = re.search(r'MAN%sEXT\s+=\s+(\w+)' % section, man) - if not m: - conf.end_msg('not found', color='YELLOW') - return -diff --git a/buildtools/wafsamba/samba_headers.py b/buildtools/wafsamba/samba_headers.py -index a268c011c5d8e406e0d763554c55668cfb5388bc..c8bee19010978a04460b0637fcc8fd484a699ea8 100644 ---- a/buildtools/wafsamba/samba_headers.py -+++ b/buildtools/wafsamba/samba_headers.py -@@ -19,7 +19,7 @@ def header_install_path(header, header_path): - return '' - - --re_header = re.compile('^\s*#\s*include[ \t]*"([^"]+)"', re.I | re.M) -+re_header = re.compile(r'^\s*#\s*include[ \t]*"([^"]+)"', re.I | re.M) - - # a dictionary mapping source header paths to public header paths - header_map = {} -diff --git a/buildtools/wafsamba/samba_utils.py b/buildtools/wafsamba/samba_utils.py -index ad97de1859ba24c4afd5106b4f9694b0dc855643..75c9794ec40f327ef8ccf9aa33fafd6ed6181e3b 100644 ---- a/buildtools/wafsamba/samba_utils.py -+++ b/buildtools/wafsamba/samba_utils.py -@@ -255,10 +255,10 @@ def TO_LIST(str, delimiter=None): - - def subst_vars_error(string, env): - '''substitute vars, throw an error if a variable is not defined''' -- lst = re.split('(\$\{\w+\})', string) -+ lst = re.split(r'(\$\{\w+\})', string) - out = [] - for v in lst: -- if re.match('\$\{\w+\}', v): -+ if re.match(r'\$\{\w+\}', v): - vname = v[2:-1] - if not vname in env: - raise KeyError("Failed to find variable %s in %s in env %s <%s>" % (vname, string, env.__class__, str(env))) -diff --git a/buildtools/wafsamba/symbols.py b/buildtools/wafsamba/symbols.py -index 3eca3d46bd71cf0780b3c8e36a26b96bd3aa3b83..73e8ca8ce53ef5d956ac58e14a2403dd49f01109 100644 ---- a/buildtools/wafsamba/symbols.py -+++ b/buildtools/wafsamba/symbols.py -@@ -119,9 +119,9 @@ def find_ldd_path(bld, libname, binary): - - - # some regular expressions for parsing readelf output --re_sharedlib = re.compile(b'Shared library: \[(.*)\]') -+re_sharedlib = re.compile(r'Shared library: \[(.*)\]') - # output from readelf could be `Library rpath` or `Libray runpath` --re_rpath = re.compile(b'Library (rpath|runpath): \[(.*)\]') -+re_rpath = re.compile(r'Library (rpath|runpath): \[(.*)\]') - - def get_libs(bld, binname): - '''find the list of linked libraries for any binary or library --- -2.23.0.rc2 - diff --git a/SOURCES/ldb-2.7.2.tar.asc b/SOURCES/ldb-2.7.2.tar.asc deleted file mode 100644 index 8f0547f..0000000 --- a/SOURCES/ldb-2.7.2.tar.asc +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQEzBAABCgAdFiEEkUejOXGVGO6QEby1R5ORYRMIQCUFAmQkQQAACgkQR5ORYRMI -QCVLegf/edHMC2+MZrMuMAbmRPb/cFxzYhHzDLuDyXcW0v6M0TDhu2eRamXk1XT0 -SFR5ah/qdhC1TeYOMpXhKPTpuvEURKkCK1vLj002djaNy4hEmHUsF7aNFW9Kd2QN -2hatsIn9EhPafOppgpJ34oVEF+ta9aA07rDwcRAPiCUq4/IW6qnEieC+zCjVLlTd -2+1gfUaC2iUj7g9qkXLg21XRPRwkv8xvpUlJ+SBMphyo6uoBzVzDB+nzOGqpO4n9 -QAj6iUC0I9faLlXljgeSi+DaM1E5n/slgkl6ko2Chcba6ZtSxKLE69X3RenAu8d3 -Cf+ATsT5+Ra5CPY2PJv5Z1A2SCHd/w== -=ukNT ------END PGP SIGNATURE----- diff --git a/SOURCES/ldb-2.8.0.tar.asc b/SOURCES/ldb-2.8.0.tar.asc new file mode 100644 index 0000000..25d706f --- /dev/null +++ b/SOURCES/ldb-2.8.0.tar.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCgAdFiEEkUejOXGVGO6QEby1R5ORYRMIQCUFAmTDr+oACgkQR5ORYRMI +QCXfwgf/cAqWCgnnKIT3hvUdL2i2F9edDXTOkBDZ1vxQ8hLO+T8JtWO9F40hEZjH +F5R5B2pxBP6T2Nd9NHVbHUqlIpjqqesweTXtabuW60oz5PZ13owpGDWWQKortH5/ +j49v/ZKHD0NBjVN09AylRgoKQ4kRDtd0rMOAS951aRUcRTFRjK86hnaHPgvQeexy +SizGRtHlifnwM/lbgJlLkTDUDNA+7RwXRAv0pvLwYReGFoS8vyUbMOYt1lnoiNas +6cz+6yTKknGO7KSE6bjviDahv7Xg04Qy02eI/HYEZ8NG3aJqNsOqPchP4y/JgVv+ +90FZR2cdZNpTdlZ5TPfihL2/zldXKQ== +=H6+4 +-----END PGP SIGNATURE----- diff --git a/SOURCES/libldb-fix-indexes-performance.patch b/SOURCES/libldb-fix-indexes-performance.patch new file mode 100644 index 0000000..5bae0c9 --- /dev/null +++ b/SOURCES/libldb-fix-indexes-performance.patch @@ -0,0 +1,221 @@ +From 1944fcf4b7e5ab4cf580e17031918ba5f441902b Mon Sep 17 00:00:00 2001 +From: Douglas Bagnall +Date: Wed, 26 Jun 2024 11:05:49 +1200 +Subject: [PATCH 1/2] ldb_kv_index: dn_list load sub transaction can re-use + keys +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We don't want to modify the original list, but we can reuse the keys +if we treat them as immutable and don't free them. That makes it a lot +quicker if there are many keys (i.e. where an index is useful) and may +sub-transactions. In particular, it avoids O(n²) talloc_memdups. + +A removed comment that says "We have to free the top level index +memory otherwise we would leak", and this will be addressed in the +next commit. + +BUG: https://bugzilla.samba.org/show_bug.cgi?id=15590 + +Signed-off-by: Douglas Bagnall +Reviewed-by: Stefan Metzmacher +(cherry picked from commit 5f0198d69843c864f2b98a7c0c6305ad789a68a0) +--- + lib/ldb/ldb_key_value/ldb_kv_index.c | 96 +++++++++++++++++----------- + 1 file changed, 57 insertions(+), 39 deletions(-) + +diff --git a/lib/ldb/ldb_key_value/ldb_kv_index.c b/lib/ldb/ldb_key_value/ldb_kv_index.c +index 3f1a847f2b6..fed1033f492 100644 +--- a/lib/ldb/ldb_key_value/ldb_kv_index.c ++++ b/lib/ldb/ldb_key_value/ldb_kv_index.c +@@ -446,34 +446,39 @@ static int ldb_kv_dn_list_load(struct ldb_module *module, + * There is an active index sub transaction, and the record was + * found in the primary index transaction cache. A copy of the + * record needs be taken to prevent the original entry being +- * altered, until the index sub transaction is committed. ++ * altered, until the index sub transaction is committed, but we ++ * don't copy the actual values, just the array of struct ldb_val ++ * that points to the values (which are offsets into a GUID array). ++ * ++ * As a reminder, our primary cache is an in-memory tdb that ++ * maps attributes to struct dn_list objects, which point to ++ * the actual index, which is an array of struct ldb_val, the ++ * contents of which are {.data = , .length = ++ * 16}. The array is sorted by GUID data, and these GUIDs are ++ * used to look up index entries in the main database. There ++ * are more layers of indirection than necessary, but what ++ * makes the index useful is we can use a binary search to ++ * find if the array contains a GUID. ++ * ++ * What we do in a sub-transaction is make a copy of the struct ++ * dn_list and the array of struct ldb_val, but *not* of the ++ * .data that they point to. This copy is put into a new ++ * in-memory tdb which masks the primary cache for the duration ++ * of the sub-transaction. ++ * ++ * In an add operation in a sub-transaction, the new ldb_val ++ * is a child of the sub-transaction dn_list, which will ++ * become the main dn_list if the transaction succeeds. ++ * ++ * These acrobatics do not affect read-only operations. + */ +- +- { +- struct ldb_val *dns = NULL; +- size_t x = 0; +- +- dns = talloc_array( +- list, +- struct ldb_val, +- list2->count); +- if (dns == NULL) { +- return LDB_ERR_OPERATIONS_ERROR; +- } +- for (x = 0; x < list2->count; x++) { +- dns[x].length = list2->dn[x].length; +- dns[x].data = talloc_memdup( +- dns, +- list2->dn[x].data, +- list2->dn[x].length); +- if (dns[x].data == NULL) { +- TALLOC_FREE(dns); +- return LDB_ERR_OPERATIONS_ERROR; +- } +- } +- list->dn = dns; +- list->count = list2->count; ++ list->dn = talloc_memdup(list, ++ list2->dn, ++ talloc_get_size(list2->dn)); ++ if (list->dn == NULL) { ++ return LDB_ERR_OPERATIONS_ERROR; + } ++ list->count = list2->count; + return LDB_SUCCESS; + + /* +@@ -3852,9 +3857,7 @@ int ldb_kv_reindex(struct ldb_module *module) + * Copy the contents of the nested transaction index cache record to the + * transaction index cache. + * +- * During this 'commit' of the subtransaction to the main transaction +- * (cache), care must be taken to free any existing index at the top +- * level because otherwise we would leak memory. ++ * This is a 'commit' of the subtransaction to the main transaction cache. + */ + static int ldb_kv_sub_transaction_traverse( + struct tdb_context *tdb, +@@ -3883,8 +3886,7 @@ static int ldb_kv_sub_transaction_traverse( + + /* + * Do we already have an entry in the primary transaction cache +- * If so free it's dn_list and replace it with the dn_list from +- * the secondary cache ++ * If so replace dn_list with the one from the subtransaction. + * + * The TDB and so the fetched rec contains NO DATA, just a + * pointer to data held in memory. +@@ -3897,21 +3899,37 @@ static int ldb_kv_sub_transaction_traverse( + abort(); + } + /* +- * We had this key at the top level. However we made a copy +- * at the sub-transaction level so that we could possibly +- * roll back. We have to free the top level index memory +- * otherwise we would leak ++ * We had this key at the top level, and made a copy ++ * of the dn list for this sub-transaction level that ++ * borrowed the top level GUID data. We can't free the ++ * original dn list just yet. ++ * ++ * In this diagram, ... is the C pointer structure ++ * and --- is the talloc structure (::: is both). ++ * ++ * index_in_top_level ::: dn orig .............. ++ * | | : ++ * | `--GUID array : ++ * | |----- val1 data ++ * ldb_kv `----- val2 data ++ * | : ++ * index_in_subtransaction :: dn copy ..........: ++ * | : ++ * `------------ new val3 data ++ * ++ * So we don't free the index_in_top_level dn list yet, ++ * because we are (probably) borrowing most of its ++ * children. + */ +- if (index_in_top_level->count > 0) { +- TALLOC_FREE(index_in_top_level->dn); +- } + index_in_top_level->dn + = talloc_steal(index_in_top_level, + index_in_subtransaction->dn); + index_in_top_level->count = index_in_subtransaction->count; + return 0; + } +- ++ /* ++ * We found no top level index in the cache, so we put one in. ++ */ + index_in_top_level = talloc(ldb_kv->idxptr, struct dn_list); + if (index_in_top_level == NULL) { + ldb_kv->idxptr->error = LDB_ERR_OPERATIONS_ERROR; +-- +2.46.0 + + +From 70d8b1b2f87cbb16b671d334e46244ba001fbd31 Mon Sep 17 00:00:00 2001 +From: Douglas Bagnall +Date: Mon, 22 Jul 2024 22:22:15 +1200 +Subject: [PATCH 2/2] ldb:kv_index: realloc away old dn list + +We can't just free it, because has the GUID index list as a child, and +these are shared by the new dn list (from the subtransaction we are +committing). But if the dn list is long and the main transaction is +long-lived, we can save a lot of memory by turning this dn list into +an almost empty node in the talloc tree. This returns us to roughly +the situation we had prior to the last commit. + +For example, with the repro.sh script on bug 15590 in indexes mode +with 10000 rules, The last 3 commits use this much memory at the end +of an unusually large transaction: + +full talloc report on 'struct ldb_context' (total 4012222 bytes in 90058 blocks) +full talloc report on 'struct ldb_context' (total 2405482219 bytes in 90058 blocks) +full talloc report on 'struct ldb_context' (total 4282195 bytes in 90058 blocks) + +That is, the last commit increased usage 500 fold, and this commit +brings it back to normal. + +BUG: https://bugzilla.samba.org/show_bug.cgi?id=15590 + +Signed-off-by: Douglas Bagnall +Reviewed-by: Stefan Metzmacher +(cherry picked from commit 1bf9ede94f0a6b41fb18e880e59a8e390f8c21d3) +--- + lib/ldb/ldb_key_value/ldb_kv_index.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/lib/ldb/ldb_key_value/ldb_kv_index.c b/lib/ldb/ldb_key_value/ldb_kv_index.c +index fed1033f492..11bdf00dc08 100644 +--- a/lib/ldb/ldb_key_value/ldb_kv_index.c ++++ b/lib/ldb/ldb_key_value/ldb_kv_index.c +@@ -3919,8 +3919,12 @@ static int ldb_kv_sub_transaction_traverse( + * + * So we don't free the index_in_top_level dn list yet, + * because we are (probably) borrowing most of its +- * children. ++ * children. But we can save memory by discarding the ++ * values and keeping it as an almost empty talloc ++ * node. + */ ++ talloc_realloc(index_in_top_level, ++ index_in_top_level->dn, struct ldb_val *, 1); + index_in_top_level->dn + = talloc_steal(index_in_top_level, + index_in_subtransaction->dn); +-- +2.46.0 + diff --git a/SPECS/libldb.spec b/SPECS/libldb.spec index 6920a64..f9cf96a 100644 --- a/SPECS/libldb.spec +++ b/SPECS/libldb.spec @@ -19,12 +19,12 @@ %bcond_with python3 %endif -%global talloc_version 2.4.0 -%global tdb_version 1.4.8 -%global tevent_version 0.14.1 +%global talloc_version 2.4.1 +%global tdb_version 1.4.9 +%global tevent_version 0.15.0 Name: libldb -Version: 2.7.2 +Version: 2.8.0 Release: 2%{?dist} Summary: A schema-less, ldap like, API and database Requires: libtalloc%{?_isa} >= %{talloc_version} @@ -38,7 +38,7 @@ Source1: https://www.samba.org/ftp/ldb/ldb-%{version}.tar.asc Source2: ldb.keyring # Patches -Patch0001: 0001-PATCH-wafsamba-Fix-few-SyntaxWarnings-caused-by-regu.patch +Patch0: libldb-fix-indexes-performance.patch BuildRequires: gcc BuildRequires: libtalloc-devel >= %{talloc_version} @@ -125,7 +125,7 @@ Development files for the Python bindings for the LDB library %prep zcat %{SOURCE0} | gpgv2 --quiet --keyring %{SOURCE2} %{SOURCE1} - -%autosetup -n ldb-%{version} -p1 +%autosetup -n ldb-%{version} -p3 %build # workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1217376 @@ -222,6 +222,12 @@ rm -f $RPM_BUILD_ROOT/%{_mandir}/man3/_* %endif %changelog +* Tue Aug 13 2024 Andreas Schneider - 2.8.0-2 +- resolves: RHEL-53007 - Fix performance regression with indexes + +* Mon Dec 04 2023 Andreas Schneider - 2.8.0-1 +- resolves: RHEL-16482 - Rebase version to 2.8.0 + * Mon Jun 05 2023 Pavel Filipenský - 2.7.2-2 - resolves: rhbz#2190426 - Rebuilt to retrigger brew build