Commit Graph

62 Commits

Author SHA1 Message Date
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
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 9434b6e9bc Just use a volatile variable and do away with the synchronization, at
Mr. Greenwell's suggestion.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3416 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-18 19:26:11 +00:00
Michael Bayne 77f9d8836c Allow a connection manager shutdown hook to be registered.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3414 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-18 19:00:01 +00:00
Michael Bayne 8f9af12fdb Use a direct buffer for our overflow queue partial buffer as well because
there will be relatively few of those (at most one per client that is
experiencing lag) and while the client is experiencing lag we will be
trying to write their data once per pass through the sockets (which could
be hundreds of times a second) and we don't want each write attempt to
result in the creation of a temporary direct buffer.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3345 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-02-10 04:39:23 +00:00
Michael Bayne a6d7764e29 More custom classloader support. We now have a proof-of-concept working so
it's unlikely that the rabbit hole will surprise us with further depth.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3269 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-12-10 02:54:26 +00:00
Michael Bayne a9720fd905 LGPLed the library. Hello world.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3099 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-08-27 02:21:06 +00:00
Michael Bayne be14cd3877 Create all of our arrays and do it somewhere sensible.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3069 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-08-04 03:32:18 +00:00
Michael Bayne a924387ffb More statly bits.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3067 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-08-04 02:36:56 +00:00
Michael Bayne 6b0695af30 Track and report some connection manager stats over a short historical
period so that we can see what sort of funny business is going on with the
network thread when the process spikes up to 100% CPU.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3066 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-08-04 02:31:18 +00:00
Michael Bayne f8e5c85d1f Keep mum about connections being reset by their peer. It is a normal event
in the wild, wild world of the Interweb.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3048 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-07-03 09:19:04 +00:00
Michael Bayne 0dfbb137e5 Added a mechanism for being informed when the connection manager fails to
bind to its socket.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3014 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-06-03 09:02:47 +00:00
Michael Bayne d618d3c771 Eclipse suggested cleanup.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2971 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-02-25 14:50:28 +00:00
Michael Bayne 461a72bd94 Mark each upstream message with a the time at which it was decoded from
incoming network data.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2959 542714f4-19e9-0310-aa3c-eee0fc999fb1
2004-02-21 00:51:02 +00:00
Michael Bayne 2bcf2f26a4 I just saw someone have 2100 outgoing messages queued up for them in 415
milliseconds. I want to know what in the fuck those were.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2840 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-10-26 05:18:13 +00:00
Michael Bayne ff8211534f Take no guff from freaking out network event handlers.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2821 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-10-07 22:41:24 +00:00
Michael Bayne 0aecdc2069 Don't create our listen socket until we've actually be started up.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2809 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-09-24 18:37:55 +00:00
Michael Bayne 70a8c00388 If a connection is sitting in the system but is closed (perhaps possible
through some well-timed disconnection early in the initialization phase),
we should consider it idle because then we'll catch it on the next tick
and flush it whereas otherwise it would just sit around forever until
someone logged in from that IP again.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2788 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-08-20 19:32:27 +00:00
Michael Bayne a5367cb657 Only complain about big overflow queues every time we reach a new plateau
of 50 messages.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2786 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-08-20 18:54:23 +00:00
Michael Bayne 46f4426e64 Warn on large overflow queue size.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2781 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-08-20 00:47:39 +00:00
Michael Bayne c289da2150 They're big, they're partial and we don't need to hear about 'em!
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2762 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-08-09 05:00:01 +00:00
Michael Bayne c93802c455 Off with the verbose logging.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2565 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-05-10 01:05:33 +00:00
Michael Bayne 201ee0acf3 Don't log the whole message, just the class.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2484 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-04-27 07:53:31 +00:00
Michael Bayne e1b4198d8f Let's just report the type of message.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2470 542714f4-19e9-0310-aa3c-eee0fc999fb1
2003-04-27 01:32:08 +00:00
Michael Bayne f7786e0737 Make the actual InetAddress instance available.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2085 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-12-22 19:13:38 +00:00
Michael Bayne 8ceb0e09e7 Made the connection's IP address available to interesting parties.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2083 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-12-22 06:36:30 +00:00
Walter Korman 90a919720a Removed code to disallow adding an observer more than once since the
observer list now takes care of that.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2064 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-12-12 23:56:36 +00:00
Michael Bayne d60e6a69d8 Implemented code to handle the rather complicated circumstance of not
being able to send a message immediately to the client due to it being too
large or the client's outgoing networking buffer being full for some other
reason (many messages sent very quickly or client that's reading messages
slowly).

