Commit Graph

75 Commits

Author SHA1 Message Date
Dave Hoover 3b701ef57d Tabs -> spaces
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4742 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-06-26 00:07:36 +00:00
Michael Bayne 96dd2deba3 For now don't use the generated field accessors unless we're running in a
sandbox. They should work exactly the same but there seem to be remaining
niggles, so we'll iron those out without impacting other projects.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4706 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-05-09 21:52:47 +00:00
Michael Bayne 84855f8fe0 Enhanced debuggery, reenabled new streaming bits because now they should really
really work.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4705 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-05-09 01:17:13 +00:00
Michael Bayne 66a4151c86 More problems!
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4703 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-05-09 01:02:11 +00:00
Michael Bayne ef43b9d41a Re-revamp. I may re-re-revamp later to eliminate the reflection based streaming
altogether as that also solves the "Class.getDeclaredFields() is not required
to return fields in declaration order" problem which has been looming. However,
this should work for now.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4701 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-05-09 00:20:35 +00:00
Michael Bayne dcffc5f54d Disable this for now until the instrumented methods are working properly.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4699 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-05-07 20:47:53 +00:00
Michael Bayne 2afd7b2e29 Let's actually use them fancy little methods.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4695 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-05-07 19:19:33 +00:00
Michael Bayne 64da3b6229 Widening.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4682 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-05-04 22:01:32 +00:00
Michael Bayne 00e24d5ed6 Let's let whoever catches this exception decide if they want a stack trace
logged.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4642 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-03-31 02:38:28 +00:00
Michael Bayne 09f0bee0f3 Yet more header patrol.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4602 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-24 00:39:27 +00:00
Michael Bayne d3064398e9 Widened, removed misleading comment. It's all non-transient fields, not all
non-transient public fields.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4600 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-23 19:59:18 +00:00
Michael Bayne 02387b46ec And another.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4564 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-12 03:41:16 +00:00
Michael Bayne d0d31eb5bf Nixed stray debug line.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4563 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-12 03:40:46 +00:00
Michael Bayne d9089e10d3 Widening, one additional log message added in STREAM_DEBUG mode.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4558 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-12 03:03:51 +00:00
Michael Bayne 4a9fde7830 Now we have a cool @ActionScript annotation that allows us to specify different
field/method names for the ActionScript version of a class (or to omit
something entirely). This removes the need for special case hackery for
toStringBuilder().

