** Description changed:

+ trusty and vivid SRU requests
+ =============================
+ 
+ [Impact]
+ 
+ Until a user has set the language or regional formats explicitly,
+ accountsservice makes the system default values available. The code for
+ 'calculating' the system defaults is expensive, and it's triggered
+ frequently. The case in the original description of this bug report is
+ one example of bad performance for this reason. Another example is a
+ system with many users (see e.g. bug #1350393).
+ 
+ This upload adds a couple of static variables inside the function in
+ question, to avoid that the expensive code is executed at each
+ invocation. Under certain conditions this improves the performance
+ significantly.
+ 
+ [Test Case]
+ 
+ Hmm.. There is no easy use case to reproduce the bug. The original
+ description below gives a hint.
+ 
+ [Regression Potential]
+ 
+ On a multi-user system, if the system defaults in /etc/default/locale
+ are changed, accountsservice will keep providing the old system default
+ values until the system is rebooted. (Previously it took effect
+ instantly.) I think the advantages with the proposed change outweigh
+ this subtle change in behavior (which hardly anyone will notice anyway).
+ 
+ Can't think of anything besides that.
+ 
+ [Original description]
+ 
  current build number: 169
  device name: mako
  channel: ubuntu-touch/devel-proposed
  alias: ubuntu-touch/vivid-proposed
  last update: 2015-04-12 20:38:14
  version version: 169
  version ubuntu: 20150412
  version device: 20150210
  version custom: 20150412
  
  This causes a bad side effect when changing volume via indicator-sound,
  as that will cause a sync to accountsservice in order to sync the
  volume. Once that sync happens, it will request the user properties, and
  in case the user doesn't have a valid language at
  /var/lib/AccountsService/users/<user>, it will always rely on the
  fallback, which would be fine if calculating the fallback wasn't 't so
  cpu or i/o intensive (and that happens multiple times).
  
  As a test, just flash latest vivid image on mako, don't set any language
  when the wizard shows up, run top and then change the volume by pressing
  volume up/down. This is what I see with mako:
  
-  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
+  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  2609 phablet   20   0  499660 121220  52688 S   7.6  6.5   0:41.69 unity8
  5600 phablet   20   0    3676   1760   1288 R   6.0  0.1   0:00.19 
language-option
  1312 root      20   0  211532  15572  11344 S   1.9  0.8   0:07.25 
unity-system-co
  1316 phablet   20   0   36532   3792   2928 S   1.3  0.2   0:01.66 
accounts-daemon
  
  And the reason why:
  src/user.c
  ...
  static void
  user_get_property (GObject    *object,
-                    guint       param_id,
-                    GValue     *value,
-                    GParamSpec *pspec)
+                    guint       param_id,
+                    GValue     *value,
+                    GParamSpec *pspec)
  {
-         User *user = USER (object);
+         User *user = USER (object);
  ...
-         case PROP_LANGUAGE:
-                 if (user->language)
-                         g_value_set_string (value, user->language);
-                 else 
-                         g_value_set_string (value, user_get_fallback_value 
(user, "Language"));
-                 break;
-         case PROP_FORMATS_LOCALE:
-                 if (user->formats_locale)
-                         g_value_set_string (value, user->formats_locale);
-                 else 
-                         g_value_set_string (value, user_get_fallback_value 
(user, "FormatsLocale"));
-                 break;
+         case PROP_LANGUAGE:
+                 if (user->language)
+                         g_value_set_string (value, user->language);
+                 else
+                         g_value_set_string (value, user_get_fallback_value 
(user, "Language"));
+                 break;
+         case PROP_FORMATS_LOCALE:
+                 if (user->formats_locale)
+                         g_value_set_string (value, user->formats_locale);
+                 else
+                         g_value_set_string (value, user_get_fallback_value 
(user, "FormatsLocale"));
+                 break;
  
  user_set_property never gets called unless the user changes the system
  language from system-settings or wizard.
  
  Once you change the language, it will set a valid language at
  /var/lib/AccountsService/users/<user>, causing this behavior to stop.
  
  Another bad side effect of this issue is that it takes quite a while for
  accountsservice to reply back to indicator-sound when the sync happens,
  possibly causing sync aborts (as indicator-sound only waits 1 second
  before triggering another sync).
  
  Some possible ways to fix this issue:
  1) Make wizard to set language even when the selected language is already the 
default one;
  2) Change accountsservice to save the fallback value at the first time it 
gets that from the system;

** No longer affects: ubuntu-system-settings (Ubuntu)

** No longer affects: unity8 (Ubuntu)

** Also affects: accountsservice (Ubuntu Vivid)
   Importance: Undecided
       Status: New

** Also affects: accountsservice (Ubuntu Trusty)
   Importance: Undecided
       Status: New

** Changed in: accountsservice (Ubuntu Trusty)
   Importance: Undecided => Medium

** Changed in: accountsservice (Ubuntu Trusty)
       Status: New => In Progress

** Changed in: accountsservice (Ubuntu Trusty)
     Assignee: (unassigned) => Gunnar Hjalmarsson (gunnarhj)

** Changed in: accountsservice (Ubuntu Vivid)
   Importance: Undecided => Medium

** Changed in: accountsservice (Ubuntu Vivid)
       Status: New => In Progress

** Changed in: accountsservice (Ubuntu Vivid)
     Assignee: (unassigned) => Gunnar Hjalmarsson (gunnarhj)

-- 
You received this bug notification because you are a member of Ubuntu
Desktop Bugs, which is subscribed to accountsservice in Ubuntu.
https://bugs.launchpad.net/bugs/1443178

Title:
  Accounts Service always relies on language fallback if never set by
  the user

To manage notifications about this bug go to:
https://bugs.launchpad.net/canonical-devices-system-image/+bug/1443178/+subscriptions

-- 
desktop-bugs mailing list
desktop-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/desktop-bugs

Reply via email to