Inserting event with two subjects with the same URI breaks the following event

Bug #909708 reported by Siegfried Gevatter
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Zeitgeist Framework
Fix Released
Medium
Seif Lotfy

Bug Description

By the way our database is structured, all subjects of a same event must have different URIs.

However, this isn't currently being checked, with the effect that the first subject is inserted correctly, while the second subject triggers the "existing event" exception and rolls back the event ID. This has the effect that the next event to be inserted will incorrectly have the same event ID (thus its subjects are mixed into whatever got saved of the first event and all sorts of weirdness :P).

Related branches

Changed in zeitgeist:
assignee: nobody → Siegfried Gevatter (rainct)
importance: Undecided → Medium
milestone: none → 0.9.0
status: New → Confirmed
Revision history for this message
Siegfried Gevatter (rainct) wrote :

Committed a test case reproducing this in revision 350.

-------------------
       def testInsertWithDuplicateSubject(self):
               events = parse_events("test/data/three_events.js")
               events[0].subjects.append(list(events[0].subjects[0]))
               ids = self.insertEventsAndWait(events)
               self.assertEquals(3, len(set(ids)))
-------------------

Revision history for this message
Siegfried Gevatter (rainct) wrote :

Options:

1. Add a check to see if there are any duplicate subjects. If so, rollback all insertions done to that point and throw an exception.
2. Just ignore the second and later subjects with the same URI and keep going.
3. DELETE what was inserted of that particular event and return 0 for it (but insert all other events).

Revision history for this message
Seif Lotfy (seif) wrote : Re: [Bug 909708] Re: Inserting event with two subjects with the same URI breaks the following event

Option 3 makes most sense but IMHO it would be good to inform the developer
of the error

On Thu, Dec 29, 2011 at 3:13 PM, Siegfried Gevatter <email address hidden>wrote:

> Options:
>
> 1. Add a check to see if there are any duplicate subjects. If so, rollback
> all insertions done to that point and throw an exception.
> 2. Just ignore the second and later subjects with the same URI and keep
> going.
> 3. DELETE what was inserted of that particular event and return 0 for it
> (but insert all other events).
>
> --
> You received this bug notification because you are subscribed to The
> Zeitgeist Project.
> https://bugs.launchpad.net/bugs/909708
>
> Title:
> Inserting event with two subjects with the same URI breaks the
> following event
>
> Status in Zeitgeist Framework:
> Confirmed
>
> Bug description:
> By the way our database is structured, all subjects of a same event
> must have different URIs.
>
> However, this isn't currently being checked, with the effect that the
> first subject is inserted correctly, while the second subject triggers
> the "existing event" exception and rolls back the event ID. This has
> the effect that the next event to be inserted will incorrectly have
> the same event ID (thus its subjects are mixed into whatever got saved
> of the first event and all sorts of weirdness :P).
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/zeitgeist/+bug/909708/+subscriptions
>

Revision history for this message
Michal Hruby (mhr3) wrote :

Ok, let's go with option #3.

Revision history for this message
Seif Lotfy (seif) wrote :

Instead of deleting what was inserted of that particular event why not check the subjects of the event for validity then either start insertion or throw out a warning. I fear deletion...

Revision history for this message
Siegfried Gevatter (rainct) wrote :

2012/1/1 Seif Lotfy <email address hidden>:
> Instead of deleting what was inserted of that particular event why not
> check the subjects of the event for validity then either start insertion
> or throw out a warning. I fear deletion...

Huh. Checking first is just slower, there's nothing bad with deleting
the event (it's just like a rollback, only not a rollback because we
don't commit until the end of everything). Throwing out a warning will
stop ALL events from being inserted, so it's not a nice option.

Revision history for this message
Seif Lotfy (seif) wrote :

you win

On Sun, Jan 1, 2012 at 12:44 PM, Siegfried Gevatter <email address hidden>wrote:

> 2012/1/1 Seif Lotfy <email address hidden>:
> > Instead of deleting what was inserted of that particular event why not
> > check the subjects of the event for validity then either start insertion
> > or throw out a warning. I fear deletion...
>
> Huh. Checking first is just slower, there's nothing bad with deleting
> the event (it's just like a rollback, only not a rollback because we
> don't commit until the end of everything). Throwing out a warning will
> stop ALL events from being inserted, so it's not a nice option.
>
> --
> You received this bug notification because you are subscribed to The
> Zeitgeist Project.
> https://bugs.launchpad.net/bugs/909708
>
> Title:
> Inserting event with two subjects with the same URI breaks the
> following event
>
> Status in Zeitgeist Framework:
> Confirmed
>
> Bug description:
> By the way our database is structured, all subjects of a same event
> must have different URIs.
>
> However, this isn't currently being checked, with the effect that the
> first subject is inserted correctly, while the second subject triggers
> the "existing event" exception and rolls back the event ID. This has
> the effect that the next event to be inserted will incorrectly have
> the same event ID (thus its subjects are mixed into whatever got saved
> of the first event and all sorts of weirdness :P).
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/zeitgeist/+bug/909708/+subscriptions
>

Revision history for this message
Seif Lotfy (seif) wrote :

So I think I went with a modified option 3
since we already parse the subjects before insertion I added a list with subj_uris to find if there is a duplicate and return 0 if one is found

Changed in zeitgeist:
assignee: Siegfried Gevatter (rainct) → Seif Lotfy (seif)
status: Confirmed → In Progress
Revision history for this message
Seif Lotfy (seif) wrote :

Here is the deal... Deleting is not that trivial since some "event info" might have been there before we tried to insert such as the event interpretation. So either we just delete the event row from the events table or we do it how i did it...

Revision history for this message
Siegfried Gevatter (rainct) wrote :

2012/1/2 Seif Lotfy <email address hidden>:
> Here is the deal... Deleting is not that trivial since some "event info"
> might have been there before we tried to insert such as the event
> interpretation. So either we just delete the event row from the events
> table or we do it how i did it...

In fact, deleting should be trivial, everything is handled by triggers
and cascading.

Seif Lotfy (seif)
Changed in zeitgeist:
status: In Progress → Fix Committed
Seif Lotfy (seif)
Changed in zeitgeist:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.