In order for annotations to work, however, we have to require that the
GenActionScriptTask be loaded from the same classloader that loads the classes
to be reflected upon. Before we only reflected on the target classes, never
instantiated them. Annotations are actually instantiated, so we have to be able
to create an instance of the ActionScript.class that is compiled into our
target classes and assign it to a reference that is compiled into
GenActionScriptTask. Beware the complexities of dealing with multiple class
loaders.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4405 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-10-04 23:35:41 +00:00
Ray Greenwell 0709dc9580 Two minor edits to List support.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4376 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-19 01:25:52 +00:00
Michael Bayne afad7dd444 Added support for streaming List and ArrayList natively. A List will be
unmarshalled into an ArrayList on the receiver. Along the way, I improved
support for generic types as arguments to invocation services (which required
one unfortunate "sweeping" warning suppression, but since this is in generated
code, I think we can be sure it won't be doing anything untoward).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4375 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-19 00:31:50 +00:00
Michael Bayne 54d3bb6496 Missed a spot where getStreamer() was called which motivated further changing
around of the interface (I wanted to automatically call getStreamerClass() for
the caller but that turns out not to be possible when unstreaming so fuck it).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4373 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-12 01:09:01 +00:00
Michael Bayne 13bcdf769d Retidied.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4372 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-12 00:49:49 +00:00
Michael Bayne 65b14cfdb5 Was using the wrong getDeclaringClass() to get an enum's proper class. Things
are now correct, but unfortunately a little more complicated.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4371 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-12 00:47:27 +00:00
Michael Bayne eb3c6ae9cf A particular enum value may actually be a derived class of the declared enum
type, but we don't really want to pollute our class <-> id mapping with a bunch
of extra fiddly enum classes, so we stream all enums as instances of their
declared type and let Enum.valueOf() map back to the custom derived type when
it creates an instance during deserialization.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4370 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-12 00:32:06 +00:00
Michael Bayne ac5951eaa1 Finally incorporated Par's Enum streaming support, modified to use the string
value to avoid future compatibility problems if someone saves an object to a
database and then later adds a new enum anywhere but at the end of the list,
thereby changing the ordinals.

If you want maximal network efficiency, don't use enums. For most of what we'll
do with them, it doesn't merit having the future incompatibility hitch of
sending the ordinal.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4369 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-12 00:04:14 +00:00
Ray Greenwell b596aa724e We don't need to hash, just use an ArrayList.
ObjectInputStream works in conjunction with a ObjectOutputStream on the
other end. The ObjectOutputStream will always assign class codes starting
at 1 and increasing sequentially from there, so we can look up a class
by index rather than hashing.
Uses less memory and is faster.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4365 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-09-08 18:02:08 +00:00
Ray Greenwell d57d213904 Use jdk1.5 notation to do away with the array type prototypes.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4335 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-08-21 21:50:24 +00:00
Ray Greenwell c9d262bf64 Just print the exception. If it has a message, that will be printed,
otherwise we'll just get the name. I'm killing StringUtil.getMessage().


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4304 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-08-08 20:06:53 +00:00
Ray Greenwell ca06b47835 Report as useful a message as we can when we have an error.
I was getting an IllegalArgumentException and the message was "null",
so this will at least log the name of the exception.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4263 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-12 23:57:14 +00:00
Michael Bayne 489332edca Nixed old temporary code.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4256 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-07 20:43:57 +00:00
Michael Bayne 94b79826d4 More type safety.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4244 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-05 00:51:22 +00:00
Michael Bayne 33a758dfce The basis of cluster support for Presents servers. All servers in a cluster
make connections to other servers in the cluster and can exchange events (in a
limited fashion).

This is different than Liz's project wherein servers share an oid space and one
can interchangably work with distributed objects from any server. This package
provides a means by which certain services (by default, presence and chat) can
be communicated between servers to allow communication between players
scattered around a bunch of otherwise independent server instances.

This is less general purpose but also less likely to encourage people to write
code that tightly couples multiple servers and then falls over because it
generates gobs of network traffic as events are flung willy nilly behind the
scenes.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4238 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-01 00:19:59 +00:00
Michael Bayne 6424adf26d More log fixing. The tools package will move to Nenya.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4215 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-06-23 19:40:55 +00:00
Ray Greenwell 79c6427c21 StringBuffer -> StringBuilder.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4191 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-06-13 22:42:20 +00:00
Ray Greenwell 26c928fc45 Use the valueOf factory methods pretty much everywhere.
These are the preferred way to get instances of Boolean, Byte,
Short, Character, Integer, Long, Float, and Double object.
It's always made sense for Boolean objects, and with 1.5 these factory
methods were blessed as the proper way to get instances unless one
absolutely needed a distinct object.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4145 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-05-24 01:24:24 +00:00
Ray Greenwell baa45c51c1 Added class translation support so that I could write a DSet converter.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3947 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-03-15 02:29:10 +00:00
Ray Greenwell bdfecce767 A bit of simplification.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3927 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-03-08 23:21:47 +00:00
Ray Greenwell a0e9f70db3 Cleaned that method up a bit.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3922 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-03-08 01:03:57 +00:00
Ray Greenwell b72ee36b29 While working on Streaming arrays in actionscript I realized that
our streaming system should work with multidimensional arrays: in fact it
kinda already did, if the element type of the outermost array was something
for which we already had a streamer. Thus, int[][] worked, Object[][] worked,
etc. One small method change and now arbitrary multidimensional arrays
will work.

Why bother? Consistency, and the way I'm working on doing even the int[][]
arrays in actionscript supports unlimited dimensions, so why not?


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3921 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-03-08 00:56:23 +00:00
Ray Greenwell 892bdce01d Old man Occam came a knockin'.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3857 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-02-15 04:05:40 +00:00
Ray Greenwell 174fa1b9c6 Use PrivilegedExceptionAction to do privileged actions that might throw
an exception.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3856 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-02-15 04:04:24 +00:00
Ray Greenwell abb941223d Protect our servers from a certain DOS attack: telling the server
that you're sending a giant array and having it try to allocate it.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3820 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-01-25 02:39:18 +00:00
Ray Greenwell 7a64be94f2 Goodbye, NestableIOException.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3788 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-12-20 02:09:18 +00:00
Michael Bayne e438377297 Introspect on our classes in a privileged block so that unsigned code can
call ObjectInputStream.defaultReadObject().


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3662 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-07-25 17:24:25 +00:00
Michael Bayne ac22e65145 Enabled some debug logging when STREAM_DEBUG is activated. Removed custom
String marshaller as a StreamerMarshaller is used for String fields.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3651 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-07-16 01:46:20 +00:00
Michael Bayne 90ac82e9c6 Allow a set of classname translations to be configured in an
ObjectInputStream to facilitate conversion of serialized data when classes
are repackaged.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3642 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-07-05 20:02:20 +00:00
Michael Bayne a4ac47fb04 Reinstated the Presents I/O refactor with the modification of ensuring
that authentication is processed on the dobjmgr thread rather than
requiring the caller to do the right thing (or not as the case happened to
be).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3433 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-28 21:49:19 +00:00
Ray Greenwell d58d1001ac Roll it all back.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3432 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-28 19:33:28 +00:00
Ray Greenwell 36af272a63 Bad idea.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3431 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-28 19:32:48 +00:00
Ray Greenwell f6e427a26d Bugfix?
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3430 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-28 19:23:26 +00:00
Michael Bayne a285695ca8 I finally broke down and did the rewrite to fix the potential race
condition between the omgr thread and the conmgr thread. Now when the omgr
thread processes an event that is going out to the clients, it flattents
the message itself for each client that is to receive the message and the
flattened data is posted to the conmgr outgoing queue.

This means that once an event is finished processing, no further
modifications to any of the data associated with the event can effect the
data queued up to be sent to the client. This is a good thing, it will
eliminate or illuminate a very baffling class of bugs that we've sort of
been ignoring because we knew this could be the cause.

We used to take an event and flatten it directly into the direct buffer
from which we would do our socket write. Now we flatten it into a
temporary byte array. This means a metric shitload more garbage generation
and collection. We used to do the flattening on the conmgr thread, now we
do it on the omgr thread. This means a big redistribution of CPU demand.

Either of those things could result in a significant negative impact on
our performance, but we'll just have to deploy this stuff and find out.
Whee! If it turns out to be a serious problem, there are potential
optimizations that could be done by keeping a pool of direct buffers
around and flattening messages into them, relying on the fact that the
outgoing conmgr queue generally doesn't grow too large and we could
allocate tens to a hundred megabytes of memory for the outgoing queue if
we really needed to.

I'd also like to test the overflow handling stuff more. It didn't really
change in that everything just deals with arrays of bytes now instead of
unflattened messages, but I'll be more comfortable once I've seen all this
in action on ice where there may be few users, but they are just as likely
to experience lag and receive an overflow queue as users on the higher
traffic servers. There is code to log when overflow queues are created and
finally flushed and how much use they got while they were around, so that
should give us an indication of whether things are operating properly.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3419 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-19 08:39:19 +00:00
Michael Bayne 45ec296ba0 Here's a giant performance improvement: the current Presents architecture
flattens messages into a buffer and then passes that bucket to a
SocketChannel.write() method which is part of the NIO business. If said
buffer is a "direct" buffer, the write() method will in theory do
high-performance shit like DMA the data right to the network card. If it's
not a direct buffer, Sun apparently makes a temporary direct buffer,
copies the data into it and passes that on to the underlying socket send()
call. We weren't using direct buffers which means that we were copying
everything one more time than needed (not a huge deal) and that we were
allocating a direct buffer for every message (a much bigger deal). This
should take a serious load off of the I/O thread and fortunately we can
test it on Ice to make sure it doesn't do anything super crazy.

All this said, this whole business is going to change when I rearchitect
Presents to avoid the potential race conditions it suffers from now and we
won't be able to use a single direct buffer to write all of our outgoing
messages, but I believe we will be able to use a pool of direct buffers
with one used by every message in the queue waiting to be written
(hopefully that won't be too many at any given time) which we can keep
around to avoid the expense of allocating and freeing direct buffers.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3336 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-02-08 05:08:47 +00:00
Michael Bayne afabea71ad Big fat Bernie javadoc cleanup.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3310 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-01-24 23:08:21 +00:00