NAND out of space crash (was Display warnings in sugar (Emiliano Pastorino))

Erik Garrison erik at laptop.org
Sat Jul 19 15:29:00 EDT 2008


disclaimer.
The attached patch is untested and likely insufficient to solve this
problem.

On Sat, Jul 19, 2008 at 01:39:20PM -0400, Erik Garrison wrote:
> On Sat, Jul 19, 2008 at 12:58:13PM -0400, Benjamin M. Schwartz wrote:
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > Erik Garrison wrote:
> > | On Sat, Jul 19, 2008 at 11:47:21AM -0400, Greg Smith wrote:
> > |> Hi All,
> > |>
> > |> Emiliano has an elegant workaround but crashing the XO on NAND full (to
> > |> un-recoverable state?) is a heinous bug that affects essentially all users.
> > |>
> > |> If someone has the bug ID handy can you send it out and mark it a
> > |> blocker for 8.2.0 (priority = blocker and keyword includes blocks:8.2.0)?
> > |>
> > |> Can I get a design proposal (no re-partitioning please!), scoping and
> > |> lead engineer on it ASAP?
> > |>
> > |> If you have to stop working on something else to do this, let me know
> > |> what will drop and I'll help weigh the consequences.
> > |
> > | My impression is that the long-term benefits of partitioning mean that
> > | it's worthwhile to devote effort to it.  Are we not going to work on
> > | partitioning in the future?
> >
> > Adding partitioning does not automatically solve the NAND fillup problem.
> > ~ The fundamental issue is that Sugar tries to write files on boot, and
> > fails to boot if it cannot write those files.
> >
> > The correct solution is to make sure that Sugar can boot even if it cannot
> > write files.  This change is needed in order to enable booting on full
> > NAND, whether or not partitioning is used to separate system and user
> > files.  In short, these issues, while related, are largely decoupled, and
> > can be attacked separately.
> 
> You are absolutely correct.
> 
> Partitioning can be used to isolate the system filesystem(s) from the
> effects of user-level data creation, and thus mitigate the risk of
> fillup of a partition yielding an unbootable system.  However, the
> solution is wholly ineffectual wrt. the fillup issue until we ensure
> Sugar only needs to write to the partition which we are confident will
> have space.  If we are going to check all the file write requirements of
> the Sugar shell, we might as well implement the far better solution of
> enabling Sugar to boot without writing anything.
> 
> Below is a patch to Sugar which resolves the only python-side case of a
> file write during startup which I was able to find.
> 
> I couldn't find reference to the configuration variables saved in
> _save_session_info elsewhere in the sugar repository.  If these
> variables are pulled from the config file after Sugar startup, then this
> patch is a bad idea on its own.
> 
> 
> 
> diff --git a/src/main.py b/src/main.py
> index b1ecc93..1899438 100644
> --- a/src/main.py
> +++ b/src/main.py
> @@ -55,15 +55,19 @@ def _save_session_info():
>      #            do not rely on it
>      #
>      session_info_file = os.path.join(env.get_profile_path(), "session.info")
> -    f = open(session_info_file, "w")
> +    try:
> +        f = open(session_info_file, "w")
> +
> +        cp = ConfigParser()
> +        cp.add_section('Session')
> +        cp.set('Session', 'dbus_address', os.environ['DBUS_SESSION_BUS_ADDRESS'])
> +        cp.set('Session', 'display', gtk.gdk.display_get_default().get_name())
> +        cp.write(f)
>  
> -    cp = ConfigParser()
> -    cp.add_section('Session')
> -    cp.set('Session', 'dbus_address', os.environ['DBUS_SESSION_BUS_ADDRESS'])
> -    cp.set('Session', 'display', gtk.gdk.display_get_default().get_name())
> -    cp.write(f)
> +        f.close()
> +    except IOError, (errno, sterror):
> +        logger.error("Could not open session_info_file. %s" % sterror)
>  
> -    f.close()
>  
>  def _setup_translations():
>      locale_path = os.path.join(config.prefix, 'share', 'locale')

> diff --git a/src/main.py b/src/main.py
> index b1ecc93..1899438 100644
> --- a/src/main.py
> +++ b/src/main.py
> @@ -55,15 +55,19 @@ def _save_session_info():
>      #            do not rely on it
>      #
>      session_info_file = os.path.join(env.get_profile_path(), "session.info")
> -    f = open(session_info_file, "w")
> +    try:
> +        f = open(session_info_file, "w")
> +
> +        cp = ConfigParser()
> +        cp.add_section('Session')
> +        cp.set('Session', 'dbus_address', os.environ['DBUS_SESSION_BUS_ADDRESS'])
> +        cp.set('Session', 'display', gtk.gdk.display_get_default().get_name())
> +        cp.write(f)
>  
> -    cp = ConfigParser()
> -    cp.add_section('Session')
> -    cp.set('Session', 'dbus_address', os.environ['DBUS_SESSION_BUS_ADDRESS'])
> -    cp.set('Session', 'display', gtk.gdk.display_get_default().get_name())
> -    cp.write(f)
> +        f.close()
> +    except IOError, (errno, sterror):
> +        logger.error("Could not open session_info_file. %s" % sterror)
>  
> -    f.close()
>  
>  def _setup_translations():
>      locale_path = os.path.join(config.prefix, 'share', 'locale')




More information about the Devel mailing list