Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package cowsql for openSUSE:Factory checked 
in at 2024-04-02 16:42:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cowsql (Old)
 and      /work/SRC/openSUSE:Factory/.cowsql.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "cowsql"

Tue Apr  2 16:42:57 2024 rev:2 rq:1163774 version:1.15.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/cowsql/cowsql.changes    2024-02-22 
20:59:15.508792287 +0100
+++ /work/SRC/openSUSE:Factory/.cowsql.new.1905/cowsql.changes  2024-04-02 
16:44:44.794153292 +0200
@@ -1,0 +2,8 @@
+Sun Mar 31 09:05:19 UTC 2024 - Andreas Stieger <andreas.stie...@gmx.de>
+
+- update to 1.15.6:
+  * leader: Fix double-frees
+  * More raft protocol errors are translated into sqlite errors
+  * Improved handling of SQLITE_DIRECT_OVERFLOW_READ
+
+-------------------------------------------------------------------

Old:
----
  cowsql-1.15.4.tar.gz

New:
----
  cowsql-1.15.6.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ cowsql.spec ++++++
--- /var/tmp/diff_new_pack.55ibBg/_old  2024-04-02 16:44:45.394174710 +0200
+++ /var/tmp/diff_new_pack.55ibBg/_new  2024-04-02 16:44:45.394174710 +0200
@@ -18,12 +18,10 @@
 
 %define lname libcowsql0
 Name:           cowsql
-Version:        1.15.4
+Version:        1.15.6
 Release:        0
 Summary:        Embeddable, replicated and fault tolerant SQL engine
 License:        LGPL-3.0-only WITH LGPL-3.0-linking-exception
-# FIXME: use correct group or remove it, see 
"https://en.opensuse.org/openSUSE:Package_group_guidelines";
-Group:          https://github.com/cowsql/cowsql
 URL:            https://github.com/cowsql/cowsql
 Source:         
https://github.com/cowsql/cowsql/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
 BuildRequires:  autoconf
@@ -87,6 +85,9 @@
 
 %ldconfig_scriptlets -n %{lname}
 
+%check
+%make_build check
+
 %files devel
 %license LICENSE
 %doc AUTHORS README.md

++++++ cowsql-1.15.4.tar.gz -> cowsql-1.15.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/README.md new/cowsql-1.15.6/README.md
--- old/cowsql-1.15.4/README.md 2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/README.md 2024-03-29 11:28:23.000000000 +0100
@@ -79,7 +79,7 @@
 cowsql's [dev PPA](https://launchpad.net/~cowsql/+archive/ubuntu/master):
 
 ```
-sudo add-apt-repository ppa:cowsql/master
+sudo add-apt-repository ppa:cowsql/main
 sudo apt-get update
 sudo apt-get install libcowsql-dev
 ```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/README_CH.md 
new/cowsql-1.15.6/README_CH.md
--- old/cowsql-1.15.4/README_CH.md      2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/README_CH.md      2024-03-29 11:28:23.000000000 +0100
@@ -5,9 +5,16 @@
 
 
**注意**:中文文档有可能未及时更新,请以最新的英文[readme](./README.md)为准。
 
