I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 55e36ee4 authored by zzz's avatar zzz
Browse files

Console: Add indication of current ff status on /configadvanced,

change immediately when config changes, force republish
Router: RI rebuild locking
parent 7c13fb2b
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ import java.util.Properties; ...@@ -7,6 +7,7 @@ import java.util.Properties;
import java.util.Set; import java.util.Set;
import net.i2p.data.DataHelper; import net.i2p.data.DataHelper;
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
/** /**
* Handler to deal with form submissions from the advanced config form and act * Handler to deal with form submissions from the advanced config form and act
...@@ -83,6 +84,14 @@ public class ConfigAdvancedHandler extends FormHandler { ...@@ -83,6 +84,14 @@ public class ConfigAdvancedHandler extends FormHandler {
/** @since 0.9.20 */ /** @since 0.9.20 */
private void saveFF() { private void saveFF() {
boolean saved = _context.router().saveConfig(ConfigAdvancedHelper.PROP_FLOODFILL_PARTICIPANT, _ff); boolean saved = _context.router().saveConfig(ConfigAdvancedHelper.PROP_FLOODFILL_PARTICIPANT, _ff);
if (_ff.equals("false") || _ff.equals("true")) {
FloodfillNetworkDatabaseFacade fndf = (FloodfillNetworkDatabaseFacade) _context.netDb();
boolean wasFF = fndf.floodfillEnabled();
boolean isFF = _ff.equals("true");
fndf.setFloodfillEnabled(isFF);
if (wasFF != isFF)
_context.router().rebuildRouterInfo();
}
if (saved) if (saved)
addFormNotice(_("Configuration saved successfully")); addFormNotice(_("Configuration saved successfully"));
else else
......
...@@ -35,4 +35,9 @@ public class ConfigAdvancedHelper extends HelperBase { ...@@ -35,4 +35,9 @@ public class ConfigAdvancedHelper extends HelperBase {
return CHECKED; return CHECKED;
return ""; return "";
} }
/** @since 0.9.21 */
public boolean isFloodfill() {
return _context.netDb().floodfillEnabled();
}
} }
...@@ -25,7 +25,16 @@ ...@@ -25,7 +25,16 @@
<div class="configure"> <div class="configure">
<div class="wideload"> <div class="wideload">
<h3><%=intl._("Floodfill Configuration")%></h3> <h3><%=intl._("Floodfill Configuration")%></h3>
<p><%=intl._("Floodill participation helps the network, but may use more of your computer's resources.")%></p> <p><%=intl._("Floodill participation helps the network, but may use more of your computer's resources.")%>
</p><p>
<%
if (advancedhelper.isFloodfill()) {
%><%=intl._("This router is currently a floodfill participant.")%><%
} else {
%><%=intl._("This router is not currently a floodfill participant.")%><%
}
%>
</p>
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="action" value="ff" > <input type="hidden" name="action" value="ff" >
......
...@@ -72,6 +72,7 @@ public class Router implements RouterClock.ClockShiftListener { ...@@ -72,6 +72,7 @@ public class Router implements RouterClock.ClockShiftListener {
/** full path */ /** full path */
private String _configFilename; private String _configFilename;
private RouterInfo _routerInfo; private RouterInfo _routerInfo;
private final Object _routerInfoLock = new Object();
/** not for external use */ /** not for external use */
public final Object routerInfoFileLock = new Object(); public final Object routerInfoFileLock = new Object();
private final Object _configFileLock = new Object(); private final Object _configFileLock = new Object();
...@@ -489,14 +490,20 @@ public class Router implements RouterClock.ClockShiftListener { ...@@ -489,14 +490,20 @@ public class Router implements RouterClock.ClockShiftListener {
* Our current router info. * Our current router info.
* Warning, may be null if called very early. * Warning, may be null if called very early.
*/ */
public RouterInfo getRouterInfo() { return _routerInfo; } public RouterInfo getRouterInfo() {
synchronized (_routerInfoLock) {
return _routerInfo;
}
}
/** /**
* Caller must ensure info is valid - no validation done here. * Caller must ensure info is valid - no validation done here.
* Not for external use. * Not for external use.
*/ */
public void setRouterInfo(RouterInfo info) { public void setRouterInfo(RouterInfo info) {
_routerInfo = info; synchronized (_routerInfoLock) {
_routerInfo = info;
}
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info("setRouterInfo() : " + info, new Exception("I did it")); _log.info("setRouterInfo() : " + info, new Exception("I did it"));
if (info != null) if (info != null)
...@@ -817,7 +824,17 @@ public class Router implements RouterClock.ClockShiftListener { ...@@ -817,7 +824,17 @@ public class Router implements RouterClock.ClockShiftListener {
public void rebuildRouterInfo(boolean blockingRebuild) { public void rebuildRouterInfo(boolean blockingRebuild) {
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info("Rebuilding new routerInfo"); _log.info("Rebuilding new routerInfo");
synchronized (_routerInfoLock) {
locked_rebuildRouterInfo(blockingRebuild);
}
}
/**
* Rebuild and republish our routerInfo since something significant
* has changed.
*/
private void locked_rebuildRouterInfo(boolean blockingRebuild) {
RouterInfo ri = null; RouterInfo ri = null;
if (_routerInfo != null) if (_routerInfo != null)
ri = new RouterInfo(_routerInfo); ri = new RouterInfo(_routerInfo);
...@@ -957,7 +974,10 @@ public class Router implements RouterClock.ClockShiftListener { ...@@ -957,7 +974,10 @@ public class Router implements RouterClock.ClockShiftListener {
} }
public boolean isHidden() { public boolean isHidden() {
RouterInfo ri = _routerInfo; RouterInfo ri;
synchronized (_routerInfoLock) {
ri = _routerInfo;
}
if ( (ri != null) && (ri.isHidden()) ) if ( (ri != null) && (ri.isHidden()) )
return true; return true;
String h = _context.getProperty(PROP_HIDDEN_HIDDEN); String h = _context.getProperty(PROP_HIDDEN_HIDDEN);
......
...@@ -277,7 +277,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad ...@@ -277,7 +277,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad
@Override @Override
protected PeerSelector createPeerSelector() { return new FloodfillPeerSelector(_context); } protected PeerSelector createPeerSelector() { return new FloodfillPeerSelector(_context); }
synchronized void setFloodfillEnabled(boolean yes) { public synchronized void setFloodfillEnabled(boolean yes) {
_floodfillEnabled = yes; _floodfillEnabled = yes;
if (yes && _floodThrottler == null) { if (yes && _floodThrottler == null) {
_floodThrottler = new FloodThrottler(); _floodThrottler = new FloodThrottler();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment