Fix to ensure whiteboards update



I ran into a bug in which whiteboards don't update until after something
else updates within that topic.

Whiteboards are inside Discussions, in turn inside ActiveTopics.

When a whiteboard is first created, the owning Discussion changes
serverside, it updates, dumpObjects is called on it, it gets synced to
the client.  

So now, if getInterestingObjects were to be called on the Discussion or
the ActiveTopic, it would contain the new Whiteboard.  However, it
doesn't get called until something causes the Topic to update.  Hence
newly created Whiteboards don't update as you draw on them until
something else within the topic updates.  Only then will they start
receiving updates (and can also be used to trigger updates for further
newly-created whiteboards exhibiting this bug).

So it appears that changes to a deep descendent of a
ToplevelReferencableObject don't cause updates, only changes to
immediate children.

Attached is a patch that seems to fix this.  The poll/event loop feels
like deep voodoo to me (hence my diagram), so I didn't want to commit
this without Alex's witchdoctor-like approval :-)

Thoughts?

Here's the log (before applying the patch):
[GET/127.0.0.1] 20:50:45,158  INFO YarrrServlet:150 - Request for topic "Welcome to Yarrr"
[XML-RPC/127.0.0.1] 20:50:48,487 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getPollUrl() with 5 arguments:
[XML-RPC/127.0.0.1] 20:50:48,488 DEBUG XmlRpcHandler:201 - 1: java.lang.String = ActiveTopic/7
[XML-RPC/127.0.0.1] 20:50:48,501 DEBUG XmlRpcHandler:201 - 2: java.lang.Boolean = true
[XML-RPC/127.0.0.1] 20:50:48,641 DEBUG XmlRpcHandler:201 - 3: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:48,642 DEBUG XmlRpcHandler:201 - 4: java.lang.String = 1
[XML-RPC/127.0.0.1] 20:50:48,643 DEBUG XmlRpcHandler:201 - 5: java.util.Vector = [Discussion/8, Chat/9, ActiveTopic/7]
[XML-RPC/127.0.0.1] 20:50:48,681  INFO ReferencableObjectRegistry:44 - Registering object Person/10
[XML-RPC/127.0.0.1] 20:50:48,697  INFO ReferencableObjectRegistry:82 - Deregistering object Person/10
[XML-RPC/127.0.0.1] 20:50:48,698 DEBUG XmlRpcHandler:206 - method getPollUrl returned:
[XML-RPC/127.0.0.1] 20:50:49,193 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getPollChanges() with 3 arguments:
[XML-RPC/127.0.0.1] 20:50:49,194 DEBUG XmlRpcHandler:201 - 1: java.lang.String = ActiveTopic/7
[XML-RPC/127.0.0.1] 20:50:49,194 DEBUG XmlRpcHandler:201 - 2: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:49,197 DEBUG XmlRpcHandler:201 - 3: java.lang.String = 1
[XML-RPC/127.0.0.1] 20:50:49,198  INFO ReferencableObjectRegistry:44 - Registering object Person/11
[XML-RPC/127.0.0.1] 20:50:49,201  INFO ReferencableObjectRegistry:82 - Deregistering object Person/11
[XML-RPC/127.0.0.1] 20:50:49,202 DEBUG XmlRpcHandler:206 - method getPollChanges returned: [ActiveTopic/7]
[XML-RPC/127.0.0.1] 20:50:49,221 DEBUG XmlRpcHandler:197 - invoking xmlRpc method dumpObjects() with 1 arguments:
[XML-RPC/127.0.0.1] 20:50:49,223 DEBUG XmlRpcHandler:201 - 1: java.util.Vector = [ActiveTopic/7]
[XML-RPC/127.0.0.1] 20:50:49,231 DEBUG XmlRpcHandler:206 - method dumpObjects returned: [{name=Welcome to Yarrr, id=ActiveTopic/7, discussions=[Discussion/8], creator=☠, presentpersons=[Dave Malcolm (firefox)], creationDate=Thu Apr 21 20:50:45 EDT 2005, statements=[], closed=[], version=1}]
[XML-RPC/127.0.0.1] 20:50:49,275 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getPollUrl() with 5 arguments:
[XML-RPC/127.0.0.1] 20:50:49,297 DEBUG XmlRpcHandler:201 - 1: java.lang.String = ActiveTopic/7
[XML-RPC/127.0.0.1] 20:50:49,297 DEBUG XmlRpcHandler:201 - 2: java.lang.Boolean = true
[XML-RPC/127.0.0.1] 20:50:49,298 DEBUG XmlRpcHandler:201 - 3: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:49,298 DEBUG XmlRpcHandler:201 - 4: java.lang.String = 1
[XML-RPC/127.0.0.1] 20:50:49,299 DEBUG XmlRpcHandler:201 - 5: java.util.Vector = [Discussion/8, Chat/9, ActiveTopic/7]
[XML-RPC/127.0.0.1] 20:50:49,299  INFO ReferencableObjectRegistry:44 - Registering object Person/12
[XML-RPC/127.0.0.1] 20:50:49,300  INFO ReferencableObjectRegistry:82 - Deregistering object Person/12
[XML-RPC/127.0.0.1] 20:50:49,302 DEBUG XmlRpcHandler:206 - method getPollUrl returned: http:///localhost:10000/1/0