I still need to add code to disconnect a client who fails to read messages
in a sufficiently timely manner.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2038 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-12-07 22:33:04 +00:00
Michael Bayne 9a022a98cc We want to bind to INADDR_ANY rather than localhost specifically.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1959 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-11-18 18:56:52 +00:00
Michael Bayne 45fb96c4f2 Rewritten to use the Java NIO library rather than the Berkeley NBIO
library. 100% pure baby! At least for the moment.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1958 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-11-18 18:53:10 +00:00
Walter Korman 4f4068a00a Fixed typo in log message.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1924 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-11-06 21:05:13 +00:00
Michael Bayne fa206b76ed Metrics! Added support for a "state of the server" report, in which
managers can participate, reporting lies, damned lies and useful
statistics. Initial participants include the client manager, the
connection manager and the distributed object manager.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1894 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-11-05 02:17:56 +00:00
Michael Bayne 98d19e055a Added facilities for idling out clients that have not communicated with
the server in 90 seconds. The client is set up to ping the server if it
has had nothing to say to it for other reasons in the last 60 seconds.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1860 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-10-29 23:51:26 +00:00
Walter Korman ad344e05e1 Fixed typo in javadoc.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1830 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-10-26 02:37:59 +00:00
Michael Bayne a0e9044e93 Config clean up and unification. The base servers were doing more than
they needed to and when all that was stripped away, they didn't really
need their own config files.

Now what little config they need is provided by the users of these basic
services so that said users can make their own decisions about where to
obtain configuration information.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1820 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-10-21 20:56:21 +00:00
Michael Bayne 6f2da6a584 Use StringUtil and hopefully we'll actually get address information.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1746 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-09-24 00:50:27 +00:00
Michael Bayne 1877aacb3b Report the port to which we attempted to bind in the event of a bind
failure.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1615 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-07-25 20:23:25 +00:00
Michael Bayne c3191b9170 Brought code into line with the new streaming world order.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1606 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-07-23 05:52:49 +00:00
Michael Bayne 3be1d56ae7 Cleaned up connection handling code so that it deals more robustly and
gracefully with failures; also no longer attempt to send messages to a
connection that has already been closed.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1565 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-07-10 01:23:45 +00:00
Michael Bayne 6b77216df1 Report some sort of identifying information so that we can differentiate
between connections even on JVMs (like Linux's) that seem to feel no need
to actually return anything sensible from InetAddress.toString().


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1564 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-07-10 01:22:17 +00:00
Michael Bayne b486315e47 Revamp! Modified the way configuration is handled.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1166 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-03-28 22:32:34 +00:00
Michael Bayne 268b0797f6 Removed verbose logging.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1089 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-03-05 06:15:23 +00:00
Michael Bayne 9e16e87a69 Doris the refactorasaurus. Restructured the whole client object resolution
process so that it can be done by other entities than just the client
management services. Coordination between these parties is managed so that
no toes are stepped on in the course of loading and unloading clients and
everything is generally much nicer.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1086 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-03-05 05:33:25 +00:00
Michael Bayne 38ca708a4f Modified authentication process such that an authenticator thread is no
longer maintained. Implementations can choose to create their own
authentication thread if they wish or use some existing combination of the
invoker and dobjmgr threads. Also added an invoker to the base server
class.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1085 542714f4-19e9-0310-aa3c-eee0fc999fb1
2002-03-05 03:19:18 +00:00
Michael Bayne a0bdcb9627 Don't claim to have authed a connection unless we accepted the auth
request.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@736 542714f4-19e9-0310-aa3c-eee0fc999fb1
2001-12-04 07:32:10 +00:00
Michael Bayne 60f8cca7a5 Added a means by which to set the authenticator in the auth manager.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@735 542714f4-19e9-0310-aa3c-eee0fc999fb1
2001-12-04 01:48:51 +00:00
Michael Bayne a0ba41c31d Provide a mechanism for the authenticator to pass information to the
client object by way of passing the auth response data up to the client
after the completion of the authentication phase. This allows information
loaded by an authenticator (like a user record) to make its way into the
real world.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@722 542714f4-19e9-0310-aa3c-eee0fc999fb1
2001-12-03 20:14:51 +00:00
Michael Bayne 304e7bd4b4 Whoops. Missing an import.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@572 542714f4-19e9-0310-aa3c-eee0fc999fb1
2001-10-25 23:37:13 +00:00
Michael Bayne cd458fa3aa Moved the default server port into the client where it is accessible by
various entities rather than only server code.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@571 542714f4-19e9-0310-aa3c-eee0fc999fb1
2001-10-25 23:36:06 +00:00
Michael Bayne 8a4c46badc The first great Three Rings renaming. Cocktail changed to Narya, Cher
changed to Presents and Party changed to Crowd. Whee!


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@431 542714f4-19e9-0310-aa3c-eee0fc999fb1
2001-10-11 04:07:54 +00:00