Subject: [sup-talk] crash when sup-syncing to xapian

From: [email-masked] (Ben Walton)
Date: Tue, 18 Aug 2009 13:35:35 -0400

I just tried to import my index to xapian and it crashed part way
through the import.  I then discovered that I couldn't use ferret
either.  There is something wonky with label handling, as per attached
exception log.  I haven't had a chance to look at the code yet, but
I'll poke at it tonight.

Thanks
-Ben
-- 
Ben Walton
Systems Programmer - CHASS
University of Toronto
C:416.407.5610 | W:416.978.4302

GPG Key Id: 8E89F6D2; Key Server: pgp.mit.edu
Contact me to arrange for a CAcert assurance meeting.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: sup-exception-log.txt
URL: <http://rubyforge.org/pipermail/sup-talk/attachments/20090818/28bccae3/attachment.txt>

---

From: [email-masked] (Benoît PIERRE)
Date: Tue, 18 Aug 2009 20:20:41 +0200

> exception log.  I haven't had a chance to look at the code yet, but

I think I just ran into the same problem! For now I fixed it with
the following small patch:

diff --git a/lib/sup/label.rb b/lib/sup/label.rb
index 67474c2..59c0c0f 100644
--- a/lib/sup/label.rb
+++ b/lib/sup/label.rb
@@ -61,6 +61,7 @@ class LabelManager
   end

   def << t
+    t = t.to_sym if t.is_a? String
     raise ArgumentError, "expecting a symbol" unless t.is_a? Symbol
     unless @labels.member?(t) || RESERVED_LABELS.member?(t)
       @labels[t] = true

-- 
A: Because it destroys the flow of conversation.
Q: Why is top posting dumb?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 289 bytes
Desc: not available
URL: <http://rubyforge.org/pipermail/sup-talk/attachments/20090818/4a4ab3f7/attachment.bin>

---

From: [email-masked] (Rich Lane)
Date: Tue, 18 Aug 2009 14:42:13 -0400

> the following small patch:

That's odd because the Xapian code passes the labels straight through
from the message to LabelManager. Try instrumenting Message#labels= to
raise an exception if any member of the set is not a Symbol.

---

From: [email-masked] (Benoît PIERRE)
Date: Tue, 18 Aug 2009 21:17:03 +0200

> raise an exception if any member of the set is not a Symbol.

I applied the following patch:

diff --git a/lib/sup/message.rb b/lib/sup/message.rb
index 965c10e..9156c02 100644
--- a/lib/sup/message.rb
+++ b/lib/sup/message.rb
@@ -1,4 +1,5 @@
 require 'time'
+require 'pp'

 module Redwood

@@ -183,6 +184,7 @@ class Message
   def labels= l
     raise ArgumentError, "not a set" unless l.is_a?(Set)
     return if @labels == l
+    warn "labels=#{l.pretty_inspect}"
     @labels = l
     @dirty = true
   end

And get this in the logs:

[Tue Aug 18 21:12:39 +0200 2009] WARNING: labels=#<Set: {:inbox, :unread, "aquarius", "music"}>
[Tue Aug 18 21:12:39 +0200 2009] WARNING: labels=#<Set: {:inbox, :unread, "metalblade", "music"}>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://rubyforge.org/pipermail/sup-talk/attachments/20090818/721494a9/attachment.bin>

---

From: [email-masked] (Rich Lane)
Date: Tue, 18 Aug 2009 15:52:12 -0400

> index 965c10e..9156c02 100644

It'd be nice to get a backtrace including the offending caller. I'd just
replace the warn with a fail.

---

From: [email-masked] (Benoît PIERRE)
Date: Tue, 18 Aug 2009 22:14:49 +0200

Excerpts from Rich Lane's message of Tue Aug 18 21:52:12 +0200 2009:
> [...]

The problem comes from my ~/.sup/sources.yaml file, the labels for a source
are not symbols:

    hash: 
      relapse: true
      music: true

After converting them to symbols it works:

    hash: 
      :relapse: true
      :music: true
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://rubyforge.org/pipermail/sup-talk/attachments/20090818/94c721f9/attachment.bin>

---

From: [email-masked] (Ben Walton)
Date: Tue, 18 Aug 2009 20:03:49 -0400

> After converting them to symbols it works:

I have labels setup to import as an array (of strings)...is this not
the way it's supposed to be?

-Ben

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://rubyforge.org/pipermail/sup-talk/attachments/20090818/9e8e3a03/attachment.bin>

---

From: [email-masked] (William Morgan)
Date: Wed, 19 Aug 2009 11:39:56 -0700

Reformatted excerpts from Ben Walton's message of 2009-08-18:
> There is something wonky with label handling, as per attached
> exception log.

This should be fixed in next. It was a result of some of the API
refactoring I've been doing recently. Everyone's source.yaml should now
automagically revert to the format from the good ol' days.
-- 
William <wmorgan-sup at masanjin.net>