I press the createWhiteboard button...
[XML-RPC/127.0.0.1] 20:50:50,457 DEBUG XmlRpcHandler:197 - invoking xmlRpc method createWhiteboard() with 2 arguments:
[XML-RPC/127.0.0.1] 20:50:50,457 DEBUG XmlRpcHandler:201 - 1: java.lang.String = Discussion/8
[XML-RPC/127.0.0.1] 20:50:50,463 DEBUG XmlRpcHandler:201 - 2: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:50,464  INFO ReferencableObjectRegistry:44 - Registering object Person/13
[XML-RPC/127.0.0.1] 20:50:50,466  INFO ReferencableObjectRegistry:44 - Registering object Whiteboard/14
[XML-RPC/127.0.0.1] 20:50:50,467  INFO ReferencableObjectRegistry:44 - Registering object Whiteboard/15
[XML-RPC/127.0.0.1] 20:50:50,468  INFO ReferencableObjectRegistry:82 - Deregistering object Person/13
[XML-RPC/127.0.0.1] 20:50:50,471 DEBUG XmlRpcHandler:206 - method createWhiteboard returned: true
[XML-RPC/127.0.0.1] 20:50:50,529 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getPollChanges() with 3 arguments:
[XML-RPC/127.0.0.1] 20:50:50,529 DEBUG XmlRpcHandler:201 - 1: java.lang.String = ActiveTopic/7
[XML-RPC/127.0.0.1] 20:50:50,530 DEBUG XmlRpcHandler:201 - 2: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:50,530 DEBUG XmlRpcHandler:201 - 3: java.lang.String = 1
[XML-RPC/127.0.0.1] 20:50:50,531  INFO ReferencableObjectRegistry:44 - Registering object Person/16
[XML-RPC/127.0.0.1] 20:50:50,531  INFO ReferencableObjectRegistry:82 - Deregistering object Person/16
[XML-RPC/127.0.0.1] 20:50:50,532 DEBUG XmlRpcHandler:206 - method getPollChanges returned: [Discussion/8]
[XML-RPC/127.0.0.1] 20:50:50,624 DEBUG XmlRpcHandler:197 - invoking xmlRpc method dumpObjects() with 1 arguments:
[XML-RPC/127.0.0.1] 20:50:50,625 DEBUG XmlRpcHandler:201 - 1: java.util.Vector = [Discussion/8]
[XML-RPC/127.0.0.1] 20:50:50,626 DEBUG XmlRpcHandler:206 - method dumpObjects returned: [{id=Discussion/8, creator=☠, isDefault=true, creationDate=Thu Apr 21 20:50:45 EDT 2005, comments=[],
version=1, title=Default Discussion, chat=Chat/9, whiteboards=[Whiteboard/15]}]

...the Discussion is synced, contains the new whiteboard...

[GET/127.0.0.1] 20:50:50,717  INFO YarrrServlet:69 - Request servlet path: /topic
[XML-RPC/127.0.0.1] 20:50:50,795 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getPollUrl() with 5 arguments:
[XML-RPC/127.0.0.1] 20:50:50,796 DEBUG XmlRpcHandler:201 - 1: java.lang.String = ActiveTopic/7
[XML-RPC/127.0.0.1] 20:50:50,796 DEBUG XmlRpcHandler:201 - 2: java.lang.Boolean = true
[XML-RPC/127.0.0.1] 20:50:50,796 DEBUG XmlRpcHandler:201 - 3: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:50,797 DEBUG XmlRpcHandler:201 - 4: java.lang.String = 1
[XML-RPC/127.0.0.1] 20:50:50,797 DEBUG XmlRpcHandler:201 - 5: java.util.Vector = [Discussion/8, Chat/9, ActiveTopic/7]

...but the new whiteboard didn't make it into the list of interesting objects

