Hello community,

here is the log from the commit of package dee for openSUSE:Factory checked in 
at 2014-01-10 21:17:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dee (Old)
 and      /work/SRC/openSUSE:Factory/.dee.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dee"

Changes:
--------
--- /work/SRC/openSUSE:Factory/dee/dee.changes  2012-09-23 19:31:47.000000000 
+0200
+++ /work/SRC/openSUSE:Factory/.dee.new/dee.changes     2014-01-10 
21:17:25.000000000 +0100
@@ -1,0 +2,6 @@
+Fri Dec 27 14:34:28 UTC 2013 - [email protected]
+
+- Add dee-fix-lp1076027.patch, Dee.SharedModel doesn't get
+  invalidated when the leader changes (lp#1076027).
+
+-------------------------------------------------------------------

New:
----
  dee-fix-lp1076027.patch

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

Other differences:
------------------
++++++ dee.spec ++++++
--- /var/tmp/diff_new_pack.ICP8Fp/_old  2014-01-10 21:17:25.000000000 +0100
+++ /var/tmp/diff_new_pack.ICP8Fp/_new  2014-01-10 21:17:25.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package dee
 #
-# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -26,6 +26,8 @@
 Group:          System/Libraries
 Url:            http://launchpad.net/dee
 Source0:        
http://launchpad.net/dee/1.0/%{version}/+download/%{name}-%{version}.tar.gz
+# PATCH-FIX-UPSTREAM dee-fix-lp1076027.patch lp#1076027 [email protected] -- 
Dee.SharedModel doesn't get invalidated when the leader changes. A SharedModel 
should get invalidated if a transaction from leader would be ignored. Patch 
taken from upsteam svn.
+Patch0:         dee-fix-lp1076027.patch
 BuildRequires:  fdupes
 BuildRequires:  libicu-devel >= 4.6
 BuildRequires:  libtool
@@ -91,6 +93,7 @@
 
 %prep
 %setup -q
+%patch0 -p0
 
 %build
 %configure \

++++++ dee-fix-lp1076027.patch ++++++
=== modified file 'src/dee-shared-model.c'
--- src/dee-shared-model.c      2012-04-12 08:36:44 +0000
+++ src/dee-shared-model.c      2012-11-09 12:25:03 +0000
@@ -1310,6 +1310,17 @@
           g_warning ("Invalidating %s", sender_name);
           invalidate_peer (self, sender_name, NULL);
         }
