Great!
But.. could you elaborate on the exact nature of the bug and what the
changes to WSL-select was?
/N
----- Original Message -----
From: "Jonathan Howard" <[EMAIL PROTECTED]>
To: "Discussion of development issues" <[EMAIL PROTECTED]>
Sent: Saturday, October 11, 2003 5:17 PM
Subject: [freenet-dev] Diagnostics for write
> Attached is diff against 6233.
>
> It fixes bug in RSL, adds WSL diagnostics and removes code that tries to
> do the job of select.
>
>
----------------------------------------------------------------------------
----
> diff -uwr freenet-unstable-latest/src/freenet/node/Main.java
Myfreenet-unstable-latest/src/freenet/node/Main.java
> --- freenet-unstable-latest/src/freenet/node/Main.java 2003-10-04
05:00:44.000000000 +0100
> +++ Myfreenet-unstable-latest/src/freenet/node/Main.java 2003-10-11
11:13:46.000000000 +0100
> @@ -1742,6 +1742,10 @@
> "restart an existing session (key).",outConn);
> d.registerCounting("outboundOpenerConnections",d.MINUTE,
> "The number of connections the Connection Opener starts",outConn);
> + d.registerCounting("writeSelectionScrewed", d.MINUTE,
> + "The number of times NIO makes a zero byte "+
> + "write after the JVM told it that the socket "+
> + "was writable.", outConn);
>
> // inbound connections
>
> diff -uwr
freenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java
Myfreenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java
> ---
freenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java
2003-10-09 17:00:58.000000000 +0100
> +++
Myfreenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java
2003-10-11 15:32:10.000000000 +0100
> @@ -337,11 +337,6 @@
> protected abstract boolean inspectChannels();
>
> /**
> - * this fixes the keyset. We're missing reads
> - */
> - protected abstract void fixKeys();
> -
> - /**
> * last-mile remedy if the selector is totaly screwed.
> * this may very well have unforeseen consequences.
> * lets hope we never get to use this...
> @@ -593,16 +588,6 @@
> // " connections ("+iter+")", Logger.DEBUG);
>
> currentSet=sel.selectedKeys();
> - //currentSet.clear();
> - //currentSet.addAll(sel.selectedKeys());
> -
> - if(logDebug)
> - Core.logger.log(this, "Keys ready before fixKeys: "+
> - currentlyActive+"/"+
> - sel.keys().size(), Logger.DEBUG);
> -
> - fixKeys();
> - //if (currentlyActive != currentSet.size()) Core.logger.log(this, "read
the freaking book! "+ currentlyActive +" != "+ currentSet.size()
,Logger.ERROR);
> currentlyActive = currentSet.size();
> if(logDebug)
> Core.logger.log(this, "Keys ready: "+currentlyActive+"/"+
> diff -uwr
freenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java
Myfreenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java
> --- freenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java
2003-09-26 11:01:30.000000000 +0100
> +++ Myfreenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java
2003-10-11 12:11:18.000000000 +0100
> @@ -144,35 +144,6 @@
> }
>
> /**
> - * we're missing reads. This will try and fix it
> - */
> - protected final void fixKeys() {
> -// Set bigSet = sel.keys();
> -// //Core.logger.log(this,"size of bigSet "+bigSet.size()
> -// // + " size of smallSet " + currentSet.size(),Logger.NORMAL);
> -// Iterator i = bigSet.iterator();
> -
> -// while (i.hasNext()) {
> -// SelectionKey current = (SelectionKey) i.next();
> -
> -// if (current.isValid() && current.isReadable()) {
> -// // Don't check open, we need to see them as readable and
> -// // then get the -1 read
> -// if (logDebug)Core.logger.log(this, "fixKeys added "+
> -// current.channel()+":"+
> -// current.attachment(),
> -// Logger.DEBUG);
> -// //Core.logger.log(this,"told you so!",Logger.ERROR);
> -// currentSet.add(current);
> -// }
> -
> -// }
> -
> -// //Core.logger.log(this,"size of small set after fixing " +
currentSet.size(),Logger.NORMAL);
> - //Core.logger.log(this,"size of small set after fixing " +
f.size(),Logger.NORMAL);*/
> - }
> -
> - /**
> * a screwed channel is marked as available for read, but
> * a read() call on it returns -1. Therefore...
> */
> @@ -237,11 +208,11 @@
> if (logDebug)logBumper(bumper, sc, nc, 2);
> try {
> size = sc.read(bumper);
> + i.remove();
> if(size == 0) {
> Core.diagnostics.occurrenceCounting("readinessSelectionScrewed",1);
> bumper.flip();
> screwedSelections++;
> - i.remove();
> //noneWorking=false; //this isn't really a dud either
> //and guess what happens - rsl starts sleeping 10 to 20 times a second
> //which makes tons of system calls and the sys cpu usage stays up steady
> diff -uwr
freenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java
Myfreenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java
> --- freenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java
2003-10-07 21:04:44.000000000 +0100
> +++ Myfreenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java
2003-10-11 15:38:55.000000000 +0100
> @@ -295,21 +295,6 @@
> }
>
> /**
> - * recent long waits in CHOS.write prompted me to do this here as well
> - */
> - protected final void fixKeys() {
> - //this never adds anything
> - Iterator i = sel.keys().iterator();
> - while (i.hasNext()) {
> - SelectionKey current = (SelectionKey) i.next();
> - if (current.isValid() && current.isWritable()
> - && (!currentSet.contains(current)))
> - Core.logger.log(this, "fixKeys added "+current,
> - Logger.NORMAL);
> - currentSet.add(current);
> - }
> - }
> - /**
> * overriden so that it will block when there is nothing
> * to send. Otherwise the selector enters an endless loop
> */
> @@ -590,8 +575,10 @@
> try {
> sent = ((SocketChannel)curKey.channel()).
> write(currentJob.data);
> - //this should be here, not in finally
> - //if (sent==0) currentSet.remove(curKey);
> + currentSet.remove(curKey); // not needed but harmless
> + if (sent == 0) {
> + Core.diagnostics.occurrenceCounting("writeSelectionScrewed",1);
> + }
> } finally {
> if(currentJob.data.limit() != oldLimit)
> currentJob.data.limit(oldLimit);
> @@ -719,9 +706,7 @@
> e, e, Logger.ERROR);
> e.printStackTrace();
> success=false;
> - } /*finally {
> - currentSet.clear(); //not needed anymore
> - }*/
> + }
> return success;
> }
>
>
----------------------------------------------------------------------------
----
> _______________________________________________
> Devl mailing list
> [EMAIL PROTECTED]
> http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/devl
_______________________________________________
Devl mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/devl