Author: nextgens
Date: 2006-05-20 14:11:21 +0000 (Sat, 20 May 2006)
New Revision: 8798

Modified:
   trunk/freenet/.classpath
   trunk/freenet/build.xml
   trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
Log:
Initial support for self-restarting in the node.

disabled per-default so it's probably safe.
I need to ask toad if not starting the memory checker thread is a problem.

I will document how to use it when it's ready.

Modified: trunk/freenet/.classpath
===================================================================
--- trunk/freenet/.classpath    2006-05-20 12:36:59 UTC (rev 8797)
+++ trunk/freenet/.classpath    2006-05-20 14:11:21 UTC (rev 8798)
@@ -2,6 +2,7 @@
 <classpath>
        <classpathentry 
excluding="freenet/node/*Test.java|org/spaceroots/mantissa/random/MersenneTwisterTest.java|test/**"
 kind="src" path="src"/>
        <classpathentry kind="con" 
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-       <classpathentry kind="lib" path="lib/freenet-ext.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/freenet-ext.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/wrapper.jar"/>
        <classpathentry kind="output" path="bin"/>
 </classpath>

Modified: trunk/freenet/build.xml
===================================================================
--- trunk/freenet/build.xml     2006-05-20 12:36:59 UTC (rev 8797)
+++ trunk/freenet/build.xml     2006-05-20 14:11:21 UTC (rev 8798)
@@ -51,6 +51,7 @@
     <javac srcdir="${src}" destdir="${build}" debug="on" optimize="on" 
source="1.4">
     <classpath>
        <pathelement location="${freenet-ext.location}"/>
+       <pathelement location="${lib}/wrapper.jar"/>
        <pathelement location="gnu-crypto.jar"/>
        <pathelement location="javax-security.jar"/>
        <pathelement location="javax-crypto.jar"/>

Modified: trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java  2006-05-20 
12:36:59 UTC (rev 8797)
+++ trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java  2006-05-20 
14:11:21 UTC (rev 8798)
@@ -13,6 +13,7 @@
 import freenet.config.SubConfig;
 import freenet.keys.FreenetURI;
 import freenet.node.Node;
+import freenet.node.NodeStarter;
 import freenet.node.UserAlert;
 import freenet.node.Version;
 import freenet.support.Bucket;
@@ -77,6 +78,39 @@

                        writeReply(ctx, 200, "text/html", "OK", buf.toString());
                        this.node.exit();