+      else
+        {
+          if (sender_name == NULL ||
+              !g_strcmp0 (sender_name, dee_peer_get_swarm_leader 
(priv->swarm)))
+            {
+              // leader sent an invalid transaction?
+              // let's just invalidate ourselves
+              g_warning ("Errornous transaction came from swarm leader, 
re-syncing model.");
+              on_invalidate (self);
+            }
+        }
 
       g_variant_unref (transaction);
       g_variant_unref (aav);

=== modified file 'tests/Makefile.am'
--- tests/Makefile.am   2012-03-12 10:24:04 +0000
+++ tests/Makefile.am   2012-11-09 12:25:03 +0000
@@ -68,6 +68,7 @@
   model-helper-introspect.c \
   model-helper-remove3rows.c \
   model-helper-replace.c \
+  model-helper-resync3rows.c \
   model-helper-schemaless.c \
   $(NULL)
 
@@ -120,6 +121,9 @@
 model_helper_replace_SOURCES = model-helper-replace.c
 model_helper_replace_LDADD = $(test_dee_LDADD)
 
+model_helper_resync3rows_SOURCES = model-helper-resync3rows.c
+model_helper_resync3rows_LDADD = $(test_dee_LDADD)
+
 peer_helper_1peer_SOURCES = peer-helper-1peer.c
 peer_helper_1peer_LDADD = $(test_dee_LDADD)
 

=== added file 'tests/model-helper-resync3rows.c'
--- tests/model-helper-resync3rows.c    1970-01-01 00:00:00 +0000
+++ tests/model-helper-resync3rows.c    2012-11-09 12:25:03 +0000
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2012 Canonical Ltd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as 
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authored by:
+ *              Michal Hruby <[email protected]>
+ *
+ */
+
+#include "config.h"
+#include <glib.h>
+#include <glib-object.h>
+
+#include <gtx.h>
+#include <dee.h>
+
+static void
+row_added (DeeModel *model, DeeModelIter *iter, gpointer data)
+{
+  gint *num_added = (gint*) data;
+  (*num_added)++;
+}
+
+/* Expects a clone with 3 rows in it */
+gint
+main (gint argc, gchar *argv[])
+{
+  DeeModel     *model;
+  DeeModelIter *iter;
+  gint          num_added;
+  
+  g_type_init (); 
+
+  g_set_prgname ("model-helper");
+
+  if (argc == 2)
+    model = dee_shared_model_new (argv[1]);
+  else
+    model = dee_shared_model_new_for_peer ((DeePeer*) dee_client_new 
(argv[1]));
+
+  num_added = 0;
+  g_signal_connect (model, "row-added", G_CALLBACK (row_added), &num_added);
+
+  if (gtx_wait_for_signal (G_OBJECT (model), 10000, "notify::synchronized", 
NULL))
+    g_error ("Helper model timed out waiting for 'ready' signal");
+
+  g_assert_cmpint (dee_model_get_n_rows (model), ==, 3);
+
+  iter = dee_model_get_iter_at_row (model, 0);
+  g_assert_cmpint (dee_model_get_int32 (model, iter, 0), == , 0);
+  g_assert_cmpstr (dee_model_get_string (model, iter, 1), == , "zero");
+
+  iter = dee_model_get_iter_at_row (model, 1);
+  g_assert_cmpint (dee_model_get_int32 (model, iter, 0), == , 1);
+  g_assert_cmpstr (dee_model_get_string (model, iter, 1), == , "one");
+
+  iter = dee_model_get_iter_at_row (model, 2);
+  g_assert_cmpint (dee_model_get_int32 (model, iter, 0), == , 2);
+  g_assert_cmpstr (dee_model_get_string (model, iter, 1), == , "two");
+
+  /* The swarm leader goes away and later reappears,
+   * swarm-leader prop should toggle */
+  if (gtx_wait_for_signal (G_OBJECT (dee_shared_model_get_peer 
(DEE_SHARED_MODEL (model))), 10000, "notify::swarm-leader", NULL))
+    g_error ("Helper model timed out waiting for 'swarm-leader' notification");
+
+  if (!dee_shared_model_is_leader (DEE_SHARED_MODEL (model)))
+    g_error ("Helper didn't become leader");
+
+  if (gtx_wait_for_signal (G_OBJECT (dee_shared_model_get_peer 
(DEE_SHARED_MODEL (model))), 10000, "notify::swarm-leader", NULL))
+    g_error ("Helper model timed out waiting for 'swarm-leader' notification");
+
+  if (dee_shared_model_is_leader (DEE_SHARED_MODEL (model)))
+    g_error ("Helper didn't loose swarm leadership");
+
+  /* And let's wait for synchronization again */
+  if (gtx_wait_for_signal (G_OBJECT (model), 10000, "notify::synchronized", 
NULL))
+    g_error ("Helper model timed out waiting for 'ready' signal");
+
+  g_assert_cmpint (dee_model_get_n_rows (model), ==, 3);
+
+  iter = dee_model_get_iter_at_row (model, 0);
+  g_assert_cmpint (dee_model_get_int32 (model, iter, 0), == , 0);
+  g_assert_cmpstr (dee_model_get_string (model, iter, 1), == , "zero");
+
+  iter = dee_model_get_iter_at_row (model, 1);
+  g_assert_cmpint (dee_model_get_int32 (model, iter, 0), == , 1);
+  g_assert_cmpstr (dee_model_get_string (model, iter, 1), == , "one");
+
+  iter = dee_model_get_iter_at_row (model, 2);
+  g_assert_cmpint (dee_model_get_int32 (model, iter, 0), == , 2);
+  g_assert_cmpstr (dee_model_get_string (model, iter, 1), == , "two");
+  
+  gtx_assert_last_unref (model);
+  g_assert_cmpint (num_added, >, 3);
+  
+  return 0;
+}

=== modified file 'tests/peer-helper-1peer.c'
--- tests/peer-helper-1peer.c   2012-08-10 10:56:44 +0000
+++ tests/peer-helper-1peer.c   2012-11-09 12:25:03 +0000
@@ -43,7 +43,8 @@
 gint
 main (gint argc, gchar *argv[])
 {
-  DeePeer      *peer;
+  DeePeer  *peer;
+  unsigned  num_peers;    
   
   g_type_init (); 
 
@@ -66,7 +67,10 @@
 
   g_assert_cmpint (1, ==, n_peers);
   /* Listing of peers includes also self */
-  g_assert_cmpint (2, ==, g_strv_length (dee_peer_list_peers (peer)));
+  /* Listing of peers is in flaky state atm (should == 2), see lp:1076971 */
+  num_peers = g_strv_length (dee_peer_list_peers (peer));
+  g_assert_cmpint (2, >=, num_peers);
+  g_assert_cmpint (1, <=, num_peers);
 
   return 0;
 }

=== modified file 'tests/test-model-interactions.c'
--- tests/test-model-interactions.c     2012-04-05 11:44:38 +0000
+++ tests/test-model-interactions.c     2012-11-09 12:25:03 +0000
@@ -54,11 +54,12 @@
 static void test_add_clear      (Fixture *fix, gconstpointer data);
 static void test_row_inserted   (Fixture *fix, gconstpointer data);
 static void test_schemaless_leader (Fixture *fix, gconstpointer data);
-static void test_introspect   (Fixture *fix, gconstpointer data);
+static void test_introspect     (Fixture *fix, gconstpointer data);
 static void test_ownership_stealing (Fixture *fix, gconstpointer data);
 static void test_remote_append  (Fixture *fix, gconstpointer data);
 static void test_disabled_writes (Fixture *fix, gconstpointer data);
 static void test_commit_before_clone (Fixture *fix, gconstpointer data);
+static void test_force_resync   (Fixture *fix, gconstpointer data);
 
 void
 test_model_interactions_create_suite (void)
@@ -74,7 +75,7 @@
   g_test_add (DOMAIN"/RowChanged", Fixture, 0,
               model_setup, test_row_changed, model_teardown);
   g_test_add (DOMAIN"/RowRemoved", Fixture, 0,
-                model_setup, test_row_removed, model_teardown);
+              model_setup, test_row_removed, model_teardown);
   g_test_add (DOMAIN"/Clear", Fixture, 0,
               model_setup, test_model_clear, model_teardown);
   g_test_add (DOMAIN"/ClearAndAdd", Fixture, 0,
@@ -99,6 +100,8 @@
               model_setup_null, test_disabled_writes, model_teardown_null);
   g_test_add (DOMAIN"/CommitBeforeClone", Fixture, 0,
               model_setup, test_commit_before_clone, model_teardown);