[XML-RPC/127.0.0.1] 20:50:50,798  INFO ReferencableObjectRegistry:44 - Registering object Person/17
[XML-RPC/127.0.0.1] 20:50:50,799  INFO ReferencableObjectRegistry:82 - Deregistering object Person/17
[XML-RPC/127.0.0.1] 20:50:50,799 DEBUG XmlRpcHandler:206 - method getPollUrl returned: http:///localhost:10000/1/1
[XML-RPC/127.0.0.1] 20:50:50,803 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getWhiteboardVersion() with 1 arguments:
[XML-RPC/127.0.0.1] 20:50:50,804 DEBUG XmlRpcHandler:201 - 1: java.lang.String = Whiteboard/15
[XML-RPC/127.0.0.1] 20:50:50,880 DEBUG XmlRpcHandler:206 - method getWhiteboardVersion returned: 0
[GET/127.0.0.1] 20:50:50,918  INFO YarrrServlet:69 - Request servlet path: /topic
[GET/127.0.0.1] 20:50:52,778  INFO YarrrServlet:69 - Request servlet path: /topic
[GET/127.0.0.1] 20:50:52,779  INFO YarrrServlet:133 - Request for unknown topic: null
[GET/127.0.0.1] 20:50:52,966  INFO YarrrServlet:69 - Request servlet path: /topic
[GET/127.0.0.1] 20:50:53,471  INFO YarrrServlet:69 - Request servlet path: /topic

...I draw on the whiteboard...
[XML-RPC/127.0.0.1] 20:50:55,515 DEBUG XmlRpcHandler:197 - invoking xmlRpc method addWhiteboardStroke() with 2 arguments:
[snipped]
[XML-RPC/127.0.0.1] 20:50:55,565 DEBUG XmlRpcHandler:206 - method addWhiteboardStroke returned: 0

...No updates come through...

I type "foo" into the chat window:

[XML-RPC/127.0.0.1] 20:50:59,062 DEBUG XmlRpcHandler:197 - invoking xmlRpc method addChatMessage() with 3 arguments:
[XML-RPC/127.0.0.1] 20:50:59,062 DEBUG XmlRpcHandler:201 - 1: java.lang.String = Chat/9
[XML-RPC/127.0.0.1] 20:50:59,063 DEBUG XmlRpcHandler:201 - 2: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:59,064 DEBUG XmlRpcHandler:201 - 3: java.lang.String = foo
[XML-RPC/127.0.0.1] 20:50:59,067  INFO ReferencableObjectRegistry:44 - Registering object Person/18
[XML-RPC/127.0.0.1] 20:50:59,088  INFO ReferencableObjectRegistry:82 - Deregistering object Person/18
[XML-RPC/127.0.0.1] 20:50:59,089 DEBUG XmlRpcHandler:206 - method addChatMessage returned: 0

this finally triggers an update of the client-side topic:

[XML-RPC/127.0.0.1] 20:50:59,147 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getPollChanges() with 3 arguments:
[XML-RPC/127.0.0.1] 20:50:59,148 DEBUG XmlRpcHandler:201 - 1: java.lang.String = ActiveTopic/7
[XML-RPC/127.0.0.1] 20:50:59,148 DEBUG XmlRpcHandler:201 - 2: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:59,150 DEBUG XmlRpcHandler:201 - 3: java.lang.String = 1
[XML-RPC/127.0.0.1] 20:50:59,151  INFO ReferencableObjectRegistry:44 - Registering object Person/19
[XML-RPC/127.0.0.1] 20:50:59,152  INFO ReferencableObjectRegistry:82 - Deregistering object Person/19
[XML-RPC/127.0.0.1] 20:50:59,153 DEBUG XmlRpcHandler:206 - method getPollChanges returned: [Chat/9]

... which cause getInterestingObjects called...

[XML-RPC/127.0.0.1] 20:50:59,184 DEBUG XmlRpcHandler:197 - invoking xmlRpc method getPollUrl() with 5 arguments:
[XML-RPC/127.0.0.1] 20:50:59,185 DEBUG XmlRpcHandler:201 - 1: java.lang.String = ActiveTopic/7
[XML-RPC/127.0.0.1] 20:50:59,185 DEBUG XmlRpcHandler:201 - 2: java.lang.Boolean = true
[XML-RPC/127.0.0.1] 20:50:59,186 DEBUG XmlRpcHandler:201 - 3: java.lang.String = Dave Malcolm (firefox)
[XML-RPC/127.0.0.1] 20:50:59,186 DEBUG XmlRpcHandler:201 - 4: java.lang.String = 1
[XML-RPC/127.0.0.1] 20:50:59,187 DEBUG XmlRpcHandler:201 - 5: java.util.Vector = [Discussion/8, Chat/9, Whiteboard/15, ActiveTopic/7]

...and finally the Whiteboard/15 starts receiving updates...

Dave

Index: ReferencableObject.java
===================================================================
RCS file: /cvs/gnome/yarrr/src/org/gnome/yarrr/ReferencableObject.java,v
retrieving revision 1.11
diff -u -r1.11 ReferencableObject.java
--- ReferencableObject.java	21 Apr 2005 09:39:51 -0000	1.11
+++ ReferencableObject.java	22 Apr 2005 00:46:21 -0000
@@ -64,7 +64,7 @@
 	public int signalChanged() {
 		int v = this.version++;
 		if (parent != null)
-			parent.emitSignalChanged(this);
+			parent.signalChanged();
 		return v;
 	}
 	


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]