+               }else if(request.getParam("restartconfirm").length() > 0){
+                       // false for no navigation bars, because that would be 
very silly
+                       ctx.getPageMaker().makeHead(buf, "Node Restart", false);
+                       buf.append("<div class=\"infobox 
infobox-information\">\n");
+                       buf.append("<div class=\"infobox-header\">\n");
+                       buf.append("The Freenet node is beeing restarted\n");
+                       buf.append("</div>\n");
+                       buf.append("<div class=\"infobox-content\">\n");
+                       buf.append("The restart process might take up to 3 
minutes. <br>");
+                       buf.append("Thank you for using Freenet\n");
+                       buf.append("</div>\n");
+                       buf.append("</div>\n");
+                       ctx.getPageMaker().makeTail(buf);
+                       
+                       writeReply(ctx, 200, "text/html", "OK", buf.toString());
+                       Logger.normal(this, "Node is restarting");
+                       node.getNodeStarter().restart();
+               }else if (request.getParam("restart").length() > 0) {
+                       ctx.getPageMaker().makeHead(buf, "Node Restart");
+                       buf.append("<div class=\"infobox infobox-query\">\n");
+                       buf.append("<div class=\"infobox-header\">\n");
+                       buf.append("Node Restart?\n");
+                       buf.append("</div>\n");
+                       buf.append("<div class=\"infobox-content\">\n");
+                       buf.append("Are you sure you wish to restart your 
Freenet node?\n");
+                       buf.append("<form action=\"/\" method=\"post\">\n");
+                       buf.append("<input type=\"submit\" name=\"cancel\" 
value=\"Cancel\" />\n");
+                       buf.append("<input type=\"submit\" 
name=\"restartconfirm\" value=\"Restart\" />\n");
+                       buf.append("</form>\n");
+                       buf.append("</div>\n");
+                       buf.append("</div>\n");
+                       ctx.getPageMaker().makeTail(buf);
+                       writeReply(ctx, 200, "text/html", "OK", buf.toString());
                } else if (request.getParam("exit").equalsIgnoreCase("true")) {
                        ctx.getPageMaker().makeHead(buf, "Node Shutdown");
                        buf.append("<div class=\"infobox infobox-query\">\n");
@@ -369,9 +403,14 @@
                }
                buf.append("<form method=\"post\" action=\".\">\n");
                buf.append("<input type=\"hidden\" name=\"exit\" value=\"true\" 
/><input type=\"submit\" value=\"Shut down the node\" />\n");
-               buf.append("</form>\n");
+               buf.append("</form>");
+               if(node.isUsingWrapper()){
+                       buf.append("<form action=\"/\" method=\"post\">\n");
+                       buf.append("<input type=\"submit\" name=\"restart\" 
value=\"Restart the node\" />\n");
+                       buf.append("</form>");
+               }
+               buf.append("\n</div>\n");
                buf.append("</div>\n");
-               buf.append("</div>\n");

                // Activity
                buf.append("<div class=\"infobox infobox-information\">\n");

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-05-20 12:36:59 UTC (rev 
8797)
+++ trunk/freenet/src/freenet/node/Node.java    2006-05-20 14:11:21 UTC (rev 
8798)
@@ -558,6 +558,8 @@
        // USK inserter.
        private final MyARKInserter arkPutter;

+       private static NodeStarter nodeStarter;
+       
     /**
      * Read all storable settings (identity etc) from the node file.
      * @param filename The name of the file to read from.
@@ -770,7 +772,7 @@
         */
        Node node;
                try {
-                       node = new Node(cfg, random);
+                       node = new Node(cfg, random, logConfigHandler);
                node.start(false);
                } catch (NodeInitException e) {
                        System.err.println("Failed to load node: 
"+e.getMessage());
@@ -789,18 +791,37 @@
                this.exitCode = exitCode;
        }
     }
-
+    
+    Node(Config config, RandomSource random, LoggingConfigHandler lc, 
NodeStarter ns) throws NodeInitException{
+       this(config, random, lc);
+       nodeStarter=ns;
+    }
+    
+    public boolean isUsingWrapper(){
+       if(nodeStarter!=null)
+               return true;
+       else 
+               return false;
+    }
+    
+    public NodeStarter getNodeStarter(){
+       return nodeStarter;
+    }
+    
     /**
      * Create a Node from a Config object.
      * @param config The Config object for this node.
      * @param random The random number generator for this node. Passed in 
because we may want
      * to use a non-secure RNG for e.g. one-JVM live-code simulations. Should 
be a Yarrow in
      * a production node.
+     * @param the loggingHandler
      * @throws NodeInitException If the node initialization fails.
      */
-    private Node(Config config, RandomSource random) throws NodeInitException {
-       
+     Node(Config config, RandomSource random, LoggingConfigHandler lc) throws 
NodeInitException {
        // Easy stuff
+        nodeStarter=null;
+       if(logConfigHandler != lc)
+               this.logConfigHandler=lc;
        arkPutter = new MyARKInserter();
        startupTime = System.currentTimeMillis();
        throttleWindow = new ThrottleWindowManager(2.0);
@@ -1277,18 +1298,6 @@

                this.arkFetcherContext = ctx;
     }
-    
-       private InetAddress resolve(String val) {
-               try {
-                       if(val == null || val.length() == 0)
-                               return null;
-                       else
-                               return InetAddress.getByName(val);
-               } catch (UnknownHostException e) {
-                       Logger.error(this, "Ignoring unresolvable overridden IP 
address: "+overrideIPAddress);
-                       return null;
-               }
-       }

     void start(boolean noSwaps) throws NodeInitException {
         if(!noSwaps)

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-05-20 
12:36:59 UTC (rev 8797)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-05-20 
14:11:21 UTC (rev 8798)
@@ -155,6 +155,8 @@
 //        sb.append("SAY:<text> - send text to the last created/pushed 
stream\r\n");
         sb.append("STATUS - display some status information on the node 
including its reference and connections.\r\n");
         sb.append("SHUTDOWN - exit the program\r\n");
+        if(n.isUsingWrapper())
+               sb.append("RESTART - restart the program\r\n");
         if(n.directTMCI != this) {
           sb.append("QUIT - close the socket\r\n");
         }
@@ -301,6 +303,12 @@
                out.write(sb.toString().getBytes());
                out.flush();
                n.exit();
+       } else if(uline.startsWith("RESTART")) {
+               StringBuffer sb = new StringBuffer();
+               sb.append("Restarting the node.\r\n");
+               out.write(sb.toString().getBytes());
+               out.flush();
+               n.getNodeStarter().restart();
        } else if(uline.startsWith("QUIT") && n.directTMCI == this) {
                StringBuffer sb = new StringBuffer();
                sb.append("QUIT command not available in console mode.\r\n");


Reply via email to