+  g_test_add (DOMAIN"/ForceResync", Fixture, 0,
+              model_setup, test_force_resync, model_teardown);
 }
 
 static void
@@ -153,7 +156,7 @@
   /* Check that convenience getter now reports TRUE */
   g_assert_cmpint (0, !=, dee_shared_model_is_synchronized (DEE_SHARED_MODEL 
(fix->model)));
 
-  if (!gtx_wait_for_signal (G_OBJECT (fix->model), TIMEOUT, 
"notify::synchronized", &pspec))
+  if (!gtx_wait_for_signal (G_OBJECT (fix->model), TIMEOUT, 
"notify::synchronized", NULL))
     {
       g_critical ("Model changed synchronization state twice");
       g_param_spec_unref (pspec);
@@ -772,3 +775,74 @@
   g_assert_cmpint (dee_model_get_n_rows (fix->model), ==, 3);
 }
 
+static void
+test_force_resync (Fixture *fix, gconstpointer data)
+{
+  GPid pid;
+  GMainLoop *ml;
+  gpointer *wait_data;
+  DeePeer *leader_peer;
+
+  if (gtx_wait_for_signal (G_OBJECT (fix->model), TIMEOUT, 
"notify::synchronized", NULL))
+    g_critical ("Model never emitted 'ready' signal");
+
+  _add3rows (fix->model);
+
+  /* need special handling of synchronization */
+
+  g_spawn_async (TESTDIR,
+                 MODEL_HELPER (resync3rows, MODEL_NAME),
+                 NULL,
+                 G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
+                 NULL,
+                 NULL,
+                 &pid,
+                 NULL);
+
+  ml = g_main_loop_new (NULL, FALSE);
+  wait_data = g_new0 (gpointer, 2);
+  wait_data[0] = ml;
+  wait_data[1] = GINT_TO_POINTER (837);
+
+  g_child_watch_add (pid, child_quit, wait_data);
+
+  /* We don't really have a better way atm. Peer discovery doesn't work
+   * with latest changes done to DBus (no watching of method calls from other
+   * processes) */
+  gtx_yield_main_loop (500); /* 500ms yield */
+
+  /* Peer should be synced now, let's throw away our model */
+  gtx_assert_last_unref (fix->model);
+
+  gtx_yield_main_loop (50); /* 50ms yield */
+
+  /* And re-own it */
+  leader_peer = DEE_PEER (g_object_new (DEE_TYPE_PEER,
+                                        "swarm-name", MODEL_NAME,
+                                        "swarm-owner", TRUE, NULL));
+  fix->model = dee_shared_model_new_for_peer (leader_peer);
+  dee_model_set_schema (fix->model, "i", "s", NULL);
+  g_assert (DEE_IS_MODEL (fix->model));
+
+  if (gtx_wait_for_signal (G_OBJECT (fix->model), TIMEOUT, 
"notify::synchronized", NULL))
+    g_critical ("Model never emitted 'ready' signal");
+
+  _add3rows (fix->model);
+
+  /* don't wait indefinitely for the child */
+  g_timeout_add (5000, (GSourceFunc) quit_loop, ml);
+
+  g_main_loop_run (ml);
+
+  if (GPOINTER_TO_INT (wait_data[1]) == 837)
+  {
+    g_critical ("Model helper timed out");
+  }
+  else if (GPOINTER_TO_INT (wait_data[1]) != 0)
+  {
+    g_critical ("Model helper returned error");
+  }
+
+  g_assert_cmpint (dee_model_get_n_rows (fix->model), ==, 3);
+}
+

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to