As the wavelet gets more content it's initial snapshot will get bigger. At some point, the snapshot size will exceed the allocated buffer size in SequencedProtoChannel. To test the theory, you can increase the amount of text being pushed into the blips, or you can add a larger delay between the launching of each thread. The result should be that even with the change from "8192*4" to "8192*10" you'll get the exception.
The same problem will occur if the number of deltas included int an update message get to large for the buffer. In my own project I modified SequencedProtoChannel so that it wraps the Channel in a CodedInputStream and lets the proto stuff parse the message directly from the channel instead of staging it in a buffer first. If others are interested I can try and extract that change and submit it as a patch. -Tad On Mon, Jun 14, 2010 at 10:21 AM, Bernardo Ferreira < [email protected]> wrote: > Hi, > > I was "playing around" with fedone and decided to make some load > testing with multiple clients. I created a test where i would spawn > multiple threads in sequence, waiting only 10 seconds before launching > the next. Each thread would connect to my local fedone server by > opening a new ClientBackend. Before the test spawned the threads it > would connect as the first client, create a new wave and add > participants for the other threads. Each thread, when spawned, would > open the wave from it's own ClientBackend and would start appending > blips one after the other. This way i was simulating multiples clients > communicating in a single wave (altough at a very high speed :P). > > Very interesting indeed. But now the funny part. When I ran the test I > noticed that it would throw an exception by the time it would spawn > the fourth thread. When I checked the exception, I realized it had > been thrown by this line in the class SequencedProtoChannel: > > // Try to grab the whole payload. > if (requiredSize > bufferSize) { > throw new IllegalStateException(String.format("Payload > (%d bytes) too large for" + > " buffer (%d bytes)", requiredSize, > bufferSize)); > } > > Why wasn't this being thrown when I had 1, 2 or 3 clients but it was > when i tried to start the 4th? Indeed, very strange. I later tried > with 4 separate computers, instead of using threads, and the problem > persisted. > Finally, i tried twiking with the buffer size. I changed: > > final int bufferSize = 8192 * 4; > > to: > > final int bufferSize = 8192 * 10; > > This allowed me to connect the 4th client, but i don't know what the > consequences of this action are. Any brave soul has an insight into > the problem? > > Cheers, > Bernardo > > -- > You received this message because you are subscribed to the Google Groups > "Wave Protocol" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<wave-protocol%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/wave-protocol?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Wave Protocol" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/wave-protocol?hl=en.