-[cowsql](https://cowsql.io)是一个用C语言开发的可嵌å…
¥çš„,支持流复制的数据库引擎,具备高可用性和自动故
障转移功能。
+[cowsql](https://cowsql.dev) (/ˈkaʊ,siːkwəl/
+[listen](http://ipa-reader.xyz/?text=%CB%88ka%CA%8A%2Csi%CB%90kw%C9%99l)) 
是一个用C语言开发的可嵌å…
¥çš„,支持流复制的数据库引擎,具备高可用性和自动故
障转移功能。
 
-“cowsql”是“distributed 
SQLite”的简写,即分布式SQLite。意味着cowsql通过网络协议扩展SQLite,将应用程序的各个实例连接在一起,让它们作为一个高可用的集群,而不依赖外部数据库。
+cowsql通过网络协议扩展[SQLite](https://sqlite.org/),将应用程序的各个实例连接在一起,让它们作为一个高可用的集群,而不依赖外部数据库。
+
+"cowsql"名字大致取意["宠
物与牲口应用思辨"](https://iamondemand.com/blog/devops-concepts-pets-vs-cattle/),åˆ
 
除或重建一个存储使用cowsql应用的特定节点,应用基本使用不受影响。
+
+## Canonical dqlite 分支
+
+cowsql 是Canonical 
[dqlite](https://github.com/canonical/dqlite)项目一个分支,dqlite原å…
ˆä¹Ÿæ˜¯cowsql作者
[自己](https://github.com/canonical/dqlite/commits?author=freeekanayaka)当时在Canonical工作时候开发的。
 
 ## 设计亮点
 
@@ -84,4 +91,4 @@
 
 ## 注意事项
 
-当环境变量LIBRAFT_TRACE在启动时被设置,将启用详细跟踪。
\ No newline at end of file
+当环境变量LIBRAFT_TRACE在启动时被设置,将启用详细跟踪。
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/configure.ac 
new/cowsql-1.15.6/configure.ac
--- old/cowsql-1.15.4/configure.ac      2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/configure.ac      2024-03-29 11:28:23.000000000 +0100
@@ -1,5 +1,5 @@
 AC_PREREQ(2.60)
-AC_INIT([libcowsql], [1.15.4], [https://github.com/cowsql/cowsql])
+AC_INIT([libcowsql], [1.15.6], [https://github.com/cowsql/cowsql])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_AUX_DIR([ac])
 
@@ -54,7 +54,7 @@
 # Checks for libraries
 PKG_CHECK_MODULES(SQLITE, [sqlite3 >= 3.22.0], [], [])
 PKG_CHECK_MODULES(UV, [libuv >= 1.8.0], [], [])
-PKG_CHECK_MODULES(RAFT, [raft >= 0.17.1], [], [])
+PKG_CHECK_MODULES(RAFT, [raft >= 0.18], [], [])
 
 CC_CHECK_FLAGS_APPEND([AM_CFLAGS],[CFLAGS],[ \
   -std=c11 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/include/cowsql.h 
new/cowsql-1.15.6/include/cowsql.h
--- old/cowsql-1.15.4/include/cowsql.h  2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/include/cowsql.h  2024-03-29 11:28:23.000000000 +0100
@@ -26,8 +26,8 @@
  * Version.
  */
 #define COWSQL_VERSION_MAJOR 1
-#define COWSQL_VERSION_MINOR 14
-#define COWSQL_VERSION_RELEASE 0
+#define COWSQL_VERSION_MINOR 15
+#define COWSQL_VERSION_RELEASE 6
 #define COWSQL_VERSION_NUMBER                                            \
        (COWSQL_VERSION_MAJOR * 100 * 100 + COWSQL_VERSION_MINOR * 100 + \
         COWSQL_VERSION_RELEASE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/src/client/protocol.c 
new/cowsql-1.15.6/src/client/protocol.c
--- old/cowsql-1.15.4/src/client/protocol.c     2023-11-04 21:25:04.000000000 
+0100
+++ new/cowsql-1.15.6/src/client/protocol.c     2024-03-29 11:28:23.000000000 
+0100
@@ -139,8 +139,10 @@
                assert(rv == 0);
                if (context != NULL) {
                        millis =
-                           (context->deadline.tv_sec - now.tv_sec) * 1000 +
-                           (context->deadline.tv_nsec - now.tv_nsec) / 1000000;
+                           (long)((context->deadline.tv_sec - now.tv_sec) *
+                                      1000 +
+                                  (context->deadline.tv_nsec - now.tv_nsec) /
+                                      1000000);
                        if (millis < 0) {
                                /* poll(2) will block indefinitely if the
                                 * timeout argument is negative, and we don't
@@ -219,8 +221,10 @@
                assert(rv == 0);
                if (context != NULL) {
                        millis =
-                           (context->deadline.tv_sec - now.tv_sec) * 1000 +
-                           (context->deadline.tv_nsec - now.tv_nsec) / 1000000;
+                           (long)((context->deadline.tv_sec - now.tv_sec) *
+                                      1000 +
+                                  (context->deadline.tv_nsec - now.tv_nsec) /
+                                      1000000);
                        if (millis < 0) {
                                /* poll(2) will block indefinitely if the
                                 * timeout argument is negative, and we don't
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/src/gateway.c 
new/cowsql-1.15.6/src/gateway.c
--- old/cowsql-1.15.4/src/gateway.c     2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/src/gateway.c     2024-03-29 11:28:23.000000000 +0100
@@ -43,6 +43,7 @@
        if (g->req != NULL) {
                if (g->leader->inflight != NULL) {
                        tracef("finish inflight apply request");
+                       g->leader->inflight->canceled = true;
                        struct raft_apply *req = &g->leader->inflight->req;
                        req->cb(req, reason, NULL);
                        assert(g->req == NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/src/leader.c 
new/cowsql-1.15.6/src/leader.c
--- old/cowsql-1.15.4/src/leader.c      2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/src/leader.c      2024-03-29 11:28:23.000000000 +0100
@@ -238,7 +238,7 @@
        tracef("apply frames cb id:%" PRIu64, idExtract(req->req_id));
        struct apply *apply = req->data;
        struct leader *l = apply->leader;
-       if (l == NULL) {
+       if (l == NULL || apply->fired) {
                raft_free(apply);
                return;
        }
@@ -276,7 +276,13 @@
                VfsAbort(vfs, l->db->filename);
        }
 
-       raft_free(apply);
+       apply->fired = true;
+
+       /* Don't free the request object if we're being canceled by
+        * gateway__leader_close, as raft will call this callback again. */
+       if (!apply->canceled) {
+               raft_free(apply);
+       }
 
        if (status == 0) {
                leaderMaybeCheckpointLegacy(l);
@@ -324,10 +330,15 @@
        apply->leader = req->leader;
        apply->req.data = apply;
        apply->type = COMMAND_FRAMES;
+       apply->canceled = false;
+       apply->fired = false;
        idSet(apply->req.req_id, req->id);
 
        rv = raft_apply(l->raft, &apply->req, &buf, 1, leaderApplyFramesCb);
        if (rv != 0) {
+               if (rv == RAFT_NOSPACE) {
+                       rv = SQLITE_IOERR_WRITE;
+               }
                tracef("raft apply failed %d", rv);
                goto err_after_command_encode;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/src/leader.h 
new/cowsql-1.15.6/src/leader.h
--- old/cowsql-1.15.4/src/leader.h      2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/src/leader.h      2024-03-29 11:28:23.000000000 +0100
@@ -29,12 +29,8 @@
        int status;            /* Raft apply result */
        struct leader *leader; /* Leader connection that triggered the hook */
        int type;              /* Command type */
-       union {                /* Command-specific data */
-               struct
-               {
-                       bool is_commit;
-               } frames;
-       };
+       bool canceled;         /* Request canceled by gateway__leader_close */
+       bool fired;            /* True if the req callback was fired. */
 };
 
 struct leader
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/src/vfs.c new/cowsql-1.15.6/src/vfs.c
--- old/cowsql-1.15.4/src/vfs.c 2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/src/vfs.c 2024-03-29 11:28:23.000000000 +0100
@@ -796,10 +796,13 @@
                assert(amount <= (int)page_size);
                pgno = 1;
        } else {
-               /* For pages greater than 1, we expect a full
-                * page read, with an offset that starts exectly
-                * at the page boundary. */
-               assert(amount == (int)page_size);
+               /* For pages greater than 1, we expect an offset
+                * that starts exactly at a page boundary. The read
+                * size can be less than a full page when SQLite
+                * is compiled with SQLITE_DIRECT_OVERFLOW_READ
+                * (enabled by default since 3.45.1). */
+               assert(amount <= (int)page_size);
+
                assert((offset % (int)page_size) == 0);
                pgno = (unsigned)(offset / (int)page_size) + 1;
        }
@@ -812,7 +815,7 @@
                /* Read the desired part of page 1. */
                memcpy(buf, (char *)page + offset, (size_t)amount);
        } else {
-               /* Read the full page. */
+               /* Read the page. */
                memcpy(buf, page, (size_t)amount);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/cowsql-1.15.4/test/integration/test_role_management.c 
new/cowsql-1.15.6/test/integration/test_role_management.c
--- old/cowsql-1.15.4/test/integration/test_role_management.c   2023-11-04 
21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/test/integration/test_role_management.c   2024-03-29 
11:28:23.000000000 +0100
@@ -110,6 +110,11 @@
        const char *address = "@2";
        int tries;
 
+       /* TODO: this test is time-dependant and flaky on some platforms */
+       if (getenv("CI") == NULL) {
+               return MUNIT_SKIP;
+       }
+
        HANDSHAKE;
 
        id = 2;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cowsql-1.15.4/test/lib/server.c 
new/cowsql-1.15.6/test/lib/server.c
--- old/cowsql-1.15.4/test/lib/server.c 2023-11-04 21:25:04.000000000 +0100
+++ new/cowsql-1.15.6/test/lib/server.c 2024-03-29 11:28:23.000000000 +0100
@@ -82,31 +82,35 @@
                munit_assert_int(rv, ==, 0);
        }
 
-       const char *target_voters_param =
-           munit_parameters_get(params, "target_voters");
-       if (target_voters_param != NULL) {
-               int n = atoi(target_voters_param);
-               rv = cowsql_node_set_target_voters(s->cowsql, n);
-               munit_assert_int(rv, ==, 0);
-       }
-
-       const char *target_standbys_param =
-           munit_parameters_get(params, "target_standbys");
-       if (target_standbys_param != NULL) {
-               int n = atoi(target_standbys_param);
-               rv = cowsql_node_set_target_standbys(s->cowsql, n);
-               munit_assert_int(rv, ==, 0);
-       }
+       if (getenv("CI") != NULL) {
+               const char *target_voters_param =
+                   munit_parameters_get(params, "target_voters");
+               if (target_voters_param != NULL) {
+                       int n = atoi(target_voters_param);
+                       rv = cowsql_node_set_target_voters(s->cowsql, n);
+                       munit_assert_int(rv, ==, 0);
+               }
 
-       const char *role_management_param =
-           munit_parameters_get(params, "role_management");
-       if (role_management_param != NULL) {
-               bool role_management = (bool)atoi(role_management_param);
-               s->role_management = role_management;
-               if (role_management) {
-                       rv = cowsql_node_enable_role_management(s->cowsql);
+               const char *target_standbys_param =
+                   munit_parameters_get(params, "target_standbys");
+               if (target_standbys_param != NULL) {
+                       int n = atoi(target_standbys_param);
+                       rv = cowsql_node_set_target_standbys(s->cowsql, n);
                        munit_assert_int(rv, ==, 0);
                }
+
+               const char *role_management_param =
+                   munit_parameters_get(params, "role_management");
+               if (role_management_param != NULL) {
+                       bool role_management =
+                           (bool)atoi(role_management_param);
+                       s->role_management = role_management;
+                       if (role_management) {
+                               rv = cowsql_node_enable_role_management(
+                                   s->cowsql);
+                               munit_assert_int(rv, ==, 0);
+                       }
+               }
        }
 
        rv = cowsql_node_start(s->cowsql);

Reply via email to